diff --git a/.editorconfig b/.editorconfig
index c6c8b3621..f6d83b7c7 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -7,3 +7,11 @@ end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
+
+[*.rs]
+indent_style = space
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
diff --git a/.eslintignore b/.eslintignore
index 5a8341232..dc987b26d 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -7,3 +7,4 @@
/src/corePluginList.js
/oxide/crates/node/index.js
/oxide/crates/node/index.d.ts
+.github/actions/minus-one/index.mjs
\ No newline at end of file
diff --git a/.github/actions/minus-one/index.mjs b/.github/actions/minus-one/index.mjs
new file mode 100644
index 000000000..0d787a728
--- /dev/null
+++ b/.github/actions/minus-one/index.mjs
@@ -0,0 +1,7 @@
+import{createRequire as __WEBPACK_EXTERNAL_createRequire}from"module";var __webpack_modules__={7351:function(e,p,a){var d=this&&this.__createBinding||(Object.create?function(e,p,a,d){if(d===undefined)d=a;Object.defineProperty(e,d,{enumerable:true,get:function(){return p[a]}})}:function(e,p,a,d){if(d===undefined)d=a;e[d]=p[a]});var t=this&&this.__setModuleDefault||(Object.create?function(e,p){Object.defineProperty(e,"default",{enumerable:true,value:p})}:function(e,p){e["default"]=p});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var a in e)if(a!=="default"&&Object.hasOwnProperty.call(e,a))d(p,e,a);t(p,e);return p};Object.defineProperty(p,"__esModule",{value:true});p.issue=p.issueCommand=void 0;const s=r(a(2037));const i=a(5278);function issueCommand(e,p,a){const d=new Command(e,p,a);process.stdout.write(d.toString()+s.EOL)}p.issueCommand=issueCommand;function issue(e,p=""){issueCommand(e,{},p)}p.issue=issue;const o="::";class Command{constructor(e,p,a){if(!e){e="missing.command"}this.command=e;this.properties=p;this.message=a}toString(){let e=o+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let p=true;for(const a in this.properties){if(this.properties.hasOwnProperty(a)){const d=this.properties[a];if(d){if(p){p=false}else{e+=","}e+=`${a}=${escapeProperty(d)}`}}}}e+=`${o}${escapeData(this.message)}`;return e}}function escapeData(e){return i.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function escapeProperty(e){return i.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}},2186:function(e,p,a){var d=this&&this.__createBinding||(Object.create?function(e,p,a,d){if(d===undefined)d=a;Object.defineProperty(e,d,{enumerable:true,get:function(){return p[a]}})}:function(e,p,a,d){if(d===undefined)d=a;e[d]=p[a]});var t=this&&this.__setModuleDefault||(Object.create?function(e,p){Object.defineProperty(e,"default",{enumerable:true,value:p})}:function(e,p){e["default"]=p});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var a in e)if(a!=="default"&&Object.hasOwnProperty.call(e,a))d(p,e,a);t(p,e);return p};var s=this&&this.__awaiter||function(e,p,a,d){function adopt(e){return e instanceof a?e:new a((function(p){p(e)}))}return new(a||(a=Promise))((function(a,t){function fulfilled(e){try{step(d.next(e))}catch(e){t(e)}}function rejected(e){try{step(d["throw"](e))}catch(e){t(e)}}function step(e){e.done?a(e.value):adopt(e.value).then(fulfilled,rejected)}step((d=d.apply(e,p||[])).next())}))};Object.defineProperty(p,"__esModule",{value:true});p.getIDToken=p.getState=p.saveState=p.group=p.endGroup=p.startGroup=p.info=p.notice=p.warning=p.error=p.debug=p.isDebug=p.setFailed=p.setCommandEcho=p.setOutput=p.getBooleanInput=p.getMultilineInput=p.getInput=p.addPath=p.setSecret=p.exportVariable=p.ExitCode=void 0;const i=a(7351);const o=a(717);const n=a(5278);const l=r(a(2037));const m=r(a(1017));const u=a(8041);var c;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(c=p.ExitCode||(p.ExitCode={}));function exportVariable(e,p){const a=n.toCommandValue(p);process.env[e]=a;const d=process.env["GITHUB_ENV"]||"";if(d){return o.issueFileCommand("ENV",o.prepareKeyValueMessage(e,p))}i.issueCommand("set-env",{name:e},a)}p.exportVariable=exportVariable;function setSecret(e){i.issueCommand("add-mask",{},e)}p.setSecret=setSecret;function addPath(e){const p=process.env["GITHUB_PATH"]||"";if(p){o.issueFileCommand("PATH",e)}else{i.issueCommand("add-path",{},e)}process.env["PATH"]=`${e}${m.delimiter}${process.env["PATH"]}`}p.addPath=addPath;function getInput(e,p){const a=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(p&&p.required&&!a){throw new Error(`Input required and not supplied: ${e}`)}if(p&&p.trimWhitespace===false){return a}return a.trim()}p.getInput=getInput;function getMultilineInput(e,p){const a=getInput(e,p).split("\n").filter((e=>e!==""));if(p&&p.trimWhitespace===false){return a}return a.map((e=>e.trim()))}p.getMultilineInput=getMultilineInput;function getBooleanInput(e,p){const a=["true","True","TRUE"];const d=["false","False","FALSE"];const t=getInput(e,p);if(a.includes(t))return true;if(d.includes(t))return false;throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${e}\n`+`Support boolean input list: \`true | True | TRUE | false | False | FALSE\``)}p.getBooleanInput=getBooleanInput;function setOutput(e,p){const a=process.env["GITHUB_OUTPUT"]||"";if(a){return o.issueFileCommand("OUTPUT",o.prepareKeyValueMessage(e,p))}process.stdout.write(l.EOL);i.issueCommand("set-output",{name:e},n.toCommandValue(p))}p.setOutput=setOutput;function setCommandEcho(e){i.issue("echo",e?"on":"off")}p.setCommandEcho=setCommandEcho;function setFailed(e){process.exitCode=c.Failure;error(e)}p.setFailed=setFailed;function isDebug(){return process.env["RUNNER_DEBUG"]==="1"}p.isDebug=isDebug;function debug(e){i.issueCommand("debug",{},e)}p.debug=debug;function error(e,p={}){i.issueCommand("error",n.toCommandProperties(p),e instanceof Error?e.toString():e)}p.error=error;function warning(e,p={}){i.issueCommand("warning",n.toCommandProperties(p),e instanceof Error?e.toString():e)}p.warning=warning;function notice(e,p={}){i.issueCommand("notice",n.toCommandProperties(p),e instanceof Error?e.toString():e)}p.notice=notice;function info(e){process.stdout.write(e+l.EOL)}p.info=info;function startGroup(e){i.issue("group",e)}p.startGroup=startGroup;function endGroup(){i.issue("endgroup")}p.endGroup=endGroup;function group(e,p){return s(this,void 0,void 0,(function*(){startGroup(e);let a;try{a=yield p()}finally{endGroup()}return a}))}p.group=group;function saveState(e,p){const a=process.env["GITHUB_STATE"]||"";if(a){return o.issueFileCommand("STATE",o.prepareKeyValueMessage(e,p))}i.issueCommand("save-state",{name:e},n.toCommandValue(p))}p.saveState=saveState;function getState(e){return process.env[`STATE_${e}`]||""}p.getState=getState;function getIDToken(e){return s(this,void 0,void 0,(function*(){return yield u.OidcClient.getIDToken(e)}))}p.getIDToken=getIDToken;var v=a(1327);Object.defineProperty(p,"summary",{enumerable:true,get:function(){return v.summary}});var h=a(1327);Object.defineProperty(p,"markdownSummary",{enumerable:true,get:function(){return h.markdownSummary}});var g=a(2981);Object.defineProperty(p,"toPosixPath",{enumerable:true,get:function(){return g.toPosixPath}});Object.defineProperty(p,"toWin32Path",{enumerable:true,get:function(){return g.toWin32Path}});Object.defineProperty(p,"toPlatformPath",{enumerable:true,get:function(){return g.toPlatformPath}})},717:function(e,p,a){var d=this&&this.__createBinding||(Object.create?function(e,p,a,d){if(d===undefined)d=a;Object.defineProperty(e,d,{enumerable:true,get:function(){return p[a]}})}:function(e,p,a,d){if(d===undefined)d=a;e[d]=p[a]});var t=this&&this.__setModuleDefault||(Object.create?function(e,p){Object.defineProperty(e,"default",{enumerable:true,value:p})}:function(e,p){e["default"]=p});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var a in e)if(a!=="default"&&Object.hasOwnProperty.call(e,a))d(p,e,a);t(p,e);return p};Object.defineProperty(p,"__esModule",{value:true});p.prepareKeyValueMessage=p.issueFileCommand=void 0;const s=r(a(7147));const i=r(a(2037));const o=a(5840);const n=a(5278);function issueFileCommand(e,p){const a=process.env[`GITHUB_${e}`];if(!a){throw new Error(`Unable to find environment variable for file command ${e}`)}if(!s.existsSync(a)){throw new Error(`Missing file at path: ${a}`)}s.appendFileSync(a,`${n.toCommandValue(p)}${i.EOL}`,{encoding:"utf8"})}p.issueFileCommand=issueFileCommand;function prepareKeyValueMessage(e,p){const a=`ghadelimiter_${o.v4()}`;const d=n.toCommandValue(p);if(e.includes(a)){throw new Error(`Unexpected input: name should not contain the delimiter "${a}"`)}if(d.includes(a)){throw new Error(`Unexpected input: value should not contain the delimiter "${a}"`)}return`${e}<<${a}${i.EOL}${d}${i.EOL}${a}`}p.prepareKeyValueMessage=prepareKeyValueMessage},8041:function(e,p,a){var d=this&&this.__awaiter||function(e,p,a,d){function adopt(e){return e instanceof a?e:new a((function(p){p(e)}))}return new(a||(a=Promise))((function(a,t){function fulfilled(e){try{step(d.next(e))}catch(e){t(e)}}function rejected(e){try{step(d["throw"](e))}catch(e){t(e)}}function step(e){e.done?a(e.value):adopt(e.value).then(fulfilled,rejected)}step((d=d.apply(e,p||[])).next())}))};Object.defineProperty(p,"__esModule",{value:true});p.OidcClient=void 0;const t=a(6255);const r=a(5526);const s=a(2186);class OidcClient{static createHttpClient(e=true,p=10){const a={allowRetries:e,maxRetries:p};return new t.HttpClient("actions/oidc-client",[new r.BearerCredentialHandler(OidcClient.getRequestToken())],a)}static getRequestToken(){const e=process.env["ACTIONS_ID_TOKEN_REQUEST_TOKEN"];if(!e){throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable")}return e}static getIDTokenUrl(){const e=process.env["ACTIONS_ID_TOKEN_REQUEST_URL"];if(!e){throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable")}return e}static getCall(e){var p;return d(this,void 0,void 0,(function*(){const a=OidcClient.createHttpClient();const d=yield a.getJson(e).catch((e=>{throw new Error(`Failed to get ID Token. \n \n Error Code : ${e.statusCode}\n \n Error Message: ${e.result.message}`)}));const t=(p=d.result)===null||p===void 0?void 0:p.value;if(!t){throw new Error("Response json body do not have ID Token field")}return t}))}static getIDToken(e){return d(this,void 0,void 0,(function*(){try{let p=OidcClient.getIDTokenUrl();if(e){const a=encodeURIComponent(e);p=`${p}&audience=${a}`}s.debug(`ID token url is ${p}`);const a=yield OidcClient.getCall(p);s.setSecret(a);return a}catch(e){throw new Error(`Error message: ${e.message}`)}}))}}p.OidcClient=OidcClient},2981:function(e,p,a){var d=this&&this.__createBinding||(Object.create?function(e,p,a,d){if(d===undefined)d=a;Object.defineProperty(e,d,{enumerable:true,get:function(){return p[a]}})}:function(e,p,a,d){if(d===undefined)d=a;e[d]=p[a]});var t=this&&this.__setModuleDefault||(Object.create?function(e,p){Object.defineProperty(e,"default",{enumerable:true,value:p})}:function(e,p){e["default"]=p});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var a in e)if(a!=="default"&&Object.hasOwnProperty.call(e,a))d(p,e,a);t(p,e);return p};Object.defineProperty(p,"__esModule",{value:true});p.toPlatformPath=p.toWin32Path=p.toPosixPath=void 0;const s=r(a(1017));function toPosixPath(e){return e.replace(/[\\]/g,"/")}p.toPosixPath=toPosixPath;function toWin32Path(e){return e.replace(/[/]/g,"\\")}p.toWin32Path=toWin32Path;function toPlatformPath(e){return e.replace(/[/\\]/g,s.sep)}p.toPlatformPath=toPlatformPath},1327:function(e,p,a){var d=this&&this.__awaiter||function(e,p,a,d){function adopt(e){return e instanceof a?e:new a((function(p){p(e)}))}return new(a||(a=Promise))((function(a,t){function fulfilled(e){try{step(d.next(e))}catch(e){t(e)}}function rejected(e){try{step(d["throw"](e))}catch(e){t(e)}}function step(e){e.done?a(e.value):adopt(e.value).then(fulfilled,rejected)}step((d=d.apply(e,p||[])).next())}))};Object.defineProperty(p,"__esModule",{value:true});p.summary=p.markdownSummary=p.SUMMARY_DOCS_URL=p.SUMMARY_ENV_VAR=void 0;const t=a(2037);const r=a(7147);const{access:s,appendFile:i,writeFile:o}=r.promises;p.SUMMARY_ENV_VAR="GITHUB_STEP_SUMMARY";p.SUMMARY_DOCS_URL="https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary";class Summary{constructor(){this._buffer=""}filePath(){return d(this,void 0,void 0,(function*(){if(this._filePath){return this._filePath}const e=process.env[p.SUMMARY_ENV_VAR];if(!e){throw new Error(`Unable to find environment variable for $${p.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`)}try{yield s(e,r.constants.R_OK|r.constants.W_OK)}catch(p){throw new Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}this._filePath=e;return this._filePath}))}wrap(e,p,a={}){const d=Object.entries(a).map((([e,p])=>` ${e}="${p}"`)).join("");if(!p){return`<${e}${d}>`}return`<${e}${d}>${p}${e}>`}write(e){return d(this,void 0,void 0,(function*(){const p=!!(e===null||e===void 0?void 0:e.overwrite);const a=yield this.filePath();const d=p?o:i;yield d(a,this._buffer,{encoding:"utf8"});return this.emptyBuffer()}))}clear(){return d(this,void 0,void 0,(function*(){return this.emptyBuffer().write({overwrite:true})}))}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){this._buffer="";return this}addRaw(e,p=false){this._buffer+=e;return p?this.addEOL():this}addEOL(){return this.addRaw(t.EOL)}addCodeBlock(e,p){const a=Object.assign({},p&&{lang:p});const d=this.wrap("pre",this.wrap("code",e),a);return this.addRaw(d).addEOL()}addList(e,p=false){const a=p?"ol":"ul";const d=e.map((e=>this.wrap("li",e))).join("");const t=this.wrap(a,d);return this.addRaw(t).addEOL()}addTable(e){const p=e.map((e=>{const p=e.map((e=>{if(typeof e==="string"){return this.wrap("td",e)}const{header:p,data:a,colspan:d,rowspan:t}=e;const r=p?"th":"td";const s=Object.assign(Object.assign({},d&&{colspan:d}),t&&{rowspan:t});return this.wrap(r,a,s)})).join("");return this.wrap("tr",p)})).join("");const a=this.wrap("table",p);return this.addRaw(a).addEOL()}addDetails(e,p){const a=this.wrap("details",this.wrap("summary",e)+p);return this.addRaw(a).addEOL()}addImage(e,p,a){const{width:d,height:t}=a||{};const r=Object.assign(Object.assign({},d&&{width:d}),t&&{height:t});const s=this.wrap("img",null,Object.assign({src:e,alt:p},r));return this.addRaw(s).addEOL()}addHeading(e,p){const a=`h${p}`;const d=["h1","h2","h3","h4","h5","h6"].includes(a)?a:"h1";const t=this.wrap(d,e);return this.addRaw(t).addEOL()}addSeparator(){const e=this.wrap("hr",null);return this.addRaw(e).addEOL()}addBreak(){const e=this.wrap("br",null);return this.addRaw(e).addEOL()}addQuote(e,p){const a=Object.assign({},p&&{cite:p});const d=this.wrap("blockquote",e,a);return this.addRaw(d).addEOL()}addLink(e,p){const a=this.wrap("a",e,{href:p});return this.addRaw(a).addEOL()}}const n=new Summary;p.markdownSummary=n;p.summary=n},5278:(e,p)=>{Object.defineProperty(p,"__esModule",{value:true});p.toCommandProperties=p.toCommandValue=void 0;function toCommandValue(e){if(e===null||e===undefined){return""}else if(typeof e==="string"||e instanceof String){return e}return JSON.stringify(e)}p.toCommandValue=toCommandValue;function toCommandProperties(e){if(!Object.keys(e).length){return{}}return{title:e.title,file:e.file,line:e.startLine,endLine:e.endLine,col:e.startColumn,endColumn:e.endColumn}}p.toCommandProperties=toCommandProperties},4087:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});p.Context=void 0;const d=a(7147);const t=a(2037);class Context{constructor(){var e,p,a;this.payload={};if(process.env.GITHUB_EVENT_PATH){if(d.existsSync(process.env.GITHUB_EVENT_PATH)){this.payload=JSON.parse(d.readFileSync(process.env.GITHUB_EVENT_PATH,{encoding:"utf8"}))}else{const e=process.env.GITHUB_EVENT_PATH;process.stdout.write(`GITHUB_EVENT_PATH ${e} does not exist${t.EOL}`)}}this.eventName=process.env.GITHUB_EVENT_NAME;this.sha=process.env.GITHUB_SHA;this.ref=process.env.GITHUB_REF;this.workflow=process.env.GITHUB_WORKFLOW;this.action=process.env.GITHUB_ACTION;this.actor=process.env.GITHUB_ACTOR;this.job=process.env.GITHUB_JOB;this.runNumber=parseInt(process.env.GITHUB_RUN_NUMBER,10);this.runId=parseInt(process.env.GITHUB_RUN_ID,10);this.apiUrl=(e=process.env.GITHUB_API_URL)!==null&&e!==void 0?e:`https://api.github.com`;this.serverUrl=(p=process.env.GITHUB_SERVER_URL)!==null&&p!==void 0?p:`https://github.com`;this.graphqlUrl=(a=process.env.GITHUB_GRAPHQL_URL)!==null&&a!==void 0?a:`https://api.github.com/graphql`}get issue(){const e=this.payload;return Object.assign(Object.assign({},this.repo),{number:(e.issue||e.pull_request||e).number})}get repo(){if(process.env.GITHUB_REPOSITORY){const[e,p]=process.env.GITHUB_REPOSITORY.split("/");return{owner:e,repo:p}}if(this.payload.repository){return{owner:this.payload.repository.owner.login,repo:this.payload.repository.name}}throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'")}}p.Context=Context},5438:function(e,p,a){var d=this&&this.__createBinding||(Object.create?function(e,p,a,d){if(d===undefined)d=a;Object.defineProperty(e,d,{enumerable:true,get:function(){return p[a]}})}:function(e,p,a,d){if(d===undefined)d=a;e[d]=p[a]});var t=this&&this.__setModuleDefault||(Object.create?function(e,p){Object.defineProperty(e,"default",{enumerable:true,value:p})}:function(e,p){e["default"]=p});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var a in e)if(a!=="default"&&Object.hasOwnProperty.call(e,a))d(p,e,a);t(p,e);return p};Object.defineProperty(p,"__esModule",{value:true});p.getOctokit=p.context=void 0;const s=r(a(4087));const i=a(3030);p.context=new s.Context;function getOctokit(e,p,...a){const d=i.GitHub.plugin(...a);return new d(i.getOctokitOptions(e,p))}p.getOctokit=getOctokit},7914:function(e,p,a){var d=this&&this.__createBinding||(Object.create?function(e,p,a,d){if(d===undefined)d=a;Object.defineProperty(e,d,{enumerable:true,get:function(){return p[a]}})}:function(e,p,a,d){if(d===undefined)d=a;e[d]=p[a]});var t=this&&this.__setModuleDefault||(Object.create?function(e,p){Object.defineProperty(e,"default",{enumerable:true,value:p})}:function(e,p){e["default"]=p});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var a in e)if(a!=="default"&&Object.hasOwnProperty.call(e,a))d(p,e,a);t(p,e);return p};Object.defineProperty(p,"__esModule",{value:true});p.getApiBaseUrl=p.getProxyAgent=p.getAuthString=void 0;const s=r(a(6255));function getAuthString(e,p){if(!e&&!p.auth){throw new Error("Parameter token or opts.auth is required")}else if(e&&p.auth){throw new Error("Parameters token and opts.auth may not both be specified")}return typeof p.auth==="string"?p.auth:`token ${e}`}p.getAuthString=getAuthString;function getProxyAgent(e){const p=new s.HttpClient;return p.getAgent(e)}p.getProxyAgent=getProxyAgent;function getApiBaseUrl(){return process.env["GITHUB_API_URL"]||"https://api.github.com"}p.getApiBaseUrl=getApiBaseUrl},3030:function(e,p,a){var d=this&&this.__createBinding||(Object.create?function(e,p,a,d){if(d===undefined)d=a;Object.defineProperty(e,d,{enumerable:true,get:function(){return p[a]}})}:function(e,p,a,d){if(d===undefined)d=a;e[d]=p[a]});var t=this&&this.__setModuleDefault||(Object.create?function(e,p){Object.defineProperty(e,"default",{enumerable:true,value:p})}:function(e,p){e["default"]=p});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var a in e)if(a!=="default"&&Object.hasOwnProperty.call(e,a))d(p,e,a);t(p,e);return p};Object.defineProperty(p,"__esModule",{value:true});p.getOctokitOptions=p.GitHub=p.defaults=p.context=void 0;const s=r(a(4087));const i=r(a(7914));const o=a(6762);const n=a(3044);const l=a(4193);p.context=new s.Context;const m=i.getApiBaseUrl();p.defaults={baseUrl:m,request:{agent:i.getProxyAgent(m)}};p.GitHub=o.Octokit.plugin(n.restEndpointMethods,l.paginateRest).defaults(p.defaults);function getOctokitOptions(e,p){const a=Object.assign({},p||{});const d=i.getAuthString(e,a);if(d){a.auth=d}return a}p.getOctokitOptions=getOctokitOptions},5526:function(e,p){var a=this&&this.__awaiter||function(e,p,a,d){function adopt(e){return e instanceof a?e:new a((function(p){p(e)}))}return new(a||(a=Promise))((function(a,t){function fulfilled(e){try{step(d.next(e))}catch(e){t(e)}}function rejected(e){try{step(d["throw"](e))}catch(e){t(e)}}function step(e){e.done?a(e.value):adopt(e.value).then(fulfilled,rejected)}step((d=d.apply(e,p||[])).next())}))};Object.defineProperty(p,"__esModule",{value:true});p.PersonalAccessTokenCredentialHandler=p.BearerCredentialHandler=p.BasicCredentialHandler=void 0;class BasicCredentialHandler{constructor(e,p){this.username=e;this.password=p}prepareRequest(e){if(!e.headers){throw Error("The request has no headers")}e.headers["Authorization"]=`Basic ${Buffer.from(`${this.username}:${this.password}`).toString("base64")}`}canHandleAuthentication(){return false}handleAuthentication(){return a(this,void 0,void 0,(function*(){throw new Error("not implemented")}))}}p.BasicCredentialHandler=BasicCredentialHandler;class BearerCredentialHandler{constructor(e){this.token=e}prepareRequest(e){if(!e.headers){throw Error("The request has no headers")}e.headers["Authorization"]=`Bearer ${this.token}`}canHandleAuthentication(){return false}handleAuthentication(){return a(this,void 0,void 0,(function*(){throw new Error("not implemented")}))}}p.BearerCredentialHandler=BearerCredentialHandler;class PersonalAccessTokenCredentialHandler{constructor(e){this.token=e}prepareRequest(e){if(!e.headers){throw Error("The request has no headers")}e.headers["Authorization"]=`Basic ${Buffer.from(`PAT:${this.token}`).toString("base64")}`}canHandleAuthentication(){return false}handleAuthentication(){return a(this,void 0,void 0,(function*(){throw new Error("not implemented")}))}}p.PersonalAccessTokenCredentialHandler=PersonalAccessTokenCredentialHandler},6255:function(e,p,a){var d=this&&this.__createBinding||(Object.create?function(e,p,a,d){if(d===undefined)d=a;Object.defineProperty(e,d,{enumerable:true,get:function(){return p[a]}})}:function(e,p,a,d){if(d===undefined)d=a;e[d]=p[a]});var t=this&&this.__setModuleDefault||(Object.create?function(e,p){Object.defineProperty(e,"default",{enumerable:true,value:p})}:function(e,p){e["default"]=p});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var p={};if(e!=null)for(var a in e)if(a!=="default"&&Object.hasOwnProperty.call(e,a))d(p,e,a);t(p,e);return p};var s=this&&this.__awaiter||function(e,p,a,d){function adopt(e){return e instanceof a?e:new a((function(p){p(e)}))}return new(a||(a=Promise))((function(a,t){function fulfilled(e){try{step(d.next(e))}catch(e){t(e)}}function rejected(e){try{step(d["throw"](e))}catch(e){t(e)}}function step(e){e.done?a(e.value):adopt(e.value).then(fulfilled,rejected)}step((d=d.apply(e,p||[])).next())}))};Object.defineProperty(p,"__esModule",{value:true});p.HttpClient=p.isHttps=p.HttpClientResponse=p.HttpClientError=p.getProxyUrl=p.MediaTypes=p.Headers=p.HttpCodes=void 0;const i=r(a(3685));const o=r(a(5687));const n=r(a(9835));const l=r(a(4294));var m;(function(e){e[e["OK"]=200]="OK";e[e["MultipleChoices"]=300]="MultipleChoices";e[e["MovedPermanently"]=301]="MovedPermanently";e[e["ResourceMoved"]=302]="ResourceMoved";e[e["SeeOther"]=303]="SeeOther";e[e["NotModified"]=304]="NotModified";e[e["UseProxy"]=305]="UseProxy";e[e["SwitchProxy"]=306]="SwitchProxy";e[e["TemporaryRedirect"]=307]="TemporaryRedirect";e[e["PermanentRedirect"]=308]="PermanentRedirect";e[e["BadRequest"]=400]="BadRequest";e[e["Unauthorized"]=401]="Unauthorized";e[e["PaymentRequired"]=402]="PaymentRequired";e[e["Forbidden"]=403]="Forbidden";e[e["NotFound"]=404]="NotFound";e[e["MethodNotAllowed"]=405]="MethodNotAllowed";e[e["NotAcceptable"]=406]="NotAcceptable";e[e["ProxyAuthenticationRequired"]=407]="ProxyAuthenticationRequired";e[e["RequestTimeout"]=408]="RequestTimeout";e[e["Conflict"]=409]="Conflict";e[e["Gone"]=410]="Gone";e[e["TooManyRequests"]=429]="TooManyRequests";e[e["InternalServerError"]=500]="InternalServerError";e[e["NotImplemented"]=501]="NotImplemented";e[e["BadGateway"]=502]="BadGateway";e[e["ServiceUnavailable"]=503]="ServiceUnavailable";e[e["GatewayTimeout"]=504]="GatewayTimeout"})(m=p.HttpCodes||(p.HttpCodes={}));var u;(function(e){e["Accept"]="accept";e["ContentType"]="content-type"})(u=p.Headers||(p.Headers={}));var c;(function(e){e["ApplicationJson"]="application/json"})(c=p.MediaTypes||(p.MediaTypes={}));function getProxyUrl(e){const p=n.getProxyUrl(new URL(e));return p?p.href:""}p.getProxyUrl=getProxyUrl;const v=[m.MovedPermanently,m.ResourceMoved,m.SeeOther,m.TemporaryRedirect,m.PermanentRedirect];const h=[m.BadGateway,m.ServiceUnavailable,m.GatewayTimeout];const g=["OPTIONS","GET","DELETE","HEAD"];const w=10;const _=5;class HttpClientError extends Error{constructor(e,p){super(e);this.name="HttpClientError";this.statusCode=p;Object.setPrototypeOf(this,HttpClientError.prototype)}}p.HttpClientError=HttpClientError;class HttpClientResponse{constructor(e){this.message=e}readBody(){return s(this,void 0,void 0,(function*(){return new Promise((e=>s(this,void 0,void 0,(function*(){let p=Buffer.alloc(0);this.message.on("data",(e=>{p=Buffer.concat([p,e])}));this.message.on("end",(()=>{e(p.toString())}))}))))}))}}p.HttpClientResponse=HttpClientResponse;function isHttps(e){const p=new URL(e);return p.protocol==="https:"}p.isHttps=isHttps;class HttpClient{constructor(e,p,a){this._ignoreSslError=false;this._allowRedirects=true;this._allowRedirectDowngrade=false;this._maxRedirects=50;this._allowRetries=false;this._maxRetries=1;this._keepAlive=false;this._disposed=false;this.userAgent=e;this.handlers=p||[];this.requestOptions=a;if(a){if(a.ignoreSslError!=null){this._ignoreSslError=a.ignoreSslError}this._socketTimeout=a.socketTimeout;if(a.allowRedirects!=null){this._allowRedirects=a.allowRedirects}if(a.allowRedirectDowngrade!=null){this._allowRedirectDowngrade=a.allowRedirectDowngrade}if(a.maxRedirects!=null){this._maxRedirects=Math.max(a.maxRedirects,0)}if(a.keepAlive!=null){this._keepAlive=a.keepAlive}if(a.allowRetries!=null){this._allowRetries=a.allowRetries}if(a.maxRetries!=null){this._maxRetries=a.maxRetries}}}options(e,p){return s(this,void 0,void 0,(function*(){return this.request("OPTIONS",e,null,p||{})}))}get(e,p){return s(this,void 0,void 0,(function*(){return this.request("GET",e,null,p||{})}))}del(e,p){return s(this,void 0,void 0,(function*(){return this.request("DELETE",e,null,p||{})}))}post(e,p,a){return s(this,void 0,void 0,(function*(){return this.request("POST",e,p,a||{})}))}patch(e,p,a){return s(this,void 0,void 0,(function*(){return this.request("PATCH",e,p,a||{})}))}put(e,p,a){return s(this,void 0,void 0,(function*(){return this.request("PUT",e,p,a||{})}))}head(e,p){return s(this,void 0,void 0,(function*(){return this.request("HEAD",e,null,p||{})}))}sendStream(e,p,a,d){return s(this,void 0,void 0,(function*(){return this.request(e,p,a,d)}))}getJson(e,p={}){return s(this,void 0,void 0,(function*(){p[u.Accept]=this._getExistingOrDefaultHeader(p,u.Accept,c.ApplicationJson);const a=yield this.get(e,p);return this._processResponse(a,this.requestOptions)}))}postJson(e,p,a={}){return s(this,void 0,void 0,(function*(){const d=JSON.stringify(p,null,2);a[u.Accept]=this._getExistingOrDefaultHeader(a,u.Accept,c.ApplicationJson);a[u.ContentType]=this._getExistingOrDefaultHeader(a,u.ContentType,c.ApplicationJson);const t=yield this.post(e,d,a);return this._processResponse(t,this.requestOptions)}))}putJson(e,p,a={}){return s(this,void 0,void 0,(function*(){const d=JSON.stringify(p,null,2);a[u.Accept]=this._getExistingOrDefaultHeader(a,u.Accept,c.ApplicationJson);a[u.ContentType]=this._getExistingOrDefaultHeader(a,u.ContentType,c.ApplicationJson);const t=yield this.put(e,d,a);return this._processResponse(t,this.requestOptions)}))}patchJson(e,p,a={}){return s(this,void 0,void 0,(function*(){const d=JSON.stringify(p,null,2);a[u.Accept]=this._getExistingOrDefaultHeader(a,u.Accept,c.ApplicationJson);a[u.ContentType]=this._getExistingOrDefaultHeader(a,u.ContentType,c.ApplicationJson);const t=yield this.patch(e,d,a);return this._processResponse(t,this.requestOptions)}))}request(e,p,a,d){return s(this,void 0,void 0,(function*(){if(this._disposed){throw new Error("Client has already been disposed.")}const t=new URL(p);let r=this._prepareRequest(e,t,d);const s=this._allowRetries&&g.includes(e)?this._maxRetries+1:1;let i=0;let o;do{o=yield this.requestRaw(r,a);if(o&&o.message&&o.message.statusCode===m.Unauthorized){let e;for(const p of this.handlers){if(p.canHandleAuthentication(o)){e=p;break}}if(e){return e.handleAuthentication(this,r,a)}else{return o}}let p=this._maxRedirects;while(o.message.statusCode&&v.includes(o.message.statusCode)&&this._allowRedirects&&p>0){const s=o.message.headers["location"];if(!s){break}const i=new URL(s);if(t.protocol==="https:"&&t.protocol!==i.protocol&&!this._allowRedirectDowngrade){throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.")}yield o.readBody();if(i.hostname!==t.hostname){for(const e in d){if(e.toLowerCase()==="authorization"){delete d[e]}}}r=this._prepareRequest(e,i,d);o=yield this.requestRaw(r,a);p--}if(!o.message.statusCode||!h.includes(o.message.statusCode)){return o}i+=1;if(i{function callbackForResult(e,p){if(e){d(e)}else if(!p){d(new Error("Unknown error"))}else{a(p)}}this.requestRawWithCallback(e,p,callbackForResult)}))}))}requestRawWithCallback(e,p,a){if(typeof p==="string"){if(!e.options.headers){e.options.headers={}}e.options.headers["Content-Length"]=Buffer.byteLength(p,"utf8")}let d=false;function handleResult(e,p){if(!d){d=true;a(e,p)}}const t=e.httpModule.request(e.options,(e=>{const p=new HttpClientResponse(e);handleResult(undefined,p)}));let r;t.on("socket",(e=>{r=e}));t.setTimeout(this._socketTimeout||3*6e4,(()=>{if(r){r.end()}handleResult(new Error(`Request timeout: ${e.options.path}`))}));t.on("error",(function(e){handleResult(e)}));if(p&&typeof p==="string"){t.write(p,"utf8")}if(p&&typeof p!=="string"){p.on("close",(function(){t.end()}));p.pipe(t)}else{t.end()}}getAgent(e){const p=new URL(e);return this._getAgent(p)}_prepareRequest(e,p,a){const d={};d.parsedUrl=p;const t=d.parsedUrl.protocol==="https:";d.httpModule=t?o:i;const r=t?443:80;d.options={};d.options.host=d.parsedUrl.hostname;d.options.port=d.parsedUrl.port?parseInt(d.parsedUrl.port):r;d.options.path=(d.parsedUrl.pathname||"")+(d.parsedUrl.search||"");d.options.method=e;d.options.headers=this._mergeHeaders(a);if(this.userAgent!=null){d.options.headers["user-agent"]=this.userAgent}d.options.agent=this._getAgent(d.parsedUrl);if(this.handlers){for(const e of this.handlers){e.prepareRequest(d.options)}}return d}_mergeHeaders(e){if(this.requestOptions&&this.requestOptions.headers){return Object.assign({},lowercaseKeys(this.requestOptions.headers),lowercaseKeys(e||{}))}return lowercaseKeys(e||{})}_getExistingOrDefaultHeader(e,p,a){let d;if(this.requestOptions&&this.requestOptions.headers){d=lowercaseKeys(this.requestOptions.headers)[p]}return e[p]||d||a}_getAgent(e){let p;const a=n.getProxyUrl(e);const d=a&&a.hostname;if(this._keepAlive&&d){p=this._proxyAgent}if(this._keepAlive&&!d){p=this._agent}if(p){return p}const t=e.protocol==="https:";let r=100;if(this.requestOptions){r=this.requestOptions.maxSockets||i.globalAgent.maxSockets}if(a&&a.hostname){const e={maxSockets:r,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(a.username||a.password)&&{proxyAuth:`${a.username}:${a.password}`}),{host:a.hostname,port:a.port})};let d;const s=a.protocol==="https:";if(t){d=s?l.httpsOverHttps:l.httpsOverHttp}else{d=s?l.httpOverHttps:l.httpOverHttp}p=d(e);this._proxyAgent=p}if(this._keepAlive&&!p){const e={keepAlive:this._keepAlive,maxSockets:r};p=t?new o.Agent(e):new i.Agent(e);this._agent=p}if(!p){p=t?o.globalAgent:i.globalAgent}if(t&&this._ignoreSslError){p.options=Object.assign(p.options||{},{rejectUnauthorized:false})}return p}_performExponentialBackoff(e){return s(this,void 0,void 0,(function*(){e=Math.min(w,e);const p=_*Math.pow(2,e);return new Promise((e=>setTimeout((()=>e()),p)))}))}_processResponse(e,p){return s(this,void 0,void 0,(function*(){return new Promise(((a,d)=>s(this,void 0,void 0,(function*(){const t=e.message.statusCode||0;const r={statusCode:t,result:null,headers:{}};if(t===m.NotFound){a(r)}function dateTimeDeserializer(e,p){if(typeof p==="string"){const e=new Date(p);if(!isNaN(e.valueOf())){return e}}return p}let s;let i;try{i=yield e.readBody();if(i&&i.length>0){if(p&&p.deserializeDates){s=JSON.parse(i,dateTimeDeserializer)}else{s=JSON.parse(i)}r.result=s}r.headers=e.message.headers}catch(e){}if(t>299){let e;if(s&&s.message){e=s.message}else if(i&&i.length>0){e=i}else{e=`Failed request: (${t})`}const p=new HttpClientError(e,t);p.result=r.result;d(p)}else{a(r)}}))))}))}}p.HttpClient=HttpClient;const lowercaseKeys=e=>Object.keys(e).reduce(((p,a)=>(p[a.toLowerCase()]=e[a],p)),{})},9835:(e,p)=>{Object.defineProperty(p,"__esModule",{value:true});p.checkBypass=p.getProxyUrl=void 0;function getProxyUrl(e){const p=e.protocol==="https:";if(checkBypass(e)){return undefined}const a=(()=>{if(p){return process.env["https_proxy"]||process.env["HTTPS_PROXY"]}else{return process.env["http_proxy"]||process.env["HTTP_PROXY"]}})();if(a){return new URL(a)}else{return undefined}}p.getProxyUrl=getProxyUrl;function checkBypass(e){if(!e.hostname){return false}const p=process.env["no_proxy"]||process.env["NO_PROXY"]||"";if(!p){return false}let a;if(e.port){a=Number(e.port)}else if(e.protocol==="http:"){a=80}else if(e.protocol==="https:"){a=443}const d=[e.hostname.toUpperCase()];if(typeof a==="number"){d.push(`${d[0]}:${a}`)}for(const e of p.split(",").map((e=>e.trim().toUpperCase())).filter((e=>e))){if(d.some((p=>p===e))){return true}}return false}p.checkBypass=checkBypass},334:(e,p)=>{Object.defineProperty(p,"__esModule",{value:true});const a=/^v1\./;const d=/^ghs_/;const t=/^ghu_/;async function auth(e){const p=e.split(/\./).length===3;const r=a.test(e)||d.test(e);const s=t.test(e);const i=p?"app":r?"installation":s?"user-to-server":"oauth";return{type:"token",token:e,tokenType:i}}function withAuthorizationPrefix(e){if(e.split(/\./).length===3){return`bearer ${e}`}return`token ${e}`}async function hook(e,p,a,d){const t=p.endpoint.merge(a,d);t.headers.authorization=withAuthorizationPrefix(e);return p(t)}const r=function createTokenAuth(e){if(!e){throw new Error("[@octokit/auth-token] No token passed to createTokenAuth")}if(typeof e!=="string"){throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string")}e=e.replace(/^(token|bearer) +/i,"");return Object.assign(auth.bind(null,e),{hook:hook.bind(null,e)})};p.createTokenAuth=r},6762:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});var d=a(5030);var t=a(3682);var r=a(6234);var s=a(6442);var i=a(334);function _objectWithoutPropertiesLoose(e,p){if(e==null)return{};var a={};var d=Object.keys(e);var t,r;for(r=0;r=0)continue;a[t]=e[t]}return a}function _objectWithoutProperties(e,p){if(e==null)return{};var a=_objectWithoutPropertiesLoose(e,p);var d,t;if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t=0)continue;if(!Object.prototype.propertyIsEnumerable.call(e,d))continue;a[d]=e[d]}}return a}const o="3.6.0";const n=["authStrategy"];class Octokit{constructor(e={}){const p=new t.Collection;const a={baseUrl:r.request.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},e.request,{hook:p.bind(null,"request")}),mediaType:{previews:[],format:""}};a.headers["user-agent"]=[e.userAgent,`octokit-core.js/${o} ${d.getUserAgent()}`].filter(Boolean).join(" ");if(e.baseUrl){a.baseUrl=e.baseUrl}if(e.previews){a.mediaType.previews=e.previews}if(e.timeZone){a.headers["time-zone"]=e.timeZone}this.request=r.request.defaults(a);this.graphql=s.withCustomRequest(this.request).defaults(a);this.log=Object.assign({debug:()=>{},info:()=>{},warn:console.warn.bind(console),error:console.error.bind(console)},e.log);this.hook=p;if(!e.authStrategy){if(!e.auth){this.auth=async()=>({type:"unauthenticated"})}else{const a=i.createTokenAuth(e.auth);p.wrap("request",a.hook);this.auth=a}}else{const{authStrategy:a}=e,d=_objectWithoutProperties(e,n);const t=a(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:d},e.auth));p.wrap("request",t.hook);this.auth=t}const l=this.constructor;l.plugins.forEach((p=>{Object.assign(this,p(this,e))}))}static defaults(e){const p=class extends(this){constructor(...p){const a=p[0]||{};if(typeof e==="function"){super(e(a));return}super(Object.assign({},e,a,a.userAgent&&e.userAgent?{userAgent:`${a.userAgent} ${e.userAgent}`}:null))}};return p}static plugin(...e){var p;const a=this.plugins;const d=(p=class extends(this){},p.plugins=a.concat(e.filter((e=>!a.includes(e)))),p);return d}}Octokit.VERSION=o;Octokit.plugins=[];p.Octokit=Octokit},6442:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});var d=a(6234);var t=a(5030);const r="4.8.0";function _buildMessageForResponseErrors(e){return`Request failed due to following response errors:\n`+e.errors.map((e=>` - ${e.message}`)).join("\n")}class GraphqlResponseError extends Error{constructor(e,p,a){super(_buildMessageForResponseErrors(a));this.request=e;this.headers=p;this.response=a;this.name="GraphqlResponseError";this.errors=a.errors;this.data=a.data;if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}}}const s=["method","baseUrl","url","headers","request","query","mediaType"];const i=["query","method","url"];const o=/\/api\/v3\/?$/;function graphql(e,p,a){if(a){if(typeof p==="string"&&"query"in a){return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`))}for(const e in a){if(!i.includes(e))continue;return Promise.reject(new Error(`[@octokit/graphql] "${e}" cannot be used as variable name`))}}const d=typeof p==="string"?Object.assign({query:p},a):p;const t=Object.keys(d).reduce(((e,p)=>{if(s.includes(p)){e[p]=d[p];return e}if(!e.variables){e.variables={}}e.variables[p]=d[p];return e}),{});const r=d.baseUrl||e.endpoint.DEFAULTS.baseUrl;if(o.test(r)){t.url=r.replace(o,"/api/graphql")}return e(t).then((e=>{if(e.data.errors){const p={};for(const a of Object.keys(e.headers)){p[a]=e.headers[a]}throw new GraphqlResponseError(t,p,e.data)}return e.data.data}))}function withDefaults(e,p){const a=e.defaults(p);const newApi=(e,p)=>graphql(a,e,p);return Object.assign(newApi,{defaults:withDefaults.bind(null,a),endpoint:d.request.endpoint})}const n=withDefaults(d.request,{headers:{"user-agent":`octokit-graphql.js/${r} ${t.getUserAgent()}`},method:"POST",url:"/graphql"});function withCustomRequest(e){return withDefaults(e,{method:"POST",url:"/graphql"})}p.GraphqlResponseError=GraphqlResponseError;p.graphql=n;p.withCustomRequest=withCustomRequest},9440:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});var d=a(3287);var t=a(5030);function lowercaseKeys(e){if(!e){return{}}return Object.keys(e).reduce(((p,a)=>{p[a.toLowerCase()]=e[a];return p}),{})}function mergeDeep(e,p){const a=Object.assign({},e);Object.keys(p).forEach((t=>{if(d.isPlainObject(p[t])){if(!(t in e))Object.assign(a,{[t]:p[t]});else a[t]=mergeDeep(e[t],p[t])}else{Object.assign(a,{[t]:p[t]})}}));return a}function removeUndefinedProperties(e){for(const p in e){if(e[p]===undefined){delete e[p]}}return e}function merge(e,p,a){if(typeof p==="string"){let[e,d]=p.split(" ");a=Object.assign(d?{method:e,url:d}:{url:e},a)}else{a=Object.assign({},p)}a.headers=lowercaseKeys(a.headers);removeUndefinedProperties(a);removeUndefinedProperties(a.headers);const d=mergeDeep(e||{},a);if(e&&e.mediaType.previews.length){d.mediaType.previews=e.mediaType.previews.filter((e=>!d.mediaType.previews.includes(e))).concat(d.mediaType.previews)}d.mediaType.previews=d.mediaType.previews.map((e=>e.replace(/-preview/,"")));return d}function addQueryParameters(e,p){const a=/\?/.test(e)?"&":"?";const d=Object.keys(p);if(d.length===0){return e}return e+a+d.map((e=>{if(e==="q"){return"q="+p.q.split("+").map(encodeURIComponent).join("+")}return`${e}=${encodeURIComponent(p[e])}`})).join("&")}const r=/\{[^}]+\}/g;function removeNonChars(e){return e.replace(/^\W+|\W+$/g,"").split(/,/)}function extractUrlVariableNames(e){const p=e.match(r);if(!p){return[]}return p.map(removeNonChars).reduce(((e,p)=>e.concat(p)),[])}function omit(e,p){return Object.keys(e).filter((e=>!p.includes(e))).reduce(((p,a)=>{p[a]=e[a];return p}),{})}function encodeReserved(e){return e.split(/(%[0-9A-Fa-f]{2})/g).map((function(e){if(!/%[0-9A-Fa-f]/.test(e)){e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")}return e})).join("")}function encodeUnreserved(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function encodeValue(e,p,a){p=e==="+"||e==="#"?encodeReserved(p):encodeUnreserved(p);if(a){return encodeUnreserved(a)+"="+p}else{return p}}function isDefined(e){return e!==undefined&&e!==null}function isKeyOperator(e){return e===";"||e==="&"||e==="?"}function getValues(e,p,a,d){var t=e[a],r=[];if(isDefined(t)&&t!==""){if(typeof t==="string"||typeof t==="number"||typeof t==="boolean"){t=t.toString();if(d&&d!=="*"){t=t.substring(0,parseInt(d,10))}r.push(encodeValue(p,t,isKeyOperator(p)?a:""))}else{if(d==="*"){if(Array.isArray(t)){t.filter(isDefined).forEach((function(e){r.push(encodeValue(p,e,isKeyOperator(p)?a:""))}))}else{Object.keys(t).forEach((function(e){if(isDefined(t[e])){r.push(encodeValue(p,t[e],e))}}))}}else{const e=[];if(Array.isArray(t)){t.filter(isDefined).forEach((function(a){e.push(encodeValue(p,a))}))}else{Object.keys(t).forEach((function(a){if(isDefined(t[a])){e.push(encodeUnreserved(a));e.push(encodeValue(p,t[a].toString()))}}))}if(isKeyOperator(p)){r.push(encodeUnreserved(a)+"="+e.join(","))}else if(e.length!==0){r.push(e.join(","))}}}}else{if(p===";"){if(isDefined(t)){r.push(encodeUnreserved(a))}}else if(t===""&&(p==="&"||p==="?")){r.push(encodeUnreserved(a)+"=")}else if(t===""){r.push("")}}return r}function parseUrl(e){return{expand:expand.bind(null,e)}}function expand(e,p){var a=["+","#",".","/",";","?","&"];return e.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,(function(e,d,t){if(d){let e="";const t=[];if(a.indexOf(d.charAt(0))!==-1){e=d.charAt(0);d=d.substr(1)}d.split(/,/g).forEach((function(a){var d=/([^:\*]*)(?::(\d+)|(\*))?/.exec(a);t.push(getValues(p,e,d[1],d[2]||d[3]))}));if(e&&e!=="+"){var r=",";if(e==="?"){r="&"}else if(e!=="#"){r=e}return(t.length!==0?e:"")+t.join(r)}else{return t.join(",")}}else{return encodeReserved(t)}}))}function parse(e){let p=e.method.toUpperCase();let a=(e.url||"/").replace(/:([a-z]\w+)/g,"{$1}");let d=Object.assign({},e.headers);let t;let r=omit(e,["method","baseUrl","url","headers","request","mediaType"]);const s=extractUrlVariableNames(a);a=parseUrl(a).expand(r);if(!/^http/.test(a)){a=e.baseUrl+a}const i=Object.keys(e).filter((e=>s.includes(e))).concat("baseUrl");const o=omit(r,i);const n=/application\/octet-stream/i.test(d.accept);if(!n){if(e.mediaType.format){d.accept=d.accept.split(/,/).map((p=>p.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${e.mediaType.format}`))).join(",")}if(e.mediaType.previews.length){const p=d.accept.match(/[\w-]+(?=-preview)/g)||[];d.accept=p.concat(e.mediaType.previews).map((p=>{const a=e.mediaType.format?`.${e.mediaType.format}`:"+json";return`application/vnd.github.${p}-preview${a}`})).join(",")}}if(["GET","HEAD"].includes(p)){a=addQueryParameters(a,o)}else{if("data"in o){t=o.data}else{if(Object.keys(o).length){t=o}else{d["content-length"]=0}}}if(!d["content-type"]&&typeof t!=="undefined"){d["content-type"]="application/json; charset=utf-8"}if(["PATCH","PUT"].includes(p)&&typeof t==="undefined"){t=""}return Object.assign({method:p,url:a,headers:d},typeof t!=="undefined"?{body:t}:null,e.request?{request:e.request}:null)}function endpointWithDefaults(e,p,a){return parse(merge(e,p,a))}function withDefaults(e,p){const a=merge(e,p);const d=endpointWithDefaults.bind(null,a);return Object.assign(d,{DEFAULTS:a,defaults:withDefaults.bind(null,a),merge:merge.bind(null,a),parse:parse})}const s="6.0.12";const i=`octokit-endpoint.js/${s} ${t.getUserAgent()}`;const o={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":i},mediaType:{format:"",previews:[]}};const n=withDefaults(null,o);p.endpoint=n},8467:(e,p,a)=>{var d=Object.defineProperty;var t=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var __export=(e,p)=>{for(var a in p)d(e,a,{get:p[a],enumerable:true})};var __copyProps=(e,p,a,i)=>{if(p&&typeof p==="object"||typeof p==="function"){for(let o of r(p))if(!s.call(e,o)&&o!==a)d(e,o,{get:()=>p[o],enumerable:!(i=t(p,o))||i.enumerable})}return e};var __toCommonJS=e=>__copyProps(d({},"__esModule",{value:true}),e);var i={};__export(i,{GraphqlResponseError:()=>c,graphql:()=>w,withCustomRequest:()=>withCustomRequest});e.exports=__toCommonJS(i);var o=a(3758);var n=a(5030);var l="7.0.1";var m=a(3758);var u=a(3758);function _buildMessageForResponseErrors(e){return`Request failed due to following response errors:\n`+e.errors.map((e=>` - ${e.message}`)).join("\n")}var c=class extends Error{constructor(e,p,a){super(_buildMessageForResponseErrors(a));this.request=e;this.headers=p;this.response=a;this.name="GraphqlResponseError";this.errors=a.errors;this.data=a.data;if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}}};var v=["method","baseUrl","url","headers","request","query","mediaType"];var h=["query","method","url"];var g=/\/api\/v3\/?$/;function graphql(e,p,a){if(a){if(typeof p==="string"&&"query"in a){return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`))}for(const e in a){if(!h.includes(e))continue;return Promise.reject(new Error(`[@octokit/graphql] "${e}" cannot be used as variable name`))}}const d=typeof p==="string"?Object.assign({query:p},a):p;const t=Object.keys(d).reduce(((e,p)=>{if(v.includes(p)){e[p]=d[p];return e}if(!e.variables){e.variables={}}e.variables[p]=d[p];return e}),{});const r=d.baseUrl||e.endpoint.DEFAULTS.baseUrl;if(g.test(r)){t.url=r.replace(g,"/api/graphql")}return e(t).then((e=>{if(e.data.errors){const p={};for(const a of Object.keys(e.headers)){p[a]=e.headers[a]}throw new c(t,p,e.data)}return e.data.data}))}function withDefaults(e,p){const a=e.defaults(p);const newApi=(e,p)=>graphql(a,e,p);return Object.assign(newApi,{defaults:withDefaults.bind(null,a),endpoint:a.endpoint})}var w=withDefaults(o.request,{headers:{"user-agent":`octokit-graphql.js/${l} ${(0,n.getUserAgent)()}`},method:"POST",url:"/graphql"});function withCustomRequest(e){return withDefaults(e,{method:"POST",url:"/graphql"})}0&&0},9723:(e,p,a)=>{var d=Object.defineProperty;var t=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var __export=(e,p)=>{for(var a in p)d(e,a,{get:p[a],enumerable:true})};var __copyProps=(e,p,a,i)=>{if(p&&typeof p==="object"||typeof p==="function"){for(let o of r(p))if(!s.call(e,o)&&o!==a)d(e,o,{get:()=>p[o],enumerable:!(i=t(p,o))||i.enumerable})}return e};var __toCommonJS=e=>__copyProps(d({},"__esModule",{value:true}),e);var i={};__export(i,{endpoint:()=>v});e.exports=__toCommonJS(i);var o=a(5030);var n="9.0.0";var l=`octokit-endpoint.js/${n} ${(0,o.getUserAgent)()}`;var m={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":l},mediaType:{format:""}};function lowercaseKeys(e){if(!e){return{}}return Object.keys(e).reduce(((p,a)=>{p[a.toLowerCase()]=e[a];return p}),{})}var u=a(3287);function mergeDeep(e,p){const a=Object.assign({},e);Object.keys(p).forEach((d=>{if((0,u.isPlainObject)(p[d])){if(!(d in e))Object.assign(a,{[d]:p[d]});else a[d]=mergeDeep(e[d],p[d])}else{Object.assign(a,{[d]:p[d]})}}));return a}function removeUndefinedProperties(e){for(const p in e){if(e[p]===void 0){delete e[p]}}return e}function merge(e,p,a){if(typeof p==="string"){let[e,d]=p.split(" ");a=Object.assign(d?{method:e,url:d}:{url:e},a)}else{a=Object.assign({},p)}a.headers=lowercaseKeys(a.headers);removeUndefinedProperties(a);removeUndefinedProperties(a.headers);const d=mergeDeep(e||{},a);if(a.url==="/graphql"){if(e&&e.mediaType.previews?.length){d.mediaType.previews=e.mediaType.previews.filter((e=>!d.mediaType.previews.includes(e))).concat(d.mediaType.previews)}d.mediaType.previews=(d.mediaType.previews||[]).map((e=>e.replace(/-preview/,"")))}return d}function addQueryParameters(e,p){const a=/\?/.test(e)?"&":"?";const d=Object.keys(p);if(d.length===0){return e}return e+a+d.map((e=>{if(e==="q"){return"q="+p.q.split("+").map(encodeURIComponent).join("+")}return`${e}=${encodeURIComponent(p[e])}`})).join("&")}var c=/\{[^}]+\}/g;function removeNonChars(e){return e.replace(/^\W+|\W+$/g,"").split(/,/)}function extractUrlVariableNames(e){const p=e.match(c);if(!p){return[]}return p.map(removeNonChars).reduce(((e,p)=>e.concat(p)),[])}function omit(e,p){return Object.keys(e).filter((e=>!p.includes(e))).reduce(((p,a)=>{p[a]=e[a];return p}),{})}function encodeReserved(e){return e.split(/(%[0-9A-Fa-f]{2})/g).map((function(e){if(!/%[0-9A-Fa-f]/.test(e)){e=encodeURI(e).replace(/%5B/g,"[").replace(/%5D/g,"]")}return e})).join("")}function encodeUnreserved(e){return encodeURIComponent(e).replace(/[!'()*]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function encodeValue(e,p,a){p=e==="+"||e==="#"?encodeReserved(p):encodeUnreserved(p);if(a){return encodeUnreserved(a)+"="+p}else{return p}}function isDefined(e){return e!==void 0&&e!==null}function isKeyOperator(e){return e===";"||e==="&"||e==="?"}function getValues(e,p,a,d){var t=e[a],r=[];if(isDefined(t)&&t!==""){if(typeof t==="string"||typeof t==="number"||typeof t==="boolean"){t=t.toString();if(d&&d!=="*"){t=t.substring(0,parseInt(d,10))}r.push(encodeValue(p,t,isKeyOperator(p)?a:""))}else{if(d==="*"){if(Array.isArray(t)){t.filter(isDefined).forEach((function(e){r.push(encodeValue(p,e,isKeyOperator(p)?a:""))}))}else{Object.keys(t).forEach((function(e){if(isDefined(t[e])){r.push(encodeValue(p,t[e],e))}}))}}else{const e=[];if(Array.isArray(t)){t.filter(isDefined).forEach((function(a){e.push(encodeValue(p,a))}))}else{Object.keys(t).forEach((function(a){if(isDefined(t[a])){e.push(encodeUnreserved(a));e.push(encodeValue(p,t[a].toString()))}}))}if(isKeyOperator(p)){r.push(encodeUnreserved(a)+"="+e.join(","))}else if(e.length!==0){r.push(e.join(","))}}}}else{if(p===";"){if(isDefined(t)){r.push(encodeUnreserved(a))}}else if(t===""&&(p==="&"||p==="?")){r.push(encodeUnreserved(a)+"=")}else if(t===""){r.push("")}}return r}function parseUrl(e){return{expand:expand.bind(null,e)}}function expand(e,p){var a=["+","#",".","/",";","?","&"];return e.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,(function(e,d,t){if(d){let e="";const t=[];if(a.indexOf(d.charAt(0))!==-1){e=d.charAt(0);d=d.substr(1)}d.split(/,/g).forEach((function(a){var d=/([^:\*]*)(?::(\d+)|(\*))?/.exec(a);t.push(getValues(p,e,d[1],d[2]||d[3]))}));if(e&&e!=="+"){var r=",";if(e==="?"){r="&"}else if(e!=="#"){r=e}return(t.length!==0?e:"")+t.join(r)}else{return t.join(",")}}else{return encodeReserved(t)}}))}function parse(e){let p=e.method.toUpperCase();let a=(e.url||"/").replace(/:([a-z]\w+)/g,"{$1}");let d=Object.assign({},e.headers);let t;let r=omit(e,["method","baseUrl","url","headers","request","mediaType"]);const s=extractUrlVariableNames(a);a=parseUrl(a).expand(r);if(!/^http/.test(a)){a=e.baseUrl+a}const i=Object.keys(e).filter((e=>s.includes(e))).concat("baseUrl");const o=omit(r,i);const n=/application\/octet-stream/i.test(d.accept);if(!n){if(e.mediaType.format){d.accept=d.accept.split(/,/).map((p=>p.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${e.mediaType.format}`))).join(",")}if(a.endsWith("/graphql")){if(e.mediaType.previews?.length){const p=d.accept.match(/[\w-]+(?=-preview)/g)||[];d.accept=p.concat(e.mediaType.previews).map((p=>{const a=e.mediaType.format?`.${e.mediaType.format}`:"+json";return`application/vnd.github.${p}-preview${a}`})).join(",")}}}if(["GET","HEAD"].includes(p)){a=addQueryParameters(a,o)}else{if("data"in o){t=o.data}else{if(Object.keys(o).length){t=o}}}if(!d["content-type"]&&typeof t!=="undefined"){d["content-type"]="application/json; charset=utf-8"}if(["PATCH","PUT"].includes(p)&&typeof t==="undefined"){t=""}return Object.assign({method:p,url:a,headers:d},typeof t!=="undefined"?{body:t}:null,e.request?{request:e.request}:null)}function endpointWithDefaults(e,p,a){return parse(merge(e,p,a))}function withDefaults(e,p){const a=merge(e,p);const d=endpointWithDefaults.bind(null,a);return Object.assign(d,{DEFAULTS:a,defaults:withDefaults.bind(null,a),merge:merge.bind(null,a),parse:parse})}var v=withDefaults(null,m);0&&0},8238:(e,p,a)=>{var d=Object.create;var t=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var i=Object.getPrototypeOf;var o=Object.prototype.hasOwnProperty;var __export=(e,p)=>{for(var a in p)t(e,a,{get:p[a],enumerable:true})};var __copyProps=(e,p,a,d)=>{if(p&&typeof p==="object"||typeof p==="function"){for(let i of s(p))if(!o.call(e,i)&&i!==a)t(e,i,{get:()=>p[i],enumerable:!(d=r(p,i))||d.enumerable})}return e};var __toESM=(e,p,a)=>(a=e!=null?d(i(e)):{},__copyProps(p||!e||!e.__esModule?t(a,"default",{value:e,enumerable:true}):a,e));var __toCommonJS=e=>__copyProps(t({},"__esModule",{value:true}),e);var n={};__export(n,{RequestError:()=>v});e.exports=__toCommonJS(n);var l=a(8932);var m=__toESM(a(1223));var u=(0,m.default)((e=>console.warn(e)));var c=(0,m.default)((e=>console.warn(e)));var v=class extends Error{constructor(e,p,a){super(e);if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}this.name="HttpError";this.status=p;let d;if("headers"in a&&typeof a.headers!=="undefined"){d=a.headers}if("response"in a){this.response=a.response;d=a.response.headers}const t=Object.assign({},a.request);if(a.request.headers.authorization){t.headers=Object.assign({},a.request.headers,{authorization:a.request.headers.authorization.replace(/ .*$/," [REDACTED]")})}t.url=t.url.replace(/\bclient_secret=\w+/g,"client_secret=[REDACTED]").replace(/\baccess_token=\w+/g,"access_token=[REDACTED]");this.request=t;Object.defineProperty(this,"code",{get(){u(new l.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));return p}});Object.defineProperty(this,"headers",{get(){c(new l.Deprecation("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`."));return d||{}}})}};0&&0},3758:(e,p,a)=>{var d=Object.defineProperty;var t=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var __export=(e,p)=>{for(var a in p)d(e,a,{get:p[a],enumerable:true})};var __copyProps=(e,p,a,i)=>{if(p&&typeof p==="object"||typeof p==="function"){for(let o of r(p))if(!s.call(e,o)&&o!==a)d(e,o,{get:()=>p[o],enumerable:!(i=t(p,o))||i.enumerable})}return e};var __toCommonJS=e=>__copyProps(d({},"__esModule",{value:true}),e);var i={};__export(i,{request:()=>c});e.exports=__toCommonJS(i);var o=a(9723);var n=a(5030);var l="8.1.1";var m=a(3287);var u=a(8238);function getBufferResponse(e){return e.arrayBuffer()}function fetchWrapper(e){var p,a,d;const t=e.request&&e.request.log?e.request.log:console;const r=((p=e.request)==null?void 0:p.parseSuccessResponseBody)!==false;if((0,m.isPlainObject)(e.body)||Array.isArray(e.body)){e.body=JSON.stringify(e.body)}let s={};let i;let o;let{fetch:n}=globalThis;if((a=e.request)==null?void 0:a.fetch){n=e.request.fetch}if(!n){throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing")}return n(e.url,{method:e.method,body:e.body,headers:e.headers,signal:(d=e.request)==null?void 0:d.signal,...e.body&&{duplex:"half"}}).then((async p=>{o=p.url;i=p.status;for(const e of p.headers){s[e[0]]=e[1]}if("deprecation"in s){const p=s.link&&s.link.match(/<([^>]+)>; rel="deprecation"/);const a=p&&p.pop();t.warn(`[@octokit/request] "${e.method} ${e.url}" is deprecated. It is scheduled to be removed on ${s.sunset}${a?`. See ${a}`:""}`)}if(i===204||i===205){return}if(e.method==="HEAD"){if(i<400){return}throw new u.RequestError(p.statusText,i,{response:{url:o,status:i,headers:s,data:void 0},request:e})}if(i===304){throw new u.RequestError("Not modified",i,{response:{url:o,status:i,headers:s,data:await getResponseData(p)},request:e})}if(i>=400){const a=await getResponseData(p);const d=new u.RequestError(toErrorMessage(a),i,{response:{url:o,status:i,headers:s,data:a},request:e});throw d}return r?await getResponseData(p):p.body})).then((e=>({status:i,url:o,headers:s,data:e}))).catch((p=>{if(p instanceof u.RequestError)throw p;else if(p.name==="AbortError")throw p;throw new u.RequestError(p.message,500,{request:e})}))}async function getResponseData(e){const p=e.headers.get("content-type");if(/application\/json/.test(p)){return e.json()}if(!p||/^text\/|charset=utf-8$/.test(p)){return e.text()}return getBufferResponse(e)}function toErrorMessage(e){if(typeof e==="string")return e;if("message"in e){if(Array.isArray(e.errors)){return`${e.message}: ${e.errors.map(JSON.stringify).join(", ")}`}return e.message}return`Unknown error: ${JSON.stringify(e)}`}function withDefaults(e,p){const a=e.defaults(p);const newApi=function(e,p){const d=a.merge(e,p);if(!d.request||!d.request.hook){return fetchWrapper(a.parse(d))}const request2=(e,p)=>fetchWrapper(a.parse(a.merge(e,p)));Object.assign(request2,{endpoint:a,defaults:withDefaults.bind(null,a)});return d.request.hook(request2,d)};return Object.assign(newApi,{endpoint:a,defaults:withDefaults.bind(null,a)})}var c=withDefaults(o.endpoint,{headers:{"user-agent":`octokit-request.js/${l} ${(0,n.getUserAgent)()}`}});0&&0},4193:(e,p)=>{Object.defineProperty(p,"__esModule",{value:true});const a="2.21.3";function ownKeys(e,p){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(e);p&&(d=d.filter((function(p){return Object.getOwnPropertyDescriptor(e,p).enumerable}))),a.push.apply(a,d)}return a}function _objectSpread2(e){for(var p=1;p({async next(){if(!i)return{done:true};try{const e=await t({method:r,url:i,headers:s});const p=normalizePaginatedListResponse(e);i=((p.headers.link||"").match(/<([^>]+)>;\s*rel="next"/)||[])[1];return{value:p}}catch(e){if(e.status!==409)throw e;i="";return{value:{status:200,headers:{},data:[]}}}}})}}function paginate(e,p,a,d){if(typeof a==="function"){d=a;a=undefined}return gather(e,[],iterator(e,p,a)[Symbol.asyncIterator](),d)}function gather(e,p,a,d){return a.next().then((t=>{if(t.done){return p}let r=false;function done(){r=true}p=p.concat(d?d(t.value,done):t.value.data);if(r){return p}return gather(e,p,a,d)}))}const d=Object.assign(paginate,{iterator:iterator});const t=["GET /app/hook/deliveries","GET /app/installations","GET /applications/grants","GET /authorizations","GET /enterprises/{enterprise}/actions/permissions/organizations","GET /enterprises/{enterprise}/actions/runner-groups","GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations","GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners","GET /enterprises/{enterprise}/actions/runners","GET /enterprises/{enterprise}/audit-log","GET /enterprises/{enterprise}/secret-scanning/alerts","GET /enterprises/{enterprise}/settings/billing/advanced-security","GET /events","GET /gists","GET /gists/public","GET /gists/starred","GET /gists/{gist_id}/comments","GET /gists/{gist_id}/commits","GET /gists/{gist_id}/forks","GET /installation/repositories","GET /issues","GET /licenses","GET /marketplace_listing/plans","GET /marketplace_listing/plans/{plan_id}/accounts","GET /marketplace_listing/stubbed/plans","GET /marketplace_listing/stubbed/plans/{plan_id}/accounts","GET /networks/{owner}/{repo}/events","GET /notifications","GET /organizations","GET /orgs/{org}/actions/cache/usage-by-repository","GET /orgs/{org}/actions/permissions/repositories","GET /orgs/{org}/actions/runner-groups","GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories","GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners","GET /orgs/{org}/actions/runners","GET /orgs/{org}/actions/secrets","GET /orgs/{org}/actions/secrets/{secret_name}/repositories","GET /orgs/{org}/audit-log","GET /orgs/{org}/blocks","GET /orgs/{org}/code-scanning/alerts","GET /orgs/{org}/codespaces","GET /orgs/{org}/credential-authorizations","GET /orgs/{org}/dependabot/secrets","GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories","GET /orgs/{org}/events","GET /orgs/{org}/external-groups","GET /orgs/{org}/failed_invitations","GET /orgs/{org}/hooks","GET /orgs/{org}/hooks/{hook_id}/deliveries","GET /orgs/{org}/installations","GET /orgs/{org}/invitations","GET /orgs/{org}/invitations/{invitation_id}/teams","GET /orgs/{org}/issues","GET /orgs/{org}/members","GET /orgs/{org}/migrations","GET /orgs/{org}/migrations/{migration_id}/repositories","GET /orgs/{org}/outside_collaborators","GET /orgs/{org}/packages","GET /orgs/{org}/packages/{package_type}/{package_name}/versions","GET /orgs/{org}/projects","GET /orgs/{org}/public_members","GET /orgs/{org}/repos","GET /orgs/{org}/secret-scanning/alerts","GET /orgs/{org}/settings/billing/advanced-security","GET /orgs/{org}/team-sync/groups","GET /orgs/{org}/teams","GET /orgs/{org}/teams/{team_slug}/discussions","GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments","GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions","GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions","GET /orgs/{org}/teams/{team_slug}/invitations","GET /orgs/{org}/teams/{team_slug}/members","GET /orgs/{org}/teams/{team_slug}/projects","GET /orgs/{org}/teams/{team_slug}/repos","GET /orgs/{org}/teams/{team_slug}/teams","GET /projects/columns/{column_id}/cards","GET /projects/{project_id}/collaborators","GET /projects/{project_id}/columns","GET /repos/{owner}/{repo}/actions/artifacts","GET /repos/{owner}/{repo}/actions/caches","GET /repos/{owner}/{repo}/actions/runners","GET /repos/{owner}/{repo}/actions/runs","GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts","GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs","GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs","GET /repos/{owner}/{repo}/actions/secrets","GET /repos/{owner}/{repo}/actions/workflows","GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs","GET /repos/{owner}/{repo}/assignees","GET /repos/{owner}/{repo}/branches","GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations","GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs","GET /repos/{owner}/{repo}/code-scanning/alerts","GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances","GET /repos/{owner}/{repo}/code-scanning/analyses","GET /repos/{owner}/{repo}/codespaces","GET /repos/{owner}/{repo}/codespaces/devcontainers","GET /repos/{owner}/{repo}/codespaces/secrets","GET /repos/{owner}/{repo}/collaborators","GET /repos/{owner}/{repo}/comments","GET /repos/{owner}/{repo}/comments/{comment_id}/reactions","GET /repos/{owner}/{repo}/commits","GET /repos/{owner}/{repo}/commits/{commit_sha}/comments","GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls","GET /repos/{owner}/{repo}/commits/{ref}/check-runs","GET /repos/{owner}/{repo}/commits/{ref}/check-suites","GET /repos/{owner}/{repo}/commits/{ref}/status","GET /repos/{owner}/{repo}/commits/{ref}/statuses","GET /repos/{owner}/{repo}/contributors","GET /repos/{owner}/{repo}/dependabot/secrets","GET /repos/{owner}/{repo}/deployments","GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses","GET /repos/{owner}/{repo}/environments","GET /repos/{owner}/{repo}/events","GET /repos/{owner}/{repo}/forks","GET /repos/{owner}/{repo}/git/matching-refs/{ref}","GET /repos/{owner}/{repo}/hooks","GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries","GET /repos/{owner}/{repo}/invitations","GET /repos/{owner}/{repo}/issues","GET /repos/{owner}/{repo}/issues/comments","GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions","GET /repos/{owner}/{repo}/issues/events","GET /repos/{owner}/{repo}/issues/{issue_number}/comments","GET /repos/{owner}/{repo}/issues/{issue_number}/events","GET /repos/{owner}/{repo}/issues/{issue_number}/labels","GET /repos/{owner}/{repo}/issues/{issue_number}/reactions","GET /repos/{owner}/{repo}/issues/{issue_number}/timeline","GET /repos/{owner}/{repo}/keys","GET /repos/{owner}/{repo}/labels","GET /repos/{owner}/{repo}/milestones","GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels","GET /repos/{owner}/{repo}/notifications","GET /repos/{owner}/{repo}/pages/builds","GET /repos/{owner}/{repo}/projects","GET /repos/{owner}/{repo}/pulls","GET /repos/{owner}/{repo}/pulls/comments","GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions","GET /repos/{owner}/{repo}/pulls/{pull_number}/comments","GET /repos/{owner}/{repo}/pulls/{pull_number}/commits","GET /repos/{owner}/{repo}/pulls/{pull_number}/files","GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers","GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews","GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments","GET /repos/{owner}/{repo}/releases","GET /repos/{owner}/{repo}/releases/{release_id}/assets","GET /repos/{owner}/{repo}/releases/{release_id}/reactions","GET /repos/{owner}/{repo}/secret-scanning/alerts","GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations","GET /repos/{owner}/{repo}/stargazers","GET /repos/{owner}/{repo}/subscribers","GET /repos/{owner}/{repo}/tags","GET /repos/{owner}/{repo}/teams","GET /repos/{owner}/{repo}/topics","GET /repositories","GET /repositories/{repository_id}/environments/{environment_name}/secrets","GET /search/code","GET /search/commits","GET /search/issues","GET /search/labels","GET /search/repositories","GET /search/topics","GET /search/users","GET /teams/{team_id}/discussions","GET /teams/{team_id}/discussions/{discussion_number}/comments","GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions","GET /teams/{team_id}/discussions/{discussion_number}/reactions","GET /teams/{team_id}/invitations","GET /teams/{team_id}/members","GET /teams/{team_id}/projects","GET /teams/{team_id}/repos","GET /teams/{team_id}/teams","GET /user/blocks","GET /user/codespaces","GET /user/codespaces/secrets","GET /user/emails","GET /user/followers","GET /user/following","GET /user/gpg_keys","GET /user/installations","GET /user/installations/{installation_id}/repositories","GET /user/issues","GET /user/keys","GET /user/marketplace_purchases","GET /user/marketplace_purchases/stubbed","GET /user/memberships/orgs","GET /user/migrations","GET /user/migrations/{migration_id}/repositories","GET /user/orgs","GET /user/packages","GET /user/packages/{package_type}/{package_name}/versions","GET /user/public_emails","GET /user/repos","GET /user/repository_invitations","GET /user/starred","GET /user/subscriptions","GET /user/teams","GET /users","GET /users/{username}/events","GET /users/{username}/events/orgs/{org}","GET /users/{username}/events/public","GET /users/{username}/followers","GET /users/{username}/following","GET /users/{username}/gists","GET /users/{username}/gpg_keys","GET /users/{username}/keys","GET /users/{username}/orgs","GET /users/{username}/packages","GET /users/{username}/projects","GET /users/{username}/received_events","GET /users/{username}/received_events/public","GET /users/{username}/repos","GET /users/{username}/starred","GET /users/{username}/subscriptions"];function isPaginatingEndpoint(e){if(typeof e==="string"){return t.includes(e)}else{return false}}function paginateRest(e){return{paginate:Object.assign(paginate.bind(null,e),{iterator:iterator.bind(null,e)})}}paginateRest.VERSION=a;p.composePaginateRest=d;p.isPaginatingEndpoint=isPaginatingEndpoint;p.paginateRest=paginateRest;p.paginatingEndpoints=t},3044:(e,p)=>{Object.defineProperty(p,"__esModule",{value:true});function ownKeys(e,p){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(e);if(p){d=d.filter((function(p){return Object.getOwnPropertyDescriptor(e,p).enumerable}))}a.push.apply(a,d)}return a}function _objectSpread2(e){for(var p=1;p{Object.defineProperty(p,"__esModule",{value:true});function _interopDefault(e){return e&&typeof e==="object"&&"default"in e?e["default"]:e}var d=a(8932);var t=_interopDefault(a(1223));const r=t((e=>console.warn(e)));const s=t((e=>console.warn(e)));class RequestError extends Error{constructor(e,p,a){super(e);if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}this.name="HttpError";this.status=p;let t;if("headers"in a&&typeof a.headers!=="undefined"){t=a.headers}if("response"in a){this.response=a.response;t=a.response.headers}const i=Object.assign({},a.request);if(a.request.headers.authorization){i.headers=Object.assign({},a.request.headers,{authorization:a.request.headers.authorization.replace(/ .*$/," [REDACTED]")})}i.url=i.url.replace(/\bclient_secret=\w+/g,"client_secret=[REDACTED]").replace(/\baccess_token=\w+/g,"access_token=[REDACTED]");this.request=i;Object.defineProperty(this,"code",{get(){r(new d.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));return p}});Object.defineProperty(this,"headers",{get(){s(new d.Deprecation("[@octokit/request-error] `error.headers` is deprecated, use `error.response.headers`."));return t||{}}})}}p.RequestError=RequestError},6234:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});function _interopDefault(e){return e&&typeof e==="object"&&"default"in e?e["default"]:e}var d=a(9440);var t=a(5030);var r=a(3287);var s=_interopDefault(a(467));var i=a(537);const o="5.6.3";function getBufferResponse(e){return e.arrayBuffer()}function fetchWrapper(e){const p=e.request&&e.request.log?e.request.log:console;if(r.isPlainObject(e.body)||Array.isArray(e.body)){e.body=JSON.stringify(e.body)}let a={};let d;let t;const o=e.request&&e.request.fetch||s;return o(e.url,Object.assign({method:e.method,body:e.body,headers:e.headers,redirect:e.redirect},e.request)).then((async r=>{t=r.url;d=r.status;for(const e of r.headers){a[e[0]]=e[1]}if("deprecation"in a){const d=a.link&&a.link.match(/<([^>]+)>; rel="deprecation"/);const t=d&&d.pop();p.warn(`[@octokit/request] "${e.method} ${e.url}" is deprecated. It is scheduled to be removed on ${a.sunset}${t?`. See ${t}`:""}`)}if(d===204||d===205){return}if(e.method==="HEAD"){if(d<400){return}throw new i.RequestError(r.statusText,d,{response:{url:t,status:d,headers:a,data:undefined},request:e})}if(d===304){throw new i.RequestError("Not modified",d,{response:{url:t,status:d,headers:a,data:await getResponseData(r)},request:e})}if(d>=400){const p=await getResponseData(r);const s=new i.RequestError(toErrorMessage(p),d,{response:{url:t,status:d,headers:a,data:p},request:e});throw s}return getResponseData(r)})).then((e=>({status:d,url:t,headers:a,data:e}))).catch((p=>{if(p instanceof i.RequestError)throw p;throw new i.RequestError(p.message,500,{request:e})}))}async function getResponseData(e){const p=e.headers.get("content-type");if(/application\/json/.test(p)){return e.json()}if(!p||/^text\/|charset=utf-8$/.test(p)){return e.text()}return getBufferResponse(e)}function toErrorMessage(e){if(typeof e==="string")return e;if("message"in e){if(Array.isArray(e.errors)){return`${e.message}: ${e.errors.map(JSON.stringify).join(", ")}`}return e.message}return`Unknown error: ${JSON.stringify(e)}`}function withDefaults(e,p){const a=e.defaults(p);const newApi=function(e,p){const d=a.merge(e,p);if(!d.request||!d.request.hook){return fetchWrapper(a.parse(d))}const request=(e,p)=>fetchWrapper(a.parse(a.merge(e,p)));Object.assign(request,{endpoint:a,defaults:withDefaults.bind(null,a)});return d.request.hook(request,d)};return Object.assign(newApi,{endpoint:a,defaults:withDefaults.bind(null,a)})}const n=withDefaults(d.endpoint,{headers:{"user-agent":`octokit-request.js/${o} ${t.getUserAgent()}`}});p.request=n},3682:(e,p,a)=>{var d=a(4670);var t=a(5549);var r=a(6819);var s=Function.bind;var i=s.bind(s);function bindApi(e,p,a){var d=i(r,null).apply(null,a?[p,a]:[p]);e.api={remove:d};e.remove=d;["before","error","after","wrap"].forEach((function(d){var r=a?[p,d,a]:[p,d];e[d]=e.api[d]=i(t,null).apply(null,r)}))}function HookSingular(){var e="h";var p={registry:{}};var a=d.bind(null,p,e);bindApi(a,p,e);return a}function HookCollection(){var e={registry:{}};var p=d.bind(null,e);bindApi(p,e);return p}var o=false;function Hook(){if(!o){console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4');o=true}return HookCollection()}Hook.Singular=HookSingular.bind();Hook.Collection=HookCollection.bind();e.exports=Hook;e.exports.Hook=Hook;e.exports.Singular=Hook.Singular;e.exports.Collection=Hook.Collection},5549:e=>{e.exports=addHook;function addHook(e,p,a,d){var t=d;if(!e.registry[a]){e.registry[a]=[]}if(p==="before"){d=function(e,p){return Promise.resolve().then(t.bind(null,p)).then(e.bind(null,p))}}if(p==="after"){d=function(e,p){var a;return Promise.resolve().then(e.bind(null,p)).then((function(e){a=e;return t(a,p)})).then((function(){return a}))}}if(p==="error"){d=function(e,p){return Promise.resolve().then(e.bind(null,p)).catch((function(e){return t(e,p)}))}}e.registry[a].push({hook:d,orig:t})}},4670:e=>{e.exports=register;function register(e,p,a,d){if(typeof a!=="function"){throw new Error("method for before hook must be a function")}if(!d){d={}}if(Array.isArray(p)){return p.reverse().reduce((function(p,a){return register.bind(null,e,a,p,d)}),a)()}return Promise.resolve().then((function(){if(!e.registry[p]){return a(d)}return e.registry[p].reduce((function(e,p){return p.hook.bind(null,e,d)}),a)()}))}},6819:e=>{e.exports=removeHook;function removeHook(e,p,a){if(!e.registry[p]){return}var d=e.registry[p].map((function(e){return e.orig})).indexOf(a);if(d===-1){return}e.registry[p].splice(d,1)}},8932:(e,p)=>{Object.defineProperty(p,"__esModule",{value:true});class Deprecation extends Error{constructor(e){super(e);if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}this.name="Deprecation"}}p.Deprecation=Deprecation},3287:(e,p)=>{Object.defineProperty(p,"__esModule",{value:true});
+/*!
+ * is-plain-object
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */function isObject(e){return Object.prototype.toString.call(e)==="[object Object]"}function isPlainObject(e){var p,a;if(isObject(e)===false)return false;p=e.constructor;if(p===undefined)return true;a=p.prototype;if(isObject(a)===false)return false;if(a.hasOwnProperty("isPrototypeOf")===false){return false}return true}p.isPlainObject=isPlainObject},467:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});function _interopDefault(e){return e&&typeof e==="object"&&"default"in e?e["default"]:e}var d=_interopDefault(a(2781));var t=_interopDefault(a(3685));var r=_interopDefault(a(7310));var s=_interopDefault(a(8665));var i=_interopDefault(a(5687));var o=_interopDefault(a(9796));const n=d.Readable;const l=Symbol("buffer");const m=Symbol("type");class Blob{constructor(){this[m]="";const e=arguments[0];const p=arguments[1];const a=[];let d=0;if(e){const p=e;const t=Number(p.length);for(let e=0;e1&&arguments[1]!==undefined?arguments[1]:{},t=a.size;let r=t===undefined?0:t;var s=a.timeout;let i=s===undefined?0:s;if(e==null){e=null}else if(isURLSearchParams(e)){e=Buffer.from(e.toString())}else if(isBlob(e));else if(Buffer.isBuffer(e));else if(Object.prototype.toString.call(e)==="[object ArrayBuffer]"){e=Buffer.from(e)}else if(ArrayBuffer.isView(e)){e=Buffer.from(e.buffer,e.byteOffset,e.byteLength)}else if(e instanceof d);else{e=Buffer.from(String(e))}this[c]={body:e,disturbed:false,error:null};this.size=r;this.timeout=i;if(e instanceof d){e.on("error",(function(e){const a=e.name==="AbortError"?e:new FetchError(`Invalid response body while trying to fetch ${p.url}: ${e.message}`,"system",e);p[c].error=a}))}}Body.prototype={get body(){return this[c].body},get bodyUsed(){return this[c].disturbed},arrayBuffer(){return consumeBody.call(this).then((function(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}))},blob(){let e=this.headers&&this.headers.get("content-type")||"";return consumeBody.call(this).then((function(p){return Object.assign(new Blob([],{type:e.toLowerCase()}),{[l]:p})}))},json(){var e=this;return consumeBody.call(this).then((function(p){try{return JSON.parse(p.toString())}catch(p){return Body.Promise.reject(new FetchError(`invalid json response body at ${e.url} reason: ${p.message}`,"invalid-json"))}}))},text(){return consumeBody.call(this).then((function(e){return e.toString()}))},buffer(){return consumeBody.call(this)},textConverted(){var e=this;return consumeBody.call(this).then((function(p){return convertBody(p,e.headers)}))}};Object.defineProperties(Body.prototype,{body:{enumerable:true},bodyUsed:{enumerable:true},arrayBuffer:{enumerable:true},blob:{enumerable:true},json:{enumerable:true},text:{enumerable:true}});Body.mixIn=function(e){for(const p of Object.getOwnPropertyNames(Body.prototype)){if(!(p in e)){const a=Object.getOwnPropertyDescriptor(Body.prototype,p);Object.defineProperty(e,p,a)}}};function consumeBody(){var e=this;if(this[c].disturbed){return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`))}this[c].disturbed=true;if(this[c].error){return Body.Promise.reject(this[c].error)}let p=this.body;if(p===null){return Body.Promise.resolve(Buffer.alloc(0))}if(isBlob(p)){p=p.stream()}if(Buffer.isBuffer(p)){return Body.Promise.resolve(p)}if(!(p instanceof d)){return Body.Promise.resolve(Buffer.alloc(0))}let a=[];let t=0;let r=false;return new Body.Promise((function(d,s){let i;if(e.timeout){i=setTimeout((function(){r=true;s(new FetchError(`Response timeout while trying to fetch ${e.url} (over ${e.timeout}ms)`,"body-timeout"))}),e.timeout)}p.on("error",(function(p){if(p.name==="AbortError"){r=true;s(p)}else{s(new FetchError(`Invalid response body while trying to fetch ${e.url}: ${p.message}`,"system",p))}}));p.on("data",(function(p){if(r||p===null){return}if(e.size&&t+p.length>e.size){r=true;s(new FetchError(`content size at ${e.url} over limit: ${e.size}`,"max-size"));return}t+=p.length;a.push(p)}));p.on("end",(function(){if(r){return}clearTimeout(i);try{d(Buffer.concat(a,t))}catch(p){s(new FetchError(`Could not create Buffer from response body for ${e.url}: ${p.message}`,"system",p))}}))}))}function convertBody(e,p){if(typeof u!=="function"){throw new Error("The package `encoding` must be installed to use the textConverted() function")}const a=p.get("content-type");let d="utf-8";let t,r;if(a){t=/charset=([^;]*)/i.exec(a)}r=e.slice(0,1024).toString();if(!t&&r){t=/0&&arguments[0]!==undefined?arguments[0]:undefined;this[w]=Object.create(null);if(e instanceof Headers){const p=e.raw();const a=Object.keys(p);for(const e of a){for(const a of p[e]){this.append(e,a)}}return}if(e==null);else if(typeof e==="object"){const p=e[Symbol.iterator];if(p!=null){if(typeof p!=="function"){throw new TypeError("Header pairs must be iterable")}const a=[];for(const p of e){if(typeof p!=="object"||typeof p[Symbol.iterator]!=="function"){throw new TypeError("Each header pair must be iterable")}a.push(Array.from(p))}for(const e of a){if(e.length!==2){throw new TypeError("Each header pair must be a name/value tuple")}this.append(e[0],e[1])}}else{for(const p of Object.keys(e)){const a=e[p];this.append(p,a)}}}else{throw new TypeError("Provided initializer must be an object")}}get(e){e=`${e}`;validateName(e);const p=find(this[w],e);if(p===undefined){return null}return this[w][p].join(", ")}forEach(e){let p=arguments.length>1&&arguments[1]!==undefined?arguments[1]:undefined;let a=getHeaders(this);let d=0;while(d1&&arguments[1]!==undefined?arguments[1]:"key+value";const a=Object.keys(e[w]).sort();return a.map(p==="key"?function(e){return e.toLowerCase()}:p==="value"?function(p){return e[w][p].join(", ")}:function(p){return[p.toLowerCase(),e[w][p].join(", ")]})}const _=Symbol("internal");function createHeadersIterator(e,p){const a=Object.create(T);a[_]={target:e,kind:p,index:0};return a}const T=Object.setPrototypeOf({next(){if(!this||Object.getPrototypeOf(this)!==T){throw new TypeError("Value of `this` is not a HeadersIterator")}var e=this[_];const p=e.target,a=e.kind,d=e.index;const t=getHeaders(p,a);const r=t.length;if(d>=r){return{value:undefined,done:true}}this[_].index=d+1;return{value:t[d],done:false}}},Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));Object.defineProperty(T,Symbol.toStringTag,{value:"HeadersIterator",writable:false,enumerable:false,configurable:true});function exportNodeCompatibleHeaders(e){const p=Object.assign({__proto__:null},e[w]);const a=find(e[w],"Host");if(a!==undefined){p[a]=p[a][0]}return p}function createHeadersLenient(e){const p=new Headers;for(const a of Object.keys(e)){if(h.test(a)){continue}if(Array.isArray(e[a])){for(const d of e[a]){if(g.test(d)){continue}if(p[w][a]===undefined){p[w][a]=[d]}else{p[w][a].push(d)}}}else if(!g.test(e[a])){p[w][a]=[e[a]]}}return p}const E=Symbol("Response internals");const b=t.STATUS_CODES;class Response{constructor(){let e=arguments.length>0&&arguments[0]!==undefined?arguments[0]:null;let p=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};Body.call(this,e,p);const a=p.status||200;const d=new Headers(p.headers);if(e!=null&&!d.has("Content-Type")){const p=extractContentType(e);if(p){d.append("Content-Type",p)}}this[E]={url:p.url,status:a,statusText:p.statusText||b[a],headers:d,counter:p.counter}}get url(){return this[E].url||""}get status(){return this[E].status}get ok(){return this[E].status>=200&&this[E].status<300}get redirected(){return this[E].counter>0}get statusText(){return this[E].statusText}get headers(){return this[E].headers}clone(){return new Response(clone(this),{url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected})}}Body.mixIn(Response.prototype);Object.defineProperties(Response.prototype,{url:{enumerable:true},status:{enumerable:true},ok:{enumerable:true},redirected:{enumerable:true},statusText:{enumerable:true},headers:{enumerable:true},clone:{enumerable:true}});Object.defineProperty(Response.prototype,Symbol.toStringTag,{value:"Response",writable:false,enumerable:false,configurable:true});const y=Symbol("Request internals");const S=r.URL||s.URL;const D=r.parse;const P=r.format;function parseURL(e){if(/^[a-zA-Z][a-zA-Z\d+\-.]*:/.exec(e)){e=new S(e).toString()}return D(e)}const O="destroy"in d.Readable.prototype;function isRequest(e){return typeof e==="object"&&typeof e[y]==="object"}function isAbortSignal(e){const p=e&&typeof e==="object"&&Object.getPrototypeOf(e);return!!(p&&p.constructor.name==="AbortSignal")}class Request{constructor(e){let p=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};let a;if(!isRequest(e)){if(e&&e.href){a=parseURL(e.href)}else{a=parseURL(`${e}`)}e={}}else{a=parseURL(e.url)}let d=p.method||e.method||"GET";d=d.toUpperCase();if((p.body!=null||isRequest(e)&&e.body!==null)&&(d==="GET"||d==="HEAD")){throw new TypeError("Request with GET/HEAD method cannot have body")}let t=p.body!=null?p.body:isRequest(e)&&e.body!==null?clone(e):null;Body.call(this,t,{timeout:p.timeout||e.timeout||0,size:p.size||e.size||0});const r=new Headers(p.headers||e.headers||{});if(t!=null&&!r.has("Content-Type")){const e=extractContentType(t);if(e){r.append("Content-Type",e)}}let s=isRequest(e)?e.signal:null;if("signal"in p)s=p.signal;if(s!=null&&!isAbortSignal(s)){throw new TypeError("Expected signal to be an instanceof AbortSignal")}this[y]={method:d,redirect:p.redirect||e.redirect||"follow",headers:r,parsedURL:a,signal:s};this.follow=p.follow!==undefined?p.follow:e.follow!==undefined?e.follow:20;this.compress=p.compress!==undefined?p.compress:e.compress!==undefined?e.compress:true;this.counter=p.counter||e.counter||0;this.agent=p.agent||e.agent}get method(){return this[y].method}get url(){return P(this[y].parsedURL)}get headers(){return this[y].headers}get redirect(){return this[y].redirect}get signal(){return this[y].signal}clone(){return new Request(this)}}Body.mixIn(Request.prototype);Object.defineProperty(Request.prototype,Symbol.toStringTag,{value:"Request",writable:false,enumerable:false,configurable:true});Object.defineProperties(Request.prototype,{method:{enumerable:true},url:{enumerable:true},headers:{enumerable:true},redirect:{enumerable:true},clone:{enumerable:true},signal:{enumerable:true}});function getNodeRequestOptions(e){const p=e[y].parsedURL;const a=new Headers(e[y].headers);if(!a.has("Accept")){a.set("Accept","*/*")}if(!p.protocol||!p.hostname){throw new TypeError("Only absolute URLs are supported")}if(!/^https?:$/.test(p.protocol)){throw new TypeError("Only HTTP(S) protocols are supported")}if(e.signal&&e.body instanceof d.Readable&&!O){throw new Error("Cancellation of streamed requests with AbortSignal is not supported in node < 8")}let t=null;if(e.body==null&&/^(POST|PUT)$/i.test(e.method)){t="0"}if(e.body!=null){const p=getTotalBytes(e);if(typeof p==="number"){t=String(p)}}if(t){a.set("Content-Length",t)}if(!a.has("User-Agent")){a.set("User-Agent","node-fetch/1.0 (+https://github.com/bitinn/node-fetch)")}if(e.compress&&!a.has("Accept-Encoding")){a.set("Accept-Encoding","gzip,deflate")}let r=e.agent;if(typeof r==="function"){r=r(p)}if(!a.has("Connection")&&!r){a.set("Connection","close")}return Object.assign({},p,{method:e.method,headers:exportNodeCompatibleHeaders(a),agent:r})}function AbortError(e){Error.call(this,e);this.type="aborted";this.message=e;Error.captureStackTrace(this,this.constructor)}AbortError.prototype=Object.create(Error.prototype);AbortError.prototype.constructor=AbortError;AbortError.prototype.name="AbortError";const A=r.URL||s.URL;const k=d.PassThrough;const N=function isDomainOrSubdomain(e,p){const a=new A(p).hostname;const d=new A(e).hostname;return a===d||a[a.length-d.length-1]==="."&&a.endsWith(d)};const R=function isSameProtocol(e,p){const a=new A(p).protocol;const d=new A(e).protocol;return a===d};function fetch(e,p){if(!fetch.Promise){throw new Error("native promise missing, set fetch.Promise to your favorite alternative")}Body.Promise=fetch.Promise;return new fetch.Promise((function(a,r){const s=new Request(e,p);const n=getNodeRequestOptions(s);const l=(n.protocol==="https:"?i:t).request;const m=s.signal;let u=null;const c=function abort(){let e=new AbortError("The user aborted a request.");r(e);if(s.body&&s.body instanceof d.Readable){destroyStream(s.body,e)}if(!u||!u.body)return;u.body.emit("error",e)};if(m&&m.aborted){c();return}const v=function abortAndFinalize(){c();finalize()};const h=l(n);let g;if(m){m.addEventListener("abort",v)}function finalize(){h.abort();if(m)m.removeEventListener("abort",v);clearTimeout(g)}if(s.timeout){h.once("socket",(function(e){g=setTimeout((function(){r(new FetchError(`network timeout at: ${s.url}`,"request-timeout"));finalize()}),s.timeout)}))}h.on("error",(function(e){r(new FetchError(`request to ${s.url} failed, reason: ${e.message}`,"system",e));if(u&&u.body){destroyStream(u.body,e)}finalize()}));fixResponseChunkedTransferBadEnding(h,(function(e){if(m&&m.aborted){return}if(u&&u.body){destroyStream(u.body,e)}}));if(parseInt(process.version.substring(1))<14){h.on("socket",(function(e){e.addListener("close",(function(p){const a=e.listenerCount("data")>0;if(u&&a&&!p&&!(m&&m.aborted)){const e=new Error("Premature close");e.code="ERR_STREAM_PREMATURE_CLOSE";u.body.emit("error",e)}}))}))}h.on("response",(function(e){clearTimeout(g);const p=createHeadersLenient(e.headers);if(fetch.isRedirect(e.statusCode)){const d=p.get("Location");let t=null;try{t=d===null?null:new A(d,s.url).toString()}catch(e){if(s.redirect!=="manual"){r(new FetchError(`uri requested responds with an invalid redirect URL: ${d}`,"invalid-redirect"));finalize();return}}switch(s.redirect){case"error":r(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${s.url}`,"no-redirect"));finalize();return;case"manual":if(t!==null){try{p.set("Location",t)}catch(e){r(e)}}break;case"follow":if(t===null){break}if(s.counter>=s.follow){r(new FetchError(`maximum redirect reached at: ${s.url}`,"max-redirect"));finalize();return}const d={headers:new Headers(s.headers),follow:s.follow,counter:s.counter+1,agent:s.agent,compress:s.compress,method:s.method,body:s.body,signal:s.signal,timeout:s.timeout,size:s.size};if(!N(s.url,t)||!R(s.url,t)){for(const e of["authorization","www-authenticate","cookie","cookie2"]){d.headers.delete(e)}}if(e.statusCode!==303&&s.body&&getTotalBytes(s)===null){r(new FetchError("Cannot follow redirect with body being a readable stream","unsupported-redirect"));finalize();return}if(e.statusCode===303||(e.statusCode===301||e.statusCode===302)&&s.method==="POST"){d.method="GET";d.body=undefined;d.headers.delete("content-length")}a(fetch(new Request(t,d)));finalize();return}}e.once("end",(function(){if(m)m.removeEventListener("abort",v)}));let d=e.pipe(new k);const t={url:s.url,status:e.statusCode,statusText:e.statusMessage,headers:p,size:s.size,timeout:s.timeout,counter:s.counter};const i=p.get("Content-Encoding");if(!s.compress||s.method==="HEAD"||i===null||e.statusCode===204||e.statusCode===304){u=new Response(d,t);a(u);return}const n={flush:o.Z_SYNC_FLUSH,finishFlush:o.Z_SYNC_FLUSH};if(i=="gzip"||i=="x-gzip"){d=d.pipe(o.createGunzip(n));u=new Response(d,t);a(u);return}if(i=="deflate"||i=="x-deflate"){const p=e.pipe(new k);p.once("data",(function(e){if((e[0]&15)===8){d=d.pipe(o.createInflate())}else{d=d.pipe(o.createInflateRaw())}u=new Response(d,t);a(u)}));p.on("end",(function(){if(!u){u=new Response(d,t);a(u)}}));return}if(i=="br"&&typeof o.createBrotliDecompress==="function"){d=d.pipe(o.createBrotliDecompress());u=new Response(d,t);a(u);return}u=new Response(d,t);a(u)}));writeToStream(h,s)}))}function fixResponseChunkedTransferBadEnding(e,p){let a;e.on("socket",(function(e){a=e}));e.on("response",(function(e){const d=e.headers;if(d["transfer-encoding"]==="chunked"&&!d["content-length"]){e.once("close",(function(e){const d=a&&a.listenerCount("data")>0;if(d&&!e){const e=new Error("Premature close");e.code="ERR_STREAM_PREMATURE_CLOSE";p(e)}}))}}))}function destroyStream(e,p){if(e.destroy){e.destroy(p)}else{e.emit("error",p);e.end()}}fetch.isRedirect=function(e){return e===301||e===302||e===303||e===307||e===308};fetch.Promise=global.Promise;e.exports=p=fetch;Object.defineProperty(p,"__esModule",{value:true});p["default"]=p;p.Headers=Headers;p.Request=Request;p.Response=Response;p.FetchError=FetchError},1223:(e,p,a)=>{var d=a(2940);e.exports=d(once);e.exports.strict=d(onceStrict);once.proto=once((function(){Object.defineProperty(Function.prototype,"once",{value:function(){return once(this)},configurable:true});Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return onceStrict(this)},configurable:true})}));function once(e){var f=function(){if(f.called)return f.value;f.called=true;return f.value=e.apply(this,arguments)};f.called=false;return f}function onceStrict(e){var f=function(){if(f.called)throw new Error(f.onceError);f.called=true;return f.value=e.apply(this,arguments)};var p=e.name||"Function wrapped with `once`";f.onceError=p+" shouldn't be called more than once";f.called=false;return f}},4256:(e,p,a)=>{var d=a(5477);var t=a(2020);var r={TRANSITIONAL:0,NONTRANSITIONAL:1};function normalize(e){return e.split("\0").map((function(e){return e.normalize("NFC")})).join("\0")}function findStatus(e){var p=0;var a=t.length-1;while(p<=a){var d=Math.floor((p+a)/2);var r=t[d];if(r[0][0]<=e&&r[0][1]>=e){return r}else if(r[0][0]>e){a=d-1}else{p=d+1}}return null}var s=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;function countSymbols(e){return e.replace(s,"_").length}function mapChars(e,p,a){var d=false;var t="";var s=countSymbols(e);for(var i=0;i253||i.length===0){r.error=true}for(var o=0;o63||s.length===0){r.error=true;break}}}if(r.error)return null;return s.join(".")};e.exports.toUnicode=function(e,p){var a=processing(e,p,r.NONTRANSITIONAL);return{domain:a.string,error:a.error}};e.exports.PROCESSING_OPTIONS=r},4294:(e,p,a)=>{e.exports=a(4219)},4219:(e,p,a)=>{var d=a(1808);var t=a(4404);var r=a(3685);var s=a(5687);var i=a(2361);var o=a(9491);var n=a(3837);p.httpOverHttp=httpOverHttp;p.httpsOverHttp=httpsOverHttp;p.httpOverHttps=httpOverHttps;p.httpsOverHttps=httpsOverHttps;function httpOverHttp(e){var p=new TunnelingAgent(e);p.request=r.request;return p}function httpsOverHttp(e){var p=new TunnelingAgent(e);p.request=r.request;p.createSocket=createSecureSocket;p.defaultPort=443;return p}function httpOverHttps(e){var p=new TunnelingAgent(e);p.request=s.request;return p}function httpsOverHttps(e){var p=new TunnelingAgent(e);p.request=s.request;p.createSocket=createSecureSocket;p.defaultPort=443;return p}function TunnelingAgent(e){var p=this;p.options=e||{};p.proxyOptions=p.options.proxy||{};p.maxSockets=p.options.maxSockets||r.Agent.defaultMaxSockets;p.requests=[];p.sockets=[];p.on("free",(function onFree(e,a,d,t){var r=toOptions(a,d,t);for(var s=0,i=p.requests.length;s=this.maxSockets){t.requests.push(r);return}t.createSocket(r,(function(p){p.on("free",onFree);p.on("close",onCloseOrRemove);p.on("agentRemove",onCloseOrRemove);e.onSocket(p);function onFree(){t.emit("free",p,r)}function onCloseOrRemove(e){t.removeSocket(p);p.removeListener("free",onFree);p.removeListener("close",onCloseOrRemove);p.removeListener("agentRemove",onCloseOrRemove)}}))};TunnelingAgent.prototype.createSocket=function createSocket(e,p){var a=this;var d={};a.sockets.push(d);var t=mergeOptions({},a.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:false,headers:{host:e.host+":"+e.port}});if(e.localAddress){t.localAddress=e.localAddress}if(t.proxyAuth){t.headers=t.headers||{};t.headers["Proxy-Authorization"]="Basic "+new Buffer(t.proxyAuth).toString("base64")}l("making CONNECT request");var r=a.request(t);r.useChunkedEncodingByDefault=false;r.once("response",onResponse);r.once("upgrade",onUpgrade);r.once("connect",onConnect);r.once("error",onError);r.end();function onResponse(e){e.upgrade=true}function onUpgrade(e,p,a){process.nextTick((function(){onConnect(e,p,a)}))}function onConnect(t,s,i){r.removeAllListeners();s.removeAllListeners();if(t.statusCode!==200){l("tunneling socket could not be established, statusCode=%d",t.statusCode);s.destroy();var o=new Error("tunneling socket could not be established, "+"statusCode="+t.statusCode);o.code="ECONNRESET";e.request.emit("error",o);a.removeSocket(d);return}if(i.length>0){l("got illegal response body from proxy");s.destroy();var o=new Error("got illegal response body from proxy");o.code="ECONNRESET";e.request.emit("error",o);a.removeSocket(d);return}l("tunneling connection has established");a.sockets[a.sockets.indexOf(d)]=s;return p(s)}function onError(p){r.removeAllListeners();l("tunneling socket could not be established, cause=%s\n",p.message,p.stack);var t=new Error("tunneling socket could not be established, "+"cause="+p.message);t.code="ECONNRESET";e.request.emit("error",t);a.removeSocket(d)}};TunnelingAgent.prototype.removeSocket=function removeSocket(e){var p=this.sockets.indexOf(e);if(p===-1){return}this.sockets.splice(p,1);var a=this.requests.shift();if(a){this.createSocket(a,(function(e){a.request.onSocket(e)}))}};function createSecureSocket(e,p){var a=this;TunnelingAgent.prototype.createSocket.call(a,e,(function(d){var r=e.request.getHeader("host");var s=mergeOptions({},a.options,{socket:d,servername:r?r.replace(/:.*$/,""):e.host});var i=t.connect(0,s);a.sockets[a.sockets.indexOf(d)]=i;p(i)}))}function toOptions(e,p,a){if(typeof e==="string"){return{host:e,port:p,localAddress:a}}return e}function mergeOptions(e){for(var p=1,a=arguments.length;p{Object.defineProperty(p,"__esModule",{value:true});function getUserAgent(){if(typeof navigator==="object"&&"userAgent"in navigator){return navigator.userAgent}if(typeof process==="object"&&"version"in process){return`Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`}return""}p.getUserAgent=getUserAgent},5840:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});Object.defineProperty(p,"v1",{enumerable:true,get:function(){return d.default}});Object.defineProperty(p,"v3",{enumerable:true,get:function(){return t.default}});Object.defineProperty(p,"v4",{enumerable:true,get:function(){return r.default}});Object.defineProperty(p,"v5",{enumerable:true,get:function(){return s.default}});Object.defineProperty(p,"NIL",{enumerable:true,get:function(){return i.default}});Object.defineProperty(p,"version",{enumerable:true,get:function(){return o.default}});Object.defineProperty(p,"validate",{enumerable:true,get:function(){return n.default}});Object.defineProperty(p,"stringify",{enumerable:true,get:function(){return l.default}});Object.defineProperty(p,"parse",{enumerable:true,get:function(){return m.default}});var d=_interopRequireDefault(a(8628));var t=_interopRequireDefault(a(6409));var r=_interopRequireDefault(a(5122));var s=_interopRequireDefault(a(9120));var i=_interopRequireDefault(a(5332));var o=_interopRequireDefault(a(1595));var n=_interopRequireDefault(a(6900));var l=_interopRequireDefault(a(8950));var m=_interopRequireDefault(a(2746));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}},4569:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});p["default"]=void 0;var d=_interopRequireDefault(a(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function md5(e){if(Array.isArray(e)){e=Buffer.from(e)}else if(typeof e==="string"){e=Buffer.from(e,"utf8")}return d.default.createHash("md5").update(e).digest()}var t=md5;p["default"]=t},5332:(e,p)=>{Object.defineProperty(p,"__esModule",{value:true});p["default"]=void 0;var a="00000000-0000-0000-0000-000000000000";p["default"]=a},2746:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});p["default"]=void 0;var d=_interopRequireDefault(a(6900));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function parse(e){if(!(0,d.default)(e)){throw TypeError("Invalid UUID")}let p;const a=new Uint8Array(16);a[0]=(p=parseInt(e.slice(0,8),16))>>>24;a[1]=p>>>16&255;a[2]=p>>>8&255;a[3]=p&255;a[4]=(p=parseInt(e.slice(9,13),16))>>>8;a[5]=p&255;a[6]=(p=parseInt(e.slice(14,18),16))>>>8;a[7]=p&255;a[8]=(p=parseInt(e.slice(19,23),16))>>>8;a[9]=p&255;a[10]=(p=parseInt(e.slice(24,36),16))/1099511627776&255;a[11]=p/4294967296&255;a[12]=p>>>24&255;a[13]=p>>>16&255;a[14]=p>>>8&255;a[15]=p&255;return a}var t=parse;p["default"]=t},814:(e,p)=>{Object.defineProperty(p,"__esModule",{value:true});p["default"]=void 0;var a=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;p["default"]=a},807:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});p["default"]=rng;var d=_interopRequireDefault(a(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const t=new Uint8Array(256);let r=t.length;function rng(){if(r>t.length-16){d.default.randomFillSync(t);r=0}return t.slice(r,r+=16)}},5274:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});p["default"]=void 0;var d=_interopRequireDefault(a(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function sha1(e){if(Array.isArray(e)){e=Buffer.from(e)}else if(typeof e==="string"){e=Buffer.from(e,"utf8")}return d.default.createHash("sha1").update(e).digest()}var t=sha1;p["default"]=t},8950:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});p["default"]=void 0;var d=_interopRequireDefault(a(6900));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const t=[];for(let e=0;e<256;++e){t.push((e+256).toString(16).substr(1))}function stringify(e,p=0){const a=(t[e[p+0]]+t[e[p+1]]+t[e[p+2]]+t[e[p+3]]+"-"+t[e[p+4]]+t[e[p+5]]+"-"+t[e[p+6]]+t[e[p+7]]+"-"+t[e[p+8]]+t[e[p+9]]+"-"+t[e[p+10]]+t[e[p+11]]+t[e[p+12]]+t[e[p+13]]+t[e[p+14]]+t[e[p+15]]).toLowerCase();if(!(0,d.default)(a)){throw TypeError("Stringified UUID is invalid")}return a}var r=stringify;p["default"]=r},8628:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});p["default"]=void 0;var d=_interopRequireDefault(a(807));var t=_interopRequireDefault(a(8950));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let r;let s;let i=0;let o=0;function v1(e,p,a){let n=p&&a||0;const l=p||new Array(16);e=e||{};let m=e.node||r;let u=e.clockseq!==undefined?e.clockseq:s;if(m==null||u==null){const p=e.random||(e.rng||d.default)();if(m==null){m=r=[p[0]|1,p[1],p[2],p[3],p[4],p[5]]}if(u==null){u=s=(p[6]<<8|p[7])&16383}}let c=e.msecs!==undefined?e.msecs:Date.now();let v=e.nsecs!==undefined?e.nsecs:o+1;const h=c-i+(v-o)/1e4;if(h<0&&e.clockseq===undefined){u=u+1&16383}if((h<0||c>i)&&e.nsecs===undefined){v=0}if(v>=1e4){throw new Error("uuid.v1(): Can't create more than 10M uuids/sec")}i=c;o=v;s=u;c+=122192928e5;const g=((c&268435455)*1e4+v)%4294967296;l[n++]=g>>>24&255;l[n++]=g>>>16&255;l[n++]=g>>>8&255;l[n++]=g&255;const w=c/4294967296*1e4&268435455;l[n++]=w>>>8&255;l[n++]=w&255;l[n++]=w>>>24&15|16;l[n++]=w>>>16&255;l[n++]=u>>>8|128;l[n++]=u&255;for(let e=0;e<6;++e){l[n+e]=m[e]}return p||(0,t.default)(l)}var n=v1;p["default"]=n},6409:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});p["default"]=void 0;var d=_interopRequireDefault(a(5998));var t=_interopRequireDefault(a(4569));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const r=(0,d.default)("v3",48,t.default);var s=r;p["default"]=s},5998:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});p["default"]=_default;p.URL=p.DNS=void 0;var d=_interopRequireDefault(a(8950));var t=_interopRequireDefault(a(2746));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function stringToBytes(e){e=unescape(encodeURIComponent(e));const p=[];for(let a=0;a{Object.defineProperty(p,"__esModule",{value:true});p["default"]=void 0;var d=_interopRequireDefault(a(807));var t=_interopRequireDefault(a(8950));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function v4(e,p,a){e=e||{};const r=e.random||(e.rng||d.default)();r[6]=r[6]&15|64;r[8]=r[8]&63|128;if(p){a=a||0;for(let e=0;e<16;++e){p[a+e]=r[e]}return p}return(0,t.default)(r)}var r=v4;p["default"]=r},9120:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});p["default"]=void 0;var d=_interopRequireDefault(a(5998));var t=_interopRequireDefault(a(5274));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const r=(0,d.default)("v5",80,t.default);var s=r;p["default"]=s},6900:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});p["default"]=void 0;var d=_interopRequireDefault(a(814));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function validate(e){return typeof e==="string"&&d.default.test(e)}var t=validate;p["default"]=t},1595:(e,p,a)=>{Object.defineProperty(p,"__esModule",{value:true});p["default"]=void 0;var d=_interopRequireDefault(a(6900));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function version(e){if(!(0,d.default)(e)){throw TypeError("Invalid UUID")}return parseInt(e.substr(14,1),16)}var t=version;p["default"]=t},4886:e=>{var p={};e.exports=p;function sign(e){return e<0?-1:1}function evenRound(e){if(e%1===.5&&(e&1)===0){return Math.floor(e)}else{return Math.round(e)}}function createNumberConversion(e,p){if(!p.unsigned){--e}const a=p.unsigned?0:-Math.pow(2,e);const d=Math.pow(2,e)-1;const t=p.moduloBitLength?Math.pow(2,p.moduloBitLength):Math.pow(2,e);const r=p.moduloBitLength?Math.pow(2,p.moduloBitLength-1):Math.pow(2,e-1);return function(e,s){if(!s)s={};let i=+e;if(s.enforceRange){if(!Number.isFinite(i)){throw new TypeError("Argument is not a finite number")}i=sign(i)*Math.floor(Math.abs(i));if(id){throw new TypeError("Argument is not in byte range")}return i}if(!isNaN(i)&&s.clamp){i=evenRound(i);if(i d)i=d;return i}if(!Number.isFinite(i)||i===0){return 0}i=sign(i)*Math.floor(Math.abs(i));i=i%t;if(!p.unsigned&&i>=r){return i-t}else if(p.unsigned){if(i<0){i+=t}else if(i===-0){return 0}}return i}}p["void"]=function(){return undefined};p["boolean"]=function(e){return!!e};p["byte"]=createNumberConversion(8,{unsigned:false});p["octet"]=createNumberConversion(8,{unsigned:true});p["short"]=createNumberConversion(16,{unsigned:false});p["unsigned short"]=createNumberConversion(16,{unsigned:true});p["long"]=createNumberConversion(32,{unsigned:false});p["unsigned long"]=createNumberConversion(32,{unsigned:true});p["long long"]=createNumberConversion(32,{unsigned:false,moduloBitLength:64});p["unsigned long long"]=createNumberConversion(32,{unsigned:true,moduloBitLength:64});p["double"]=function(e){const p=+e;if(!Number.isFinite(p)){throw new TypeError("Argument is not a finite floating-point value")}return p};p["unrestricted double"]=function(e){const p=+e;if(isNaN(p)){throw new TypeError("Argument is NaN")}return p};p["float"]=p["double"];p["unrestricted float"]=p["unrestricted double"];p["DOMString"]=function(e,p){if(!p)p={};if(p.treatNullAsEmptyString&&e===null){return""}return String(e)};p["ByteString"]=function(e,p){const a=String(e);let d=undefined;for(let e=0;(d=a.codePointAt(e))!==undefined;++e){if(d>255){throw new TypeError("Argument is not a valid bytestring")}}return a};p["USVString"]=function(e){const p=String(e);const a=p.length;const d=[];for(let e=0;e 57343){d.push(String.fromCodePoint(t))}else if(56320<=t&&t<=57343){d.push(String.fromCodePoint(65533))}else{if(e===a-1){d.push(String.fromCodePoint(65533))}else{const a=p.charCodeAt(e+1);if(56320<=a&&a<=57343){const p=t&1023;const r=a&1023;d.push(String.fromCodePoint((2<<15)+(2<<9)*p+r));++e}else{d.push(String.fromCodePoint(65533))}}}}return d.join("")};p["Date"]=function(e,p){if(!(e instanceof Date)){throw new TypeError("Argument is not a Date object")}if(isNaN(e)){return undefined}return e};p["RegExp"]=function(e,p){if(!(e instanceof RegExp)){e=new RegExp(e)}return e}},7537:(e,p,a)=>{const d=a(2158);p.implementation=class URLImpl{constructor(e){const p=e[0];const a=e[1];let t=null;if(a!==undefined){t=d.basicURLParse(a);if(t==="failure"){throw new TypeError("Invalid base URL")}}const r=d.basicURLParse(p,{baseURL:t});if(r==="failure"){throw new TypeError("Invalid URL")}this._url=r}get href(){return d.serializeURL(this._url)}set href(e){const p=d.basicURLParse(e);if(p==="failure"){throw new TypeError("Invalid URL")}this._url=p}get origin(){return d.serializeURLOrigin(this._url)}get protocol(){return this._url.scheme+":"}set protocol(e){d.basicURLParse(e+":",{url:this._url,stateOverride:"scheme start"})}get username(){return this._url.username}set username(e){if(d.cannotHaveAUsernamePasswordPort(this._url)){return}d.setTheUsername(this._url,e)}get password(){return this._url.password}set password(e){if(d.cannotHaveAUsernamePasswordPort(this._url)){return}d.setThePassword(this._url,e)}get host(){const e=this._url;if(e.host===null){return""}if(e.port===null){return d.serializeHost(e.host)}return d.serializeHost(e.host)+":"+d.serializeInteger(e.port)}set host(e){if(this._url.cannotBeABaseURL){return}d.basicURLParse(e,{url:this._url,stateOverride:"host"})}get hostname(){if(this._url.host===null){return""}return d.serializeHost(this._url.host)}set hostname(e){if(this._url.cannotBeABaseURL){return}d.basicURLParse(e,{url:this._url,stateOverride:"hostname"})}get port(){if(this._url.port===null){return""}return d.serializeInteger(this._url.port)}set port(e){if(d.cannotHaveAUsernamePasswordPort(this._url)){return}if(e===""){this._url.port=null}else{d.basicURLParse(e,{url:this._url,stateOverride:"port"})}}get pathname(){if(this._url.cannotBeABaseURL){return this._url.path[0]}if(this._url.path.length===0){return""}return"/"+this._url.path.join("/")}set pathname(e){if(this._url.cannotBeABaseURL){return}this._url.path=[];d.basicURLParse(e,{url:this._url,stateOverride:"path start"})}get search(){if(this._url.query===null||this._url.query===""){return""}return"?"+this._url.query}set search(e){const p=this._url;if(e===""){p.query=null;return}const a=e[0]==="?"?e.substring(1):e;p.query="";d.basicURLParse(a,{url:p,stateOverride:"query"})}get hash(){if(this._url.fragment===null||this._url.fragment===""){return""}return"#"+this._url.fragment}set hash(e){if(e===""){this._url.fragment=null;return}const p=e[0]==="#"?e.substring(1):e;this._url.fragment="";d.basicURLParse(p,{url:this._url,stateOverride:"fragment"})}toJSON(){return this.href}}},3394:(e,p,a)=>{const d=a(4886);const t=a(3185);const r=a(7537);const s=t.implSymbol;function URL(p){if(!this||this[s]||!(this instanceof URL)){throw new TypeError("Failed to construct 'URL': Please use the 'new' operator, this DOM object constructor cannot be called as a function.")}if(arguments.length<1){throw new TypeError("Failed to construct 'URL': 1 argument required, but only "+arguments.length+" present.")}const a=[];for(let e=0;e{p.URL=a(3394)["interface"];p.serializeURL=a(2158).serializeURL;p.serializeURLOrigin=a(2158).serializeURLOrigin;p.basicURLParse=a(2158).basicURLParse;p.setTheUsername=a(2158).setTheUsername;p.setThePassword=a(2158).setThePassword;p.serializeHost=a(2158).serializeHost;p.serializeInteger=a(2158).serializeInteger;p.parseURL=a(2158).parseURL},2158:(e,p,a)=>{const d=a(5477);const t=a(4256);const r={ftp:21,file:null,gopher:70,http:80,https:443,ws:80,wss:443};const s=Symbol("failure");function countSymbols(e){return d.ucs2.decode(e).length}function at(e,p){const a=e[p];return isNaN(a)?undefined:String.fromCodePoint(a)}function isASCIIDigit(e){return e>=48&&e<=57}function isASCIIAlpha(e){return e>=65&&e<=90||e>=97&&e<=122}function isASCIIAlphanumeric(e){return isASCIIAlpha(e)||isASCIIDigit(e)}function isASCIIHex(e){return isASCIIDigit(e)||e>=65&&e<=70||e>=97&&e<=102}function isSingleDot(e){return e==="."||e.toLowerCase()==="%2e"}function isDoubleDot(e){e=e.toLowerCase();return e===".."||e==="%2e."||e===".%2e"||e==="%2e%2e"}function isWindowsDriveLetterCodePoints(e,p){return isASCIIAlpha(e)&&(p===58||p===124)}function isWindowsDriveLetterString(e){return e.length===2&&isASCIIAlpha(e.codePointAt(0))&&(e[1]===":"||e[1]==="|")}function isNormalizedWindowsDriveLetterString(e){return e.length===2&&isASCIIAlpha(e.codePointAt(0))&&e[1]===":"}function containsForbiddenHostCodePoint(e){return e.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|%|\/|:|\?|@|\[|\\|\]/)!==-1}function containsForbiddenHostCodePointExcludingPercent(e){return e.search(/\u0000|\u0009|\u000A|\u000D|\u0020|#|\/|:|\?|@|\[|\\|\]/)!==-1}function isSpecialScheme(e){return r[e]!==undefined}function isSpecial(e){return isSpecialScheme(e.scheme)}function defaultPort(e){return r[e]}function percentEncode(e){let p=e.toString(16).toUpperCase();if(p.length===1){p="0"+p}return"%"+p}function utf8PercentEncode(e){const p=new Buffer(e);let a="";for(let e=0;e126}const i=new Set([32,34,35,60,62,63,96,123,125]);function isPathPercentEncode(e){return isC0ControlPercentEncode(e)||i.has(e)}const o=new Set([47,58,59,61,64,91,92,93,94,124]);function isUserinfoPercentEncode(e){return isPathPercentEncode(e)||o.has(e)}function percentEncodeChar(e,p){const a=String.fromCodePoint(e);if(p(e)){return utf8PercentEncode(a)}return a}function parseIPv4Number(e){let p=10;if(e.length>=2&&e.charAt(0)==="0"&&e.charAt(1).toLowerCase()==="x"){e=e.substring(2);p=16}else if(e.length>=2&&e.charAt(0)==="0"){e=e.substring(1);p=8}if(e===""){return 0}const a=p===10?/[^0-9]/:p===16?/[^0-9A-Fa-f]/:/[^0-7]/;if(a.test(e)){return s}return parseInt(e,p)}function parseIPv4(e){const p=e.split(".");if(p[p.length-1]===""){if(p.length>1){p.pop()}}if(p.length>4){return e}const a=[];for(const d of p){if(d===""){return e}const p=parseIPv4Number(d);if(p===s){return e}a.push(p)}for(let e=0;e255){return s}}if(a[a.length-1]>=Math.pow(256,5-a.length)){return s}let d=a.pop();let t=0;for(const e of a){d+=e*Math.pow(256,3-t);++t}return d}function serializeIPv4(e){let p="";let a=e;for(let e=1;e<=4;++e){p=String(a%256)+p;if(e!==4){p="."+p}a=Math.floor(a/256)}return p}function parseIPv6(e){const p=[0,0,0,0,0,0,0,0];let a=0;let t=null;let r=0;e=d.ucs2.decode(e);if(e[r]===58){if(e[r+1]!==58){return s}r+=2;++a;t=a}while(r6){return s}let d=0;while(e[r]!==undefined){let t=null;if(d>0){if(e[r]===46&&d<4){++r}else{return s}}if(!isASCIIDigit(e[r])){return s}while(isASCIIDigit(e[r])){const p=parseInt(at(e,r));if(t===null){t=p}else if(t===0){return s}else{t=t*10+p}if(t>255){return s}++r}p[a]=p[a]*256+t;++d;if(d===2||d===4){++a}}if(d!==4){return s}break}else if(e[r]===58){++r;if(e[r]===undefined){return s}}else if(e[r]!==undefined){return s}p[a]=d;++a}if(t!==null){let e=a-t;a=7;while(a!==0&&e>0){const d=p[t+e-1];p[t+e-1]=p[a];p[a]=d;--a;--e}}else if(t===null&&a!==8){return s}return p}function serializeIPv6(e){let p="";const a=findLongestZeroSequence(e);const d=a.idx;let t=false;for(let a=0;a<=7;++a){if(t&&e[a]===0){continue}else if(t){t=false}if(d===a){const e=a===0?"::":":";p+=e;t=true;continue}p+=e[a].toString(16);if(a!==7){p+=":"}}return p}function parseHost(e,p){if(e[0]==="["){if(e[e.length-1]!=="]"){return s}return parseIPv6(e.substring(1,e.length-1))}if(!p){return parseOpaqueHost(e)}const a=utf8PercentDecode(e);const d=t.toASCII(a,false,t.PROCESSING_OPTIONS.NONTRANSITIONAL,false);if(d===null){return s}if(containsForbiddenHostCodePoint(d)){return s}const r=parseIPv4(d);if(typeof r==="number"||r===s){return r}return d}function parseOpaqueHost(e){if(containsForbiddenHostCodePointExcludingPercent(e)){return s}let p="";const a=d.ucs2.decode(e);for(let e=0;ea){p=d;a=t}d=null;t=0}else{if(d===null){d=r}++t}}if(t>a){p=d;a=t}return{idx:p,len:a}}function serializeHost(e){if(typeof e==="number"){return serializeIPv4(e)}if(e instanceof Array){return"["+serializeIPv6(e)+"]"}return e}function trimControlChars(e){return e.replace(/^[\u0000-\u001F\u0020]+|[\u0000-\u001F\u0020]+$/g,"")}function trimTabAndNewline(e){return e.replace(/\u0009|\u000A|\u000D/g,"")}function shortenPath(e){const p=e.path;if(p.length===0){return}if(e.scheme==="file"&&p.length===1&&isNormalizedWindowsDriveLetter(p[0])){return}p.pop()}function includesCredentials(e){return e.username!==""||e.password!==""}function cannotHaveAUsernamePasswordPort(e){return e.host===null||e.host===""||e.cannotBeABaseURL||e.scheme==="file"}function isNormalizedWindowsDriveLetter(e){return/^[A-Za-z]:$/.test(e)}function URLStateMachine(e,p,a,t,r){this.pointer=0;this.input=e;this.base=p||null;this.encodingOverride=a||"utf-8";this.stateOverride=r;this.url=t;this.failure=false;this.parseError=false;if(!this.url){this.url={scheme:"",username:"",password:"",host:null,port:null,path:[],query:null,fragment:null,cannotBeABaseURL:false};const e=trimControlChars(this.input);if(e!==this.input){this.parseError=true}this.input=e}const i=trimTabAndNewline(this.input);if(i!==this.input){this.parseError=true}this.input=i;this.state=r||"scheme start";this.buffer="";this.atFlag=false;this.arrFlag=false;this.passwordTokenSeenFlag=false;this.input=d.ucs2.decode(this.input);for(;this.pointer<=this.input.length;++this.pointer){const e=this.input[this.pointer];const p=isNaN(e)?undefined:String.fromCodePoint(e);const a=this["parse "+this.state](e,p);if(!a){break}else if(a===s){this.failure=true;break}}}URLStateMachine.prototype["parse scheme start"]=function parseSchemeStart(e,p){if(isASCIIAlpha(e)){this.buffer+=p.toLowerCase();this.state="scheme"}else if(!this.stateOverride){this.state="no scheme";--this.pointer}else{this.parseError=true;return s}return true};URLStateMachine.prototype["parse scheme"]=function parseScheme(e,p){if(isASCIIAlphanumeric(e)||e===43||e===45||e===46){this.buffer+=p.toLowerCase()}else if(e===58){if(this.stateOverride){if(isSpecial(this.url)&&!isSpecialScheme(this.buffer)){return false}if(!isSpecial(this.url)&&isSpecialScheme(this.buffer)){return false}if((includesCredentials(this.url)||this.url.port!==null)&&this.buffer==="file"){return false}if(this.url.scheme==="file"&&(this.url.host===""||this.url.host===null)){return false}}this.url.scheme=this.buffer;this.buffer="";if(this.stateOverride){return false}if(this.url.scheme==="file"){if(this.input[this.pointer+1]!==47||this.input[this.pointer+2]!==47){this.parseError=true}this.state="file"}else if(isSpecial(this.url)&&this.base!==null&&this.base.scheme===this.url.scheme){this.state="special relative or authority"}else if(isSpecial(this.url)){this.state="special authority slashes"}else if(this.input[this.pointer+1]===47){this.state="path or authority";++this.pointer}else{this.url.cannotBeABaseURL=true;this.url.path.push("");this.state="cannot-be-a-base-URL path"}}else if(!this.stateOverride){this.buffer="";this.state="no scheme";this.pointer=-1}else{this.parseError=true;return s}return true};URLStateMachine.prototype["parse no scheme"]=function parseNoScheme(e){if(this.base===null||this.base.cannotBeABaseURL&&e!==35){return s}else if(this.base.cannotBeABaseURL&&e===35){this.url.scheme=this.base.scheme;this.url.path=this.base.path.slice();this.url.query=this.base.query;this.url.fragment="";this.url.cannotBeABaseURL=true;this.state="fragment"}else if(this.base.scheme==="file"){this.state="file";--this.pointer}else{this.state="relative";--this.pointer}return true};URLStateMachine.prototype["parse special relative or authority"]=function parseSpecialRelativeOrAuthority(e){if(e===47&&this.input[this.pointer+1]===47){this.state="special authority ignore slashes";++this.pointer}else{this.parseError=true;this.state="relative";--this.pointer}return true};URLStateMachine.prototype["parse path or authority"]=function parsePathOrAuthority(e){if(e===47){this.state="authority"}else{this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse relative"]=function parseRelative(e){this.url.scheme=this.base.scheme;if(isNaN(e)){this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.url.path=this.base.path.slice();this.url.query=this.base.query}else if(e===47){this.state="relative slash"}else if(e===63){this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.url.path=this.base.path.slice();this.url.query="";this.state="query"}else if(e===35){this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.url.path=this.base.path.slice();this.url.query=this.base.query;this.url.fragment="";this.state="fragment"}else if(isSpecial(this.url)&&e===92){this.parseError=true;this.state="relative slash"}else{this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.url.path=this.base.path.slice(0,this.base.path.length-1);this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse relative slash"]=function parseRelativeSlash(e){if(isSpecial(this.url)&&(e===47||e===92)){if(e===92){this.parseError=true}this.state="special authority ignore slashes"}else if(e===47){this.state="authority"}else{this.url.username=this.base.username;this.url.password=this.base.password;this.url.host=this.base.host;this.url.port=this.base.port;this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse special authority slashes"]=function parseSpecialAuthoritySlashes(e){if(e===47&&this.input[this.pointer+1]===47){this.state="special authority ignore slashes";++this.pointer}else{this.parseError=true;this.state="special authority ignore slashes";--this.pointer}return true};URLStateMachine.prototype["parse special authority ignore slashes"]=function parseSpecialAuthorityIgnoreSlashes(e){if(e!==47&&e!==92){this.state="authority";--this.pointer}else{this.parseError=true}return true};URLStateMachine.prototype["parse authority"]=function parseAuthority(e,p){if(e===64){this.parseError=true;if(this.atFlag){this.buffer="%40"+this.buffer}this.atFlag=true;const e=countSymbols(this.buffer);for(let p=0;pMath.pow(2,16)-1){this.parseError=true;return s}this.url.port=e===defaultPort(this.url.scheme)?null:e;this.buffer=""}if(this.stateOverride){return false}this.state="path start";--this.pointer}else{this.parseError=true;return s}return true};const n=new Set([47,92,63,35]);URLStateMachine.prototype["parse file"]=function parseFile(e){this.url.scheme="file";if(e===47||e===92){if(e===92){this.parseError=true}this.state="file slash"}else if(this.base!==null&&this.base.scheme==="file"){if(isNaN(e)){this.url.host=this.base.host;this.url.path=this.base.path.slice();this.url.query=this.base.query}else if(e===63){this.url.host=this.base.host;this.url.path=this.base.path.slice();this.url.query="";this.state="query"}else if(e===35){this.url.host=this.base.host;this.url.path=this.base.path.slice();this.url.query=this.base.query;this.url.fragment="";this.state="fragment"}else{if(this.input.length-this.pointer-1===0||!isWindowsDriveLetterCodePoints(e,this.input[this.pointer+1])||this.input.length-this.pointer-1>=2&&!n.has(this.input[this.pointer+2])){this.url.host=this.base.host;this.url.path=this.base.path.slice();shortenPath(this.url)}else{this.parseError=true}this.state="path";--this.pointer}}else{this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse file slash"]=function parseFileSlash(e){if(e===47||e===92){if(e===92){this.parseError=true}this.state="file host"}else{if(this.base!==null&&this.base.scheme==="file"){if(isNormalizedWindowsDriveLetterString(this.base.path[0])){this.url.path.push(this.base.path[0])}else{this.url.host=this.base.host}}this.state="path";--this.pointer}return true};URLStateMachine.prototype["parse file host"]=function parseFileHost(e,p){if(isNaN(e)||e===47||e===92||e===63||e===35){--this.pointer;if(!this.stateOverride&&isWindowsDriveLetterString(this.buffer)){this.parseError=true;this.state="path"}else if(this.buffer===""){this.url.host="";if(this.stateOverride){return false}this.state="path start"}else{let e=parseHost(this.buffer,isSpecial(this.url));if(e===s){return s}if(e==="localhost"){e=""}this.url.host=e;if(this.stateOverride){return false}this.buffer="";this.state="path start"}}else{this.buffer+=p}return true};URLStateMachine.prototype["parse path start"]=function parsePathStart(e){if(isSpecial(this.url)){if(e===92){this.parseError=true}this.state="path";if(e!==47&&e!==92){--this.pointer}}else if(!this.stateOverride&&e===63){this.url.query="";this.state="query"}else if(!this.stateOverride&&e===35){this.url.fragment="";this.state="fragment"}else if(e!==undefined){this.state="path";if(e!==47){--this.pointer}}return true};URLStateMachine.prototype["parse path"]=function parsePath(e){if(isNaN(e)||e===47||isSpecial(this.url)&&e===92||!this.stateOverride&&(e===63||e===35)){if(isSpecial(this.url)&&e===92){this.parseError=true}if(isDoubleDot(this.buffer)){shortenPath(this.url);if(e!==47&&!(isSpecial(this.url)&&e===92)){this.url.path.push("")}}else if(isSingleDot(this.buffer)&&e!==47&&!(isSpecial(this.url)&&e===92)){this.url.path.push("")}else if(!isSingleDot(this.buffer)){if(this.url.scheme==="file"&&this.url.path.length===0&&isWindowsDriveLetterString(this.buffer)){if(this.url.host!==""&&this.url.host!==null){this.parseError=true;this.url.host=""}this.buffer=this.buffer[0]+":"}this.url.path.push(this.buffer)}this.buffer="";if(this.url.scheme==="file"&&(e===undefined||e===63||e===35)){while(this.url.path.length>1&&this.url.path[0]===""){this.parseError=true;this.url.path.shift()}}if(e===63){this.url.query="";this.state="query"}if(e===35){this.url.fragment="";this.state="fragment"}}else{if(e===37&&(!isASCIIHex(this.input[this.pointer+1])||!isASCIIHex(this.input[this.pointer+2]))){this.parseError=true}this.buffer+=percentEncodeChar(e,isPathPercentEncode)}return true};URLStateMachine.prototype["parse cannot-be-a-base-URL path"]=function parseCannotBeABaseURLPath(e){if(e===63){this.url.query="";this.state="query"}else if(e===35){this.url.fragment="";this.state="fragment"}else{if(!isNaN(e)&&e!==37){this.parseError=true}if(e===37&&(!isASCIIHex(this.input[this.pointer+1])||!isASCIIHex(this.input[this.pointer+2]))){this.parseError=true}if(!isNaN(e)){this.url.path[0]=this.url.path[0]+percentEncodeChar(e,isC0ControlPercentEncode)}}return true};URLStateMachine.prototype["parse query"]=function parseQuery(e,p){if(isNaN(e)||!this.stateOverride&&e===35){if(!isSpecial(this.url)||this.url.scheme==="ws"||this.url.scheme==="wss"){this.encodingOverride="utf-8"}const p=new Buffer(this.buffer);for(let e=0;e126||p[e]===34||p[e]===35||p[e]===60||p[e]===62){this.url.query+=percentEncode(p[e])}else{this.url.query+=String.fromCodePoint(p[e])}}this.buffer="";if(e===35){this.url.fragment="";this.state="fragment"}}else{if(e===37&&(!isASCIIHex(this.input[this.pointer+1])||!isASCIIHex(this.input[this.pointer+2]))){this.parseError=true}this.buffer+=p}return true};URLStateMachine.prototype["parse fragment"]=function parseFragment(e){if(isNaN(e)){}else if(e===0){this.parseError=true}else{if(e===37&&(!isASCIIHex(this.input[this.pointer+1])||!isASCIIHex(this.input[this.pointer+2]))){this.parseError=true}this.url.fragment+=percentEncodeChar(e,isC0ControlPercentEncode)}return true};function serializeURL(e,p){let a=e.scheme+":";if(e.host!==null){a+="//";if(e.username!==""||e.password!==""){a+=e.username;if(e.password!==""){a+=":"+e.password}a+="@"}a+=serializeHost(e.host);if(e.port!==null){a+=":"+e.port}}else if(e.host===null&&e.scheme==="file"){a+="//"}if(e.cannotBeABaseURL){a+=e.path[0]}else{for(const p of e.path){a+="/"+p}}if(e.query!==null){a+="?"+e.query}if(!p&&e.fragment!==null){a+="#"+e.fragment}return a}function serializeOrigin(e){let p=e.scheme+"://";p+=serializeHost(e.host);if(e.port!==null){p+=":"+e.port}return p}e.exports.serializeURL=serializeURL;e.exports.serializeURLOrigin=function(p){switch(p.scheme){case"blob":try{return e.exports.serializeURLOrigin(e.exports.parseURL(p.path[0]))}catch(e){return"null"}case"ftp":case"gopher":case"http":case"https":case"ws":case"wss":return serializeOrigin({scheme:p.scheme,host:p.host,port:p.port});case"file":return"file://";default:return"null"}};e.exports.basicURLParse=function(e,p){if(p===undefined){p={}}const a=new URLStateMachine(e,p.baseURL,p.encodingOverride,p.url,p.stateOverride);if(a.failure){return"failure"}return a.url};e.exports.setTheUsername=function(e,p){e.username="";const a=d.ucs2.decode(p);for(let p=0;p{e.exports.mixin=function mixin(e,p){const a=Object.getOwnPropertyNames(p);for(let d=0;d{e.exports=wrappy;function wrappy(e,p){if(e&&p)return wrappy(e)(p);if(typeof e!=="function")throw new TypeError("need wrapper function");Object.keys(e).forEach((function(p){wrapper[p]=e[p]}));return wrapper;function wrapper(){var p=new Array(arguments.length);for(var a=0;a{module.exports=eval("require")("encoding")},9491:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("assert")},6113:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("crypto")},2361:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("events")},7147:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("fs")},3685:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("http")},5687:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("https")},1808:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("net")},2037:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("os")},1017:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("path")},5477:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("punycode")},2781:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("stream")},4404:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("tls")},7310:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("url")},3837:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("util")},9796:e=>{e.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("zlib")},2020:e=>{e.exports=JSON.parse('[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"],[[47,47],"disallowed_STD3_valid"],[[48,57],"valid"],[[58,64],"disallowed_STD3_valid"],[[65,65],"mapped",[97]],[[66,66],"mapped",[98]],[[67,67],"mapped",[99]],[[68,68],"mapped",[100]],[[69,69],"mapped",[101]],[[70,70],"mapped",[102]],[[71,71],"mapped",[103]],[[72,72],"mapped",[104]],[[73,73],"mapped",[105]],[[74,74],"mapped",[106]],[[75,75],"mapped",[107]],[[76,76],"mapped",[108]],[[77,77],"mapped",[109]],[[78,78],"mapped",[110]],[[79,79],"mapped",[111]],[[80,80],"mapped",[112]],[[81,81],"mapped",[113]],[[82,82],"mapped",[114]],[[83,83],"mapped",[115]],[[84,84],"mapped",[116]],[[85,85],"mapped",[117]],[[86,86],"mapped",[118]],[[87,87],"mapped",[119]],[[88,88],"mapped",[120]],[[89,89],"mapped",[121]],[[90,90],"mapped",[122]],[[91,96],"disallowed_STD3_valid"],[[97,122],"valid"],[[123,127],"disallowed_STD3_valid"],[[128,159],"disallowed"],[[160,160],"disallowed_STD3_mapped",[32]],[[161,167],"valid",[],"NV8"],[[168,168],"disallowed_STD3_mapped",[32,776]],[[169,169],"valid",[],"NV8"],[[170,170],"mapped",[97]],[[171,172],"valid",[],"NV8"],[[173,173],"ignored"],[[174,174],"valid",[],"NV8"],[[175,175],"disallowed_STD3_mapped",[32,772]],[[176,177],"valid",[],"NV8"],[[178,178],"mapped",[50]],[[179,179],"mapped",[51]],[[180,180],"disallowed_STD3_mapped",[32,769]],[[181,181],"mapped",[956]],[[182,182],"valid",[],"NV8"],[[183,183],"valid"],[[184,184],"disallowed_STD3_mapped",[32,807]],[[185,185],"mapped",[49]],[[186,186],"mapped",[111]],[[187,187],"valid",[],"NV8"],[[188,188],"mapped",[49,8260,52]],[[189,189],"mapped",[49,8260,50]],[[190,190],"mapped",[51,8260,52]],[[191,191],"valid",[],"NV8"],[[192,192],"mapped",[224]],[[193,193],"mapped",[225]],[[194,194],"mapped",[226]],[[195,195],"mapped",[227]],[[196,196],"mapped",[228]],[[197,197],"mapped",[229]],[[198,198],"mapped",[230]],[[199,199],"mapped",[231]],[[200,200],"mapped",[232]],[[201,201],"mapped",[233]],[[202,202],"mapped",[234]],[[203,203],"mapped",[235]],[[204,204],"mapped",[236]],[[205,205],"mapped",[237]],[[206,206],"mapped",[238]],[[207,207],"mapped",[239]],[[208,208],"mapped",[240]],[[209,209],"mapped",[241]],[[210,210],"mapped",[242]],[[211,211],"mapped",[243]],[[212,212],"mapped",[244]],[[213,213],"mapped",[245]],[[214,214],"mapped",[246]],[[215,215],"valid",[],"NV8"],[[216,216],"mapped",[248]],[[217,217],"mapped",[249]],[[218,218],"mapped",[250]],[[219,219],"mapped",[251]],[[220,220],"mapped",[252]],[[221,221],"mapped",[253]],[[222,222],"mapped",[254]],[[223,223],"deviation",[115,115]],[[224,246],"valid"],[[247,247],"valid",[],"NV8"],[[248,255],"valid"],[[256,256],"mapped",[257]],[[257,257],"valid"],[[258,258],"mapped",[259]],[[259,259],"valid"],[[260,260],"mapped",[261]],[[261,261],"valid"],[[262,262],"mapped",[263]],[[263,263],"valid"],[[264,264],"mapped",[265]],[[265,265],"valid"],[[266,266],"mapped",[267]],[[267,267],"valid"],[[268,268],"mapped",[269]],[[269,269],"valid"],[[270,270],"mapped",[271]],[[271,271],"valid"],[[272,272],"mapped",[273]],[[273,273],"valid"],[[274,274],"mapped",[275]],[[275,275],"valid"],[[276,276],"mapped",[277]],[[277,277],"valid"],[[278,278],"mapped",[279]],[[279,279],"valid"],[[280,280],"mapped",[281]],[[281,281],"valid"],[[282,282],"mapped",[283]],[[283,283],"valid"],[[284,284],"mapped",[285]],[[285,285],"valid"],[[286,286],"mapped",[287]],[[287,287],"valid"],[[288,288],"mapped",[289]],[[289,289],"valid"],[[290,290],"mapped",[291]],[[291,291],"valid"],[[292,292],"mapped",[293]],[[293,293],"valid"],[[294,294],"mapped",[295]],[[295,295],"valid"],[[296,296],"mapped",[297]],[[297,297],"valid"],[[298,298],"mapped",[299]],[[299,299],"valid"],[[300,300],"mapped",[301]],[[301,301],"valid"],[[302,302],"mapped",[303]],[[303,303],"valid"],[[304,304],"mapped",[105,775]],[[305,305],"valid"],[[306,307],"mapped",[105,106]],[[308,308],"mapped",[309]],[[309,309],"valid"],[[310,310],"mapped",[311]],[[311,312],"valid"],[[313,313],"mapped",[314]],[[314,314],"valid"],[[315,315],"mapped",[316]],[[316,316],"valid"],[[317,317],"mapped",[318]],[[318,318],"valid"],[[319,320],"mapped",[108,183]],[[321,321],"mapped",[322]],[[322,322],"valid"],[[323,323],"mapped",[324]],[[324,324],"valid"],[[325,325],"mapped",[326]],[[326,326],"valid"],[[327,327],"mapped",[328]],[[328,328],"valid"],[[329,329],"mapped",[700,110]],[[330,330],"mapped",[331]],[[331,331],"valid"],[[332,332],"mapped",[333]],[[333,333],"valid"],[[334,334],"mapped",[335]],[[335,335],"valid"],[[336,336],"mapped",[337]],[[337,337],"valid"],[[338,338],"mapped",[339]],[[339,339],"valid"],[[340,340],"mapped",[341]],[[341,341],"valid"],[[342,342],"mapped",[343]],[[343,343],"valid"],[[344,344],"mapped",[345]],[[345,345],"valid"],[[346,346],"mapped",[347]],[[347,347],"valid"],[[348,348],"mapped",[349]],[[349,349],"valid"],[[350,350],"mapped",[351]],[[351,351],"valid"],[[352,352],"mapped",[353]],[[353,353],"valid"],[[354,354],"mapped",[355]],[[355,355],"valid"],[[356,356],"mapped",[357]],[[357,357],"valid"],[[358,358],"mapped",[359]],[[359,359],"valid"],[[360,360],"mapped",[361]],[[361,361],"valid"],[[362,362],"mapped",[363]],[[363,363],"valid"],[[364,364],"mapped",[365]],[[365,365],"valid"],[[366,366],"mapped",[367]],[[367,367],"valid"],[[368,368],"mapped",[369]],[[369,369],"valid"],[[370,370],"mapped",[371]],[[371,371],"valid"],[[372,372],"mapped",[373]],[[373,373],"valid"],[[374,374],"mapped",[375]],[[375,375],"valid"],[[376,376],"mapped",[255]],[[377,377],"mapped",[378]],[[378,378],"valid"],[[379,379],"mapped",[380]],[[380,380],"valid"],[[381,381],"mapped",[382]],[[382,382],"valid"],[[383,383],"mapped",[115]],[[384,384],"valid"],[[385,385],"mapped",[595]],[[386,386],"mapped",[387]],[[387,387],"valid"],[[388,388],"mapped",[389]],[[389,389],"valid"],[[390,390],"mapped",[596]],[[391,391],"mapped",[392]],[[392,392],"valid"],[[393,393],"mapped",[598]],[[394,394],"mapped",[599]],[[395,395],"mapped",[396]],[[396,397],"valid"],[[398,398],"mapped",[477]],[[399,399],"mapped",[601]],[[400,400],"mapped",[603]],[[401,401],"mapped",[402]],[[402,402],"valid"],[[403,403],"mapped",[608]],[[404,404],"mapped",[611]],[[405,405],"valid"],[[406,406],"mapped",[617]],[[407,407],"mapped",[616]],[[408,408],"mapped",[409]],[[409,411],"valid"],[[412,412],"mapped",[623]],[[413,413],"mapped",[626]],[[414,414],"valid"],[[415,415],"mapped",[629]],[[416,416],"mapped",[417]],[[417,417],"valid"],[[418,418],"mapped",[419]],[[419,419],"valid"],[[420,420],"mapped",[421]],[[421,421],"valid"],[[422,422],"mapped",[640]],[[423,423],"mapped",[424]],[[424,424],"valid"],[[425,425],"mapped",[643]],[[426,427],"valid"],[[428,428],"mapped",[429]],[[429,429],"valid"],[[430,430],"mapped",[648]],[[431,431],"mapped",[432]],[[432,432],"valid"],[[433,433],"mapped",[650]],[[434,434],"mapped",[651]],[[435,435],"mapped",[436]],[[436,436],"valid"],[[437,437],"mapped",[438]],[[438,438],"valid"],[[439,439],"mapped",[658]],[[440,440],"mapped",[441]],[[441,443],"valid"],[[444,444],"mapped",[445]],[[445,451],"valid"],[[452,454],"mapped",[100,382]],[[455,457],"mapped",[108,106]],[[458,460],"mapped",[110,106]],[[461,461],"mapped",[462]],[[462,462],"valid"],[[463,463],"mapped",[464]],[[464,464],"valid"],[[465,465],"mapped",[466]],[[466,466],"valid"],[[467,467],"mapped",[468]],[[468,468],"valid"],[[469,469],"mapped",[470]],[[470,470],"valid"],[[471,471],"mapped",[472]],[[472,472],"valid"],[[473,473],"mapped",[474]],[[474,474],"valid"],[[475,475],"mapped",[476]],[[476,477],"valid"],[[478,478],"mapped",[479]],[[479,479],"valid"],[[480,480],"mapped",[481]],[[481,481],"valid"],[[482,482],"mapped",[483]],[[483,483],"valid"],[[484,484],"mapped",[485]],[[485,485],"valid"],[[486,486],"mapped",[487]],[[487,487],"valid"],[[488,488],"mapped",[489]],[[489,489],"valid"],[[490,490],"mapped",[491]],[[491,491],"valid"],[[492,492],"mapped",[493]],[[493,493],"valid"],[[494,494],"mapped",[495]],[[495,496],"valid"],[[497,499],"mapped",[100,122]],[[500,500],"mapped",[501]],[[501,501],"valid"],[[502,502],"mapped",[405]],[[503,503],"mapped",[447]],[[504,504],"mapped",[505]],[[505,505],"valid"],[[506,506],"mapped",[507]],[[507,507],"valid"],[[508,508],"mapped",[509]],[[509,509],"valid"],[[510,510],"mapped",[511]],[[511,511],"valid"],[[512,512],"mapped",[513]],[[513,513],"valid"],[[514,514],"mapped",[515]],[[515,515],"valid"],[[516,516],"mapped",[517]],[[517,517],"valid"],[[518,518],"mapped",[519]],[[519,519],"valid"],[[520,520],"mapped",[521]],[[521,521],"valid"],[[522,522],"mapped",[523]],[[523,523],"valid"],[[524,524],"mapped",[525]],[[525,525],"valid"],[[526,526],"mapped",[527]],[[527,527],"valid"],[[528,528],"mapped",[529]],[[529,529],"valid"],[[530,530],"mapped",[531]],[[531,531],"valid"],[[532,532],"mapped",[533]],[[533,533],"valid"],[[534,534],"mapped",[535]],[[535,535],"valid"],[[536,536],"mapped",[537]],[[537,537],"valid"],[[538,538],"mapped",[539]],[[539,539],"valid"],[[540,540],"mapped",[541]],[[541,541],"valid"],[[542,542],"mapped",[543]],[[543,543],"valid"],[[544,544],"mapped",[414]],[[545,545],"valid"],[[546,546],"mapped",[547]],[[547,547],"valid"],[[548,548],"mapped",[549]],[[549,549],"valid"],[[550,550],"mapped",[551]],[[551,551],"valid"],[[552,552],"mapped",[553]],[[553,553],"valid"],[[554,554],"mapped",[555]],[[555,555],"valid"],[[556,556],"mapped",[557]],[[557,557],"valid"],[[558,558],"mapped",[559]],[[559,559],"valid"],[[560,560],"mapped",[561]],[[561,561],"valid"],[[562,562],"mapped",[563]],[[563,563],"valid"],[[564,566],"valid"],[[567,569],"valid"],[[570,570],"mapped",[11365]],[[571,571],"mapped",[572]],[[572,572],"valid"],[[573,573],"mapped",[410]],[[574,574],"mapped",[11366]],[[575,576],"valid"],[[577,577],"mapped",[578]],[[578,578],"valid"],[[579,579],"mapped",[384]],[[580,580],"mapped",[649]],[[581,581],"mapped",[652]],[[582,582],"mapped",[583]],[[583,583],"valid"],[[584,584],"mapped",[585]],[[585,585],"valid"],[[586,586],"mapped",[587]],[[587,587],"valid"],[[588,588],"mapped",[589]],[[589,589],"valid"],[[590,590],"mapped",[591]],[[591,591],"valid"],[[592,680],"valid"],[[681,685],"valid"],[[686,687],"valid"],[[688,688],"mapped",[104]],[[689,689],"mapped",[614]],[[690,690],"mapped",[106]],[[691,691],"mapped",[114]],[[692,692],"mapped",[633]],[[693,693],"mapped",[635]],[[694,694],"mapped",[641]],[[695,695],"mapped",[119]],[[696,696],"mapped",[121]],[[697,705],"valid"],[[706,709],"valid",[],"NV8"],[[710,721],"valid"],[[722,727],"valid",[],"NV8"],[[728,728],"disallowed_STD3_mapped",[32,774]],[[729,729],"disallowed_STD3_mapped",[32,775]],[[730,730],"disallowed_STD3_mapped",[32,778]],[[731,731],"disallowed_STD3_mapped",[32,808]],[[732,732],"disallowed_STD3_mapped",[32,771]],[[733,733],"disallowed_STD3_mapped",[32,779]],[[734,734],"valid",[],"NV8"],[[735,735],"valid",[],"NV8"],[[736,736],"mapped",[611]],[[737,737],"mapped",[108]],[[738,738],"mapped",[115]],[[739,739],"mapped",[120]],[[740,740],"mapped",[661]],[[741,745],"valid",[],"NV8"],[[746,747],"valid",[],"NV8"],[[748,748],"valid"],[[749,749],"valid",[],"NV8"],[[750,750],"valid"],[[751,767],"valid",[],"NV8"],[[768,831],"valid"],[[832,832],"mapped",[768]],[[833,833],"mapped",[769]],[[834,834],"valid"],[[835,835],"mapped",[787]],[[836,836],"mapped",[776,769]],[[837,837],"mapped",[953]],[[838,846],"valid"],[[847,847],"ignored"],[[848,855],"valid"],[[856,860],"valid"],[[861,863],"valid"],[[864,865],"valid"],[[866,866],"valid"],[[867,879],"valid"],[[880,880],"mapped",[881]],[[881,881],"valid"],[[882,882],"mapped",[883]],[[883,883],"valid"],[[884,884],"mapped",[697]],[[885,885],"valid"],[[886,886],"mapped",[887]],[[887,887],"valid"],[[888,889],"disallowed"],[[890,890],"disallowed_STD3_mapped",[32,953]],[[891,893],"valid"],[[894,894],"disallowed_STD3_mapped",[59]],[[895,895],"mapped",[1011]],[[896,899],"disallowed"],[[900,900],"disallowed_STD3_mapped",[32,769]],[[901,901],"disallowed_STD3_mapped",[32,776,769]],[[902,902],"mapped",[940]],[[903,903],"mapped",[183]],[[904,904],"mapped",[941]],[[905,905],"mapped",[942]],[[906,906],"mapped",[943]],[[907,907],"disallowed"],[[908,908],"mapped",[972]],[[909,909],"disallowed"],[[910,910],"mapped",[973]],[[911,911],"mapped",[974]],[[912,912],"valid"],[[913,913],"mapped",[945]],[[914,914],"mapped",[946]],[[915,915],"mapped",[947]],[[916,916],"mapped",[948]],[[917,917],"mapped",[949]],[[918,918],"mapped",[950]],[[919,919],"mapped",[951]],[[920,920],"mapped",[952]],[[921,921],"mapped",[953]],[[922,922],"mapped",[954]],[[923,923],"mapped",[955]],[[924,924],"mapped",[956]],[[925,925],"mapped",[957]],[[926,926],"mapped",[958]],[[927,927],"mapped",[959]],[[928,928],"mapped",[960]],[[929,929],"mapped",[961]],[[930,930],"disallowed"],[[931,931],"mapped",[963]],[[932,932],"mapped",[964]],[[933,933],"mapped",[965]],[[934,934],"mapped",[966]],[[935,935],"mapped",[967]],[[936,936],"mapped",[968]],[[937,937],"mapped",[969]],[[938,938],"mapped",[970]],[[939,939],"mapped",[971]],[[940,961],"valid"],[[962,962],"deviation",[963]],[[963,974],"valid"],[[975,975],"mapped",[983]],[[976,976],"mapped",[946]],[[977,977],"mapped",[952]],[[978,978],"mapped",[965]],[[979,979],"mapped",[973]],[[980,980],"mapped",[971]],[[981,981],"mapped",[966]],[[982,982],"mapped",[960]],[[983,983],"valid"],[[984,984],"mapped",[985]],[[985,985],"valid"],[[986,986],"mapped",[987]],[[987,987],"valid"],[[988,988],"mapped",[989]],[[989,989],"valid"],[[990,990],"mapped",[991]],[[991,991],"valid"],[[992,992],"mapped",[993]],[[993,993],"valid"],[[994,994],"mapped",[995]],[[995,995],"valid"],[[996,996],"mapped",[997]],[[997,997],"valid"],[[998,998],"mapped",[999]],[[999,999],"valid"],[[1000,1000],"mapped",[1001]],[[1001,1001],"valid"],[[1002,1002],"mapped",[1003]],[[1003,1003],"valid"],[[1004,1004],"mapped",[1005]],[[1005,1005],"valid"],[[1006,1006],"mapped",[1007]],[[1007,1007],"valid"],[[1008,1008],"mapped",[954]],[[1009,1009],"mapped",[961]],[[1010,1010],"mapped",[963]],[[1011,1011],"valid"],[[1012,1012],"mapped",[952]],[[1013,1013],"mapped",[949]],[[1014,1014],"valid",[],"NV8"],[[1015,1015],"mapped",[1016]],[[1016,1016],"valid"],[[1017,1017],"mapped",[963]],[[1018,1018],"mapped",[1019]],[[1019,1019],"valid"],[[1020,1020],"valid"],[[1021,1021],"mapped",[891]],[[1022,1022],"mapped",[892]],[[1023,1023],"mapped",[893]],[[1024,1024],"mapped",[1104]],[[1025,1025],"mapped",[1105]],[[1026,1026],"mapped",[1106]],[[1027,1027],"mapped",[1107]],[[1028,1028],"mapped",[1108]],[[1029,1029],"mapped",[1109]],[[1030,1030],"mapped",[1110]],[[1031,1031],"mapped",[1111]],[[1032,1032],"mapped",[1112]],[[1033,1033],"mapped",[1113]],[[1034,1034],"mapped",[1114]],[[1035,1035],"mapped",[1115]],[[1036,1036],"mapped",[1116]],[[1037,1037],"mapped",[1117]],[[1038,1038],"mapped",[1118]],[[1039,1039],"mapped",[1119]],[[1040,1040],"mapped",[1072]],[[1041,1041],"mapped",[1073]],[[1042,1042],"mapped",[1074]],[[1043,1043],"mapped",[1075]],[[1044,1044],"mapped",[1076]],[[1045,1045],"mapped",[1077]],[[1046,1046],"mapped",[1078]],[[1047,1047],"mapped",[1079]],[[1048,1048],"mapped",[1080]],[[1049,1049],"mapped",[1081]],[[1050,1050],"mapped",[1082]],[[1051,1051],"mapped",[1083]],[[1052,1052],"mapped",[1084]],[[1053,1053],"mapped",[1085]],[[1054,1054],"mapped",[1086]],[[1055,1055],"mapped",[1087]],[[1056,1056],"mapped",[1088]],[[1057,1057],"mapped",[1089]],[[1058,1058],"mapped",[1090]],[[1059,1059],"mapped",[1091]],[[1060,1060],"mapped",[1092]],[[1061,1061],"mapped",[1093]],[[1062,1062],"mapped",[1094]],[[1063,1063],"mapped",[1095]],[[1064,1064],"mapped",[1096]],[[1065,1065],"mapped",[1097]],[[1066,1066],"mapped",[1098]],[[1067,1067],"mapped",[1099]],[[1068,1068],"mapped",[1100]],[[1069,1069],"mapped",[1101]],[[1070,1070],"mapped",[1102]],[[1071,1071],"mapped",[1103]],[[1072,1103],"valid"],[[1104,1104],"valid"],[[1105,1116],"valid"],[[1117,1117],"valid"],[[1118,1119],"valid"],[[1120,1120],"mapped",[1121]],[[1121,1121],"valid"],[[1122,1122],"mapped",[1123]],[[1123,1123],"valid"],[[1124,1124],"mapped",[1125]],[[1125,1125],"valid"],[[1126,1126],"mapped",[1127]],[[1127,1127],"valid"],[[1128,1128],"mapped",[1129]],[[1129,1129],"valid"],[[1130,1130],"mapped",[1131]],[[1131,1131],"valid"],[[1132,1132],"mapped",[1133]],[[1133,1133],"valid"],[[1134,1134],"mapped",[1135]],[[1135,1135],"valid"],[[1136,1136],"mapped",[1137]],[[1137,1137],"valid"],[[1138,1138],"mapped",[1139]],[[1139,1139],"valid"],[[1140,1140],"mapped",[1141]],[[1141,1141],"valid"],[[1142,1142],"mapped",[1143]],[[1143,1143],"valid"],[[1144,1144],"mapped",[1145]],[[1145,1145],"valid"],[[1146,1146],"mapped",[1147]],[[1147,1147],"valid"],[[1148,1148],"mapped",[1149]],[[1149,1149],"valid"],[[1150,1150],"mapped",[1151]],[[1151,1151],"valid"],[[1152,1152],"mapped",[1153]],[[1153,1153],"valid"],[[1154,1154],"valid",[],"NV8"],[[1155,1158],"valid"],[[1159,1159],"valid"],[[1160,1161],"valid",[],"NV8"],[[1162,1162],"mapped",[1163]],[[1163,1163],"valid"],[[1164,1164],"mapped",[1165]],[[1165,1165],"valid"],[[1166,1166],"mapped",[1167]],[[1167,1167],"valid"],[[1168,1168],"mapped",[1169]],[[1169,1169],"valid"],[[1170,1170],"mapped",[1171]],[[1171,1171],"valid"],[[1172,1172],"mapped",[1173]],[[1173,1173],"valid"],[[1174,1174],"mapped",[1175]],[[1175,1175],"valid"],[[1176,1176],"mapped",[1177]],[[1177,1177],"valid"],[[1178,1178],"mapped",[1179]],[[1179,1179],"valid"],[[1180,1180],"mapped",[1181]],[[1181,1181],"valid"],[[1182,1182],"mapped",[1183]],[[1183,1183],"valid"],[[1184,1184],"mapped",[1185]],[[1185,1185],"valid"],[[1186,1186],"mapped",[1187]],[[1187,1187],"valid"],[[1188,1188],"mapped",[1189]],[[1189,1189],"valid"],[[1190,1190],"mapped",[1191]],[[1191,1191],"valid"],[[1192,1192],"mapped",[1193]],[[1193,1193],"valid"],[[1194,1194],"mapped",[1195]],[[1195,1195],"valid"],[[1196,1196],"mapped",[1197]],[[1197,1197],"valid"],[[1198,1198],"mapped",[1199]],[[1199,1199],"valid"],[[1200,1200],"mapped",[1201]],[[1201,1201],"valid"],[[1202,1202],"mapped",[1203]],[[1203,1203],"valid"],[[1204,1204],"mapped",[1205]],[[1205,1205],"valid"],[[1206,1206],"mapped",[1207]],[[1207,1207],"valid"],[[1208,1208],"mapped",[1209]],[[1209,1209],"valid"],[[1210,1210],"mapped",[1211]],[[1211,1211],"valid"],[[1212,1212],"mapped",[1213]],[[1213,1213],"valid"],[[1214,1214],"mapped",[1215]],[[1215,1215],"valid"],[[1216,1216],"disallowed"],[[1217,1217],"mapped",[1218]],[[1218,1218],"valid"],[[1219,1219],"mapped",[1220]],[[1220,1220],"valid"],[[1221,1221],"mapped",[1222]],[[1222,1222],"valid"],[[1223,1223],"mapped",[1224]],[[1224,1224],"valid"],[[1225,1225],"mapped",[1226]],[[1226,1226],"valid"],[[1227,1227],"mapped",[1228]],[[1228,1228],"valid"],[[1229,1229],"mapped",[1230]],[[1230,1230],"valid"],[[1231,1231],"valid"],[[1232,1232],"mapped",[1233]],[[1233,1233],"valid"],[[1234,1234],"mapped",[1235]],[[1235,1235],"valid"],[[1236,1236],"mapped",[1237]],[[1237,1237],"valid"],[[1238,1238],"mapped",[1239]],[[1239,1239],"valid"],[[1240,1240],"mapped",[1241]],[[1241,1241],"valid"],[[1242,1242],"mapped",[1243]],[[1243,1243],"valid"],[[1244,1244],"mapped",[1245]],[[1245,1245],"valid"],[[1246,1246],"mapped",[1247]],[[1247,1247],"valid"],[[1248,1248],"mapped",[1249]],[[1249,1249],"valid"],[[1250,1250],"mapped",[1251]],[[1251,1251],"valid"],[[1252,1252],"mapped",[1253]],[[1253,1253],"valid"],[[1254,1254],"mapped",[1255]],[[1255,1255],"valid"],[[1256,1256],"mapped",[1257]],[[1257,1257],"valid"],[[1258,1258],"mapped",[1259]],[[1259,1259],"valid"],[[1260,1260],"mapped",[1261]],[[1261,1261],"valid"],[[1262,1262],"mapped",[1263]],[[1263,1263],"valid"],[[1264,1264],"mapped",[1265]],[[1265,1265],"valid"],[[1266,1266],"mapped",[1267]],[[1267,1267],"valid"],[[1268,1268],"mapped",[1269]],[[1269,1269],"valid"],[[1270,1270],"mapped",[1271]],[[1271,1271],"valid"],[[1272,1272],"mapped",[1273]],[[1273,1273],"valid"],[[1274,1274],"mapped",[1275]],[[1275,1275],"valid"],[[1276,1276],"mapped",[1277]],[[1277,1277],"valid"],[[1278,1278],"mapped",[1279]],[[1279,1279],"valid"],[[1280,1280],"mapped",[1281]],[[1281,1281],"valid"],[[1282,1282],"mapped",[1283]],[[1283,1283],"valid"],[[1284,1284],"mapped",[1285]],[[1285,1285],"valid"],[[1286,1286],"mapped",[1287]],[[1287,1287],"valid"],[[1288,1288],"mapped",[1289]],[[1289,1289],"valid"],[[1290,1290],"mapped",[1291]],[[1291,1291],"valid"],[[1292,1292],"mapped",[1293]],[[1293,1293],"valid"],[[1294,1294],"mapped",[1295]],[[1295,1295],"valid"],[[1296,1296],"mapped",[1297]],[[1297,1297],"valid"],[[1298,1298],"mapped",[1299]],[[1299,1299],"valid"],[[1300,1300],"mapped",[1301]],[[1301,1301],"valid"],[[1302,1302],"mapped",[1303]],[[1303,1303],"valid"],[[1304,1304],"mapped",[1305]],[[1305,1305],"valid"],[[1306,1306],"mapped",[1307]],[[1307,1307],"valid"],[[1308,1308],"mapped",[1309]],[[1309,1309],"valid"],[[1310,1310],"mapped",[1311]],[[1311,1311],"valid"],[[1312,1312],"mapped",[1313]],[[1313,1313],"valid"],[[1314,1314],"mapped",[1315]],[[1315,1315],"valid"],[[1316,1316],"mapped",[1317]],[[1317,1317],"valid"],[[1318,1318],"mapped",[1319]],[[1319,1319],"valid"],[[1320,1320],"mapped",[1321]],[[1321,1321],"valid"],[[1322,1322],"mapped",[1323]],[[1323,1323],"valid"],[[1324,1324],"mapped",[1325]],[[1325,1325],"valid"],[[1326,1326],"mapped",[1327]],[[1327,1327],"valid"],[[1328,1328],"disallowed"],[[1329,1329],"mapped",[1377]],[[1330,1330],"mapped",[1378]],[[1331,1331],"mapped",[1379]],[[1332,1332],"mapped",[1380]],[[1333,1333],"mapped",[1381]],[[1334,1334],"mapped",[1382]],[[1335,1335],"mapped",[1383]],[[1336,1336],"mapped",[1384]],[[1337,1337],"mapped",[1385]],[[1338,1338],"mapped",[1386]],[[1339,1339],"mapped",[1387]],[[1340,1340],"mapped",[1388]],[[1341,1341],"mapped",[1389]],[[1342,1342],"mapped",[1390]],[[1343,1343],"mapped",[1391]],[[1344,1344],"mapped",[1392]],[[1345,1345],"mapped",[1393]],[[1346,1346],"mapped",[1394]],[[1347,1347],"mapped",[1395]],[[1348,1348],"mapped",[1396]],[[1349,1349],"mapped",[1397]],[[1350,1350],"mapped",[1398]],[[1351,1351],"mapped",[1399]],[[1352,1352],"mapped",[1400]],[[1353,1353],"mapped",[1401]],[[1354,1354],"mapped",[1402]],[[1355,1355],"mapped",[1403]],[[1356,1356],"mapped",[1404]],[[1357,1357],"mapped",[1405]],[[1358,1358],"mapped",[1406]],[[1359,1359],"mapped",[1407]],[[1360,1360],"mapped",[1408]],[[1361,1361],"mapped",[1409]],[[1362,1362],"mapped",[1410]],[[1363,1363],"mapped",[1411]],[[1364,1364],"mapped",[1412]],[[1365,1365],"mapped",[1413]],[[1366,1366],"mapped",[1414]],[[1367,1368],"disallowed"],[[1369,1369],"valid"],[[1370,1375],"valid",[],"NV8"],[[1376,1376],"disallowed"],[[1377,1414],"valid"],[[1415,1415],"mapped",[1381,1410]],[[1416,1416],"disallowed"],[[1417,1417],"valid",[],"NV8"],[[1418,1418],"valid",[],"NV8"],[[1419,1420],"disallowed"],[[1421,1422],"valid",[],"NV8"],[[1423,1423],"valid",[],"NV8"],[[1424,1424],"disallowed"],[[1425,1441],"valid"],[[1442,1442],"valid"],[[1443,1455],"valid"],[[1456,1465],"valid"],[[1466,1466],"valid"],[[1467,1469],"valid"],[[1470,1470],"valid",[],"NV8"],[[1471,1471],"valid"],[[1472,1472],"valid",[],"NV8"],[[1473,1474],"valid"],[[1475,1475],"valid",[],"NV8"],[[1476,1476],"valid"],[[1477,1477],"valid"],[[1478,1478],"valid",[],"NV8"],[[1479,1479],"valid"],[[1480,1487],"disallowed"],[[1488,1514],"valid"],[[1515,1519],"disallowed"],[[1520,1524],"valid"],[[1525,1535],"disallowed"],[[1536,1539],"disallowed"],[[1540,1540],"disallowed"],[[1541,1541],"disallowed"],[[1542,1546],"valid",[],"NV8"],[[1547,1547],"valid",[],"NV8"],[[1548,1548],"valid",[],"NV8"],[[1549,1551],"valid",[],"NV8"],[[1552,1557],"valid"],[[1558,1562],"valid"],[[1563,1563],"valid",[],"NV8"],[[1564,1564],"disallowed"],[[1565,1565],"disallowed"],[[1566,1566],"valid",[],"NV8"],[[1567,1567],"valid",[],"NV8"],[[1568,1568],"valid"],[[1569,1594],"valid"],[[1595,1599],"valid"],[[1600,1600],"valid",[],"NV8"],[[1601,1618],"valid"],[[1619,1621],"valid"],[[1622,1624],"valid"],[[1625,1630],"valid"],[[1631,1631],"valid"],[[1632,1641],"valid"],[[1642,1645],"valid",[],"NV8"],[[1646,1647],"valid"],[[1648,1652],"valid"],[[1653,1653],"mapped",[1575,1652]],[[1654,1654],"mapped",[1608,1652]],[[1655,1655],"mapped",[1735,1652]],[[1656,1656],"mapped",[1610,1652]],[[1657,1719],"valid"],[[1720,1721],"valid"],[[1722,1726],"valid"],[[1727,1727],"valid"],[[1728,1742],"valid"],[[1743,1743],"valid"],[[1744,1747],"valid"],[[1748,1748],"valid",[],"NV8"],[[1749,1756],"valid"],[[1757,1757],"disallowed"],[[1758,1758],"valid",[],"NV8"],[[1759,1768],"valid"],[[1769,1769],"valid",[],"NV8"],[[1770,1773],"valid"],[[1774,1775],"valid"],[[1776,1785],"valid"],[[1786,1790],"valid"],[[1791,1791],"valid"],[[1792,1805],"valid",[],"NV8"],[[1806,1806],"disallowed"],[[1807,1807],"disallowed"],[[1808,1836],"valid"],[[1837,1839],"valid"],[[1840,1866],"valid"],[[1867,1868],"disallowed"],[[1869,1871],"valid"],[[1872,1901],"valid"],[[1902,1919],"valid"],[[1920,1968],"valid"],[[1969,1969],"valid"],[[1970,1983],"disallowed"],[[1984,2037],"valid"],[[2038,2042],"valid",[],"NV8"],[[2043,2047],"disallowed"],[[2048,2093],"valid"],[[2094,2095],"disallowed"],[[2096,2110],"valid",[],"NV8"],[[2111,2111],"disallowed"],[[2112,2139],"valid"],[[2140,2141],"disallowed"],[[2142,2142],"valid",[],"NV8"],[[2143,2207],"disallowed"],[[2208,2208],"valid"],[[2209,2209],"valid"],[[2210,2220],"valid"],[[2221,2226],"valid"],[[2227,2228],"valid"],[[2229,2274],"disallowed"],[[2275,2275],"valid"],[[2276,2302],"valid"],[[2303,2303],"valid"],[[2304,2304],"valid"],[[2305,2307],"valid"],[[2308,2308],"valid"],[[2309,2361],"valid"],[[2362,2363],"valid"],[[2364,2381],"valid"],[[2382,2382],"valid"],[[2383,2383],"valid"],[[2384,2388],"valid"],[[2389,2389],"valid"],[[2390,2391],"valid"],[[2392,2392],"mapped",[2325,2364]],[[2393,2393],"mapped",[2326,2364]],[[2394,2394],"mapped",[2327,2364]],[[2395,2395],"mapped",[2332,2364]],[[2396,2396],"mapped",[2337,2364]],[[2397,2397],"mapped",[2338,2364]],[[2398,2398],"mapped",[2347,2364]],[[2399,2399],"mapped",[2351,2364]],[[2400,2403],"valid"],[[2404,2405],"valid",[],"NV8"],[[2406,2415],"valid"],[[2416,2416],"valid",[],"NV8"],[[2417,2418],"valid"],[[2419,2423],"valid"],[[2424,2424],"valid"],[[2425,2426],"valid"],[[2427,2428],"valid"],[[2429,2429],"valid"],[[2430,2431],"valid"],[[2432,2432],"valid"],[[2433,2435],"valid"],[[2436,2436],"disallowed"],[[2437,2444],"valid"],[[2445,2446],"disallowed"],[[2447,2448],"valid"],[[2449,2450],"disallowed"],[[2451,2472],"valid"],[[2473,2473],"disallowed"],[[2474,2480],"valid"],[[2481,2481],"disallowed"],[[2482,2482],"valid"],[[2483,2485],"disallowed"],[[2486,2489],"valid"],[[2490,2491],"disallowed"],[[2492,2492],"valid"],[[2493,2493],"valid"],[[2494,2500],"valid"],[[2501,2502],"disallowed"],[[2503,2504],"valid"],[[2505,2506],"disallowed"],[[2507,2509],"valid"],[[2510,2510],"valid"],[[2511,2518],"disallowed"],[[2519,2519],"valid"],[[2520,2523],"disallowed"],[[2524,2524],"mapped",[2465,2492]],[[2525,2525],"mapped",[2466,2492]],[[2526,2526],"disallowed"],[[2527,2527],"mapped",[2479,2492]],[[2528,2531],"valid"],[[2532,2533],"disallowed"],[[2534,2545],"valid"],[[2546,2554],"valid",[],"NV8"],[[2555,2555],"valid",[],"NV8"],[[2556,2560],"disallowed"],[[2561,2561],"valid"],[[2562,2562],"valid"],[[2563,2563],"valid"],[[2564,2564],"disallowed"],[[2565,2570],"valid"],[[2571,2574],"disallowed"],[[2575,2576],"valid"],[[2577,2578],"disallowed"],[[2579,2600],"valid"],[[2601,2601],"disallowed"],[[2602,2608],"valid"],[[2609,2609],"disallowed"],[[2610,2610],"valid"],[[2611,2611],"mapped",[2610,2620]],[[2612,2612],"disallowed"],[[2613,2613],"valid"],[[2614,2614],"mapped",[2616,2620]],[[2615,2615],"disallowed"],[[2616,2617],"valid"],[[2618,2619],"disallowed"],[[2620,2620],"valid"],[[2621,2621],"disallowed"],[[2622,2626],"valid"],[[2627,2630],"disallowed"],[[2631,2632],"valid"],[[2633,2634],"disallowed"],[[2635,2637],"valid"],[[2638,2640],"disallowed"],[[2641,2641],"valid"],[[2642,2648],"disallowed"],[[2649,2649],"mapped",[2582,2620]],[[2650,2650],"mapped",[2583,2620]],[[2651,2651],"mapped",[2588,2620]],[[2652,2652],"valid"],[[2653,2653],"disallowed"],[[2654,2654],"mapped",[2603,2620]],[[2655,2661],"disallowed"],[[2662,2676],"valid"],[[2677,2677],"valid"],[[2678,2688],"disallowed"],[[2689,2691],"valid"],[[2692,2692],"disallowed"],[[2693,2699],"valid"],[[2700,2700],"valid"],[[2701,2701],"valid"],[[2702,2702],"disallowed"],[[2703,2705],"valid"],[[2706,2706],"disallowed"],[[2707,2728],"valid"],[[2729,2729],"disallowed"],[[2730,2736],"valid"],[[2737,2737],"disallowed"],[[2738,2739],"valid"],[[2740,2740],"disallowed"],[[2741,2745],"valid"],[[2746,2747],"disallowed"],[[2748,2757],"valid"],[[2758,2758],"disallowed"],[[2759,2761],"valid"],[[2762,2762],"disallowed"],[[2763,2765],"valid"],[[2766,2767],"disallowed"],[[2768,2768],"valid"],[[2769,2783],"disallowed"],[[2784,2784],"valid"],[[2785,2787],"valid"],[[2788,2789],"disallowed"],[[2790,2799],"valid"],[[2800,2800],"valid",[],"NV8"],[[2801,2801],"valid",[],"NV8"],[[2802,2808],"disallowed"],[[2809,2809],"valid"],[[2810,2816],"disallowed"],[[2817,2819],"valid"],[[2820,2820],"disallowed"],[[2821,2828],"valid"],[[2829,2830],"disallowed"],[[2831,2832],"valid"],[[2833,2834],"disallowed"],[[2835,2856],"valid"],[[2857,2857],"disallowed"],[[2858,2864],"valid"],[[2865,2865],"disallowed"],[[2866,2867],"valid"],[[2868,2868],"disallowed"],[[2869,2869],"valid"],[[2870,2873],"valid"],[[2874,2875],"disallowed"],[[2876,2883],"valid"],[[2884,2884],"valid"],[[2885,2886],"disallowed"],[[2887,2888],"valid"],[[2889,2890],"disallowed"],[[2891,2893],"valid"],[[2894,2901],"disallowed"],[[2902,2903],"valid"],[[2904,2907],"disallowed"],[[2908,2908],"mapped",[2849,2876]],[[2909,2909],"mapped",[2850,2876]],[[2910,2910],"disallowed"],[[2911,2913],"valid"],[[2914,2915],"valid"],[[2916,2917],"disallowed"],[[2918,2927],"valid"],[[2928,2928],"valid",[],"NV8"],[[2929,2929],"valid"],[[2930,2935],"valid",[],"NV8"],[[2936,2945],"disallowed"],[[2946,2947],"valid"],[[2948,2948],"disallowed"],[[2949,2954],"valid"],[[2955,2957],"disallowed"],[[2958,2960],"valid"],[[2961,2961],"disallowed"],[[2962,2965],"valid"],[[2966,2968],"disallowed"],[[2969,2970],"valid"],[[2971,2971],"disallowed"],[[2972,2972],"valid"],[[2973,2973],"disallowed"],[[2974,2975],"valid"],[[2976,2978],"disallowed"],[[2979,2980],"valid"],[[2981,2983],"disallowed"],[[2984,2986],"valid"],[[2987,2989],"disallowed"],[[2990,2997],"valid"],[[2998,2998],"valid"],[[2999,3001],"valid"],[[3002,3005],"disallowed"],[[3006,3010],"valid"],[[3011,3013],"disallowed"],[[3014,3016],"valid"],[[3017,3017],"disallowed"],[[3018,3021],"valid"],[[3022,3023],"disallowed"],[[3024,3024],"valid"],[[3025,3030],"disallowed"],[[3031,3031],"valid"],[[3032,3045],"disallowed"],[[3046,3046],"valid"],[[3047,3055],"valid"],[[3056,3058],"valid",[],"NV8"],[[3059,3066],"valid",[],"NV8"],[[3067,3071],"disallowed"],[[3072,3072],"valid"],[[3073,3075],"valid"],[[3076,3076],"disallowed"],[[3077,3084],"valid"],[[3085,3085],"disallowed"],[[3086,3088],"valid"],[[3089,3089],"disallowed"],[[3090,3112],"valid"],[[3113,3113],"disallowed"],[[3114,3123],"valid"],[[3124,3124],"valid"],[[3125,3129],"valid"],[[3130,3132],"disallowed"],[[3133,3133],"valid"],[[3134,3140],"valid"],[[3141,3141],"disallowed"],[[3142,3144],"valid"],[[3145,3145],"disallowed"],[[3146,3149],"valid"],[[3150,3156],"disallowed"],[[3157,3158],"valid"],[[3159,3159],"disallowed"],[[3160,3161],"valid"],[[3162,3162],"valid"],[[3163,3167],"disallowed"],[[3168,3169],"valid"],[[3170,3171],"valid"],[[3172,3173],"disallowed"],[[3174,3183],"valid"],[[3184,3191],"disallowed"],[[3192,3199],"valid",[],"NV8"],[[3200,3200],"disallowed"],[[3201,3201],"valid"],[[3202,3203],"valid"],[[3204,3204],"disallowed"],[[3205,3212],"valid"],[[3213,3213],"disallowed"],[[3214,3216],"valid"],[[3217,3217],"disallowed"],[[3218,3240],"valid"],[[3241,3241],"disallowed"],[[3242,3251],"valid"],[[3252,3252],"disallowed"],[[3253,3257],"valid"],[[3258,3259],"disallowed"],[[3260,3261],"valid"],[[3262,3268],"valid"],[[3269,3269],"disallowed"],[[3270,3272],"valid"],[[3273,3273],"disallowed"],[[3274,3277],"valid"],[[3278,3284],"disallowed"],[[3285,3286],"valid"],[[3287,3293],"disallowed"],[[3294,3294],"valid"],[[3295,3295],"disallowed"],[[3296,3297],"valid"],[[3298,3299],"valid"],[[3300,3301],"disallowed"],[[3302,3311],"valid"],[[3312,3312],"disallowed"],[[3313,3314],"valid"],[[3315,3328],"disallowed"],[[3329,3329],"valid"],[[3330,3331],"valid"],[[3332,3332],"disallowed"],[[3333,3340],"valid"],[[3341,3341],"disallowed"],[[3342,3344],"valid"],[[3345,3345],"disallowed"],[[3346,3368],"valid"],[[3369,3369],"valid"],[[3370,3385],"valid"],[[3386,3386],"valid"],[[3387,3388],"disallowed"],[[3389,3389],"valid"],[[3390,3395],"valid"],[[3396,3396],"valid"],[[3397,3397],"disallowed"],[[3398,3400],"valid"],[[3401,3401],"disallowed"],[[3402,3405],"valid"],[[3406,3406],"valid"],[[3407,3414],"disallowed"],[[3415,3415],"valid"],[[3416,3422],"disallowed"],[[3423,3423],"valid"],[[3424,3425],"valid"],[[3426,3427],"valid"],[[3428,3429],"disallowed"],[[3430,3439],"valid"],[[3440,3445],"valid",[],"NV8"],[[3446,3448],"disallowed"],[[3449,3449],"valid",[],"NV8"],[[3450,3455],"valid"],[[3456,3457],"disallowed"],[[3458,3459],"valid"],[[3460,3460],"disallowed"],[[3461,3478],"valid"],[[3479,3481],"disallowed"],[[3482,3505],"valid"],[[3506,3506],"disallowed"],[[3507,3515],"valid"],[[3516,3516],"disallowed"],[[3517,3517],"valid"],[[3518,3519],"disallowed"],[[3520,3526],"valid"],[[3527,3529],"disallowed"],[[3530,3530],"valid"],[[3531,3534],"disallowed"],[[3535,3540],"valid"],[[3541,3541],"disallowed"],[[3542,3542],"valid"],[[3543,3543],"disallowed"],[[3544,3551],"valid"],[[3552,3557],"disallowed"],[[3558,3567],"valid"],[[3568,3569],"disallowed"],[[3570,3571],"valid"],[[3572,3572],"valid",[],"NV8"],[[3573,3584],"disallowed"],[[3585,3634],"valid"],[[3635,3635],"mapped",[3661,3634]],[[3636,3642],"valid"],[[3643,3646],"disallowed"],[[3647,3647],"valid",[],"NV8"],[[3648,3662],"valid"],[[3663,3663],"valid",[],"NV8"],[[3664,3673],"valid"],[[3674,3675],"valid",[],"NV8"],[[3676,3712],"disallowed"],[[3713,3714],"valid"],[[3715,3715],"disallowed"],[[3716,3716],"valid"],[[3717,3718],"disallowed"],[[3719,3720],"valid"],[[3721,3721],"disallowed"],[[3722,3722],"valid"],[[3723,3724],"disallowed"],[[3725,3725],"valid"],[[3726,3731],"disallowed"],[[3732,3735],"valid"],[[3736,3736],"disallowed"],[[3737,3743],"valid"],[[3744,3744],"disallowed"],[[3745,3747],"valid"],[[3748,3748],"disallowed"],[[3749,3749],"valid"],[[3750,3750],"disallowed"],[[3751,3751],"valid"],[[3752,3753],"disallowed"],[[3754,3755],"valid"],[[3756,3756],"disallowed"],[[3757,3762],"valid"],[[3763,3763],"mapped",[3789,3762]],[[3764,3769],"valid"],[[3770,3770],"disallowed"],[[3771,3773],"valid"],[[3774,3775],"disallowed"],[[3776,3780],"valid"],[[3781,3781],"disallowed"],[[3782,3782],"valid"],[[3783,3783],"disallowed"],[[3784,3789],"valid"],[[3790,3791],"disallowed"],[[3792,3801],"valid"],[[3802,3803],"disallowed"],[[3804,3804],"mapped",[3755,3737]],[[3805,3805],"mapped",[3755,3745]],[[3806,3807],"valid"],[[3808,3839],"disallowed"],[[3840,3840],"valid"],[[3841,3850],"valid",[],"NV8"],[[3851,3851],"valid"],[[3852,3852],"mapped",[3851]],[[3853,3863],"valid",[],"NV8"],[[3864,3865],"valid"],[[3866,3871],"valid",[],"NV8"],[[3872,3881],"valid"],[[3882,3892],"valid",[],"NV8"],[[3893,3893],"valid"],[[3894,3894],"valid",[],"NV8"],[[3895,3895],"valid"],[[3896,3896],"valid",[],"NV8"],[[3897,3897],"valid"],[[3898,3901],"valid",[],"NV8"],[[3902,3906],"valid"],[[3907,3907],"mapped",[3906,4023]],[[3908,3911],"valid"],[[3912,3912],"disallowed"],[[3913,3916],"valid"],[[3917,3917],"mapped",[3916,4023]],[[3918,3921],"valid"],[[3922,3922],"mapped",[3921,4023]],[[3923,3926],"valid"],[[3927,3927],"mapped",[3926,4023]],[[3928,3931],"valid"],[[3932,3932],"mapped",[3931,4023]],[[3933,3944],"valid"],[[3945,3945],"mapped",[3904,4021]],[[3946,3946],"valid"],[[3947,3948],"valid"],[[3949,3952],"disallowed"],[[3953,3954],"valid"],[[3955,3955],"mapped",[3953,3954]],[[3956,3956],"valid"],[[3957,3957],"mapped",[3953,3956]],[[3958,3958],"mapped",[4018,3968]],[[3959,3959],"mapped",[4018,3953,3968]],[[3960,3960],"mapped",[4019,3968]],[[3961,3961],"mapped",[4019,3953,3968]],[[3962,3968],"valid"],[[3969,3969],"mapped",[3953,3968]],[[3970,3972],"valid"],[[3973,3973],"valid",[],"NV8"],[[3974,3979],"valid"],[[3980,3983],"valid"],[[3984,3986],"valid"],[[3987,3987],"mapped",[3986,4023]],[[3988,3989],"valid"],[[3990,3990],"valid"],[[3991,3991],"valid"],[[3992,3992],"disallowed"],[[3993,3996],"valid"],[[3997,3997],"mapped",[3996,4023]],[[3998,4001],"valid"],[[4002,4002],"mapped",[4001,4023]],[[4003,4006],"valid"],[[4007,4007],"mapped",[4006,4023]],[[4008,4011],"valid"],[[4012,4012],"mapped",[4011,4023]],[[4013,4013],"valid"],[[4014,4016],"valid"],[[4017,4023],"valid"],[[4024,4024],"valid"],[[4025,4025],"mapped",[3984,4021]],[[4026,4028],"valid"],[[4029,4029],"disallowed"],[[4030,4037],"valid",[],"NV8"],[[4038,4038],"valid"],[[4039,4044],"valid",[],"NV8"],[[4045,4045],"disallowed"],[[4046,4046],"valid",[],"NV8"],[[4047,4047],"valid",[],"NV8"],[[4048,4049],"valid",[],"NV8"],[[4050,4052],"valid",[],"NV8"],[[4053,4056],"valid",[],"NV8"],[[4057,4058],"valid",[],"NV8"],[[4059,4095],"disallowed"],[[4096,4129],"valid"],[[4130,4130],"valid"],[[4131,4135],"valid"],[[4136,4136],"valid"],[[4137,4138],"valid"],[[4139,4139],"valid"],[[4140,4146],"valid"],[[4147,4149],"valid"],[[4150,4153],"valid"],[[4154,4159],"valid"],[[4160,4169],"valid"],[[4170,4175],"valid",[],"NV8"],[[4176,4185],"valid"],[[4186,4249],"valid"],[[4250,4253],"valid"],[[4254,4255],"valid",[],"NV8"],[[4256,4293],"disallowed"],[[4294,4294],"disallowed"],[[4295,4295],"mapped",[11559]],[[4296,4300],"disallowed"],[[4301,4301],"mapped",[11565]],[[4302,4303],"disallowed"],[[4304,4342],"valid"],[[4343,4344],"valid"],[[4345,4346],"valid"],[[4347,4347],"valid",[],"NV8"],[[4348,4348],"mapped",[4316]],[[4349,4351],"valid"],[[4352,4441],"valid",[],"NV8"],[[4442,4446],"valid",[],"NV8"],[[4447,4448],"disallowed"],[[4449,4514],"valid",[],"NV8"],[[4515,4519],"valid",[],"NV8"],[[4520,4601],"valid",[],"NV8"],[[4602,4607],"valid",[],"NV8"],[[4608,4614],"valid"],[[4615,4615],"valid"],[[4616,4678],"valid"],[[4679,4679],"valid"],[[4680,4680],"valid"],[[4681,4681],"disallowed"],[[4682,4685],"valid"],[[4686,4687],"disallowed"],[[4688,4694],"valid"],[[4695,4695],"disallowed"],[[4696,4696],"valid"],[[4697,4697],"disallowed"],[[4698,4701],"valid"],[[4702,4703],"disallowed"],[[4704,4742],"valid"],[[4743,4743],"valid"],[[4744,4744],"valid"],[[4745,4745],"disallowed"],[[4746,4749],"valid"],[[4750,4751],"disallowed"],[[4752,4782],"valid"],[[4783,4783],"valid"],[[4784,4784],"valid"],[[4785,4785],"disallowed"],[[4786,4789],"valid"],[[4790,4791],"disallowed"],[[4792,4798],"valid"],[[4799,4799],"disallowed"],[[4800,4800],"valid"],[[4801,4801],"disallowed"],[[4802,4805],"valid"],[[4806,4807],"disallowed"],[[4808,4814],"valid"],[[4815,4815],"valid"],[[4816,4822],"valid"],[[4823,4823],"disallowed"],[[4824,4846],"valid"],[[4847,4847],"valid"],[[4848,4878],"valid"],[[4879,4879],"valid"],[[4880,4880],"valid"],[[4881,4881],"disallowed"],[[4882,4885],"valid"],[[4886,4887],"disallowed"],[[4888,4894],"valid"],[[4895,4895],"valid"],[[4896,4934],"valid"],[[4935,4935],"valid"],[[4936,4954],"valid"],[[4955,4956],"disallowed"],[[4957,4958],"valid"],[[4959,4959],"valid"],[[4960,4960],"valid",[],"NV8"],[[4961,4988],"valid",[],"NV8"],[[4989,4991],"disallowed"],[[4992,5007],"valid"],[[5008,5017],"valid",[],"NV8"],[[5018,5023],"disallowed"],[[5024,5108],"valid"],[[5109,5109],"valid"],[[5110,5111],"disallowed"],[[5112,5112],"mapped",[5104]],[[5113,5113],"mapped",[5105]],[[5114,5114],"mapped",[5106]],[[5115,5115],"mapped",[5107]],[[5116,5116],"mapped",[5108]],[[5117,5117],"mapped",[5109]],[[5118,5119],"disallowed"],[[5120,5120],"valid",[],"NV8"],[[5121,5740],"valid"],[[5741,5742],"valid",[],"NV8"],[[5743,5750],"valid"],[[5751,5759],"valid"],[[5760,5760],"disallowed"],[[5761,5786],"valid"],[[5787,5788],"valid",[],"NV8"],[[5789,5791],"disallowed"],[[5792,5866],"valid"],[[5867,5872],"valid",[],"NV8"],[[5873,5880],"valid"],[[5881,5887],"disallowed"],[[5888,5900],"valid"],[[5901,5901],"disallowed"],[[5902,5908],"valid"],[[5909,5919],"disallowed"],[[5920,5940],"valid"],[[5941,5942],"valid",[],"NV8"],[[5943,5951],"disallowed"],[[5952,5971],"valid"],[[5972,5983],"disallowed"],[[5984,5996],"valid"],[[5997,5997],"disallowed"],[[5998,6000],"valid"],[[6001,6001],"disallowed"],[[6002,6003],"valid"],[[6004,6015],"disallowed"],[[6016,6067],"valid"],[[6068,6069],"disallowed"],[[6070,6099],"valid"],[[6100,6102],"valid",[],"NV8"],[[6103,6103],"valid"],[[6104,6107],"valid",[],"NV8"],[[6108,6108],"valid"],[[6109,6109],"valid"],[[6110,6111],"disallowed"],[[6112,6121],"valid"],[[6122,6127],"disallowed"],[[6128,6137],"valid",[],"NV8"],[[6138,6143],"disallowed"],[[6144,6149],"valid",[],"NV8"],[[6150,6150],"disallowed"],[[6151,6154],"valid",[],"NV8"],[[6155,6157],"ignored"],[[6158,6158],"disallowed"],[[6159,6159],"disallowed"],[[6160,6169],"valid"],[[6170,6175],"disallowed"],[[6176,6263],"valid"],[[6264,6271],"disallowed"],[[6272,6313],"valid"],[[6314,6314],"valid"],[[6315,6319],"disallowed"],[[6320,6389],"valid"],[[6390,6399],"disallowed"],[[6400,6428],"valid"],[[6429,6430],"valid"],[[6431,6431],"disallowed"],[[6432,6443],"valid"],[[6444,6447],"disallowed"],[[6448,6459],"valid"],[[6460,6463],"disallowed"],[[6464,6464],"valid",[],"NV8"],[[6465,6467],"disallowed"],[[6468,6469],"valid",[],"NV8"],[[6470,6509],"valid"],[[6510,6511],"disallowed"],[[6512,6516],"valid"],[[6517,6527],"disallowed"],[[6528,6569],"valid"],[[6570,6571],"valid"],[[6572,6575],"disallowed"],[[6576,6601],"valid"],[[6602,6607],"disallowed"],[[6608,6617],"valid"],[[6618,6618],"valid",[],"XV8"],[[6619,6621],"disallowed"],[[6622,6623],"valid",[],"NV8"],[[6624,6655],"valid",[],"NV8"],[[6656,6683],"valid"],[[6684,6685],"disallowed"],[[6686,6687],"valid",[],"NV8"],[[6688,6750],"valid"],[[6751,6751],"disallowed"],[[6752,6780],"valid"],[[6781,6782],"disallowed"],[[6783,6793],"valid"],[[6794,6799],"disallowed"],[[6800,6809],"valid"],[[6810,6815],"disallowed"],[[6816,6822],"valid",[],"NV8"],[[6823,6823],"valid"],[[6824,6829],"valid",[],"NV8"],[[6830,6831],"disallowed"],[[6832,6845],"valid"],[[6846,6846],"valid",[],"NV8"],[[6847,6911],"disallowed"],[[6912,6987],"valid"],[[6988,6991],"disallowed"],[[6992,7001],"valid"],[[7002,7018],"valid",[],"NV8"],[[7019,7027],"valid"],[[7028,7036],"valid",[],"NV8"],[[7037,7039],"disallowed"],[[7040,7082],"valid"],[[7083,7085],"valid"],[[7086,7097],"valid"],[[7098,7103],"valid"],[[7104,7155],"valid"],[[7156,7163],"disallowed"],[[7164,7167],"valid",[],"NV8"],[[7168,7223],"valid"],[[7224,7226],"disallowed"],[[7227,7231],"valid",[],"NV8"],[[7232,7241],"valid"],[[7242,7244],"disallowed"],[[7245,7293],"valid"],[[7294,7295],"valid",[],"NV8"],[[7296,7359],"disallowed"],[[7360,7367],"valid",[],"NV8"],[[7368,7375],"disallowed"],[[7376,7378],"valid"],[[7379,7379],"valid",[],"NV8"],[[7380,7410],"valid"],[[7411,7414],"valid"],[[7415,7415],"disallowed"],[[7416,7417],"valid"],[[7418,7423],"disallowed"],[[7424,7467],"valid"],[[7468,7468],"mapped",[97]],[[7469,7469],"mapped",[230]],[[7470,7470],"mapped",[98]],[[7471,7471],"valid"],[[7472,7472],"mapped",[100]],[[7473,7473],"mapped",[101]],[[7474,7474],"mapped",[477]],[[7475,7475],"mapped",[103]],[[7476,7476],"mapped",[104]],[[7477,7477],"mapped",[105]],[[7478,7478],"mapped",[106]],[[7479,7479],"mapped",[107]],[[7480,7480],"mapped",[108]],[[7481,7481],"mapped",[109]],[[7482,7482],"mapped",[110]],[[7483,7483],"valid"],[[7484,7484],"mapped",[111]],[[7485,7485],"mapped",[547]],[[7486,7486],"mapped",[112]],[[7487,7487],"mapped",[114]],[[7488,7488],"mapped",[116]],[[7489,7489],"mapped",[117]],[[7490,7490],"mapped",[119]],[[7491,7491],"mapped",[97]],[[7492,7492],"mapped",[592]],[[7493,7493],"mapped",[593]],[[7494,7494],"mapped",[7426]],[[7495,7495],"mapped",[98]],[[7496,7496],"mapped",[100]],[[7497,7497],"mapped",[101]],[[7498,7498],"mapped",[601]],[[7499,7499],"mapped",[603]],[[7500,7500],"mapped",[604]],[[7501,7501],"mapped",[103]],[[7502,7502],"valid"],[[7503,7503],"mapped",[107]],[[7504,7504],"mapped",[109]],[[7505,7505],"mapped",[331]],[[7506,7506],"mapped",[111]],[[7507,7507],"mapped",[596]],[[7508,7508],"mapped",[7446]],[[7509,7509],"mapped",[7447]],[[7510,7510],"mapped",[112]],[[7511,7511],"mapped",[116]],[[7512,7512],"mapped",[117]],[[7513,7513],"mapped",[7453]],[[7514,7514],"mapped",[623]],[[7515,7515],"mapped",[118]],[[7516,7516],"mapped",[7461]],[[7517,7517],"mapped",[946]],[[7518,7518],"mapped",[947]],[[7519,7519],"mapped",[948]],[[7520,7520],"mapped",[966]],[[7521,7521],"mapped",[967]],[[7522,7522],"mapped",[105]],[[7523,7523],"mapped",[114]],[[7524,7524],"mapped",[117]],[[7525,7525],"mapped",[118]],[[7526,7526],"mapped",[946]],[[7527,7527],"mapped",[947]],[[7528,7528],"mapped",[961]],[[7529,7529],"mapped",[966]],[[7530,7530],"mapped",[967]],[[7531,7531],"valid"],[[7532,7543],"valid"],[[7544,7544],"mapped",[1085]],[[7545,7578],"valid"],[[7579,7579],"mapped",[594]],[[7580,7580],"mapped",[99]],[[7581,7581],"mapped",[597]],[[7582,7582],"mapped",[240]],[[7583,7583],"mapped",[604]],[[7584,7584],"mapped",[102]],[[7585,7585],"mapped",[607]],[[7586,7586],"mapped",[609]],[[7587,7587],"mapped",[613]],[[7588,7588],"mapped",[616]],[[7589,7589],"mapped",[617]],[[7590,7590],"mapped",[618]],[[7591,7591],"mapped",[7547]],[[7592,7592],"mapped",[669]],[[7593,7593],"mapped",[621]],[[7594,7594],"mapped",[7557]],[[7595,7595],"mapped",[671]],[[7596,7596],"mapped",[625]],[[7597,7597],"mapped",[624]],[[7598,7598],"mapped",[626]],[[7599,7599],"mapped",[627]],[[7600,7600],"mapped",[628]],[[7601,7601],"mapped",[629]],[[7602,7602],"mapped",[632]],[[7603,7603],"mapped",[642]],[[7604,7604],"mapped",[643]],[[7605,7605],"mapped",[427]],[[7606,7606],"mapped",[649]],[[7607,7607],"mapped",[650]],[[7608,7608],"mapped",[7452]],[[7609,7609],"mapped",[651]],[[7610,7610],"mapped",[652]],[[7611,7611],"mapped",[122]],[[7612,7612],"mapped",[656]],[[7613,7613],"mapped",[657]],[[7614,7614],"mapped",[658]],[[7615,7615],"mapped",[952]],[[7616,7619],"valid"],[[7620,7626],"valid"],[[7627,7654],"valid"],[[7655,7669],"valid"],[[7670,7675],"disallowed"],[[7676,7676],"valid"],[[7677,7677],"valid"],[[7678,7679],"valid"],[[7680,7680],"mapped",[7681]],[[7681,7681],"valid"],[[7682,7682],"mapped",[7683]],[[7683,7683],"valid"],[[7684,7684],"mapped",[7685]],[[7685,7685],"valid"],[[7686,7686],"mapped",[7687]],[[7687,7687],"valid"],[[7688,7688],"mapped",[7689]],[[7689,7689],"valid"],[[7690,7690],"mapped",[7691]],[[7691,7691],"valid"],[[7692,7692],"mapped",[7693]],[[7693,7693],"valid"],[[7694,7694],"mapped",[7695]],[[7695,7695],"valid"],[[7696,7696],"mapped",[7697]],[[7697,7697],"valid"],[[7698,7698],"mapped",[7699]],[[7699,7699],"valid"],[[7700,7700],"mapped",[7701]],[[7701,7701],"valid"],[[7702,7702],"mapped",[7703]],[[7703,7703],"valid"],[[7704,7704],"mapped",[7705]],[[7705,7705],"valid"],[[7706,7706],"mapped",[7707]],[[7707,7707],"valid"],[[7708,7708],"mapped",[7709]],[[7709,7709],"valid"],[[7710,7710],"mapped",[7711]],[[7711,7711],"valid"],[[7712,7712],"mapped",[7713]],[[7713,7713],"valid"],[[7714,7714],"mapped",[7715]],[[7715,7715],"valid"],[[7716,7716],"mapped",[7717]],[[7717,7717],"valid"],[[7718,7718],"mapped",[7719]],[[7719,7719],"valid"],[[7720,7720],"mapped",[7721]],[[7721,7721],"valid"],[[7722,7722],"mapped",[7723]],[[7723,7723],"valid"],[[7724,7724],"mapped",[7725]],[[7725,7725],"valid"],[[7726,7726],"mapped",[7727]],[[7727,7727],"valid"],[[7728,7728],"mapped",[7729]],[[7729,7729],"valid"],[[7730,7730],"mapped",[7731]],[[7731,7731],"valid"],[[7732,7732],"mapped",[7733]],[[7733,7733],"valid"],[[7734,7734],"mapped",[7735]],[[7735,7735],"valid"],[[7736,7736],"mapped",[7737]],[[7737,7737],"valid"],[[7738,7738],"mapped",[7739]],[[7739,7739],"valid"],[[7740,7740],"mapped",[7741]],[[7741,7741],"valid"],[[7742,7742],"mapped",[7743]],[[7743,7743],"valid"],[[7744,7744],"mapped",[7745]],[[7745,7745],"valid"],[[7746,7746],"mapped",[7747]],[[7747,7747],"valid"],[[7748,7748],"mapped",[7749]],[[7749,7749],"valid"],[[7750,7750],"mapped",[7751]],[[7751,7751],"valid"],[[7752,7752],"mapped",[7753]],[[7753,7753],"valid"],[[7754,7754],"mapped",[7755]],[[7755,7755],"valid"],[[7756,7756],"mapped",[7757]],[[7757,7757],"valid"],[[7758,7758],"mapped",[7759]],[[7759,7759],"valid"],[[7760,7760],"mapped",[7761]],[[7761,7761],"valid"],[[7762,7762],"mapped",[7763]],[[7763,7763],"valid"],[[7764,7764],"mapped",[7765]],[[7765,7765],"valid"],[[7766,7766],"mapped",[7767]],[[7767,7767],"valid"],[[7768,7768],"mapped",[7769]],[[7769,7769],"valid"],[[7770,7770],"mapped",[7771]],[[7771,7771],"valid"],[[7772,7772],"mapped",[7773]],[[7773,7773],"valid"],[[7774,7774],"mapped",[7775]],[[7775,7775],"valid"],[[7776,7776],"mapped",[7777]],[[7777,7777],"valid"],[[7778,7778],"mapped",[7779]],[[7779,7779],"valid"],[[7780,7780],"mapped",[7781]],[[7781,7781],"valid"],[[7782,7782],"mapped",[7783]],[[7783,7783],"valid"],[[7784,7784],"mapped",[7785]],[[7785,7785],"valid"],[[7786,7786],"mapped",[7787]],[[7787,7787],"valid"],[[7788,7788],"mapped",[7789]],[[7789,7789],"valid"],[[7790,7790],"mapped",[7791]],[[7791,7791],"valid"],[[7792,7792],"mapped",[7793]],[[7793,7793],"valid"],[[7794,7794],"mapped",[7795]],[[7795,7795],"valid"],[[7796,7796],"mapped",[7797]],[[7797,7797],"valid"],[[7798,7798],"mapped",[7799]],[[7799,7799],"valid"],[[7800,7800],"mapped",[7801]],[[7801,7801],"valid"],[[7802,7802],"mapped",[7803]],[[7803,7803],"valid"],[[7804,7804],"mapped",[7805]],[[7805,7805],"valid"],[[7806,7806],"mapped",[7807]],[[7807,7807],"valid"],[[7808,7808],"mapped",[7809]],[[7809,7809],"valid"],[[7810,7810],"mapped",[7811]],[[7811,7811],"valid"],[[7812,7812],"mapped",[7813]],[[7813,7813],"valid"],[[7814,7814],"mapped",[7815]],[[7815,7815],"valid"],[[7816,7816],"mapped",[7817]],[[7817,7817],"valid"],[[7818,7818],"mapped",[7819]],[[7819,7819],"valid"],[[7820,7820],"mapped",[7821]],[[7821,7821],"valid"],[[7822,7822],"mapped",[7823]],[[7823,7823],"valid"],[[7824,7824],"mapped",[7825]],[[7825,7825],"valid"],[[7826,7826],"mapped",[7827]],[[7827,7827],"valid"],[[7828,7828],"mapped",[7829]],[[7829,7833],"valid"],[[7834,7834],"mapped",[97,702]],[[7835,7835],"mapped",[7777]],[[7836,7837],"valid"],[[7838,7838],"mapped",[115,115]],[[7839,7839],"valid"],[[7840,7840],"mapped",[7841]],[[7841,7841],"valid"],[[7842,7842],"mapped",[7843]],[[7843,7843],"valid"],[[7844,7844],"mapped",[7845]],[[7845,7845],"valid"],[[7846,7846],"mapped",[7847]],[[7847,7847],"valid"],[[7848,7848],"mapped",[7849]],[[7849,7849],"valid"],[[7850,7850],"mapped",[7851]],[[7851,7851],"valid"],[[7852,7852],"mapped",[7853]],[[7853,7853],"valid"],[[7854,7854],"mapped",[7855]],[[7855,7855],"valid"],[[7856,7856],"mapped",[7857]],[[7857,7857],"valid"],[[7858,7858],"mapped",[7859]],[[7859,7859],"valid"],[[7860,7860],"mapped",[7861]],[[7861,7861],"valid"],[[7862,7862],"mapped",[7863]],[[7863,7863],"valid"],[[7864,7864],"mapped",[7865]],[[7865,7865],"valid"],[[7866,7866],"mapped",[7867]],[[7867,7867],"valid"],[[7868,7868],"mapped",[7869]],[[7869,7869],"valid"],[[7870,7870],"mapped",[7871]],[[7871,7871],"valid"],[[7872,7872],"mapped",[7873]],[[7873,7873],"valid"],[[7874,7874],"mapped",[7875]],[[7875,7875],"valid"],[[7876,7876],"mapped",[7877]],[[7877,7877],"valid"],[[7878,7878],"mapped",[7879]],[[7879,7879],"valid"],[[7880,7880],"mapped",[7881]],[[7881,7881],"valid"],[[7882,7882],"mapped",[7883]],[[7883,7883],"valid"],[[7884,7884],"mapped",[7885]],[[7885,7885],"valid"],[[7886,7886],"mapped",[7887]],[[7887,7887],"valid"],[[7888,7888],"mapped",[7889]],[[7889,7889],"valid"],[[7890,7890],"mapped",[7891]],[[7891,7891],"valid"],[[7892,7892],"mapped",[7893]],[[7893,7893],"valid"],[[7894,7894],"mapped",[7895]],[[7895,7895],"valid"],[[7896,7896],"mapped",[7897]],[[7897,7897],"valid"],[[7898,7898],"mapped",[7899]],[[7899,7899],"valid"],[[7900,7900],"mapped",[7901]],[[7901,7901],"valid"],[[7902,7902],"mapped",[7903]],[[7903,7903],"valid"],[[7904,7904],"mapped",[7905]],[[7905,7905],"valid"],[[7906,7906],"mapped",[7907]],[[7907,7907],"valid"],[[7908,7908],"mapped",[7909]],[[7909,7909],"valid"],[[7910,7910],"mapped",[7911]],[[7911,7911],"valid"],[[7912,7912],"mapped",[7913]],[[7913,7913],"valid"],[[7914,7914],"mapped",[7915]],[[7915,7915],"valid"],[[7916,7916],"mapped",[7917]],[[7917,7917],"valid"],[[7918,7918],"mapped",[7919]],[[7919,7919],"valid"],[[7920,7920],"mapped",[7921]],[[7921,7921],"valid"],[[7922,7922],"mapped",[7923]],[[7923,7923],"valid"],[[7924,7924],"mapped",[7925]],[[7925,7925],"valid"],[[7926,7926],"mapped",[7927]],[[7927,7927],"valid"],[[7928,7928],"mapped",[7929]],[[7929,7929],"valid"],[[7930,7930],"mapped",[7931]],[[7931,7931],"valid"],[[7932,7932],"mapped",[7933]],[[7933,7933],"valid"],[[7934,7934],"mapped",[7935]],[[7935,7935],"valid"],[[7936,7943],"valid"],[[7944,7944],"mapped",[7936]],[[7945,7945],"mapped",[7937]],[[7946,7946],"mapped",[7938]],[[7947,7947],"mapped",[7939]],[[7948,7948],"mapped",[7940]],[[7949,7949],"mapped",[7941]],[[7950,7950],"mapped",[7942]],[[7951,7951],"mapped",[7943]],[[7952,7957],"valid"],[[7958,7959],"disallowed"],[[7960,7960],"mapped",[7952]],[[7961,7961],"mapped",[7953]],[[7962,7962],"mapped",[7954]],[[7963,7963],"mapped",[7955]],[[7964,7964],"mapped",[7956]],[[7965,7965],"mapped",[7957]],[[7966,7967],"disallowed"],[[7968,7975],"valid"],[[7976,7976],"mapped",[7968]],[[7977,7977],"mapped",[7969]],[[7978,7978],"mapped",[7970]],[[7979,7979],"mapped",[7971]],[[7980,7980],"mapped",[7972]],[[7981,7981],"mapped",[7973]],[[7982,7982],"mapped",[7974]],[[7983,7983],"mapped",[7975]],[[7984,7991],"valid"],[[7992,7992],"mapped",[7984]],[[7993,7993],"mapped",[7985]],[[7994,7994],"mapped",[7986]],[[7995,7995],"mapped",[7987]],[[7996,7996],"mapped",[7988]],[[7997,7997],"mapped",[7989]],[[7998,7998],"mapped",[7990]],[[7999,7999],"mapped",[7991]],[[8000,8005],"valid"],[[8006,8007],"disallowed"],[[8008,8008],"mapped",[8000]],[[8009,8009],"mapped",[8001]],[[8010,8010],"mapped",[8002]],[[8011,8011],"mapped",[8003]],[[8012,8012],"mapped",[8004]],[[8013,8013],"mapped",[8005]],[[8014,8015],"disallowed"],[[8016,8023],"valid"],[[8024,8024],"disallowed"],[[8025,8025],"mapped",[8017]],[[8026,8026],"disallowed"],[[8027,8027],"mapped",[8019]],[[8028,8028],"disallowed"],[[8029,8029],"mapped",[8021]],[[8030,8030],"disallowed"],[[8031,8031],"mapped",[8023]],[[8032,8039],"valid"],[[8040,8040],"mapped",[8032]],[[8041,8041],"mapped",[8033]],[[8042,8042],"mapped",[8034]],[[8043,8043],"mapped",[8035]],[[8044,8044],"mapped",[8036]],[[8045,8045],"mapped",[8037]],[[8046,8046],"mapped",[8038]],[[8047,8047],"mapped",[8039]],[[8048,8048],"valid"],[[8049,8049],"mapped",[940]],[[8050,8050],"valid"],[[8051,8051],"mapped",[941]],[[8052,8052],"valid"],[[8053,8053],"mapped",[942]],[[8054,8054],"valid"],[[8055,8055],"mapped",[943]],[[8056,8056],"valid"],[[8057,8057],"mapped",[972]],[[8058,8058],"valid"],[[8059,8059],"mapped",[973]],[[8060,8060],"valid"],[[8061,8061],"mapped",[974]],[[8062,8063],"disallowed"],[[8064,8064],"mapped",[7936,953]],[[8065,8065],"mapped",[7937,953]],[[8066,8066],"mapped",[7938,953]],[[8067,8067],"mapped",[7939,953]],[[8068,8068],"mapped",[7940,953]],[[8069,8069],"mapped",[7941,953]],[[8070,8070],"mapped",[7942,953]],[[8071,8071],"mapped",[7943,953]],[[8072,8072],"mapped",[7936,953]],[[8073,8073],"mapped",[7937,953]],[[8074,8074],"mapped",[7938,953]],[[8075,8075],"mapped",[7939,953]],[[8076,8076],"mapped",[7940,953]],[[8077,8077],"mapped",[7941,953]],[[8078,8078],"mapped",[7942,953]],[[8079,8079],"mapped",[7943,953]],[[8080,8080],"mapped",[7968,953]],[[8081,8081],"mapped",[7969,953]],[[8082,8082],"mapped",[7970,953]],[[8083,8083],"mapped",[7971,953]],[[8084,8084],"mapped",[7972,953]],[[8085,8085],"mapped",[7973,953]],[[8086,8086],"mapped",[7974,953]],[[8087,8087],"mapped",[7975,953]],[[8088,8088],"mapped",[7968,953]],[[8089,8089],"mapped",[7969,953]],[[8090,8090],"mapped",[7970,953]],[[8091,8091],"mapped",[7971,953]],[[8092,8092],"mapped",[7972,953]],[[8093,8093],"mapped",[7973,953]],[[8094,8094],"mapped",[7974,953]],[[8095,8095],"mapped",[7975,953]],[[8096,8096],"mapped",[8032,953]],[[8097,8097],"mapped",[8033,953]],[[8098,8098],"mapped",[8034,953]],[[8099,8099],"mapped",[8035,953]],[[8100,8100],"mapped",[8036,953]],[[8101,8101],"mapped",[8037,953]],[[8102,8102],"mapped",[8038,953]],[[8103,8103],"mapped",[8039,953]],[[8104,8104],"mapped",[8032,953]],[[8105,8105],"mapped",[8033,953]],[[8106,8106],"mapped",[8034,953]],[[8107,8107],"mapped",[8035,953]],[[8108,8108],"mapped",[8036,953]],[[8109,8109],"mapped",[8037,953]],[[8110,8110],"mapped",[8038,953]],[[8111,8111],"mapped",[8039,953]],[[8112,8113],"valid"],[[8114,8114],"mapped",[8048,953]],[[8115,8115],"mapped",[945,953]],[[8116,8116],"mapped",[940,953]],[[8117,8117],"disallowed"],[[8118,8118],"valid"],[[8119,8119],"mapped",[8118,953]],[[8120,8120],"mapped",[8112]],[[8121,8121],"mapped",[8113]],[[8122,8122],"mapped",[8048]],[[8123,8123],"mapped",[940]],[[8124,8124],"mapped",[945,953]],[[8125,8125],"disallowed_STD3_mapped",[32,787]],[[8126,8126],"mapped",[953]],[[8127,8127],"disallowed_STD3_mapped",[32,787]],[[8128,8128],"disallowed_STD3_mapped",[32,834]],[[8129,8129],"disallowed_STD3_mapped",[32,776,834]],[[8130,8130],"mapped",[8052,953]],[[8131,8131],"mapped",[951,953]],[[8132,8132],"mapped",[942,953]],[[8133,8133],"disallowed"],[[8134,8134],"valid"],[[8135,8135],"mapped",[8134,953]],[[8136,8136],"mapped",[8050]],[[8137,8137],"mapped",[941]],[[8138,8138],"mapped",[8052]],[[8139,8139],"mapped",[942]],[[8140,8140],"mapped",[951,953]],[[8141,8141],"disallowed_STD3_mapped",[32,787,768]],[[8142,8142],"disallowed_STD3_mapped",[32,787,769]],[[8143,8143],"disallowed_STD3_mapped",[32,787,834]],[[8144,8146],"valid"],[[8147,8147],"mapped",[912]],[[8148,8149],"disallowed"],[[8150,8151],"valid"],[[8152,8152],"mapped",[8144]],[[8153,8153],"mapped",[8145]],[[8154,8154],"mapped",[8054]],[[8155,8155],"mapped",[943]],[[8156,8156],"disallowed"],[[8157,8157],"disallowed_STD3_mapped",[32,788,768]],[[8158,8158],"disallowed_STD3_mapped",[32,788,769]],[[8159,8159],"disallowed_STD3_mapped",[32,788,834]],[[8160,8162],"valid"],[[8163,8163],"mapped",[944]],[[8164,8167],"valid"],[[8168,8168],"mapped",[8160]],[[8169,8169],"mapped",[8161]],[[8170,8170],"mapped",[8058]],[[8171,8171],"mapped",[973]],[[8172,8172],"mapped",[8165]],[[8173,8173],"disallowed_STD3_mapped",[32,776,768]],[[8174,8174],"disallowed_STD3_mapped",[32,776,769]],[[8175,8175],"disallowed_STD3_mapped",[96]],[[8176,8177],"disallowed"],[[8178,8178],"mapped",[8060,953]],[[8179,8179],"mapped",[969,953]],[[8180,8180],"mapped",[974,953]],[[8181,8181],"disallowed"],[[8182,8182],"valid"],[[8183,8183],"mapped",[8182,953]],[[8184,8184],"mapped",[8056]],[[8185,8185],"mapped",[972]],[[8186,8186],"mapped",[8060]],[[8187,8187],"mapped",[974]],[[8188,8188],"mapped",[969,953]],[[8189,8189],"disallowed_STD3_mapped",[32,769]],[[8190,8190],"disallowed_STD3_mapped",[32,788]],[[8191,8191],"disallowed"],[[8192,8202],"disallowed_STD3_mapped",[32]],[[8203,8203],"ignored"],[[8204,8205],"deviation",[]],[[8206,8207],"disallowed"],[[8208,8208],"valid",[],"NV8"],[[8209,8209],"mapped",[8208]],[[8210,8214],"valid",[],"NV8"],[[8215,8215],"disallowed_STD3_mapped",[32,819]],[[8216,8227],"valid",[],"NV8"],[[8228,8230],"disallowed"],[[8231,8231],"valid",[],"NV8"],[[8232,8238],"disallowed"],[[8239,8239],"disallowed_STD3_mapped",[32]],[[8240,8242],"valid",[],"NV8"],[[8243,8243],"mapped",[8242,8242]],[[8244,8244],"mapped",[8242,8242,8242]],[[8245,8245],"valid",[],"NV8"],[[8246,8246],"mapped",[8245,8245]],[[8247,8247],"mapped",[8245,8245,8245]],[[8248,8251],"valid",[],"NV8"],[[8252,8252],"disallowed_STD3_mapped",[33,33]],[[8253,8253],"valid",[],"NV8"],[[8254,8254],"disallowed_STD3_mapped",[32,773]],[[8255,8262],"valid",[],"NV8"],[[8263,8263],"disallowed_STD3_mapped",[63,63]],[[8264,8264],"disallowed_STD3_mapped",[63,33]],[[8265,8265],"disallowed_STD3_mapped",[33,63]],[[8266,8269],"valid",[],"NV8"],[[8270,8274],"valid",[],"NV8"],[[8275,8276],"valid",[],"NV8"],[[8277,8278],"valid",[],"NV8"],[[8279,8279],"mapped",[8242,8242,8242,8242]],[[8280,8286],"valid",[],"NV8"],[[8287,8287],"disallowed_STD3_mapped",[32]],[[8288,8288],"ignored"],[[8289,8291],"disallowed"],[[8292,8292],"ignored"],[[8293,8293],"disallowed"],[[8294,8297],"disallowed"],[[8298,8303],"disallowed"],[[8304,8304],"mapped",[48]],[[8305,8305],"mapped",[105]],[[8306,8307],"disallowed"],[[8308,8308],"mapped",[52]],[[8309,8309],"mapped",[53]],[[8310,8310],"mapped",[54]],[[8311,8311],"mapped",[55]],[[8312,8312],"mapped",[56]],[[8313,8313],"mapped",[57]],[[8314,8314],"disallowed_STD3_mapped",[43]],[[8315,8315],"mapped",[8722]],[[8316,8316],"disallowed_STD3_mapped",[61]],[[8317,8317],"disallowed_STD3_mapped",[40]],[[8318,8318],"disallowed_STD3_mapped",[41]],[[8319,8319],"mapped",[110]],[[8320,8320],"mapped",[48]],[[8321,8321],"mapped",[49]],[[8322,8322],"mapped",[50]],[[8323,8323],"mapped",[51]],[[8324,8324],"mapped",[52]],[[8325,8325],"mapped",[53]],[[8326,8326],"mapped",[54]],[[8327,8327],"mapped",[55]],[[8328,8328],"mapped",[56]],[[8329,8329],"mapped",[57]],[[8330,8330],"disallowed_STD3_mapped",[43]],[[8331,8331],"mapped",[8722]],[[8332,8332],"disallowed_STD3_mapped",[61]],[[8333,8333],"disallowed_STD3_mapped",[40]],[[8334,8334],"disallowed_STD3_mapped",[41]],[[8335,8335],"disallowed"],[[8336,8336],"mapped",[97]],[[8337,8337],"mapped",[101]],[[8338,8338],"mapped",[111]],[[8339,8339],"mapped",[120]],[[8340,8340],"mapped",[601]],[[8341,8341],"mapped",[104]],[[8342,8342],"mapped",[107]],[[8343,8343],"mapped",[108]],[[8344,8344],"mapped",[109]],[[8345,8345],"mapped",[110]],[[8346,8346],"mapped",[112]],[[8347,8347],"mapped",[115]],[[8348,8348],"mapped",[116]],[[8349,8351],"disallowed"],[[8352,8359],"valid",[],"NV8"],[[8360,8360],"mapped",[114,115]],[[8361,8362],"valid",[],"NV8"],[[8363,8363],"valid",[],"NV8"],[[8364,8364],"valid",[],"NV8"],[[8365,8367],"valid",[],"NV8"],[[8368,8369],"valid",[],"NV8"],[[8370,8373],"valid",[],"NV8"],[[8374,8376],"valid",[],"NV8"],[[8377,8377],"valid",[],"NV8"],[[8378,8378],"valid",[],"NV8"],[[8379,8381],"valid",[],"NV8"],[[8382,8382],"valid",[],"NV8"],[[8383,8399],"disallowed"],[[8400,8417],"valid",[],"NV8"],[[8418,8419],"valid",[],"NV8"],[[8420,8426],"valid",[],"NV8"],[[8427,8427],"valid",[],"NV8"],[[8428,8431],"valid",[],"NV8"],[[8432,8432],"valid",[],"NV8"],[[8433,8447],"disallowed"],[[8448,8448],"disallowed_STD3_mapped",[97,47,99]],[[8449,8449],"disallowed_STD3_mapped",[97,47,115]],[[8450,8450],"mapped",[99]],[[8451,8451],"mapped",[176,99]],[[8452,8452],"valid",[],"NV8"],[[8453,8453],"disallowed_STD3_mapped",[99,47,111]],[[8454,8454],"disallowed_STD3_mapped",[99,47,117]],[[8455,8455],"mapped",[603]],[[8456,8456],"valid",[],"NV8"],[[8457,8457],"mapped",[176,102]],[[8458,8458],"mapped",[103]],[[8459,8462],"mapped",[104]],[[8463,8463],"mapped",[295]],[[8464,8465],"mapped",[105]],[[8466,8467],"mapped",[108]],[[8468,8468],"valid",[],"NV8"],[[8469,8469],"mapped",[110]],[[8470,8470],"mapped",[110,111]],[[8471,8472],"valid",[],"NV8"],[[8473,8473],"mapped",[112]],[[8474,8474],"mapped",[113]],[[8475,8477],"mapped",[114]],[[8478,8479],"valid",[],"NV8"],[[8480,8480],"mapped",[115,109]],[[8481,8481],"mapped",[116,101,108]],[[8482,8482],"mapped",[116,109]],[[8483,8483],"valid",[],"NV8"],[[8484,8484],"mapped",[122]],[[8485,8485],"valid",[],"NV8"],[[8486,8486],"mapped",[969]],[[8487,8487],"valid",[],"NV8"],[[8488,8488],"mapped",[122]],[[8489,8489],"valid",[],"NV8"],[[8490,8490],"mapped",[107]],[[8491,8491],"mapped",[229]],[[8492,8492],"mapped",[98]],[[8493,8493],"mapped",[99]],[[8494,8494],"valid",[],"NV8"],[[8495,8496],"mapped",[101]],[[8497,8497],"mapped",[102]],[[8498,8498],"disallowed"],[[8499,8499],"mapped",[109]],[[8500,8500],"mapped",[111]],[[8501,8501],"mapped",[1488]],[[8502,8502],"mapped",[1489]],[[8503,8503],"mapped",[1490]],[[8504,8504],"mapped",[1491]],[[8505,8505],"mapped",[105]],[[8506,8506],"valid",[],"NV8"],[[8507,8507],"mapped",[102,97,120]],[[8508,8508],"mapped",[960]],[[8509,8510],"mapped",[947]],[[8511,8511],"mapped",[960]],[[8512,8512],"mapped",[8721]],[[8513,8516],"valid",[],"NV8"],[[8517,8518],"mapped",[100]],[[8519,8519],"mapped",[101]],[[8520,8520],"mapped",[105]],[[8521,8521],"mapped",[106]],[[8522,8523],"valid",[],"NV8"],[[8524,8524],"valid",[],"NV8"],[[8525,8525],"valid",[],"NV8"],[[8526,8526],"valid"],[[8527,8527],"valid",[],"NV8"],[[8528,8528],"mapped",[49,8260,55]],[[8529,8529],"mapped",[49,8260,57]],[[8530,8530],"mapped",[49,8260,49,48]],[[8531,8531],"mapped",[49,8260,51]],[[8532,8532],"mapped",[50,8260,51]],[[8533,8533],"mapped",[49,8260,53]],[[8534,8534],"mapped",[50,8260,53]],[[8535,8535],"mapped",[51,8260,53]],[[8536,8536],"mapped",[52,8260,53]],[[8537,8537],"mapped",[49,8260,54]],[[8538,8538],"mapped",[53,8260,54]],[[8539,8539],"mapped",[49,8260,56]],[[8540,8540],"mapped",[51,8260,56]],[[8541,8541],"mapped",[53,8260,56]],[[8542,8542],"mapped",[55,8260,56]],[[8543,8543],"mapped",[49,8260]],[[8544,8544],"mapped",[105]],[[8545,8545],"mapped",[105,105]],[[8546,8546],"mapped",[105,105,105]],[[8547,8547],"mapped",[105,118]],[[8548,8548],"mapped",[118]],[[8549,8549],"mapped",[118,105]],[[8550,8550],"mapped",[118,105,105]],[[8551,8551],"mapped",[118,105,105,105]],[[8552,8552],"mapped",[105,120]],[[8553,8553],"mapped",[120]],[[8554,8554],"mapped",[120,105]],[[8555,8555],"mapped",[120,105,105]],[[8556,8556],"mapped",[108]],[[8557,8557],"mapped",[99]],[[8558,8558],"mapped",[100]],[[8559,8559],"mapped",[109]],[[8560,8560],"mapped",[105]],[[8561,8561],"mapped",[105,105]],[[8562,8562],"mapped",[105,105,105]],[[8563,8563],"mapped",[105,118]],[[8564,8564],"mapped",[118]],[[8565,8565],"mapped",[118,105]],[[8566,8566],"mapped",[118,105,105]],[[8567,8567],"mapped",[118,105,105,105]],[[8568,8568],"mapped",[105,120]],[[8569,8569],"mapped",[120]],[[8570,8570],"mapped",[120,105]],[[8571,8571],"mapped",[120,105,105]],[[8572,8572],"mapped",[108]],[[8573,8573],"mapped",[99]],[[8574,8574],"mapped",[100]],[[8575,8575],"mapped",[109]],[[8576,8578],"valid",[],"NV8"],[[8579,8579],"disallowed"],[[8580,8580],"valid"],[[8581,8584],"valid",[],"NV8"],[[8585,8585],"mapped",[48,8260,51]],[[8586,8587],"valid",[],"NV8"],[[8588,8591],"disallowed"],[[8592,8682],"valid",[],"NV8"],[[8683,8691],"valid",[],"NV8"],[[8692,8703],"valid",[],"NV8"],[[8704,8747],"valid",[],"NV8"],[[8748,8748],"mapped",[8747,8747]],[[8749,8749],"mapped",[8747,8747,8747]],[[8750,8750],"valid",[],"NV8"],[[8751,8751],"mapped",[8750,8750]],[[8752,8752],"mapped",[8750,8750,8750]],[[8753,8799],"valid",[],"NV8"],[[8800,8800],"disallowed_STD3_valid"],[[8801,8813],"valid",[],"NV8"],[[8814,8815],"disallowed_STD3_valid"],[[8816,8945],"valid",[],"NV8"],[[8946,8959],"valid",[],"NV8"],[[8960,8960],"valid",[],"NV8"],[[8961,8961],"valid",[],"NV8"],[[8962,9000],"valid",[],"NV8"],[[9001,9001],"mapped",[12296]],[[9002,9002],"mapped",[12297]],[[9003,9082],"valid",[],"NV8"],[[9083,9083],"valid",[],"NV8"],[[9084,9084],"valid",[],"NV8"],[[9085,9114],"valid",[],"NV8"],[[9115,9166],"valid",[],"NV8"],[[9167,9168],"valid",[],"NV8"],[[9169,9179],"valid",[],"NV8"],[[9180,9191],"valid",[],"NV8"],[[9192,9192],"valid",[],"NV8"],[[9193,9203],"valid",[],"NV8"],[[9204,9210],"valid",[],"NV8"],[[9211,9215],"disallowed"],[[9216,9252],"valid",[],"NV8"],[[9253,9254],"valid",[],"NV8"],[[9255,9279],"disallowed"],[[9280,9290],"valid",[],"NV8"],[[9291,9311],"disallowed"],[[9312,9312],"mapped",[49]],[[9313,9313],"mapped",[50]],[[9314,9314],"mapped",[51]],[[9315,9315],"mapped",[52]],[[9316,9316],"mapped",[53]],[[9317,9317],"mapped",[54]],[[9318,9318],"mapped",[55]],[[9319,9319],"mapped",[56]],[[9320,9320],"mapped",[57]],[[9321,9321],"mapped",[49,48]],[[9322,9322],"mapped",[49,49]],[[9323,9323],"mapped",[49,50]],[[9324,9324],"mapped",[49,51]],[[9325,9325],"mapped",[49,52]],[[9326,9326],"mapped",[49,53]],[[9327,9327],"mapped",[49,54]],[[9328,9328],"mapped",[49,55]],[[9329,9329],"mapped",[49,56]],[[9330,9330],"mapped",[49,57]],[[9331,9331],"mapped",[50,48]],[[9332,9332],"disallowed_STD3_mapped",[40,49,41]],[[9333,9333],"disallowed_STD3_mapped",[40,50,41]],[[9334,9334],"disallowed_STD3_mapped",[40,51,41]],[[9335,9335],"disallowed_STD3_mapped",[40,52,41]],[[9336,9336],"disallowed_STD3_mapped",[40,53,41]],[[9337,9337],"disallowed_STD3_mapped",[40,54,41]],[[9338,9338],"disallowed_STD3_mapped",[40,55,41]],[[9339,9339],"disallowed_STD3_mapped",[40,56,41]],[[9340,9340],"disallowed_STD3_mapped",[40,57,41]],[[9341,9341],"disallowed_STD3_mapped",[40,49,48,41]],[[9342,9342],"disallowed_STD3_mapped",[40,49,49,41]],[[9343,9343],"disallowed_STD3_mapped",[40,49,50,41]],[[9344,9344],"disallowed_STD3_mapped",[40,49,51,41]],[[9345,9345],"disallowed_STD3_mapped",[40,49,52,41]],[[9346,9346],"disallowed_STD3_mapped",[40,49,53,41]],[[9347,9347],"disallowed_STD3_mapped",[40,49,54,41]],[[9348,9348],"disallowed_STD3_mapped",[40,49,55,41]],[[9349,9349],"disallowed_STD3_mapped",[40,49,56,41]],[[9350,9350],"disallowed_STD3_mapped",[40,49,57,41]],[[9351,9351],"disallowed_STD3_mapped",[40,50,48,41]],[[9352,9371],"disallowed"],[[9372,9372],"disallowed_STD3_mapped",[40,97,41]],[[9373,9373],"disallowed_STD3_mapped",[40,98,41]],[[9374,9374],"disallowed_STD3_mapped",[40,99,41]],[[9375,9375],"disallowed_STD3_mapped",[40,100,41]],[[9376,9376],"disallowed_STD3_mapped",[40,101,41]],[[9377,9377],"disallowed_STD3_mapped",[40,102,41]],[[9378,9378],"disallowed_STD3_mapped",[40,103,41]],[[9379,9379],"disallowed_STD3_mapped",[40,104,41]],[[9380,9380],"disallowed_STD3_mapped",[40,105,41]],[[9381,9381],"disallowed_STD3_mapped",[40,106,41]],[[9382,9382],"disallowed_STD3_mapped",[40,107,41]],[[9383,9383],"disallowed_STD3_mapped",[40,108,41]],[[9384,9384],"disallowed_STD3_mapped",[40,109,41]],[[9385,9385],"disallowed_STD3_mapped",[40,110,41]],[[9386,9386],"disallowed_STD3_mapped",[40,111,41]],[[9387,9387],"disallowed_STD3_mapped",[40,112,41]],[[9388,9388],"disallowed_STD3_mapped",[40,113,41]],[[9389,9389],"disallowed_STD3_mapped",[40,114,41]],[[9390,9390],"disallowed_STD3_mapped",[40,115,41]],[[9391,9391],"disallowed_STD3_mapped",[40,116,41]],[[9392,9392],"disallowed_STD3_mapped",[40,117,41]],[[9393,9393],"disallowed_STD3_mapped",[40,118,41]],[[9394,9394],"disallowed_STD3_mapped",[40,119,41]],[[9395,9395],"disallowed_STD3_mapped",[40,120,41]],[[9396,9396],"disallowed_STD3_mapped",[40,121,41]],[[9397,9397],"disallowed_STD3_mapped",[40,122,41]],[[9398,9398],"mapped",[97]],[[9399,9399],"mapped",[98]],[[9400,9400],"mapped",[99]],[[9401,9401],"mapped",[100]],[[9402,9402],"mapped",[101]],[[9403,9403],"mapped",[102]],[[9404,9404],"mapped",[103]],[[9405,9405],"mapped",[104]],[[9406,9406],"mapped",[105]],[[9407,9407],"mapped",[106]],[[9408,9408],"mapped",[107]],[[9409,9409],"mapped",[108]],[[9410,9410],"mapped",[109]],[[9411,9411],"mapped",[110]],[[9412,9412],"mapped",[111]],[[9413,9413],"mapped",[112]],[[9414,9414],"mapped",[113]],[[9415,9415],"mapped",[114]],[[9416,9416],"mapped",[115]],[[9417,9417],"mapped",[116]],[[9418,9418],"mapped",[117]],[[9419,9419],"mapped",[118]],[[9420,9420],"mapped",[119]],[[9421,9421],"mapped",[120]],[[9422,9422],"mapped",[121]],[[9423,9423],"mapped",[122]],[[9424,9424],"mapped",[97]],[[9425,9425],"mapped",[98]],[[9426,9426],"mapped",[99]],[[9427,9427],"mapped",[100]],[[9428,9428],"mapped",[101]],[[9429,9429],"mapped",[102]],[[9430,9430],"mapped",[103]],[[9431,9431],"mapped",[104]],[[9432,9432],"mapped",[105]],[[9433,9433],"mapped",[106]],[[9434,9434],"mapped",[107]],[[9435,9435],"mapped",[108]],[[9436,9436],"mapped",[109]],[[9437,9437],"mapped",[110]],[[9438,9438],"mapped",[111]],[[9439,9439],"mapped",[112]],[[9440,9440],"mapped",[113]],[[9441,9441],"mapped",[114]],[[9442,9442],"mapped",[115]],[[9443,9443],"mapped",[116]],[[9444,9444],"mapped",[117]],[[9445,9445],"mapped",[118]],[[9446,9446],"mapped",[119]],[[9447,9447],"mapped",[120]],[[9448,9448],"mapped",[121]],[[9449,9449],"mapped",[122]],[[9450,9450],"mapped",[48]],[[9451,9470],"valid",[],"NV8"],[[9471,9471],"valid",[],"NV8"],[[9472,9621],"valid",[],"NV8"],[[9622,9631],"valid",[],"NV8"],[[9632,9711],"valid",[],"NV8"],[[9712,9719],"valid",[],"NV8"],[[9720,9727],"valid",[],"NV8"],[[9728,9747],"valid",[],"NV8"],[[9748,9749],"valid",[],"NV8"],[[9750,9751],"valid",[],"NV8"],[[9752,9752],"valid",[],"NV8"],[[9753,9753],"valid",[],"NV8"],[[9754,9839],"valid",[],"NV8"],[[9840,9841],"valid",[],"NV8"],[[9842,9853],"valid",[],"NV8"],[[9854,9855],"valid",[],"NV8"],[[9856,9865],"valid",[],"NV8"],[[9866,9873],"valid",[],"NV8"],[[9874,9884],"valid",[],"NV8"],[[9885,9885],"valid",[],"NV8"],[[9886,9887],"valid",[],"NV8"],[[9888,9889],"valid",[],"NV8"],[[9890,9905],"valid",[],"NV8"],[[9906,9906],"valid",[],"NV8"],[[9907,9916],"valid",[],"NV8"],[[9917,9919],"valid",[],"NV8"],[[9920,9923],"valid",[],"NV8"],[[9924,9933],"valid",[],"NV8"],[[9934,9934],"valid",[],"NV8"],[[9935,9953],"valid",[],"NV8"],[[9954,9954],"valid",[],"NV8"],[[9955,9955],"valid",[],"NV8"],[[9956,9959],"valid",[],"NV8"],[[9960,9983],"valid",[],"NV8"],[[9984,9984],"valid",[],"NV8"],[[9985,9988],"valid",[],"NV8"],[[9989,9989],"valid",[],"NV8"],[[9990,9993],"valid",[],"NV8"],[[9994,9995],"valid",[],"NV8"],[[9996,10023],"valid",[],"NV8"],[[10024,10024],"valid",[],"NV8"],[[10025,10059],"valid",[],"NV8"],[[10060,10060],"valid",[],"NV8"],[[10061,10061],"valid",[],"NV8"],[[10062,10062],"valid",[],"NV8"],[[10063,10066],"valid",[],"NV8"],[[10067,10069],"valid",[],"NV8"],[[10070,10070],"valid",[],"NV8"],[[10071,10071],"valid",[],"NV8"],[[10072,10078],"valid",[],"NV8"],[[10079,10080],"valid",[],"NV8"],[[10081,10087],"valid",[],"NV8"],[[10088,10101],"valid",[],"NV8"],[[10102,10132],"valid",[],"NV8"],[[10133,10135],"valid",[],"NV8"],[[10136,10159],"valid",[],"NV8"],[[10160,10160],"valid",[],"NV8"],[[10161,10174],"valid",[],"NV8"],[[10175,10175],"valid",[],"NV8"],[[10176,10182],"valid",[],"NV8"],[[10183,10186],"valid",[],"NV8"],[[10187,10187],"valid",[],"NV8"],[[10188,10188],"valid",[],"NV8"],[[10189,10189],"valid",[],"NV8"],[[10190,10191],"valid",[],"NV8"],[[10192,10219],"valid",[],"NV8"],[[10220,10223],"valid",[],"NV8"],[[10224,10239],"valid",[],"NV8"],[[10240,10495],"valid",[],"NV8"],[[10496,10763],"valid",[],"NV8"],[[10764,10764],"mapped",[8747,8747,8747,8747]],[[10765,10867],"valid",[],"NV8"],[[10868,10868],"disallowed_STD3_mapped",[58,58,61]],[[10869,10869],"disallowed_STD3_mapped",[61,61]],[[10870,10870],"disallowed_STD3_mapped",[61,61,61]],[[10871,10971],"valid",[],"NV8"],[[10972,10972],"mapped",[10973,824]],[[10973,11007],"valid",[],"NV8"],[[11008,11021],"valid",[],"NV8"],[[11022,11027],"valid",[],"NV8"],[[11028,11034],"valid",[],"NV8"],[[11035,11039],"valid",[],"NV8"],[[11040,11043],"valid",[],"NV8"],[[11044,11084],"valid",[],"NV8"],[[11085,11087],"valid",[],"NV8"],[[11088,11092],"valid",[],"NV8"],[[11093,11097],"valid",[],"NV8"],[[11098,11123],"valid",[],"NV8"],[[11124,11125],"disallowed"],[[11126,11157],"valid",[],"NV8"],[[11158,11159],"disallowed"],[[11160,11193],"valid",[],"NV8"],[[11194,11196],"disallowed"],[[11197,11208],"valid",[],"NV8"],[[11209,11209],"disallowed"],[[11210,11217],"valid",[],"NV8"],[[11218,11243],"disallowed"],[[11244,11247],"valid",[],"NV8"],[[11248,11263],"disallowed"],[[11264,11264],"mapped",[11312]],[[11265,11265],"mapped",[11313]],[[11266,11266],"mapped",[11314]],[[11267,11267],"mapped",[11315]],[[11268,11268],"mapped",[11316]],[[11269,11269],"mapped",[11317]],[[11270,11270],"mapped",[11318]],[[11271,11271],"mapped",[11319]],[[11272,11272],"mapped",[11320]],[[11273,11273],"mapped",[11321]],[[11274,11274],"mapped",[11322]],[[11275,11275],"mapped",[11323]],[[11276,11276],"mapped",[11324]],[[11277,11277],"mapped",[11325]],[[11278,11278],"mapped",[11326]],[[11279,11279],"mapped",[11327]],[[11280,11280],"mapped",[11328]],[[11281,11281],"mapped",[11329]],[[11282,11282],"mapped",[11330]],[[11283,11283],"mapped",[11331]],[[11284,11284],"mapped",[11332]],[[11285,11285],"mapped",[11333]],[[11286,11286],"mapped",[11334]],[[11287,11287],"mapped",[11335]],[[11288,11288],"mapped",[11336]],[[11289,11289],"mapped",[11337]],[[11290,11290],"mapped",[11338]],[[11291,11291],"mapped",[11339]],[[11292,11292],"mapped",[11340]],[[11293,11293],"mapped",[11341]],[[11294,11294],"mapped",[11342]],[[11295,11295],"mapped",[11343]],[[11296,11296],"mapped",[11344]],[[11297,11297],"mapped",[11345]],[[11298,11298],"mapped",[11346]],[[11299,11299],"mapped",[11347]],[[11300,11300],"mapped",[11348]],[[11301,11301],"mapped",[11349]],[[11302,11302],"mapped",[11350]],[[11303,11303],"mapped",[11351]],[[11304,11304],"mapped",[11352]],[[11305,11305],"mapped",[11353]],[[11306,11306],"mapped",[11354]],[[11307,11307],"mapped",[11355]],[[11308,11308],"mapped",[11356]],[[11309,11309],"mapped",[11357]],[[11310,11310],"mapped",[11358]],[[11311,11311],"disallowed"],[[11312,11358],"valid"],[[11359,11359],"disallowed"],[[11360,11360],"mapped",[11361]],[[11361,11361],"valid"],[[11362,11362],"mapped",[619]],[[11363,11363],"mapped",[7549]],[[11364,11364],"mapped",[637]],[[11365,11366],"valid"],[[11367,11367],"mapped",[11368]],[[11368,11368],"valid"],[[11369,11369],"mapped",[11370]],[[11370,11370],"valid"],[[11371,11371],"mapped",[11372]],[[11372,11372],"valid"],[[11373,11373],"mapped",[593]],[[11374,11374],"mapped",[625]],[[11375,11375],"mapped",[592]],[[11376,11376],"mapped",[594]],[[11377,11377],"valid"],[[11378,11378],"mapped",[11379]],[[11379,11379],"valid"],[[11380,11380],"valid"],[[11381,11381],"mapped",[11382]],[[11382,11383],"valid"],[[11384,11387],"valid"],[[11388,11388],"mapped",[106]],[[11389,11389],"mapped",[118]],[[11390,11390],"mapped",[575]],[[11391,11391],"mapped",[576]],[[11392,11392],"mapped",[11393]],[[11393,11393],"valid"],[[11394,11394],"mapped",[11395]],[[11395,11395],"valid"],[[11396,11396],"mapped",[11397]],[[11397,11397],"valid"],[[11398,11398],"mapped",[11399]],[[11399,11399],"valid"],[[11400,11400],"mapped",[11401]],[[11401,11401],"valid"],[[11402,11402],"mapped",[11403]],[[11403,11403],"valid"],[[11404,11404],"mapped",[11405]],[[11405,11405],"valid"],[[11406,11406],"mapped",[11407]],[[11407,11407],"valid"],[[11408,11408],"mapped",[11409]],[[11409,11409],"valid"],[[11410,11410],"mapped",[11411]],[[11411,11411],"valid"],[[11412,11412],"mapped",[11413]],[[11413,11413],"valid"],[[11414,11414],"mapped",[11415]],[[11415,11415],"valid"],[[11416,11416],"mapped",[11417]],[[11417,11417],"valid"],[[11418,11418],"mapped",[11419]],[[11419,11419],"valid"],[[11420,11420],"mapped",[11421]],[[11421,11421],"valid"],[[11422,11422],"mapped",[11423]],[[11423,11423],"valid"],[[11424,11424],"mapped",[11425]],[[11425,11425],"valid"],[[11426,11426],"mapped",[11427]],[[11427,11427],"valid"],[[11428,11428],"mapped",[11429]],[[11429,11429],"valid"],[[11430,11430],"mapped",[11431]],[[11431,11431],"valid"],[[11432,11432],"mapped",[11433]],[[11433,11433],"valid"],[[11434,11434],"mapped",[11435]],[[11435,11435],"valid"],[[11436,11436],"mapped",[11437]],[[11437,11437],"valid"],[[11438,11438],"mapped",[11439]],[[11439,11439],"valid"],[[11440,11440],"mapped",[11441]],[[11441,11441],"valid"],[[11442,11442],"mapped",[11443]],[[11443,11443],"valid"],[[11444,11444],"mapped",[11445]],[[11445,11445],"valid"],[[11446,11446],"mapped",[11447]],[[11447,11447],"valid"],[[11448,11448],"mapped",[11449]],[[11449,11449],"valid"],[[11450,11450],"mapped",[11451]],[[11451,11451],"valid"],[[11452,11452],"mapped",[11453]],[[11453,11453],"valid"],[[11454,11454],"mapped",[11455]],[[11455,11455],"valid"],[[11456,11456],"mapped",[11457]],[[11457,11457],"valid"],[[11458,11458],"mapped",[11459]],[[11459,11459],"valid"],[[11460,11460],"mapped",[11461]],[[11461,11461],"valid"],[[11462,11462],"mapped",[11463]],[[11463,11463],"valid"],[[11464,11464],"mapped",[11465]],[[11465,11465],"valid"],[[11466,11466],"mapped",[11467]],[[11467,11467],"valid"],[[11468,11468],"mapped",[11469]],[[11469,11469],"valid"],[[11470,11470],"mapped",[11471]],[[11471,11471],"valid"],[[11472,11472],"mapped",[11473]],[[11473,11473],"valid"],[[11474,11474],"mapped",[11475]],[[11475,11475],"valid"],[[11476,11476],"mapped",[11477]],[[11477,11477],"valid"],[[11478,11478],"mapped",[11479]],[[11479,11479],"valid"],[[11480,11480],"mapped",[11481]],[[11481,11481],"valid"],[[11482,11482],"mapped",[11483]],[[11483,11483],"valid"],[[11484,11484],"mapped",[11485]],[[11485,11485],"valid"],[[11486,11486],"mapped",[11487]],[[11487,11487],"valid"],[[11488,11488],"mapped",[11489]],[[11489,11489],"valid"],[[11490,11490],"mapped",[11491]],[[11491,11492],"valid"],[[11493,11498],"valid",[],"NV8"],[[11499,11499],"mapped",[11500]],[[11500,11500],"valid"],[[11501,11501],"mapped",[11502]],[[11502,11505],"valid"],[[11506,11506],"mapped",[11507]],[[11507,11507],"valid"],[[11508,11512],"disallowed"],[[11513,11519],"valid",[],"NV8"],[[11520,11557],"valid"],[[11558,11558],"disallowed"],[[11559,11559],"valid"],[[11560,11564],"disallowed"],[[11565,11565],"valid"],[[11566,11567],"disallowed"],[[11568,11621],"valid"],[[11622,11623],"valid"],[[11624,11630],"disallowed"],[[11631,11631],"mapped",[11617]],[[11632,11632],"valid",[],"NV8"],[[11633,11646],"disallowed"],[[11647,11647],"valid"],[[11648,11670],"valid"],[[11671,11679],"disallowed"],[[11680,11686],"valid"],[[11687,11687],"disallowed"],[[11688,11694],"valid"],[[11695,11695],"disallowed"],[[11696,11702],"valid"],[[11703,11703],"disallowed"],[[11704,11710],"valid"],[[11711,11711],"disallowed"],[[11712,11718],"valid"],[[11719,11719],"disallowed"],[[11720,11726],"valid"],[[11727,11727],"disallowed"],[[11728,11734],"valid"],[[11735,11735],"disallowed"],[[11736,11742],"valid"],[[11743,11743],"disallowed"],[[11744,11775],"valid"],[[11776,11799],"valid",[],"NV8"],[[11800,11803],"valid",[],"NV8"],[[11804,11805],"valid",[],"NV8"],[[11806,11822],"valid",[],"NV8"],[[11823,11823],"valid"],[[11824,11824],"valid",[],"NV8"],[[11825,11825],"valid",[],"NV8"],[[11826,11835],"valid",[],"NV8"],[[11836,11842],"valid",[],"NV8"],[[11843,11903],"disallowed"],[[11904,11929],"valid",[],"NV8"],[[11930,11930],"disallowed"],[[11931,11934],"valid",[],"NV8"],[[11935,11935],"mapped",[27597]],[[11936,12018],"valid",[],"NV8"],[[12019,12019],"mapped",[40863]],[[12020,12031],"disallowed"],[[12032,12032],"mapped",[19968]],[[12033,12033],"mapped",[20008]],[[12034,12034],"mapped",[20022]],[[12035,12035],"mapped",[20031]],[[12036,12036],"mapped",[20057]],[[12037,12037],"mapped",[20101]],[[12038,12038],"mapped",[20108]],[[12039,12039],"mapped",[20128]],[[12040,12040],"mapped",[20154]],[[12041,12041],"mapped",[20799]],[[12042,12042],"mapped",[20837]],[[12043,12043],"mapped",[20843]],[[12044,12044],"mapped",[20866]],[[12045,12045],"mapped",[20886]],[[12046,12046],"mapped",[20907]],[[12047,12047],"mapped",[20960]],[[12048,12048],"mapped",[20981]],[[12049,12049],"mapped",[20992]],[[12050,12050],"mapped",[21147]],[[12051,12051],"mapped",[21241]],[[12052,12052],"mapped",[21269]],[[12053,12053],"mapped",[21274]],[[12054,12054],"mapped",[21304]],[[12055,12055],"mapped",[21313]],[[12056,12056],"mapped",[21340]],[[12057,12057],"mapped",[21353]],[[12058,12058],"mapped",[21378]],[[12059,12059],"mapped",[21430]],[[12060,12060],"mapped",[21448]],[[12061,12061],"mapped",[21475]],[[12062,12062],"mapped",[22231]],[[12063,12063],"mapped",[22303]],[[12064,12064],"mapped",[22763]],[[12065,12065],"mapped",[22786]],[[12066,12066],"mapped",[22794]],[[12067,12067],"mapped",[22805]],[[12068,12068],"mapped",[22823]],[[12069,12069],"mapped",[22899]],[[12070,12070],"mapped",[23376]],[[12071,12071],"mapped",[23424]],[[12072,12072],"mapped",[23544]],[[12073,12073],"mapped",[23567]],[[12074,12074],"mapped",[23586]],[[12075,12075],"mapped",[23608]],[[12076,12076],"mapped",[23662]],[[12077,12077],"mapped",[23665]],[[12078,12078],"mapped",[24027]],[[12079,12079],"mapped",[24037]],[[12080,12080],"mapped",[24049]],[[12081,12081],"mapped",[24062]],[[12082,12082],"mapped",[24178]],[[12083,12083],"mapped",[24186]],[[12084,12084],"mapped",[24191]],[[12085,12085],"mapped",[24308]],[[12086,12086],"mapped",[24318]],[[12087,12087],"mapped",[24331]],[[12088,12088],"mapped",[24339]],[[12089,12089],"mapped",[24400]],[[12090,12090],"mapped",[24417]],[[12091,12091],"mapped",[24435]],[[12092,12092],"mapped",[24515]],[[12093,12093],"mapped",[25096]],[[12094,12094],"mapped",[25142]],[[12095,12095],"mapped",[25163]],[[12096,12096],"mapped",[25903]],[[12097,12097],"mapped",[25908]],[[12098,12098],"mapped",[25991]],[[12099,12099],"mapped",[26007]],[[12100,12100],"mapped",[26020]],[[12101,12101],"mapped",[26041]],[[12102,12102],"mapped",[26080]],[[12103,12103],"mapped",[26085]],[[12104,12104],"mapped",[26352]],[[12105,12105],"mapped",[26376]],[[12106,12106],"mapped",[26408]],[[12107,12107],"mapped",[27424]],[[12108,12108],"mapped",[27490]],[[12109,12109],"mapped",[27513]],[[12110,12110],"mapped",[27571]],[[12111,12111],"mapped",[27595]],[[12112,12112],"mapped",[27604]],[[12113,12113],"mapped",[27611]],[[12114,12114],"mapped",[27663]],[[12115,12115],"mapped",[27668]],[[12116,12116],"mapped",[27700]],[[12117,12117],"mapped",[28779]],[[12118,12118],"mapped",[29226]],[[12119,12119],"mapped",[29238]],[[12120,12120],"mapped",[29243]],[[12121,12121],"mapped",[29247]],[[12122,12122],"mapped",[29255]],[[12123,12123],"mapped",[29273]],[[12124,12124],"mapped",[29275]],[[12125,12125],"mapped",[29356]],[[12126,12126],"mapped",[29572]],[[12127,12127],"mapped",[29577]],[[12128,12128],"mapped",[29916]],[[12129,12129],"mapped",[29926]],[[12130,12130],"mapped",[29976]],[[12131,12131],"mapped",[29983]],[[12132,12132],"mapped",[29992]],[[12133,12133],"mapped",[30000]],[[12134,12134],"mapped",[30091]],[[12135,12135],"mapped",[30098]],[[12136,12136],"mapped",[30326]],[[12137,12137],"mapped",[30333]],[[12138,12138],"mapped",[30382]],[[12139,12139],"mapped",[30399]],[[12140,12140],"mapped",[30446]],[[12141,12141],"mapped",[30683]],[[12142,12142],"mapped",[30690]],[[12143,12143],"mapped",[30707]],[[12144,12144],"mapped",[31034]],[[12145,12145],"mapped",[31160]],[[12146,12146],"mapped",[31166]],[[12147,12147],"mapped",[31348]],[[12148,12148],"mapped",[31435]],[[12149,12149],"mapped",[31481]],[[12150,12150],"mapped",[31859]],[[12151,12151],"mapped",[31992]],[[12152,12152],"mapped",[32566]],[[12153,12153],"mapped",[32593]],[[12154,12154],"mapped",[32650]],[[12155,12155],"mapped",[32701]],[[12156,12156],"mapped",[32769]],[[12157,12157],"mapped",[32780]],[[12158,12158],"mapped",[32786]],[[12159,12159],"mapped",[32819]],[[12160,12160],"mapped",[32895]],[[12161,12161],"mapped",[32905]],[[12162,12162],"mapped",[33251]],[[12163,12163],"mapped",[33258]],[[12164,12164],"mapped",[33267]],[[12165,12165],"mapped",[33276]],[[12166,12166],"mapped",[33292]],[[12167,12167],"mapped",[33307]],[[12168,12168],"mapped",[33311]],[[12169,12169],"mapped",[33390]],[[12170,12170],"mapped",[33394]],[[12171,12171],"mapped",[33400]],[[12172,12172],"mapped",[34381]],[[12173,12173],"mapped",[34411]],[[12174,12174],"mapped",[34880]],[[12175,12175],"mapped",[34892]],[[12176,12176],"mapped",[34915]],[[12177,12177],"mapped",[35198]],[[12178,12178],"mapped",[35211]],[[12179,12179],"mapped",[35282]],[[12180,12180],"mapped",[35328]],[[12181,12181],"mapped",[35895]],[[12182,12182],"mapped",[35910]],[[12183,12183],"mapped",[35925]],[[12184,12184],"mapped",[35960]],[[12185,12185],"mapped",[35997]],[[12186,12186],"mapped",[36196]],[[12187,12187],"mapped",[36208]],[[12188,12188],"mapped",[36275]],[[12189,12189],"mapped",[36523]],[[12190,12190],"mapped",[36554]],[[12191,12191],"mapped",[36763]],[[12192,12192],"mapped",[36784]],[[12193,12193],"mapped",[36789]],[[12194,12194],"mapped",[37009]],[[12195,12195],"mapped",[37193]],[[12196,12196],"mapped",[37318]],[[12197,12197],"mapped",[37324]],[[12198,12198],"mapped",[37329]],[[12199,12199],"mapped",[38263]],[[12200,12200],"mapped",[38272]],[[12201,12201],"mapped",[38428]],[[12202,12202],"mapped",[38582]],[[12203,12203],"mapped",[38585]],[[12204,12204],"mapped",[38632]],[[12205,12205],"mapped",[38737]],[[12206,12206],"mapped",[38750]],[[12207,12207],"mapped",[38754]],[[12208,12208],"mapped",[38761]],[[12209,12209],"mapped",[38859]],[[12210,12210],"mapped",[38893]],[[12211,12211],"mapped",[38899]],[[12212,12212],"mapped",[38913]],[[12213,12213],"mapped",[39080]],[[12214,12214],"mapped",[39131]],[[12215,12215],"mapped",[39135]],[[12216,12216],"mapped",[39318]],[[12217,12217],"mapped",[39321]],[[12218,12218],"mapped",[39340]],[[12219,12219],"mapped",[39592]],[[12220,12220],"mapped",[39640]],[[12221,12221],"mapped",[39647]],[[12222,12222],"mapped",[39717]],[[12223,12223],"mapped",[39727]],[[12224,12224],"mapped",[39730]],[[12225,12225],"mapped",[39740]],[[12226,12226],"mapped",[39770]],[[12227,12227],"mapped",[40165]],[[12228,12228],"mapped",[40565]],[[12229,12229],"mapped",[40575]],[[12230,12230],"mapped",[40613]],[[12231,12231],"mapped",[40635]],[[12232,12232],"mapped",[40643]],[[12233,12233],"mapped",[40653]],[[12234,12234],"mapped",[40657]],[[12235,12235],"mapped",[40697]],[[12236,12236],"mapped",[40701]],[[12237,12237],"mapped",[40718]],[[12238,12238],"mapped",[40723]],[[12239,12239],"mapped",[40736]],[[12240,12240],"mapped",[40763]],[[12241,12241],"mapped",[40778]],[[12242,12242],"mapped",[40786]],[[12243,12243],"mapped",[40845]],[[12244,12244],"mapped",[40860]],[[12245,12245],"mapped",[40864]],[[12246,12271],"disallowed"],[[12272,12283],"disallowed"],[[12284,12287],"disallowed"],[[12288,12288],"disallowed_STD3_mapped",[32]],[[12289,12289],"valid",[],"NV8"],[[12290,12290],"mapped",[46]],[[12291,12292],"valid",[],"NV8"],[[12293,12295],"valid"],[[12296,12329],"valid",[],"NV8"],[[12330,12333],"valid"],[[12334,12341],"valid",[],"NV8"],[[12342,12342],"mapped",[12306]],[[12343,12343],"valid",[],"NV8"],[[12344,12344],"mapped",[21313]],[[12345,12345],"mapped",[21316]],[[12346,12346],"mapped",[21317]],[[12347,12347],"valid",[],"NV8"],[[12348,12348],"valid"],[[12349,12349],"valid",[],"NV8"],[[12350,12350],"valid",[],"NV8"],[[12351,12351],"valid",[],"NV8"],[[12352,12352],"disallowed"],[[12353,12436],"valid"],[[12437,12438],"valid"],[[12439,12440],"disallowed"],[[12441,12442],"valid"],[[12443,12443],"disallowed_STD3_mapped",[32,12441]],[[12444,12444],"disallowed_STD3_mapped",[32,12442]],[[12445,12446],"valid"],[[12447,12447],"mapped",[12424,12426]],[[12448,12448],"valid",[],"NV8"],[[12449,12542],"valid"],[[12543,12543],"mapped",[12467,12488]],[[12544,12548],"disallowed"],[[12549,12588],"valid"],[[12589,12589],"valid"],[[12590,12592],"disallowed"],[[12593,12593],"mapped",[4352]],[[12594,12594],"mapped",[4353]],[[12595,12595],"mapped",[4522]],[[12596,12596],"mapped",[4354]],[[12597,12597],"mapped",[4524]],[[12598,12598],"mapped",[4525]],[[12599,12599],"mapped",[4355]],[[12600,12600],"mapped",[4356]],[[12601,12601],"mapped",[4357]],[[12602,12602],"mapped",[4528]],[[12603,12603],"mapped",[4529]],[[12604,12604],"mapped",[4530]],[[12605,12605],"mapped",[4531]],[[12606,12606],"mapped",[4532]],[[12607,12607],"mapped",[4533]],[[12608,12608],"mapped",[4378]],[[12609,12609],"mapped",[4358]],[[12610,12610],"mapped",[4359]],[[12611,12611],"mapped",[4360]],[[12612,12612],"mapped",[4385]],[[12613,12613],"mapped",[4361]],[[12614,12614],"mapped",[4362]],[[12615,12615],"mapped",[4363]],[[12616,12616],"mapped",[4364]],[[12617,12617],"mapped",[4365]],[[12618,12618],"mapped",[4366]],[[12619,12619],"mapped",[4367]],[[12620,12620],"mapped",[4368]],[[12621,12621],"mapped",[4369]],[[12622,12622],"mapped",[4370]],[[12623,12623],"mapped",[4449]],[[12624,12624],"mapped",[4450]],[[12625,12625],"mapped",[4451]],[[12626,12626],"mapped",[4452]],[[12627,12627],"mapped",[4453]],[[12628,12628],"mapped",[4454]],[[12629,12629],"mapped",[4455]],[[12630,12630],"mapped",[4456]],[[12631,12631],"mapped",[4457]],[[12632,12632],"mapped",[4458]],[[12633,12633],"mapped",[4459]],[[12634,12634],"mapped",[4460]],[[12635,12635],"mapped",[4461]],[[12636,12636],"mapped",[4462]],[[12637,12637],"mapped",[4463]],[[12638,12638],"mapped",[4464]],[[12639,12639],"mapped",[4465]],[[12640,12640],"mapped",[4466]],[[12641,12641],"mapped",[4467]],[[12642,12642],"mapped",[4468]],[[12643,12643],"mapped",[4469]],[[12644,12644],"disallowed"],[[12645,12645],"mapped",[4372]],[[12646,12646],"mapped",[4373]],[[12647,12647],"mapped",[4551]],[[12648,12648],"mapped",[4552]],[[12649,12649],"mapped",[4556]],[[12650,12650],"mapped",[4558]],[[12651,12651],"mapped",[4563]],[[12652,12652],"mapped",[4567]],[[12653,12653],"mapped",[4569]],[[12654,12654],"mapped",[4380]],[[12655,12655],"mapped",[4573]],[[12656,12656],"mapped",[4575]],[[12657,12657],"mapped",[4381]],[[12658,12658],"mapped",[4382]],[[12659,12659],"mapped",[4384]],[[12660,12660],"mapped",[4386]],[[12661,12661],"mapped",[4387]],[[12662,12662],"mapped",[4391]],[[12663,12663],"mapped",[4393]],[[12664,12664],"mapped",[4395]],[[12665,12665],"mapped",[4396]],[[12666,12666],"mapped",[4397]],[[12667,12667],"mapped",[4398]],[[12668,12668],"mapped",[4399]],[[12669,12669],"mapped",[4402]],[[12670,12670],"mapped",[4406]],[[12671,12671],"mapped",[4416]],[[12672,12672],"mapped",[4423]],[[12673,12673],"mapped",[4428]],[[12674,12674],"mapped",[4593]],[[12675,12675],"mapped",[4594]],[[12676,12676],"mapped",[4439]],[[12677,12677],"mapped",[4440]],[[12678,12678],"mapped",[4441]],[[12679,12679],"mapped",[4484]],[[12680,12680],"mapped",[4485]],[[12681,12681],"mapped",[4488]],[[12682,12682],"mapped",[4497]],[[12683,12683],"mapped",[4498]],[[12684,12684],"mapped",[4500]],[[12685,12685],"mapped",[4510]],[[12686,12686],"mapped",[4513]],[[12687,12687],"disallowed"],[[12688,12689],"valid",[],"NV8"],[[12690,12690],"mapped",[19968]],[[12691,12691],"mapped",[20108]],[[12692,12692],"mapped",[19977]],[[12693,12693],"mapped",[22235]],[[12694,12694],"mapped",[19978]],[[12695,12695],"mapped",[20013]],[[12696,12696],"mapped",[19979]],[[12697,12697],"mapped",[30002]],[[12698,12698],"mapped",[20057]],[[12699,12699],"mapped",[19993]],[[12700,12700],"mapped",[19969]],[[12701,12701],"mapped",[22825]],[[12702,12702],"mapped",[22320]],[[12703,12703],"mapped",[20154]],[[12704,12727],"valid"],[[12728,12730],"valid"],[[12731,12735],"disallowed"],[[12736,12751],"valid",[],"NV8"],[[12752,12771],"valid",[],"NV8"],[[12772,12783],"disallowed"],[[12784,12799],"valid"],[[12800,12800],"disallowed_STD3_mapped",[40,4352,41]],[[12801,12801],"disallowed_STD3_mapped",[40,4354,41]],[[12802,12802],"disallowed_STD3_mapped",[40,4355,41]],[[12803,12803],"disallowed_STD3_mapped",[40,4357,41]],[[12804,12804],"disallowed_STD3_mapped",[40,4358,41]],[[12805,12805],"disallowed_STD3_mapped",[40,4359,41]],[[12806,12806],"disallowed_STD3_mapped",[40,4361,41]],[[12807,12807],"disallowed_STD3_mapped",[40,4363,41]],[[12808,12808],"disallowed_STD3_mapped",[40,4364,41]],[[12809,12809],"disallowed_STD3_mapped",[40,4366,41]],[[12810,12810],"disallowed_STD3_mapped",[40,4367,41]],[[12811,12811],"disallowed_STD3_mapped",[40,4368,41]],[[12812,12812],"disallowed_STD3_mapped",[40,4369,41]],[[12813,12813],"disallowed_STD3_mapped",[40,4370,41]],[[12814,12814],"disallowed_STD3_mapped",[40,44032,41]],[[12815,12815],"disallowed_STD3_mapped",[40,45208,41]],[[12816,12816],"disallowed_STD3_mapped",[40,45796,41]],[[12817,12817],"disallowed_STD3_mapped",[40,46972,41]],[[12818,12818],"disallowed_STD3_mapped",[40,47560,41]],[[12819,12819],"disallowed_STD3_mapped",[40,48148,41]],[[12820,12820],"disallowed_STD3_mapped",[40,49324,41]],[[12821,12821],"disallowed_STD3_mapped",[40,50500,41]],[[12822,12822],"disallowed_STD3_mapped",[40,51088,41]],[[12823,12823],"disallowed_STD3_mapped",[40,52264,41]],[[12824,12824],"disallowed_STD3_mapped",[40,52852,41]],[[12825,12825],"disallowed_STD3_mapped",[40,53440,41]],[[12826,12826],"disallowed_STD3_mapped",[40,54028,41]],[[12827,12827],"disallowed_STD3_mapped",[40,54616,41]],[[12828,12828],"disallowed_STD3_mapped",[40,51452,41]],[[12829,12829],"disallowed_STD3_mapped",[40,50724,51204,41]],[[12830,12830],"disallowed_STD3_mapped",[40,50724,54980,41]],[[12831,12831],"disallowed"],[[12832,12832],"disallowed_STD3_mapped",[40,19968,41]],[[12833,12833],"disallowed_STD3_mapped",[40,20108,41]],[[12834,12834],"disallowed_STD3_mapped",[40,19977,41]],[[12835,12835],"disallowed_STD3_mapped",[40,22235,41]],[[12836,12836],"disallowed_STD3_mapped",[40,20116,41]],[[12837,12837],"disallowed_STD3_mapped",[40,20845,41]],[[12838,12838],"disallowed_STD3_mapped",[40,19971,41]],[[12839,12839],"disallowed_STD3_mapped",[40,20843,41]],[[12840,12840],"disallowed_STD3_mapped",[40,20061,41]],[[12841,12841],"disallowed_STD3_mapped",[40,21313,41]],[[12842,12842],"disallowed_STD3_mapped",[40,26376,41]],[[12843,12843],"disallowed_STD3_mapped",[40,28779,41]],[[12844,12844],"disallowed_STD3_mapped",[40,27700,41]],[[12845,12845],"disallowed_STD3_mapped",[40,26408,41]],[[12846,12846],"disallowed_STD3_mapped",[40,37329,41]],[[12847,12847],"disallowed_STD3_mapped",[40,22303,41]],[[12848,12848],"disallowed_STD3_mapped",[40,26085,41]],[[12849,12849],"disallowed_STD3_mapped",[40,26666,41]],[[12850,12850],"disallowed_STD3_mapped",[40,26377,41]],[[12851,12851],"disallowed_STD3_mapped",[40,31038,41]],[[12852,12852],"disallowed_STD3_mapped",[40,21517,41]],[[12853,12853],"disallowed_STD3_mapped",[40,29305,41]],[[12854,12854],"disallowed_STD3_mapped",[40,36001,41]],[[12855,12855],"disallowed_STD3_mapped",[40,31069,41]],[[12856,12856],"disallowed_STD3_mapped",[40,21172,41]],[[12857,12857],"disallowed_STD3_mapped",[40,20195,41]],[[12858,12858],"disallowed_STD3_mapped",[40,21628,41]],[[12859,12859],"disallowed_STD3_mapped",[40,23398,41]],[[12860,12860],"disallowed_STD3_mapped",[40,30435,41]],[[12861,12861],"disallowed_STD3_mapped",[40,20225,41]],[[12862,12862],"disallowed_STD3_mapped",[40,36039,41]],[[12863,12863],"disallowed_STD3_mapped",[40,21332,41]],[[12864,12864],"disallowed_STD3_mapped",[40,31085,41]],[[12865,12865],"disallowed_STD3_mapped",[40,20241,41]],[[12866,12866],"disallowed_STD3_mapped",[40,33258,41]],[[12867,12867],"disallowed_STD3_mapped",[40,33267,41]],[[12868,12868],"mapped",[21839]],[[12869,12869],"mapped",[24188]],[[12870,12870],"mapped",[25991]],[[12871,12871],"mapped",[31631]],[[12872,12879],"valid",[],"NV8"],[[12880,12880],"mapped",[112,116,101]],[[12881,12881],"mapped",[50,49]],[[12882,12882],"mapped",[50,50]],[[12883,12883],"mapped",[50,51]],[[12884,12884],"mapped",[50,52]],[[12885,12885],"mapped",[50,53]],[[12886,12886],"mapped",[50,54]],[[12887,12887],"mapped",[50,55]],[[12888,12888],"mapped",[50,56]],[[12889,12889],"mapped",[50,57]],[[12890,12890],"mapped",[51,48]],[[12891,12891],"mapped",[51,49]],[[12892,12892],"mapped",[51,50]],[[12893,12893],"mapped",[51,51]],[[12894,12894],"mapped",[51,52]],[[12895,12895],"mapped",[51,53]],[[12896,12896],"mapped",[4352]],[[12897,12897],"mapped",[4354]],[[12898,12898],"mapped",[4355]],[[12899,12899],"mapped",[4357]],[[12900,12900],"mapped",[4358]],[[12901,12901],"mapped",[4359]],[[12902,12902],"mapped",[4361]],[[12903,12903],"mapped",[4363]],[[12904,12904],"mapped",[4364]],[[12905,12905],"mapped",[4366]],[[12906,12906],"mapped",[4367]],[[12907,12907],"mapped",[4368]],[[12908,12908],"mapped",[4369]],[[12909,12909],"mapped",[4370]],[[12910,12910],"mapped",[44032]],[[12911,12911],"mapped",[45208]],[[12912,12912],"mapped",[45796]],[[12913,12913],"mapped",[46972]],[[12914,12914],"mapped",[47560]],[[12915,12915],"mapped",[48148]],[[12916,12916],"mapped",[49324]],[[12917,12917],"mapped",[50500]],[[12918,12918],"mapped",[51088]],[[12919,12919],"mapped",[52264]],[[12920,12920],"mapped",[52852]],[[12921,12921],"mapped",[53440]],[[12922,12922],"mapped",[54028]],[[12923,12923],"mapped",[54616]],[[12924,12924],"mapped",[52280,44256]],[[12925,12925],"mapped",[51452,51032]],[[12926,12926],"mapped",[50864]],[[12927,12927],"valid",[],"NV8"],[[12928,12928],"mapped",[19968]],[[12929,12929],"mapped",[20108]],[[12930,12930],"mapped",[19977]],[[12931,12931],"mapped",[22235]],[[12932,12932],"mapped",[20116]],[[12933,12933],"mapped",[20845]],[[12934,12934],"mapped",[19971]],[[12935,12935],"mapped",[20843]],[[12936,12936],"mapped",[20061]],[[12937,12937],"mapped",[21313]],[[12938,12938],"mapped",[26376]],[[12939,12939],"mapped",[28779]],[[12940,12940],"mapped",[27700]],[[12941,12941],"mapped",[26408]],[[12942,12942],"mapped",[37329]],[[12943,12943],"mapped",[22303]],[[12944,12944],"mapped",[26085]],[[12945,12945],"mapped",[26666]],[[12946,12946],"mapped",[26377]],[[12947,12947],"mapped",[31038]],[[12948,12948],"mapped",[21517]],[[12949,12949],"mapped",[29305]],[[12950,12950],"mapped",[36001]],[[12951,12951],"mapped",[31069]],[[12952,12952],"mapped",[21172]],[[12953,12953],"mapped",[31192]],[[12954,12954],"mapped",[30007]],[[12955,12955],"mapped",[22899]],[[12956,12956],"mapped",[36969]],[[12957,12957],"mapped",[20778]],[[12958,12958],"mapped",[21360]],[[12959,12959],"mapped",[27880]],[[12960,12960],"mapped",[38917]],[[12961,12961],"mapped",[20241]],[[12962,12962],"mapped",[20889]],[[12963,12963],"mapped",[27491]],[[12964,12964],"mapped",[19978]],[[12965,12965],"mapped",[20013]],[[12966,12966],"mapped",[19979]],[[12967,12967],"mapped",[24038]],[[12968,12968],"mapped",[21491]],[[12969,12969],"mapped",[21307]],[[12970,12970],"mapped",[23447]],[[12971,12971],"mapped",[23398]],[[12972,12972],"mapped",[30435]],[[12973,12973],"mapped",[20225]],[[12974,12974],"mapped",[36039]],[[12975,12975],"mapped",[21332]],[[12976,12976],"mapped",[22812]],[[12977,12977],"mapped",[51,54]],[[12978,12978],"mapped",[51,55]],[[12979,12979],"mapped",[51,56]],[[12980,12980],"mapped",[51,57]],[[12981,12981],"mapped",[52,48]],[[12982,12982],"mapped",[52,49]],[[12983,12983],"mapped",[52,50]],[[12984,12984],"mapped",[52,51]],[[12985,12985],"mapped",[52,52]],[[12986,12986],"mapped",[52,53]],[[12987,12987],"mapped",[52,54]],[[12988,12988],"mapped",[52,55]],[[12989,12989],"mapped",[52,56]],[[12990,12990],"mapped",[52,57]],[[12991,12991],"mapped",[53,48]],[[12992,12992],"mapped",[49,26376]],[[12993,12993],"mapped",[50,26376]],[[12994,12994],"mapped",[51,26376]],[[12995,12995],"mapped",[52,26376]],[[12996,12996],"mapped",[53,26376]],[[12997,12997],"mapped",[54,26376]],[[12998,12998],"mapped",[55,26376]],[[12999,12999],"mapped",[56,26376]],[[13000,13000],"mapped",[57,26376]],[[13001,13001],"mapped",[49,48,26376]],[[13002,13002],"mapped",[49,49,26376]],[[13003,13003],"mapped",[49,50,26376]],[[13004,13004],"mapped",[104,103]],[[13005,13005],"mapped",[101,114,103]],[[13006,13006],"mapped",[101,118]],[[13007,13007],"mapped",[108,116,100]],[[13008,13008],"mapped",[12450]],[[13009,13009],"mapped",[12452]],[[13010,13010],"mapped",[12454]],[[13011,13011],"mapped",[12456]],[[13012,13012],"mapped",[12458]],[[13013,13013],"mapped",[12459]],[[13014,13014],"mapped",[12461]],[[13015,13015],"mapped",[12463]],[[13016,13016],"mapped",[12465]],[[13017,13017],"mapped",[12467]],[[13018,13018],"mapped",[12469]],[[13019,13019],"mapped",[12471]],[[13020,13020],"mapped",[12473]],[[13021,13021],"mapped",[12475]],[[13022,13022],"mapped",[12477]],[[13023,13023],"mapped",[12479]],[[13024,13024],"mapped",[12481]],[[13025,13025],"mapped",[12484]],[[13026,13026],"mapped",[12486]],[[13027,13027],"mapped",[12488]],[[13028,13028],"mapped",[12490]],[[13029,13029],"mapped",[12491]],[[13030,13030],"mapped",[12492]],[[13031,13031],"mapped",[12493]],[[13032,13032],"mapped",[12494]],[[13033,13033],"mapped",[12495]],[[13034,13034],"mapped",[12498]],[[13035,13035],"mapped",[12501]],[[13036,13036],"mapped",[12504]],[[13037,13037],"mapped",[12507]],[[13038,13038],"mapped",[12510]],[[13039,13039],"mapped",[12511]],[[13040,13040],"mapped",[12512]],[[13041,13041],"mapped",[12513]],[[13042,13042],"mapped",[12514]],[[13043,13043],"mapped",[12516]],[[13044,13044],"mapped",[12518]],[[13045,13045],"mapped",[12520]],[[13046,13046],"mapped",[12521]],[[13047,13047],"mapped",[12522]],[[13048,13048],"mapped",[12523]],[[13049,13049],"mapped",[12524]],[[13050,13050],"mapped",[12525]],[[13051,13051],"mapped",[12527]],[[13052,13052],"mapped",[12528]],[[13053,13053],"mapped",[12529]],[[13054,13054],"mapped",[12530]],[[13055,13055],"disallowed"],[[13056,13056],"mapped",[12450,12497,12540,12488]],[[13057,13057],"mapped",[12450,12523,12501,12449]],[[13058,13058],"mapped",[12450,12531,12506,12450]],[[13059,13059],"mapped",[12450,12540,12523]],[[13060,13060],"mapped",[12452,12491,12531,12464]],[[13061,13061],"mapped",[12452,12531,12481]],[[13062,13062],"mapped",[12454,12457,12531]],[[13063,13063],"mapped",[12456,12473,12463,12540,12489]],[[13064,13064],"mapped",[12456,12540,12459,12540]],[[13065,13065],"mapped",[12458,12531,12473]],[[13066,13066],"mapped",[12458,12540,12512]],[[13067,13067],"mapped",[12459,12452,12522]],[[13068,13068],"mapped",[12459,12521,12483,12488]],[[13069,13069],"mapped",[12459,12525,12522,12540]],[[13070,13070],"mapped",[12460,12525,12531]],[[13071,13071],"mapped",[12460,12531,12510]],[[13072,13072],"mapped",[12462,12460]],[[13073,13073],"mapped",[12462,12491,12540]],[[13074,13074],"mapped",[12461,12517,12522,12540]],[[13075,13075],"mapped",[12462,12523,12480,12540]],[[13076,13076],"mapped",[12461,12525]],[[13077,13077],"mapped",[12461,12525,12464,12521,12512]],[[13078,13078],"mapped",[12461,12525,12513,12540,12488,12523]],[[13079,13079],"mapped",[12461,12525,12527,12483,12488]],[[13080,13080],"mapped",[12464,12521,12512]],[[13081,13081],"mapped",[12464,12521,12512,12488,12531]],[[13082,13082],"mapped",[12463,12523,12476,12452,12525]],[[13083,13083],"mapped",[12463,12525,12540,12493]],[[13084,13084],"mapped",[12465,12540,12473]],[[13085,13085],"mapped",[12467,12523,12490]],[[13086,13086],"mapped",[12467,12540,12509]],[[13087,13087],"mapped",[12469,12452,12463,12523]],[[13088,13088],"mapped",[12469,12531,12481,12540,12512]],[[13089,13089],"mapped",[12471,12522,12531,12464]],[[13090,13090],"mapped",[12475,12531,12481]],[[13091,13091],"mapped",[12475,12531,12488]],[[13092,13092],"mapped",[12480,12540,12473]],[[13093,13093],"mapped",[12487,12471]],[[13094,13094],"mapped",[12489,12523]],[[13095,13095],"mapped",[12488,12531]],[[13096,13096],"mapped",[12490,12494]],[[13097,13097],"mapped",[12494,12483,12488]],[[13098,13098],"mapped",[12495,12452,12484]],[[13099,13099],"mapped",[12497,12540,12475,12531,12488]],[[13100,13100],"mapped",[12497,12540,12484]],[[13101,13101],"mapped",[12496,12540,12524,12523]],[[13102,13102],"mapped",[12500,12450,12473,12488,12523]],[[13103,13103],"mapped",[12500,12463,12523]],[[13104,13104],"mapped",[12500,12467]],[[13105,13105],"mapped",[12499,12523]],[[13106,13106],"mapped",[12501,12449,12521,12483,12489]],[[13107,13107],"mapped",[12501,12451,12540,12488]],[[13108,13108],"mapped",[12502,12483,12471,12455,12523]],[[13109,13109],"mapped",[12501,12521,12531]],[[13110,13110],"mapped",[12504,12463,12479,12540,12523]],[[13111,13111],"mapped",[12506,12477]],[[13112,13112],"mapped",[12506,12491,12498]],[[13113,13113],"mapped",[12504,12523,12484]],[[13114,13114],"mapped",[12506,12531,12473]],[[13115,13115],"mapped",[12506,12540,12472]],[[13116,13116],"mapped",[12505,12540,12479]],[[13117,13117],"mapped",[12509,12452,12531,12488]],[[13118,13118],"mapped",[12508,12523,12488]],[[13119,13119],"mapped",[12507,12531]],[[13120,13120],"mapped",[12509,12531,12489]],[[13121,13121],"mapped",[12507,12540,12523]],[[13122,13122],"mapped",[12507,12540,12531]],[[13123,13123],"mapped",[12510,12452,12463,12525]],[[13124,13124],"mapped",[12510,12452,12523]],[[13125,13125],"mapped",[12510,12483,12495]],[[13126,13126],"mapped",[12510,12523,12463]],[[13127,13127],"mapped",[12510,12531,12471,12519,12531]],[[13128,13128],"mapped",[12511,12463,12525,12531]],[[13129,13129],"mapped",[12511,12522]],[[13130,13130],"mapped",[12511,12522,12496,12540,12523]],[[13131,13131],"mapped",[12513,12460]],[[13132,13132],"mapped",[12513,12460,12488,12531]],[[13133,13133],"mapped",[12513,12540,12488,12523]],[[13134,13134],"mapped",[12516,12540,12489]],[[13135,13135],"mapped",[12516,12540,12523]],[[13136,13136],"mapped",[12518,12450,12531]],[[13137,13137],"mapped",[12522,12483,12488,12523]],[[13138,13138],"mapped",[12522,12521]],[[13139,13139],"mapped",[12523,12500,12540]],[[13140,13140],"mapped",[12523,12540,12502,12523]],[[13141,13141],"mapped",[12524,12512]],[[13142,13142],"mapped",[12524,12531,12488,12466,12531]],[[13143,13143],"mapped",[12527,12483,12488]],[[13144,13144],"mapped",[48,28857]],[[13145,13145],"mapped",[49,28857]],[[13146,13146],"mapped",[50,28857]],[[13147,13147],"mapped",[51,28857]],[[13148,13148],"mapped",[52,28857]],[[13149,13149],"mapped",[53,28857]],[[13150,13150],"mapped",[54,28857]],[[13151,13151],"mapped",[55,28857]],[[13152,13152],"mapped",[56,28857]],[[13153,13153],"mapped",[57,28857]],[[13154,13154],"mapped",[49,48,28857]],[[13155,13155],"mapped",[49,49,28857]],[[13156,13156],"mapped",[49,50,28857]],[[13157,13157],"mapped",[49,51,28857]],[[13158,13158],"mapped",[49,52,28857]],[[13159,13159],"mapped",[49,53,28857]],[[13160,13160],"mapped",[49,54,28857]],[[13161,13161],"mapped",[49,55,28857]],[[13162,13162],"mapped",[49,56,28857]],[[13163,13163],"mapped",[49,57,28857]],[[13164,13164],"mapped",[50,48,28857]],[[13165,13165],"mapped",[50,49,28857]],[[13166,13166],"mapped",[50,50,28857]],[[13167,13167],"mapped",[50,51,28857]],[[13168,13168],"mapped",[50,52,28857]],[[13169,13169],"mapped",[104,112,97]],[[13170,13170],"mapped",[100,97]],[[13171,13171],"mapped",[97,117]],[[13172,13172],"mapped",[98,97,114]],[[13173,13173],"mapped",[111,118]],[[13174,13174],"mapped",[112,99]],[[13175,13175],"mapped",[100,109]],[[13176,13176],"mapped",[100,109,50]],[[13177,13177],"mapped",[100,109,51]],[[13178,13178],"mapped",[105,117]],[[13179,13179],"mapped",[24179,25104]],[[13180,13180],"mapped",[26157,21644]],[[13181,13181],"mapped",[22823,27491]],[[13182,13182],"mapped",[26126,27835]],[[13183,13183],"mapped",[26666,24335,20250,31038]],[[13184,13184],"mapped",[112,97]],[[13185,13185],"mapped",[110,97]],[[13186,13186],"mapped",[956,97]],[[13187,13187],"mapped",[109,97]],[[13188,13188],"mapped",[107,97]],[[13189,13189],"mapped",[107,98]],[[13190,13190],"mapped",[109,98]],[[13191,13191],"mapped",[103,98]],[[13192,13192],"mapped",[99,97,108]],[[13193,13193],"mapped",[107,99,97,108]],[[13194,13194],"mapped",[112,102]],[[13195,13195],"mapped",[110,102]],[[13196,13196],"mapped",[956,102]],[[13197,13197],"mapped",[956,103]],[[13198,13198],"mapped",[109,103]],[[13199,13199],"mapped",[107,103]],[[13200,13200],"mapped",[104,122]],[[13201,13201],"mapped",[107,104,122]],[[13202,13202],"mapped",[109,104,122]],[[13203,13203],"mapped",[103,104,122]],[[13204,13204],"mapped",[116,104,122]],[[13205,13205],"mapped",[956,108]],[[13206,13206],"mapped",[109,108]],[[13207,13207],"mapped",[100,108]],[[13208,13208],"mapped",[107,108]],[[13209,13209],"mapped",[102,109]],[[13210,13210],"mapped",[110,109]],[[13211,13211],"mapped",[956,109]],[[13212,13212],"mapped",[109,109]],[[13213,13213],"mapped",[99,109]],[[13214,13214],"mapped",[107,109]],[[13215,13215],"mapped",[109,109,50]],[[13216,13216],"mapped",[99,109,50]],[[13217,13217],"mapped",[109,50]],[[13218,13218],"mapped",[107,109,50]],[[13219,13219],"mapped",[109,109,51]],[[13220,13220],"mapped",[99,109,51]],[[13221,13221],"mapped",[109,51]],[[13222,13222],"mapped",[107,109,51]],[[13223,13223],"mapped",[109,8725,115]],[[13224,13224],"mapped",[109,8725,115,50]],[[13225,13225],"mapped",[112,97]],[[13226,13226],"mapped",[107,112,97]],[[13227,13227],"mapped",[109,112,97]],[[13228,13228],"mapped",[103,112,97]],[[13229,13229],"mapped",[114,97,100]],[[13230,13230],"mapped",[114,97,100,8725,115]],[[13231,13231],"mapped",[114,97,100,8725,115,50]],[[13232,13232],"mapped",[112,115]],[[13233,13233],"mapped",[110,115]],[[13234,13234],"mapped",[956,115]],[[13235,13235],"mapped",[109,115]],[[13236,13236],"mapped",[112,118]],[[13237,13237],"mapped",[110,118]],[[13238,13238],"mapped",[956,118]],[[13239,13239],"mapped",[109,118]],[[13240,13240],"mapped",[107,118]],[[13241,13241],"mapped",[109,118]],[[13242,13242],"mapped",[112,119]],[[13243,13243],"mapped",[110,119]],[[13244,13244],"mapped",[956,119]],[[13245,13245],"mapped",[109,119]],[[13246,13246],"mapped",[107,119]],[[13247,13247],"mapped",[109,119]],[[13248,13248],"mapped",[107,969]],[[13249,13249],"mapped",[109,969]],[[13250,13250],"disallowed"],[[13251,13251],"mapped",[98,113]],[[13252,13252],"mapped",[99,99]],[[13253,13253],"mapped",[99,100]],[[13254,13254],"mapped",[99,8725,107,103]],[[13255,13255],"disallowed"],[[13256,13256],"mapped",[100,98]],[[13257,13257],"mapped",[103,121]],[[13258,13258],"mapped",[104,97]],[[13259,13259],"mapped",[104,112]],[[13260,13260],"mapped",[105,110]],[[13261,13261],"mapped",[107,107]],[[13262,13262],"mapped",[107,109]],[[13263,13263],"mapped",[107,116]],[[13264,13264],"mapped",[108,109]],[[13265,13265],"mapped",[108,110]],[[13266,13266],"mapped",[108,111,103]],[[13267,13267],"mapped",[108,120]],[[13268,13268],"mapped",[109,98]],[[13269,13269],"mapped",[109,105,108]],[[13270,13270],"mapped",[109,111,108]],[[13271,13271],"mapped",[112,104]],[[13272,13272],"disallowed"],[[13273,13273],"mapped",[112,112,109]],[[13274,13274],"mapped",[112,114]],[[13275,13275],"mapped",[115,114]],[[13276,13276],"mapped",[115,118]],[[13277,13277],"mapped",[119,98]],[[13278,13278],"mapped",[118,8725,109]],[[13279,13279],"mapped",[97,8725,109]],[[13280,13280],"mapped",[49,26085]],[[13281,13281],"mapped",[50,26085]],[[13282,13282],"mapped",[51,26085]],[[13283,13283],"mapped",[52,26085]],[[13284,13284],"mapped",[53,26085]],[[13285,13285],"mapped",[54,26085]],[[13286,13286],"mapped",[55,26085]],[[13287,13287],"mapped",[56,26085]],[[13288,13288],"mapped",[57,26085]],[[13289,13289],"mapped",[49,48,26085]],[[13290,13290],"mapped",[49,49,26085]],[[13291,13291],"mapped",[49,50,26085]],[[13292,13292],"mapped",[49,51,26085]],[[13293,13293],"mapped",[49,52,26085]],[[13294,13294],"mapped",[49,53,26085]],[[13295,13295],"mapped",[49,54,26085]],[[13296,13296],"mapped",[49,55,26085]],[[13297,13297],"mapped",[49,56,26085]],[[13298,13298],"mapped",[49,57,26085]],[[13299,13299],"mapped",[50,48,26085]],[[13300,13300],"mapped",[50,49,26085]],[[13301,13301],"mapped",[50,50,26085]],[[13302,13302],"mapped",[50,51,26085]],[[13303,13303],"mapped",[50,52,26085]],[[13304,13304],"mapped",[50,53,26085]],[[13305,13305],"mapped",[50,54,26085]],[[13306,13306],"mapped",[50,55,26085]],[[13307,13307],"mapped",[50,56,26085]],[[13308,13308],"mapped",[50,57,26085]],[[13309,13309],"mapped",[51,48,26085]],[[13310,13310],"mapped",[51,49,26085]],[[13311,13311],"mapped",[103,97,108]],[[13312,19893],"valid"],[[19894,19903],"disallowed"],[[19904,19967],"valid",[],"NV8"],[[19968,40869],"valid"],[[40870,40891],"valid"],[[40892,40899],"valid"],[[40900,40907],"valid"],[[40908,40908],"valid"],[[40909,40917],"valid"],[[40918,40959],"disallowed"],[[40960,42124],"valid"],[[42125,42127],"disallowed"],[[42128,42145],"valid",[],"NV8"],[[42146,42147],"valid",[],"NV8"],[[42148,42163],"valid",[],"NV8"],[[42164,42164],"valid",[],"NV8"],[[42165,42176],"valid",[],"NV8"],[[42177,42177],"valid",[],"NV8"],[[42178,42180],"valid",[],"NV8"],[[42181,42181],"valid",[],"NV8"],[[42182,42182],"valid",[],"NV8"],[[42183,42191],"disallowed"],[[42192,42237],"valid"],[[42238,42239],"valid",[],"NV8"],[[42240,42508],"valid"],[[42509,42511],"valid",[],"NV8"],[[42512,42539],"valid"],[[42540,42559],"disallowed"],[[42560,42560],"mapped",[42561]],[[42561,42561],"valid"],[[42562,42562],"mapped",[42563]],[[42563,42563],"valid"],[[42564,42564],"mapped",[42565]],[[42565,42565],"valid"],[[42566,42566],"mapped",[42567]],[[42567,42567],"valid"],[[42568,42568],"mapped",[42569]],[[42569,42569],"valid"],[[42570,42570],"mapped",[42571]],[[42571,42571],"valid"],[[42572,42572],"mapped",[42573]],[[42573,42573],"valid"],[[42574,42574],"mapped",[42575]],[[42575,42575],"valid"],[[42576,42576],"mapped",[42577]],[[42577,42577],"valid"],[[42578,42578],"mapped",[42579]],[[42579,42579],"valid"],[[42580,42580],"mapped",[42581]],[[42581,42581],"valid"],[[42582,42582],"mapped",[42583]],[[42583,42583],"valid"],[[42584,42584],"mapped",[42585]],[[42585,42585],"valid"],[[42586,42586],"mapped",[42587]],[[42587,42587],"valid"],[[42588,42588],"mapped",[42589]],[[42589,42589],"valid"],[[42590,42590],"mapped",[42591]],[[42591,42591],"valid"],[[42592,42592],"mapped",[42593]],[[42593,42593],"valid"],[[42594,42594],"mapped",[42595]],[[42595,42595],"valid"],[[42596,42596],"mapped",[42597]],[[42597,42597],"valid"],[[42598,42598],"mapped",[42599]],[[42599,42599],"valid"],[[42600,42600],"mapped",[42601]],[[42601,42601],"valid"],[[42602,42602],"mapped",[42603]],[[42603,42603],"valid"],[[42604,42604],"mapped",[42605]],[[42605,42607],"valid"],[[42608,42611],"valid",[],"NV8"],[[42612,42619],"valid"],[[42620,42621],"valid"],[[42622,42622],"valid",[],"NV8"],[[42623,42623],"valid"],[[42624,42624],"mapped",[42625]],[[42625,42625],"valid"],[[42626,42626],"mapped",[42627]],[[42627,42627],"valid"],[[42628,42628],"mapped",[42629]],[[42629,42629],"valid"],[[42630,42630],"mapped",[42631]],[[42631,42631],"valid"],[[42632,42632],"mapped",[42633]],[[42633,42633],"valid"],[[42634,42634],"mapped",[42635]],[[42635,42635],"valid"],[[42636,42636],"mapped",[42637]],[[42637,42637],"valid"],[[42638,42638],"mapped",[42639]],[[42639,42639],"valid"],[[42640,42640],"mapped",[42641]],[[42641,42641],"valid"],[[42642,42642],"mapped",[42643]],[[42643,42643],"valid"],[[42644,42644],"mapped",[42645]],[[42645,42645],"valid"],[[42646,42646],"mapped",[42647]],[[42647,42647],"valid"],[[42648,42648],"mapped",[42649]],[[42649,42649],"valid"],[[42650,42650],"mapped",[42651]],[[42651,42651],"valid"],[[42652,42652],"mapped",[1098]],[[42653,42653],"mapped",[1100]],[[42654,42654],"valid"],[[42655,42655],"valid"],[[42656,42725],"valid"],[[42726,42735],"valid",[],"NV8"],[[42736,42737],"valid"],[[42738,42743],"valid",[],"NV8"],[[42744,42751],"disallowed"],[[42752,42774],"valid",[],"NV8"],[[42775,42778],"valid"],[[42779,42783],"valid"],[[42784,42785],"valid",[],"NV8"],[[42786,42786],"mapped",[42787]],[[42787,42787],"valid"],[[42788,42788],"mapped",[42789]],[[42789,42789],"valid"],[[42790,42790],"mapped",[42791]],[[42791,42791],"valid"],[[42792,42792],"mapped",[42793]],[[42793,42793],"valid"],[[42794,42794],"mapped",[42795]],[[42795,42795],"valid"],[[42796,42796],"mapped",[42797]],[[42797,42797],"valid"],[[42798,42798],"mapped",[42799]],[[42799,42801],"valid"],[[42802,42802],"mapped",[42803]],[[42803,42803],"valid"],[[42804,42804],"mapped",[42805]],[[42805,42805],"valid"],[[42806,42806],"mapped",[42807]],[[42807,42807],"valid"],[[42808,42808],"mapped",[42809]],[[42809,42809],"valid"],[[42810,42810],"mapped",[42811]],[[42811,42811],"valid"],[[42812,42812],"mapped",[42813]],[[42813,42813],"valid"],[[42814,42814],"mapped",[42815]],[[42815,42815],"valid"],[[42816,42816],"mapped",[42817]],[[42817,42817],"valid"],[[42818,42818],"mapped",[42819]],[[42819,42819],"valid"],[[42820,42820],"mapped",[42821]],[[42821,42821],"valid"],[[42822,42822],"mapped",[42823]],[[42823,42823],"valid"],[[42824,42824],"mapped",[42825]],[[42825,42825],"valid"],[[42826,42826],"mapped",[42827]],[[42827,42827],"valid"],[[42828,42828],"mapped",[42829]],[[42829,42829],"valid"],[[42830,42830],"mapped",[42831]],[[42831,42831],"valid"],[[42832,42832],"mapped",[42833]],[[42833,42833],"valid"],[[42834,42834],"mapped",[42835]],[[42835,42835],"valid"],[[42836,42836],"mapped",[42837]],[[42837,42837],"valid"],[[42838,42838],"mapped",[42839]],[[42839,42839],"valid"],[[42840,42840],"mapped",[42841]],[[42841,42841],"valid"],[[42842,42842],"mapped",[42843]],[[42843,42843],"valid"],[[42844,42844],"mapped",[42845]],[[42845,42845],"valid"],[[42846,42846],"mapped",[42847]],[[42847,42847],"valid"],[[42848,42848],"mapped",[42849]],[[42849,42849],"valid"],[[42850,42850],"mapped",[42851]],[[42851,42851],"valid"],[[42852,42852],"mapped",[42853]],[[42853,42853],"valid"],[[42854,42854],"mapped",[42855]],[[42855,42855],"valid"],[[42856,42856],"mapped",[42857]],[[42857,42857],"valid"],[[42858,42858],"mapped",[42859]],[[42859,42859],"valid"],[[42860,42860],"mapped",[42861]],[[42861,42861],"valid"],[[42862,42862],"mapped",[42863]],[[42863,42863],"valid"],[[42864,42864],"mapped",[42863]],[[42865,42872],"valid"],[[42873,42873],"mapped",[42874]],[[42874,42874],"valid"],[[42875,42875],"mapped",[42876]],[[42876,42876],"valid"],[[42877,42877],"mapped",[7545]],[[42878,42878],"mapped",[42879]],[[42879,42879],"valid"],[[42880,42880],"mapped",[42881]],[[42881,42881],"valid"],[[42882,42882],"mapped",[42883]],[[42883,42883],"valid"],[[42884,42884],"mapped",[42885]],[[42885,42885],"valid"],[[42886,42886],"mapped",[42887]],[[42887,42888],"valid"],[[42889,42890],"valid",[],"NV8"],[[42891,42891],"mapped",[42892]],[[42892,42892],"valid"],[[42893,42893],"mapped",[613]],[[42894,42894],"valid"],[[42895,42895],"valid"],[[42896,42896],"mapped",[42897]],[[42897,42897],"valid"],[[42898,42898],"mapped",[42899]],[[42899,42899],"valid"],[[42900,42901],"valid"],[[42902,42902],"mapped",[42903]],[[42903,42903],"valid"],[[42904,42904],"mapped",[42905]],[[42905,42905],"valid"],[[42906,42906],"mapped",[42907]],[[42907,42907],"valid"],[[42908,42908],"mapped",[42909]],[[42909,42909],"valid"],[[42910,42910],"mapped",[42911]],[[42911,42911],"valid"],[[42912,42912],"mapped",[42913]],[[42913,42913],"valid"],[[42914,42914],"mapped",[42915]],[[42915,42915],"valid"],[[42916,42916],"mapped",[42917]],[[42917,42917],"valid"],[[42918,42918],"mapped",[42919]],[[42919,42919],"valid"],[[42920,42920],"mapped",[42921]],[[42921,42921],"valid"],[[42922,42922],"mapped",[614]],[[42923,42923],"mapped",[604]],[[42924,42924],"mapped",[609]],[[42925,42925],"mapped",[620]],[[42926,42927],"disallowed"],[[42928,42928],"mapped",[670]],[[42929,42929],"mapped",[647]],[[42930,42930],"mapped",[669]],[[42931,42931],"mapped",[43859]],[[42932,42932],"mapped",[42933]],[[42933,42933],"valid"],[[42934,42934],"mapped",[42935]],[[42935,42935],"valid"],[[42936,42998],"disallowed"],[[42999,42999],"valid"],[[43000,43000],"mapped",[295]],[[43001,43001],"mapped",[339]],[[43002,43002],"valid"],[[43003,43007],"valid"],[[43008,43047],"valid"],[[43048,43051],"valid",[],"NV8"],[[43052,43055],"disallowed"],[[43056,43065],"valid",[],"NV8"],[[43066,43071],"disallowed"],[[43072,43123],"valid"],[[43124,43127],"valid",[],"NV8"],[[43128,43135],"disallowed"],[[43136,43204],"valid"],[[43205,43213],"disallowed"],[[43214,43215],"valid",[],"NV8"],[[43216,43225],"valid"],[[43226,43231],"disallowed"],[[43232,43255],"valid"],[[43256,43258],"valid",[],"NV8"],[[43259,43259],"valid"],[[43260,43260],"valid",[],"NV8"],[[43261,43261],"valid"],[[43262,43263],"disallowed"],[[43264,43309],"valid"],[[43310,43311],"valid",[],"NV8"],[[43312,43347],"valid"],[[43348,43358],"disallowed"],[[43359,43359],"valid",[],"NV8"],[[43360,43388],"valid",[],"NV8"],[[43389,43391],"disallowed"],[[43392,43456],"valid"],[[43457,43469],"valid",[],"NV8"],[[43470,43470],"disallowed"],[[43471,43481],"valid"],[[43482,43485],"disallowed"],[[43486,43487],"valid",[],"NV8"],[[43488,43518],"valid"],[[43519,43519],"disallowed"],[[43520,43574],"valid"],[[43575,43583],"disallowed"],[[43584,43597],"valid"],[[43598,43599],"disallowed"],[[43600,43609],"valid"],[[43610,43611],"disallowed"],[[43612,43615],"valid",[],"NV8"],[[43616,43638],"valid"],[[43639,43641],"valid",[],"NV8"],[[43642,43643],"valid"],[[43644,43647],"valid"],[[43648,43714],"valid"],[[43715,43738],"disallowed"],[[43739,43741],"valid"],[[43742,43743],"valid",[],"NV8"],[[43744,43759],"valid"],[[43760,43761],"valid",[],"NV8"],[[43762,43766],"valid"],[[43767,43776],"disallowed"],[[43777,43782],"valid"],[[43783,43784],"disallowed"],[[43785,43790],"valid"],[[43791,43792],"disallowed"],[[43793,43798],"valid"],[[43799,43807],"disallowed"],[[43808,43814],"valid"],[[43815,43815],"disallowed"],[[43816,43822],"valid"],[[43823,43823],"disallowed"],[[43824,43866],"valid"],[[43867,43867],"valid",[],"NV8"],[[43868,43868],"mapped",[42791]],[[43869,43869],"mapped",[43831]],[[43870,43870],"mapped",[619]],[[43871,43871],"mapped",[43858]],[[43872,43875],"valid"],[[43876,43877],"valid"],[[43878,43887],"disallowed"],[[43888,43888],"mapped",[5024]],[[43889,43889],"mapped",[5025]],[[43890,43890],"mapped",[5026]],[[43891,43891],"mapped",[5027]],[[43892,43892],"mapped",[5028]],[[43893,43893],"mapped",[5029]],[[43894,43894],"mapped",[5030]],[[43895,43895],"mapped",[5031]],[[43896,43896],"mapped",[5032]],[[43897,43897],"mapped",[5033]],[[43898,43898],"mapped",[5034]],[[43899,43899],"mapped",[5035]],[[43900,43900],"mapped",[5036]],[[43901,43901],"mapped",[5037]],[[43902,43902],"mapped",[5038]],[[43903,43903],"mapped",[5039]],[[43904,43904],"mapped",[5040]],[[43905,43905],"mapped",[5041]],[[43906,43906],"mapped",[5042]],[[43907,43907],"mapped",[5043]],[[43908,43908],"mapped",[5044]],[[43909,43909],"mapped",[5045]],[[43910,43910],"mapped",[5046]],[[43911,43911],"mapped",[5047]],[[43912,43912],"mapped",[5048]],[[43913,43913],"mapped",[5049]],[[43914,43914],"mapped",[5050]],[[43915,43915],"mapped",[5051]],[[43916,43916],"mapped",[5052]],[[43917,43917],"mapped",[5053]],[[43918,43918],"mapped",[5054]],[[43919,43919],"mapped",[5055]],[[43920,43920],"mapped",[5056]],[[43921,43921],"mapped",[5057]],[[43922,43922],"mapped",[5058]],[[43923,43923],"mapped",[5059]],[[43924,43924],"mapped",[5060]],[[43925,43925],"mapped",[5061]],[[43926,43926],"mapped",[5062]],[[43927,43927],"mapped",[5063]],[[43928,43928],"mapped",[5064]],[[43929,43929],"mapped",[5065]],[[43930,43930],"mapped",[5066]],[[43931,43931],"mapped",[5067]],[[43932,43932],"mapped",[5068]],[[43933,43933],"mapped",[5069]],[[43934,43934],"mapped",[5070]],[[43935,43935],"mapped",[5071]],[[43936,43936],"mapped",[5072]],[[43937,43937],"mapped",[5073]],[[43938,43938],"mapped",[5074]],[[43939,43939],"mapped",[5075]],[[43940,43940],"mapped",[5076]],[[43941,43941],"mapped",[5077]],[[43942,43942],"mapped",[5078]],[[43943,43943],"mapped",[5079]],[[43944,43944],"mapped",[5080]],[[43945,43945],"mapped",[5081]],[[43946,43946],"mapped",[5082]],[[43947,43947],"mapped",[5083]],[[43948,43948],"mapped",[5084]],[[43949,43949],"mapped",[5085]],[[43950,43950],"mapped",[5086]],[[43951,43951],"mapped",[5087]],[[43952,43952],"mapped",[5088]],[[43953,43953],"mapped",[5089]],[[43954,43954],"mapped",[5090]],[[43955,43955],"mapped",[5091]],[[43956,43956],"mapped",[5092]],[[43957,43957],"mapped",[5093]],[[43958,43958],"mapped",[5094]],[[43959,43959],"mapped",[5095]],[[43960,43960],"mapped",[5096]],[[43961,43961],"mapped",[5097]],[[43962,43962],"mapped",[5098]],[[43963,43963],"mapped",[5099]],[[43964,43964],"mapped",[5100]],[[43965,43965],"mapped",[5101]],[[43966,43966],"mapped",[5102]],[[43967,43967],"mapped",[5103]],[[43968,44010],"valid"],[[44011,44011],"valid",[],"NV8"],[[44012,44013],"valid"],[[44014,44015],"disallowed"],[[44016,44025],"valid"],[[44026,44031],"disallowed"],[[44032,55203],"valid"],[[55204,55215],"disallowed"],[[55216,55238],"valid",[],"NV8"],[[55239,55242],"disallowed"],[[55243,55291],"valid",[],"NV8"],[[55292,55295],"disallowed"],[[55296,57343],"disallowed"],[[57344,63743],"disallowed"],[[63744,63744],"mapped",[35912]],[[63745,63745],"mapped",[26356]],[[63746,63746],"mapped",[36554]],[[63747,63747],"mapped",[36040]],[[63748,63748],"mapped",[28369]],[[63749,63749],"mapped",[20018]],[[63750,63750],"mapped",[21477]],[[63751,63752],"mapped",[40860]],[[63753,63753],"mapped",[22865]],[[63754,63754],"mapped",[37329]],[[63755,63755],"mapped",[21895]],[[63756,63756],"mapped",[22856]],[[63757,63757],"mapped",[25078]],[[63758,63758],"mapped",[30313]],[[63759,63759],"mapped",[32645]],[[63760,63760],"mapped",[34367]],[[63761,63761],"mapped",[34746]],[[63762,63762],"mapped",[35064]],[[63763,63763],"mapped",[37007]],[[63764,63764],"mapped",[27138]],[[63765,63765],"mapped",[27931]],[[63766,63766],"mapped",[28889]],[[63767,63767],"mapped",[29662]],[[63768,63768],"mapped",[33853]],[[63769,63769],"mapped",[37226]],[[63770,63770],"mapped",[39409]],[[63771,63771],"mapped",[20098]],[[63772,63772],"mapped",[21365]],[[63773,63773],"mapped",[27396]],[[63774,63774],"mapped",[29211]],[[63775,63775],"mapped",[34349]],[[63776,63776],"mapped",[40478]],[[63777,63777],"mapped",[23888]],[[63778,63778],"mapped",[28651]],[[63779,63779],"mapped",[34253]],[[63780,63780],"mapped",[35172]],[[63781,63781],"mapped",[25289]],[[63782,63782],"mapped",[33240]],[[63783,63783],"mapped",[34847]],[[63784,63784],"mapped",[24266]],[[63785,63785],"mapped",[26391]],[[63786,63786],"mapped",[28010]],[[63787,63787],"mapped",[29436]],[[63788,63788],"mapped",[37070]],[[63789,63789],"mapped",[20358]],[[63790,63790],"mapped",[20919]],[[63791,63791],"mapped",[21214]],[[63792,63792],"mapped",[25796]],[[63793,63793],"mapped",[27347]],[[63794,63794],"mapped",[29200]],[[63795,63795],"mapped",[30439]],[[63796,63796],"mapped",[32769]],[[63797,63797],"mapped",[34310]],[[63798,63798],"mapped",[34396]],[[63799,63799],"mapped",[36335]],[[63800,63800],"mapped",[38706]],[[63801,63801],"mapped",[39791]],[[63802,63802],"mapped",[40442]],[[63803,63803],"mapped",[30860]],[[63804,63804],"mapped",[31103]],[[63805,63805],"mapped",[32160]],[[63806,63806],"mapped",[33737]],[[63807,63807],"mapped",[37636]],[[63808,63808],"mapped",[40575]],[[63809,63809],"mapped",[35542]],[[63810,63810],"mapped",[22751]],[[63811,63811],"mapped",[24324]],[[63812,63812],"mapped",[31840]],[[63813,63813],"mapped",[32894]],[[63814,63814],"mapped",[29282]],[[63815,63815],"mapped",[30922]],[[63816,63816],"mapped",[36034]],[[63817,63817],"mapped",[38647]],[[63818,63818],"mapped",[22744]],[[63819,63819],"mapped",[23650]],[[63820,63820],"mapped",[27155]],[[63821,63821],"mapped",[28122]],[[63822,63822],"mapped",[28431]],[[63823,63823],"mapped",[32047]],[[63824,63824],"mapped",[32311]],[[63825,63825],"mapped",[38475]],[[63826,63826],"mapped",[21202]],[[63827,63827],"mapped",[32907]],[[63828,63828],"mapped",[20956]],[[63829,63829],"mapped",[20940]],[[63830,63830],"mapped",[31260]],[[63831,63831],"mapped",[32190]],[[63832,63832],"mapped",[33777]],[[63833,63833],"mapped",[38517]],[[63834,63834],"mapped",[35712]],[[63835,63835],"mapped",[25295]],[[63836,63836],"mapped",[27138]],[[63837,63837],"mapped",[35582]],[[63838,63838],"mapped",[20025]],[[63839,63839],"mapped",[23527]],[[63840,63840],"mapped",[24594]],[[63841,63841],"mapped",[29575]],[[63842,63842],"mapped",[30064]],[[63843,63843],"mapped",[21271]],[[63844,63844],"mapped",[30971]],[[63845,63845],"mapped",[20415]],[[63846,63846],"mapped",[24489]],[[63847,63847],"mapped",[19981]],[[63848,63848],"mapped",[27852]],[[63849,63849],"mapped",[25976]],[[63850,63850],"mapped",[32034]],[[63851,63851],"mapped",[21443]],[[63852,63852],"mapped",[22622]],[[63853,63853],"mapped",[30465]],[[63854,63854],"mapped",[33865]],[[63855,63855],"mapped",[35498]],[[63856,63856],"mapped",[27578]],[[63857,63857],"mapped",[36784]],[[63858,63858],"mapped",[27784]],[[63859,63859],"mapped",[25342]],[[63860,63860],"mapped",[33509]],[[63861,63861],"mapped",[25504]],[[63862,63862],"mapped",[30053]],[[63863,63863],"mapped",[20142]],[[63864,63864],"mapped",[20841]],[[63865,63865],"mapped",[20937]],[[63866,63866],"mapped",[26753]],[[63867,63867],"mapped",[31975]],[[63868,63868],"mapped",[33391]],[[63869,63869],"mapped",[35538]],[[63870,63870],"mapped",[37327]],[[63871,63871],"mapped",[21237]],[[63872,63872],"mapped",[21570]],[[63873,63873],"mapped",[22899]],[[63874,63874],"mapped",[24300]],[[63875,63875],"mapped",[26053]],[[63876,63876],"mapped",[28670]],[[63877,63877],"mapped",[31018]],[[63878,63878],"mapped",[38317]],[[63879,63879],"mapped",[39530]],[[63880,63880],"mapped",[40599]],[[63881,63881],"mapped",[40654]],[[63882,63882],"mapped",[21147]],[[63883,63883],"mapped",[26310]],[[63884,63884],"mapped",[27511]],[[63885,63885],"mapped",[36706]],[[63886,63886],"mapped",[24180]],[[63887,63887],"mapped",[24976]],[[63888,63888],"mapped",[25088]],[[63889,63889],"mapped",[25754]],[[63890,63890],"mapped",[28451]],[[63891,63891],"mapped",[29001]],[[63892,63892],"mapped",[29833]],[[63893,63893],"mapped",[31178]],[[63894,63894],"mapped",[32244]],[[63895,63895],"mapped",[32879]],[[63896,63896],"mapped",[36646]],[[63897,63897],"mapped",[34030]],[[63898,63898],"mapped",[36899]],[[63899,63899],"mapped",[37706]],[[63900,63900],"mapped",[21015]],[[63901,63901],"mapped",[21155]],[[63902,63902],"mapped",[21693]],[[63903,63903],"mapped",[28872]],[[63904,63904],"mapped",[35010]],[[63905,63905],"mapped",[35498]],[[63906,63906],"mapped",[24265]],[[63907,63907],"mapped",[24565]],[[63908,63908],"mapped",[25467]],[[63909,63909],"mapped",[27566]],[[63910,63910],"mapped",[31806]],[[63911,63911],"mapped",[29557]],[[63912,63912],"mapped",[20196]],[[63913,63913],"mapped",[22265]],[[63914,63914],"mapped",[23527]],[[63915,63915],"mapped",[23994]],[[63916,63916],"mapped",[24604]],[[63917,63917],"mapped",[29618]],[[63918,63918],"mapped",[29801]],[[63919,63919],"mapped",[32666]],[[63920,63920],"mapped",[32838]],[[63921,63921],"mapped",[37428]],[[63922,63922],"mapped",[38646]],[[63923,63923],"mapped",[38728]],[[63924,63924],"mapped",[38936]],[[63925,63925],"mapped",[20363]],[[63926,63926],"mapped",[31150]],[[63927,63927],"mapped",[37300]],[[63928,63928],"mapped",[38584]],[[63929,63929],"mapped",[24801]],[[63930,63930],"mapped",[20102]],[[63931,63931],"mapped",[20698]],[[63932,63932],"mapped",[23534]],[[63933,63933],"mapped",[23615]],[[63934,63934],"mapped",[26009]],[[63935,63935],"mapped",[27138]],[[63936,63936],"mapped",[29134]],[[63937,63937],"mapped",[30274]],[[63938,63938],"mapped",[34044]],[[63939,63939],"mapped",[36988]],[[63940,63940],"mapped",[40845]],[[63941,63941],"mapped",[26248]],[[63942,63942],"mapped",[38446]],[[63943,63943],"mapped",[21129]],[[63944,63944],"mapped",[26491]],[[63945,63945],"mapped",[26611]],[[63946,63946],"mapped",[27969]],[[63947,63947],"mapped",[28316]],[[63948,63948],"mapped",[29705]],[[63949,63949],"mapped",[30041]],[[63950,63950],"mapped",[30827]],[[63951,63951],"mapped",[32016]],[[63952,63952],"mapped",[39006]],[[63953,63953],"mapped",[20845]],[[63954,63954],"mapped",[25134]],[[63955,63955],"mapped",[38520]],[[63956,63956],"mapped",[20523]],[[63957,63957],"mapped",[23833]],[[63958,63958],"mapped",[28138]],[[63959,63959],"mapped",[36650]],[[63960,63960],"mapped",[24459]],[[63961,63961],"mapped",[24900]],[[63962,63962],"mapped",[26647]],[[63963,63963],"mapped",[29575]],[[63964,63964],"mapped",[38534]],[[63965,63965],"mapped",[21033]],[[63966,63966],"mapped",[21519]],[[63967,63967],"mapped",[23653]],[[63968,63968],"mapped",[26131]],[[63969,63969],"mapped",[26446]],[[63970,63970],"mapped",[26792]],[[63971,63971],"mapped",[27877]],[[63972,63972],"mapped",[29702]],[[63973,63973],"mapped",[30178]],[[63974,63974],"mapped",[32633]],[[63975,63975],"mapped",[35023]],[[63976,63976],"mapped",[35041]],[[63977,63977],"mapped",[37324]],[[63978,63978],"mapped",[38626]],[[63979,63979],"mapped",[21311]],[[63980,63980],"mapped",[28346]],[[63981,63981],"mapped",[21533]],[[63982,63982],"mapped",[29136]],[[63983,63983],"mapped",[29848]],[[63984,63984],"mapped",[34298]],[[63985,63985],"mapped",[38563]],[[63986,63986],"mapped",[40023]],[[63987,63987],"mapped",[40607]],[[63988,63988],"mapped",[26519]],[[63989,63989],"mapped",[28107]],[[63990,63990],"mapped",[33256]],[[63991,63991],"mapped",[31435]],[[63992,63992],"mapped",[31520]],[[63993,63993],"mapped",[31890]],[[63994,63994],"mapped",[29376]],[[63995,63995],"mapped",[28825]],[[63996,63996],"mapped",[35672]],[[63997,63997],"mapped",[20160]],[[63998,63998],"mapped",[33590]],[[63999,63999],"mapped",[21050]],[[64000,64000],"mapped",[20999]],[[64001,64001],"mapped",[24230]],[[64002,64002],"mapped",[25299]],[[64003,64003],"mapped",[31958]],[[64004,64004],"mapped",[23429]],[[64005,64005],"mapped",[27934]],[[64006,64006],"mapped",[26292]],[[64007,64007],"mapped",[36667]],[[64008,64008],"mapped",[34892]],[[64009,64009],"mapped",[38477]],[[64010,64010],"mapped",[35211]],[[64011,64011],"mapped",[24275]],[[64012,64012],"mapped",[20800]],[[64013,64013],"mapped",[21952]],[[64014,64015],"valid"],[[64016,64016],"mapped",[22618]],[[64017,64017],"valid"],[[64018,64018],"mapped",[26228]],[[64019,64020],"valid"],[[64021,64021],"mapped",[20958]],[[64022,64022],"mapped",[29482]],[[64023,64023],"mapped",[30410]],[[64024,64024],"mapped",[31036]],[[64025,64025],"mapped",[31070]],[[64026,64026],"mapped",[31077]],[[64027,64027],"mapped",[31119]],[[64028,64028],"mapped",[38742]],[[64029,64029],"mapped",[31934]],[[64030,64030],"mapped",[32701]],[[64031,64031],"valid"],[[64032,64032],"mapped",[34322]],[[64033,64033],"valid"],[[64034,64034],"mapped",[35576]],[[64035,64036],"valid"],[[64037,64037],"mapped",[36920]],[[64038,64038],"mapped",[37117]],[[64039,64041],"valid"],[[64042,64042],"mapped",[39151]],[[64043,64043],"mapped",[39164]],[[64044,64044],"mapped",[39208]],[[64045,64045],"mapped",[40372]],[[64046,64046],"mapped",[37086]],[[64047,64047],"mapped",[38583]],[[64048,64048],"mapped",[20398]],[[64049,64049],"mapped",[20711]],[[64050,64050],"mapped",[20813]],[[64051,64051],"mapped",[21193]],[[64052,64052],"mapped",[21220]],[[64053,64053],"mapped",[21329]],[[64054,64054],"mapped",[21917]],[[64055,64055],"mapped",[22022]],[[64056,64056],"mapped",[22120]],[[64057,64057],"mapped",[22592]],[[64058,64058],"mapped",[22696]],[[64059,64059],"mapped",[23652]],[[64060,64060],"mapped",[23662]],[[64061,64061],"mapped",[24724]],[[64062,64062],"mapped",[24936]],[[64063,64063],"mapped",[24974]],[[64064,64064],"mapped",[25074]],[[64065,64065],"mapped",[25935]],[[64066,64066],"mapped",[26082]],[[64067,64067],"mapped",[26257]],[[64068,64068],"mapped",[26757]],[[64069,64069],"mapped",[28023]],[[64070,64070],"mapped",[28186]],[[64071,64071],"mapped",[28450]],[[64072,64072],"mapped",[29038]],[[64073,64073],"mapped",[29227]],[[64074,64074],"mapped",[29730]],[[64075,64075],"mapped",[30865]],[[64076,64076],"mapped",[31038]],[[64077,64077],"mapped",[31049]],[[64078,64078],"mapped",[31048]],[[64079,64079],"mapped",[31056]],[[64080,64080],"mapped",[31062]],[[64081,64081],"mapped",[31069]],[[64082,64082],"mapped",[31117]],[[64083,64083],"mapped",[31118]],[[64084,64084],"mapped",[31296]],[[64085,64085],"mapped",[31361]],[[64086,64086],"mapped",[31680]],[[64087,64087],"mapped",[32244]],[[64088,64088],"mapped",[32265]],[[64089,64089],"mapped",[32321]],[[64090,64090],"mapped",[32626]],[[64091,64091],"mapped",[32773]],[[64092,64092],"mapped",[33261]],[[64093,64094],"mapped",[33401]],[[64095,64095],"mapped",[33879]],[[64096,64096],"mapped",[35088]],[[64097,64097],"mapped",[35222]],[[64098,64098],"mapped",[35585]],[[64099,64099],"mapped",[35641]],[[64100,64100],"mapped",[36051]],[[64101,64101],"mapped",[36104]],[[64102,64102],"mapped",[36790]],[[64103,64103],"mapped",[36920]],[[64104,64104],"mapped",[38627]],[[64105,64105],"mapped",[38911]],[[64106,64106],"mapped",[38971]],[[64107,64107],"mapped",[24693]],[[64108,64108],"mapped",[148206]],[[64109,64109],"mapped",[33304]],[[64110,64111],"disallowed"],[[64112,64112],"mapped",[20006]],[[64113,64113],"mapped",[20917]],[[64114,64114],"mapped",[20840]],[[64115,64115],"mapped",[20352]],[[64116,64116],"mapped",[20805]],[[64117,64117],"mapped",[20864]],[[64118,64118],"mapped",[21191]],[[64119,64119],"mapped",[21242]],[[64120,64120],"mapped",[21917]],[[64121,64121],"mapped",[21845]],[[64122,64122],"mapped",[21913]],[[64123,64123],"mapped",[21986]],[[64124,64124],"mapped",[22618]],[[64125,64125],"mapped",[22707]],[[64126,64126],"mapped",[22852]],[[64127,64127],"mapped",[22868]],[[64128,64128],"mapped",[23138]],[[64129,64129],"mapped",[23336]],[[64130,64130],"mapped",[24274]],[[64131,64131],"mapped",[24281]],[[64132,64132],"mapped",[24425]],[[64133,64133],"mapped",[24493]],[[64134,64134],"mapped",[24792]],[[64135,64135],"mapped",[24910]],[[64136,64136],"mapped",[24840]],[[64137,64137],"mapped",[24974]],[[64138,64138],"mapped",[24928]],[[64139,64139],"mapped",[25074]],[[64140,64140],"mapped",[25140]],[[64141,64141],"mapped",[25540]],[[64142,64142],"mapped",[25628]],[[64143,64143],"mapped",[25682]],[[64144,64144],"mapped",[25942]],[[64145,64145],"mapped",[26228]],[[64146,64146],"mapped",[26391]],[[64147,64147],"mapped",[26395]],[[64148,64148],"mapped",[26454]],[[64149,64149],"mapped",[27513]],[[64150,64150],"mapped",[27578]],[[64151,64151],"mapped",[27969]],[[64152,64152],"mapped",[28379]],[[64153,64153],"mapped",[28363]],[[64154,64154],"mapped",[28450]],[[64155,64155],"mapped",[28702]],[[64156,64156],"mapped",[29038]],[[64157,64157],"mapped",[30631]],[[64158,64158],"mapped",[29237]],[[64159,64159],"mapped",[29359]],[[64160,64160],"mapped",[29482]],[[64161,64161],"mapped",[29809]],[[64162,64162],"mapped",[29958]],[[64163,64163],"mapped",[30011]],[[64164,64164],"mapped",[30237]],[[64165,64165],"mapped",[30239]],[[64166,64166],"mapped",[30410]],[[64167,64167],"mapped",[30427]],[[64168,64168],"mapped",[30452]],[[64169,64169],"mapped",[30538]],[[64170,64170],"mapped",[30528]],[[64171,64171],"mapped",[30924]],[[64172,64172],"mapped",[31409]],[[64173,64173],"mapped",[31680]],[[64174,64174],"mapped",[31867]],[[64175,64175],"mapped",[32091]],[[64176,64176],"mapped",[32244]],[[64177,64177],"mapped",[32574]],[[64178,64178],"mapped",[32773]],[[64179,64179],"mapped",[33618]],[[64180,64180],"mapped",[33775]],[[64181,64181],"mapped",[34681]],[[64182,64182],"mapped",[35137]],[[64183,64183],"mapped",[35206]],[[64184,64184],"mapped",[35222]],[[64185,64185],"mapped",[35519]],[[64186,64186],"mapped",[35576]],[[64187,64187],"mapped",[35531]],[[64188,64188],"mapped",[35585]],[[64189,64189],"mapped",[35582]],[[64190,64190],"mapped",[35565]],[[64191,64191],"mapped",[35641]],[[64192,64192],"mapped",[35722]],[[64193,64193],"mapped",[36104]],[[64194,64194],"mapped",[36664]],[[64195,64195],"mapped",[36978]],[[64196,64196],"mapped",[37273]],[[64197,64197],"mapped",[37494]],[[64198,64198],"mapped",[38524]],[[64199,64199],"mapped",[38627]],[[64200,64200],"mapped",[38742]],[[64201,64201],"mapped",[38875]],[[64202,64202],"mapped",[38911]],[[64203,64203],"mapped",[38923]],[[64204,64204],"mapped",[38971]],[[64205,64205],"mapped",[39698]],[[64206,64206],"mapped",[40860]],[[64207,64207],"mapped",[141386]],[[64208,64208],"mapped",[141380]],[[64209,64209],"mapped",[144341]],[[64210,64210],"mapped",[15261]],[[64211,64211],"mapped",[16408]],[[64212,64212],"mapped",[16441]],[[64213,64213],"mapped",[152137]],[[64214,64214],"mapped",[154832]],[[64215,64215],"mapped",[163539]],[[64216,64216],"mapped",[40771]],[[64217,64217],"mapped",[40846]],[[64218,64255],"disallowed"],[[64256,64256],"mapped",[102,102]],[[64257,64257],"mapped",[102,105]],[[64258,64258],"mapped",[102,108]],[[64259,64259],"mapped",[102,102,105]],[[64260,64260],"mapped",[102,102,108]],[[64261,64262],"mapped",[115,116]],[[64263,64274],"disallowed"],[[64275,64275],"mapped",[1396,1398]],[[64276,64276],"mapped",[1396,1381]],[[64277,64277],"mapped",[1396,1387]],[[64278,64278],"mapped",[1406,1398]],[[64279,64279],"mapped",[1396,1389]],[[64280,64284],"disallowed"],[[64285,64285],"mapped",[1497,1460]],[[64286,64286],"valid"],[[64287,64287],"mapped",[1522,1463]],[[64288,64288],"mapped",[1506]],[[64289,64289],"mapped",[1488]],[[64290,64290],"mapped",[1491]],[[64291,64291],"mapped",[1492]],[[64292,64292],"mapped",[1499]],[[64293,64293],"mapped",[1500]],[[64294,64294],"mapped",[1501]],[[64295,64295],"mapped",[1512]],[[64296,64296],"mapped",[1514]],[[64297,64297],"disallowed_STD3_mapped",[43]],[[64298,64298],"mapped",[1513,1473]],[[64299,64299],"mapped",[1513,1474]],[[64300,64300],"mapped",[1513,1468,1473]],[[64301,64301],"mapped",[1513,1468,1474]],[[64302,64302],"mapped",[1488,1463]],[[64303,64303],"mapped",[1488,1464]],[[64304,64304],"mapped",[1488,1468]],[[64305,64305],"mapped",[1489,1468]],[[64306,64306],"mapped",[1490,1468]],[[64307,64307],"mapped",[1491,1468]],[[64308,64308],"mapped",[1492,1468]],[[64309,64309],"mapped",[1493,1468]],[[64310,64310],"mapped",[1494,1468]],[[64311,64311],"disallowed"],[[64312,64312],"mapped",[1496,1468]],[[64313,64313],"mapped",[1497,1468]],[[64314,64314],"mapped",[1498,1468]],[[64315,64315],"mapped",[1499,1468]],[[64316,64316],"mapped",[1500,1468]],[[64317,64317],"disallowed"],[[64318,64318],"mapped",[1502,1468]],[[64319,64319],"disallowed"],[[64320,64320],"mapped",[1504,1468]],[[64321,64321],"mapped",[1505,1468]],[[64322,64322],"disallowed"],[[64323,64323],"mapped",[1507,1468]],[[64324,64324],"mapped",[1508,1468]],[[64325,64325],"disallowed"],[[64326,64326],"mapped",[1510,1468]],[[64327,64327],"mapped",[1511,1468]],[[64328,64328],"mapped",[1512,1468]],[[64329,64329],"mapped",[1513,1468]],[[64330,64330],"mapped",[1514,1468]],[[64331,64331],"mapped",[1493,1465]],[[64332,64332],"mapped",[1489,1471]],[[64333,64333],"mapped",[1499,1471]],[[64334,64334],"mapped",[1508,1471]],[[64335,64335],"mapped",[1488,1500]],[[64336,64337],"mapped",[1649]],[[64338,64341],"mapped",[1659]],[[64342,64345],"mapped",[1662]],[[64346,64349],"mapped",[1664]],[[64350,64353],"mapped",[1658]],[[64354,64357],"mapped",[1663]],[[64358,64361],"mapped",[1657]],[[64362,64365],"mapped",[1700]],[[64366,64369],"mapped",[1702]],[[64370,64373],"mapped",[1668]],[[64374,64377],"mapped",[1667]],[[64378,64381],"mapped",[1670]],[[64382,64385],"mapped",[1671]],[[64386,64387],"mapped",[1677]],[[64388,64389],"mapped",[1676]],[[64390,64391],"mapped",[1678]],[[64392,64393],"mapped",[1672]],[[64394,64395],"mapped",[1688]],[[64396,64397],"mapped",[1681]],[[64398,64401],"mapped",[1705]],[[64402,64405],"mapped",[1711]],[[64406,64409],"mapped",[1715]],[[64410,64413],"mapped",[1713]],[[64414,64415],"mapped",[1722]],[[64416,64419],"mapped",[1723]],[[64420,64421],"mapped",[1728]],[[64422,64425],"mapped",[1729]],[[64426,64429],"mapped",[1726]],[[64430,64431],"mapped",[1746]],[[64432,64433],"mapped",[1747]],[[64434,64449],"valid",[],"NV8"],[[64450,64466],"disallowed"],[[64467,64470],"mapped",[1709]],[[64471,64472],"mapped",[1735]],[[64473,64474],"mapped",[1734]],[[64475,64476],"mapped",[1736]],[[64477,64477],"mapped",[1735,1652]],[[64478,64479],"mapped",[1739]],[[64480,64481],"mapped",[1733]],[[64482,64483],"mapped",[1737]],[[64484,64487],"mapped",[1744]],[[64488,64489],"mapped",[1609]],[[64490,64491],"mapped",[1574,1575]],[[64492,64493],"mapped",[1574,1749]],[[64494,64495],"mapped",[1574,1608]],[[64496,64497],"mapped",[1574,1735]],[[64498,64499],"mapped",[1574,1734]],[[64500,64501],"mapped",[1574,1736]],[[64502,64504],"mapped",[1574,1744]],[[64505,64507],"mapped",[1574,1609]],[[64508,64511],"mapped",[1740]],[[64512,64512],"mapped",[1574,1580]],[[64513,64513],"mapped",[1574,1581]],[[64514,64514],"mapped",[1574,1605]],[[64515,64515],"mapped",[1574,1609]],[[64516,64516],"mapped",[1574,1610]],[[64517,64517],"mapped",[1576,1580]],[[64518,64518],"mapped",[1576,1581]],[[64519,64519],"mapped",[1576,1582]],[[64520,64520],"mapped",[1576,1605]],[[64521,64521],"mapped",[1576,1609]],[[64522,64522],"mapped",[1576,1610]],[[64523,64523],"mapped",[1578,1580]],[[64524,64524],"mapped",[1578,1581]],[[64525,64525],"mapped",[1578,1582]],[[64526,64526],"mapped",[1578,1605]],[[64527,64527],"mapped",[1578,1609]],[[64528,64528],"mapped",[1578,1610]],[[64529,64529],"mapped",[1579,1580]],[[64530,64530],"mapped",[1579,1605]],[[64531,64531],"mapped",[1579,1609]],[[64532,64532],"mapped",[1579,1610]],[[64533,64533],"mapped",[1580,1581]],[[64534,64534],"mapped",[1580,1605]],[[64535,64535],"mapped",[1581,1580]],[[64536,64536],"mapped",[1581,1605]],[[64537,64537],"mapped",[1582,1580]],[[64538,64538],"mapped",[1582,1581]],[[64539,64539],"mapped",[1582,1605]],[[64540,64540],"mapped",[1587,1580]],[[64541,64541],"mapped",[1587,1581]],[[64542,64542],"mapped",[1587,1582]],[[64543,64543],"mapped",[1587,1605]],[[64544,64544],"mapped",[1589,1581]],[[64545,64545],"mapped",[1589,1605]],[[64546,64546],"mapped",[1590,1580]],[[64547,64547],"mapped",[1590,1581]],[[64548,64548],"mapped",[1590,1582]],[[64549,64549],"mapped",[1590,1605]],[[64550,64550],"mapped",[1591,1581]],[[64551,64551],"mapped",[1591,1605]],[[64552,64552],"mapped",[1592,1605]],[[64553,64553],"mapped",[1593,1580]],[[64554,64554],"mapped",[1593,1605]],[[64555,64555],"mapped",[1594,1580]],[[64556,64556],"mapped",[1594,1605]],[[64557,64557],"mapped",[1601,1580]],[[64558,64558],"mapped",[1601,1581]],[[64559,64559],"mapped",[1601,1582]],[[64560,64560],"mapped",[1601,1605]],[[64561,64561],"mapped",[1601,1609]],[[64562,64562],"mapped",[1601,1610]],[[64563,64563],"mapped",[1602,1581]],[[64564,64564],"mapped",[1602,1605]],[[64565,64565],"mapped",[1602,1609]],[[64566,64566],"mapped",[1602,1610]],[[64567,64567],"mapped",[1603,1575]],[[64568,64568],"mapped",[1603,1580]],[[64569,64569],"mapped",[1603,1581]],[[64570,64570],"mapped",[1603,1582]],[[64571,64571],"mapped",[1603,1604]],[[64572,64572],"mapped",[1603,1605]],[[64573,64573],"mapped",[1603,1609]],[[64574,64574],"mapped",[1603,1610]],[[64575,64575],"mapped",[1604,1580]],[[64576,64576],"mapped",[1604,1581]],[[64577,64577],"mapped",[1604,1582]],[[64578,64578],"mapped",[1604,1605]],[[64579,64579],"mapped",[1604,1609]],[[64580,64580],"mapped",[1604,1610]],[[64581,64581],"mapped",[1605,1580]],[[64582,64582],"mapped",[1605,1581]],[[64583,64583],"mapped",[1605,1582]],[[64584,64584],"mapped",[1605,1605]],[[64585,64585],"mapped",[1605,1609]],[[64586,64586],"mapped",[1605,1610]],[[64587,64587],"mapped",[1606,1580]],[[64588,64588],"mapped",[1606,1581]],[[64589,64589],"mapped",[1606,1582]],[[64590,64590],"mapped",[1606,1605]],[[64591,64591],"mapped",[1606,1609]],[[64592,64592],"mapped",[1606,1610]],[[64593,64593],"mapped",[1607,1580]],[[64594,64594],"mapped",[1607,1605]],[[64595,64595],"mapped",[1607,1609]],[[64596,64596],"mapped",[1607,1610]],[[64597,64597],"mapped",[1610,1580]],[[64598,64598],"mapped",[1610,1581]],[[64599,64599],"mapped",[1610,1582]],[[64600,64600],"mapped",[1610,1605]],[[64601,64601],"mapped",[1610,1609]],[[64602,64602],"mapped",[1610,1610]],[[64603,64603],"mapped",[1584,1648]],[[64604,64604],"mapped",[1585,1648]],[[64605,64605],"mapped",[1609,1648]],[[64606,64606],"disallowed_STD3_mapped",[32,1612,1617]],[[64607,64607],"disallowed_STD3_mapped",[32,1613,1617]],[[64608,64608],"disallowed_STD3_mapped",[32,1614,1617]],[[64609,64609],"disallowed_STD3_mapped",[32,1615,1617]],[[64610,64610],"disallowed_STD3_mapped",[32,1616,1617]],[[64611,64611],"disallowed_STD3_mapped",[32,1617,1648]],[[64612,64612],"mapped",[1574,1585]],[[64613,64613],"mapped",[1574,1586]],[[64614,64614],"mapped",[1574,1605]],[[64615,64615],"mapped",[1574,1606]],[[64616,64616],"mapped",[1574,1609]],[[64617,64617],"mapped",[1574,1610]],[[64618,64618],"mapped",[1576,1585]],[[64619,64619],"mapped",[1576,1586]],[[64620,64620],"mapped",[1576,1605]],[[64621,64621],"mapped",[1576,1606]],[[64622,64622],"mapped",[1576,1609]],[[64623,64623],"mapped",[1576,1610]],[[64624,64624],"mapped",[1578,1585]],[[64625,64625],"mapped",[1578,1586]],[[64626,64626],"mapped",[1578,1605]],[[64627,64627],"mapped",[1578,1606]],[[64628,64628],"mapped",[1578,1609]],[[64629,64629],"mapped",[1578,1610]],[[64630,64630],"mapped",[1579,1585]],[[64631,64631],"mapped",[1579,1586]],[[64632,64632],"mapped",[1579,1605]],[[64633,64633],"mapped",[1579,1606]],[[64634,64634],"mapped",[1579,1609]],[[64635,64635],"mapped",[1579,1610]],[[64636,64636],"mapped",[1601,1609]],[[64637,64637],"mapped",[1601,1610]],[[64638,64638],"mapped",[1602,1609]],[[64639,64639],"mapped",[1602,1610]],[[64640,64640],"mapped",[1603,1575]],[[64641,64641],"mapped",[1603,1604]],[[64642,64642],"mapped",[1603,1605]],[[64643,64643],"mapped",[1603,1609]],[[64644,64644],"mapped",[1603,1610]],[[64645,64645],"mapped",[1604,1605]],[[64646,64646],"mapped",[1604,1609]],[[64647,64647],"mapped",[1604,1610]],[[64648,64648],"mapped",[1605,1575]],[[64649,64649],"mapped",[1605,1605]],[[64650,64650],"mapped",[1606,1585]],[[64651,64651],"mapped",[1606,1586]],[[64652,64652],"mapped",[1606,1605]],[[64653,64653],"mapped",[1606,1606]],[[64654,64654],"mapped",[1606,1609]],[[64655,64655],"mapped",[1606,1610]],[[64656,64656],"mapped",[1609,1648]],[[64657,64657],"mapped",[1610,1585]],[[64658,64658],"mapped",[1610,1586]],[[64659,64659],"mapped",[1610,1605]],[[64660,64660],"mapped",[1610,1606]],[[64661,64661],"mapped",[1610,1609]],[[64662,64662],"mapped",[1610,1610]],[[64663,64663],"mapped",[1574,1580]],[[64664,64664],"mapped",[1574,1581]],[[64665,64665],"mapped",[1574,1582]],[[64666,64666],"mapped",[1574,1605]],[[64667,64667],"mapped",[1574,1607]],[[64668,64668],"mapped",[1576,1580]],[[64669,64669],"mapped",[1576,1581]],[[64670,64670],"mapped",[1576,1582]],[[64671,64671],"mapped",[1576,1605]],[[64672,64672],"mapped",[1576,1607]],[[64673,64673],"mapped",[1578,1580]],[[64674,64674],"mapped",[1578,1581]],[[64675,64675],"mapped",[1578,1582]],[[64676,64676],"mapped",[1578,1605]],[[64677,64677],"mapped",[1578,1607]],[[64678,64678],"mapped",[1579,1605]],[[64679,64679],"mapped",[1580,1581]],[[64680,64680],"mapped",[1580,1605]],[[64681,64681],"mapped",[1581,1580]],[[64682,64682],"mapped",[1581,1605]],[[64683,64683],"mapped",[1582,1580]],[[64684,64684],"mapped",[1582,1605]],[[64685,64685],"mapped",[1587,1580]],[[64686,64686],"mapped",[1587,1581]],[[64687,64687],"mapped",[1587,1582]],[[64688,64688],"mapped",[1587,1605]],[[64689,64689],"mapped",[1589,1581]],[[64690,64690],"mapped",[1589,1582]],[[64691,64691],"mapped",[1589,1605]],[[64692,64692],"mapped",[1590,1580]],[[64693,64693],"mapped",[1590,1581]],[[64694,64694],"mapped",[1590,1582]],[[64695,64695],"mapped",[1590,1605]],[[64696,64696],"mapped",[1591,1581]],[[64697,64697],"mapped",[1592,1605]],[[64698,64698],"mapped",[1593,1580]],[[64699,64699],"mapped",[1593,1605]],[[64700,64700],"mapped",[1594,1580]],[[64701,64701],"mapped",[1594,1605]],[[64702,64702],"mapped",[1601,1580]],[[64703,64703],"mapped",[1601,1581]],[[64704,64704],"mapped",[1601,1582]],[[64705,64705],"mapped",[1601,1605]],[[64706,64706],"mapped",[1602,1581]],[[64707,64707],"mapped",[1602,1605]],[[64708,64708],"mapped",[1603,1580]],[[64709,64709],"mapped",[1603,1581]],[[64710,64710],"mapped",[1603,1582]],[[64711,64711],"mapped",[1603,1604]],[[64712,64712],"mapped",[1603,1605]],[[64713,64713],"mapped",[1604,1580]],[[64714,64714],"mapped",[1604,1581]],[[64715,64715],"mapped",[1604,1582]],[[64716,64716],"mapped",[1604,1605]],[[64717,64717],"mapped",[1604,1607]],[[64718,64718],"mapped",[1605,1580]],[[64719,64719],"mapped",[1605,1581]],[[64720,64720],"mapped",[1605,1582]],[[64721,64721],"mapped",[1605,1605]],[[64722,64722],"mapped",[1606,1580]],[[64723,64723],"mapped",[1606,1581]],[[64724,64724],"mapped",[1606,1582]],[[64725,64725],"mapped",[1606,1605]],[[64726,64726],"mapped",[1606,1607]],[[64727,64727],"mapped",[1607,1580]],[[64728,64728],"mapped",[1607,1605]],[[64729,64729],"mapped",[1607,1648]],[[64730,64730],"mapped",[1610,1580]],[[64731,64731],"mapped",[1610,1581]],[[64732,64732],"mapped",[1610,1582]],[[64733,64733],"mapped",[1610,1605]],[[64734,64734],"mapped",[1610,1607]],[[64735,64735],"mapped",[1574,1605]],[[64736,64736],"mapped",[1574,1607]],[[64737,64737],"mapped",[1576,1605]],[[64738,64738],"mapped",[1576,1607]],[[64739,64739],"mapped",[1578,1605]],[[64740,64740],"mapped",[1578,1607]],[[64741,64741],"mapped",[1579,1605]],[[64742,64742],"mapped",[1579,1607]],[[64743,64743],"mapped",[1587,1605]],[[64744,64744],"mapped",[1587,1607]],[[64745,64745],"mapped",[1588,1605]],[[64746,64746],"mapped",[1588,1607]],[[64747,64747],"mapped",[1603,1604]],[[64748,64748],"mapped",[1603,1605]],[[64749,64749],"mapped",[1604,1605]],[[64750,64750],"mapped",[1606,1605]],[[64751,64751],"mapped",[1606,1607]],[[64752,64752],"mapped",[1610,1605]],[[64753,64753],"mapped",[1610,1607]],[[64754,64754],"mapped",[1600,1614,1617]],[[64755,64755],"mapped",[1600,1615,1617]],[[64756,64756],"mapped",[1600,1616,1617]],[[64757,64757],"mapped",[1591,1609]],[[64758,64758],"mapped",[1591,1610]],[[64759,64759],"mapped",[1593,1609]],[[64760,64760],"mapped",[1593,1610]],[[64761,64761],"mapped",[1594,1609]],[[64762,64762],"mapped",[1594,1610]],[[64763,64763],"mapped",[1587,1609]],[[64764,64764],"mapped",[1587,1610]],[[64765,64765],"mapped",[1588,1609]],[[64766,64766],"mapped",[1588,1610]],[[64767,64767],"mapped",[1581,1609]],[[64768,64768],"mapped",[1581,1610]],[[64769,64769],"mapped",[1580,1609]],[[64770,64770],"mapped",[1580,1610]],[[64771,64771],"mapped",[1582,1609]],[[64772,64772],"mapped",[1582,1610]],[[64773,64773],"mapped",[1589,1609]],[[64774,64774],"mapped",[1589,1610]],[[64775,64775],"mapped",[1590,1609]],[[64776,64776],"mapped",[1590,1610]],[[64777,64777],"mapped",[1588,1580]],[[64778,64778],"mapped",[1588,1581]],[[64779,64779],"mapped",[1588,1582]],[[64780,64780],"mapped",[1588,1605]],[[64781,64781],"mapped",[1588,1585]],[[64782,64782],"mapped",[1587,1585]],[[64783,64783],"mapped",[1589,1585]],[[64784,64784],"mapped",[1590,1585]],[[64785,64785],"mapped",[1591,1609]],[[64786,64786],"mapped",[1591,1610]],[[64787,64787],"mapped",[1593,1609]],[[64788,64788],"mapped",[1593,1610]],[[64789,64789],"mapped",[1594,1609]],[[64790,64790],"mapped",[1594,1610]],[[64791,64791],"mapped",[1587,1609]],[[64792,64792],"mapped",[1587,1610]],[[64793,64793],"mapped",[1588,1609]],[[64794,64794],"mapped",[1588,1610]],[[64795,64795],"mapped",[1581,1609]],[[64796,64796],"mapped",[1581,1610]],[[64797,64797],"mapped",[1580,1609]],[[64798,64798],"mapped",[1580,1610]],[[64799,64799],"mapped",[1582,1609]],[[64800,64800],"mapped",[1582,1610]],[[64801,64801],"mapped",[1589,1609]],[[64802,64802],"mapped",[1589,1610]],[[64803,64803],"mapped",[1590,1609]],[[64804,64804],"mapped",[1590,1610]],[[64805,64805],"mapped",[1588,1580]],[[64806,64806],"mapped",[1588,1581]],[[64807,64807],"mapped",[1588,1582]],[[64808,64808],"mapped",[1588,1605]],[[64809,64809],"mapped",[1588,1585]],[[64810,64810],"mapped",[1587,1585]],[[64811,64811],"mapped",[1589,1585]],[[64812,64812],"mapped",[1590,1585]],[[64813,64813],"mapped",[1588,1580]],[[64814,64814],"mapped",[1588,1581]],[[64815,64815],"mapped",[1588,1582]],[[64816,64816],"mapped",[1588,1605]],[[64817,64817],"mapped",[1587,1607]],[[64818,64818],"mapped",[1588,1607]],[[64819,64819],"mapped",[1591,1605]],[[64820,64820],"mapped",[1587,1580]],[[64821,64821],"mapped",[1587,1581]],[[64822,64822],"mapped",[1587,1582]],[[64823,64823],"mapped",[1588,1580]],[[64824,64824],"mapped",[1588,1581]],[[64825,64825],"mapped",[1588,1582]],[[64826,64826],"mapped",[1591,1605]],[[64827,64827],"mapped",[1592,1605]],[[64828,64829],"mapped",[1575,1611]],[[64830,64831],"valid",[],"NV8"],[[64832,64847],"disallowed"],[[64848,64848],"mapped",[1578,1580,1605]],[[64849,64850],"mapped",[1578,1581,1580]],[[64851,64851],"mapped",[1578,1581,1605]],[[64852,64852],"mapped",[1578,1582,1605]],[[64853,64853],"mapped",[1578,1605,1580]],[[64854,64854],"mapped",[1578,1605,1581]],[[64855,64855],"mapped",[1578,1605,1582]],[[64856,64857],"mapped",[1580,1605,1581]],[[64858,64858],"mapped",[1581,1605,1610]],[[64859,64859],"mapped",[1581,1605,1609]],[[64860,64860],"mapped",[1587,1581,1580]],[[64861,64861],"mapped",[1587,1580,1581]],[[64862,64862],"mapped",[1587,1580,1609]],[[64863,64864],"mapped",[1587,1605,1581]],[[64865,64865],"mapped",[1587,1605,1580]],[[64866,64867],"mapped",[1587,1605,1605]],[[64868,64869],"mapped",[1589,1581,1581]],[[64870,64870],"mapped",[1589,1605,1605]],[[64871,64872],"mapped",[1588,1581,1605]],[[64873,64873],"mapped",[1588,1580,1610]],[[64874,64875],"mapped",[1588,1605,1582]],[[64876,64877],"mapped",[1588,1605,1605]],[[64878,64878],"mapped",[1590,1581,1609]],[[64879,64880],"mapped",[1590,1582,1605]],[[64881,64882],"mapped",[1591,1605,1581]],[[64883,64883],"mapped",[1591,1605,1605]],[[64884,64884],"mapped",[1591,1605,1610]],[[64885,64885],"mapped",[1593,1580,1605]],[[64886,64887],"mapped",[1593,1605,1605]],[[64888,64888],"mapped",[1593,1605,1609]],[[64889,64889],"mapped",[1594,1605,1605]],[[64890,64890],"mapped",[1594,1605,1610]],[[64891,64891],"mapped",[1594,1605,1609]],[[64892,64893],"mapped",[1601,1582,1605]],[[64894,64894],"mapped",[1602,1605,1581]],[[64895,64895],"mapped",[1602,1605,1605]],[[64896,64896],"mapped",[1604,1581,1605]],[[64897,64897],"mapped",[1604,1581,1610]],[[64898,64898],"mapped",[1604,1581,1609]],[[64899,64900],"mapped",[1604,1580,1580]],[[64901,64902],"mapped",[1604,1582,1605]],[[64903,64904],"mapped",[1604,1605,1581]],[[64905,64905],"mapped",[1605,1581,1580]],[[64906,64906],"mapped",[1605,1581,1605]],[[64907,64907],"mapped",[1605,1581,1610]],[[64908,64908],"mapped",[1605,1580,1581]],[[64909,64909],"mapped",[1605,1580,1605]],[[64910,64910],"mapped",[1605,1582,1580]],[[64911,64911],"mapped",[1605,1582,1605]],[[64912,64913],"disallowed"],[[64914,64914],"mapped",[1605,1580,1582]],[[64915,64915],"mapped",[1607,1605,1580]],[[64916,64916],"mapped",[1607,1605,1605]],[[64917,64917],"mapped",[1606,1581,1605]],[[64918,64918],"mapped",[1606,1581,1609]],[[64919,64920],"mapped",[1606,1580,1605]],[[64921,64921],"mapped",[1606,1580,1609]],[[64922,64922],"mapped",[1606,1605,1610]],[[64923,64923],"mapped",[1606,1605,1609]],[[64924,64925],"mapped",[1610,1605,1605]],[[64926,64926],"mapped",[1576,1582,1610]],[[64927,64927],"mapped",[1578,1580,1610]],[[64928,64928],"mapped",[1578,1580,1609]],[[64929,64929],"mapped",[1578,1582,1610]],[[64930,64930],"mapped",[1578,1582,1609]],[[64931,64931],"mapped",[1578,1605,1610]],[[64932,64932],"mapped",[1578,1605,1609]],[[64933,64933],"mapped",[1580,1605,1610]],[[64934,64934],"mapped",[1580,1581,1609]],[[64935,64935],"mapped",[1580,1605,1609]],[[64936,64936],"mapped",[1587,1582,1609]],[[64937,64937],"mapped",[1589,1581,1610]],[[64938,64938],"mapped",[1588,1581,1610]],[[64939,64939],"mapped",[1590,1581,1610]],[[64940,64940],"mapped",[1604,1580,1610]],[[64941,64941],"mapped",[1604,1605,1610]],[[64942,64942],"mapped",[1610,1581,1610]],[[64943,64943],"mapped",[1610,1580,1610]],[[64944,64944],"mapped",[1610,1605,1610]],[[64945,64945],"mapped",[1605,1605,1610]],[[64946,64946],"mapped",[1602,1605,1610]],[[64947,64947],"mapped",[1606,1581,1610]],[[64948,64948],"mapped",[1602,1605,1581]],[[64949,64949],"mapped",[1604,1581,1605]],[[64950,64950],"mapped",[1593,1605,1610]],[[64951,64951],"mapped",[1603,1605,1610]],[[64952,64952],"mapped",[1606,1580,1581]],[[64953,64953],"mapped",[1605,1582,1610]],[[64954,64954],"mapped",[1604,1580,1605]],[[64955,64955],"mapped",[1603,1605,1605]],[[64956,64956],"mapped",[1604,1580,1605]],[[64957,64957],"mapped",[1606,1580,1581]],[[64958,64958],"mapped",[1580,1581,1610]],[[64959,64959],"mapped",[1581,1580,1610]],[[64960,64960],"mapped",[1605,1580,1610]],[[64961,64961],"mapped",[1601,1605,1610]],[[64962,64962],"mapped",[1576,1581,1610]],[[64963,64963],"mapped",[1603,1605,1605]],[[64964,64964],"mapped",[1593,1580,1605]],[[64965,64965],"mapped",[1589,1605,1605]],[[64966,64966],"mapped",[1587,1582,1610]],[[64967,64967],"mapped",[1606,1580,1610]],[[64968,64975],"disallowed"],[[64976,65007],"disallowed"],[[65008,65008],"mapped",[1589,1604,1746]],[[65009,65009],"mapped",[1602,1604,1746]],[[65010,65010],"mapped",[1575,1604,1604,1607]],[[65011,65011],"mapped",[1575,1603,1576,1585]],[[65012,65012],"mapped",[1605,1581,1605,1583]],[[65013,65013],"mapped",[1589,1604,1593,1605]],[[65014,65014],"mapped",[1585,1587,1608,1604]],[[65015,65015],"mapped",[1593,1604,1610,1607]],[[65016,65016],"mapped",[1608,1587,1604,1605]],[[65017,65017],"mapped",[1589,1604,1609]],[[65018,65018],"disallowed_STD3_mapped",[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605]],[[65019,65019],"disallowed_STD3_mapped",[1580,1604,32,1580,1604,1575,1604,1607]],[[65020,65020],"mapped",[1585,1740,1575,1604]],[[65021,65021],"valid",[],"NV8"],[[65022,65023],"disallowed"],[[65024,65039],"ignored"],[[65040,65040],"disallowed_STD3_mapped",[44]],[[65041,65041],"mapped",[12289]],[[65042,65042],"disallowed"],[[65043,65043],"disallowed_STD3_mapped",[58]],[[65044,65044],"disallowed_STD3_mapped",[59]],[[65045,65045],"disallowed_STD3_mapped",[33]],[[65046,65046],"disallowed_STD3_mapped",[63]],[[65047,65047],"mapped",[12310]],[[65048,65048],"mapped",[12311]],[[65049,65049],"disallowed"],[[65050,65055],"disallowed"],[[65056,65059],"valid"],[[65060,65062],"valid"],[[65063,65069],"valid"],[[65070,65071],"valid"],[[65072,65072],"disallowed"],[[65073,65073],"mapped",[8212]],[[65074,65074],"mapped",[8211]],[[65075,65076],"disallowed_STD3_mapped",[95]],[[65077,65077],"disallowed_STD3_mapped",[40]],[[65078,65078],"disallowed_STD3_mapped",[41]],[[65079,65079],"disallowed_STD3_mapped",[123]],[[65080,65080],"disallowed_STD3_mapped",[125]],[[65081,65081],"mapped",[12308]],[[65082,65082],"mapped",[12309]],[[65083,65083],"mapped",[12304]],[[65084,65084],"mapped",[12305]],[[65085,65085],"mapped",[12298]],[[65086,65086],"mapped",[12299]],[[65087,65087],"mapped",[12296]],[[65088,65088],"mapped",[12297]],[[65089,65089],"mapped",[12300]],[[65090,65090],"mapped",[12301]],[[65091,65091],"mapped",[12302]],[[65092,65092],"mapped",[12303]],[[65093,65094],"valid",[],"NV8"],[[65095,65095],"disallowed_STD3_mapped",[91]],[[65096,65096],"disallowed_STD3_mapped",[93]],[[65097,65100],"disallowed_STD3_mapped",[32,773]],[[65101,65103],"disallowed_STD3_mapped",[95]],[[65104,65104],"disallowed_STD3_mapped",[44]],[[65105,65105],"mapped",[12289]],[[65106,65106],"disallowed"],[[65107,65107],"disallowed"],[[65108,65108],"disallowed_STD3_mapped",[59]],[[65109,65109],"disallowed_STD3_mapped",[58]],[[65110,65110],"disallowed_STD3_mapped",[63]],[[65111,65111],"disallowed_STD3_mapped",[33]],[[65112,65112],"mapped",[8212]],[[65113,65113],"disallowed_STD3_mapped",[40]],[[65114,65114],"disallowed_STD3_mapped",[41]],[[65115,65115],"disallowed_STD3_mapped",[123]],[[65116,65116],"disallowed_STD3_mapped",[125]],[[65117,65117],"mapped",[12308]],[[65118,65118],"mapped",[12309]],[[65119,65119],"disallowed_STD3_mapped",[35]],[[65120,65120],"disallowed_STD3_mapped",[38]],[[65121,65121],"disallowed_STD3_mapped",[42]],[[65122,65122],"disallowed_STD3_mapped",[43]],[[65123,65123],"mapped",[45]],[[65124,65124],"disallowed_STD3_mapped",[60]],[[65125,65125],"disallowed_STD3_mapped",[62]],[[65126,65126],"disallowed_STD3_mapped",[61]],[[65127,65127],"disallowed"],[[65128,65128],"disallowed_STD3_mapped",[92]],[[65129,65129],"disallowed_STD3_mapped",[36]],[[65130,65130],"disallowed_STD3_mapped",[37]],[[65131,65131],"disallowed_STD3_mapped",[64]],[[65132,65135],"disallowed"],[[65136,65136],"disallowed_STD3_mapped",[32,1611]],[[65137,65137],"mapped",[1600,1611]],[[65138,65138],"disallowed_STD3_mapped",[32,1612]],[[65139,65139],"valid"],[[65140,65140],"disallowed_STD3_mapped",[32,1613]],[[65141,65141],"disallowed"],[[65142,65142],"disallowed_STD3_mapped",[32,1614]],[[65143,65143],"mapped",[1600,1614]],[[65144,65144],"disallowed_STD3_mapped",[32,1615]],[[65145,65145],"mapped",[1600,1615]],[[65146,65146],"disallowed_STD3_mapped",[32,1616]],[[65147,65147],"mapped",[1600,1616]],[[65148,65148],"disallowed_STD3_mapped",[32,1617]],[[65149,65149],"mapped",[1600,1617]],[[65150,65150],"disallowed_STD3_mapped",[32,1618]],[[65151,65151],"mapped",[1600,1618]],[[65152,65152],"mapped",[1569]],[[65153,65154],"mapped",[1570]],[[65155,65156],"mapped",[1571]],[[65157,65158],"mapped",[1572]],[[65159,65160],"mapped",[1573]],[[65161,65164],"mapped",[1574]],[[65165,65166],"mapped",[1575]],[[65167,65170],"mapped",[1576]],[[65171,65172],"mapped",[1577]],[[65173,65176],"mapped",[1578]],[[65177,65180],"mapped",[1579]],[[65181,65184],"mapped",[1580]],[[65185,65188],"mapped",[1581]],[[65189,65192],"mapped",[1582]],[[65193,65194],"mapped",[1583]],[[65195,65196],"mapped",[1584]],[[65197,65198],"mapped",[1585]],[[65199,65200],"mapped",[1586]],[[65201,65204],"mapped",[1587]],[[65205,65208],"mapped",[1588]],[[65209,65212],"mapped",[1589]],[[65213,65216],"mapped",[1590]],[[65217,65220],"mapped",[1591]],[[65221,65224],"mapped",[1592]],[[65225,65228],"mapped",[1593]],[[65229,65232],"mapped",[1594]],[[65233,65236],"mapped",[1601]],[[65237,65240],"mapped",[1602]],[[65241,65244],"mapped",[1603]],[[65245,65248],"mapped",[1604]],[[65249,65252],"mapped",[1605]],[[65253,65256],"mapped",[1606]],[[65257,65260],"mapped",[1607]],[[65261,65262],"mapped",[1608]],[[65263,65264],"mapped",[1609]],[[65265,65268],"mapped",[1610]],[[65269,65270],"mapped",[1604,1570]],[[65271,65272],"mapped",[1604,1571]],[[65273,65274],"mapped",[1604,1573]],[[65275,65276],"mapped",[1604,1575]],[[65277,65278],"disallowed"],[[65279,65279],"ignored"],[[65280,65280],"disallowed"],[[65281,65281],"disallowed_STD3_mapped",[33]],[[65282,65282],"disallowed_STD3_mapped",[34]],[[65283,65283],"disallowed_STD3_mapped",[35]],[[65284,65284],"disallowed_STD3_mapped",[36]],[[65285,65285],"disallowed_STD3_mapped",[37]],[[65286,65286],"disallowed_STD3_mapped",[38]],[[65287,65287],"disallowed_STD3_mapped",[39]],[[65288,65288],"disallowed_STD3_mapped",[40]],[[65289,65289],"disallowed_STD3_mapped",[41]],[[65290,65290],"disallowed_STD3_mapped",[42]],[[65291,65291],"disallowed_STD3_mapped",[43]],[[65292,65292],"disallowed_STD3_mapped",[44]],[[65293,65293],"mapped",[45]],[[65294,65294],"mapped",[46]],[[65295,65295],"disallowed_STD3_mapped",[47]],[[65296,65296],"mapped",[48]],[[65297,65297],"mapped",[49]],[[65298,65298],"mapped",[50]],[[65299,65299],"mapped",[51]],[[65300,65300],"mapped",[52]],[[65301,65301],"mapped",[53]],[[65302,65302],"mapped",[54]],[[65303,65303],"mapped",[55]],[[65304,65304],"mapped",[56]],[[65305,65305],"mapped",[57]],[[65306,65306],"disallowed_STD3_mapped",[58]],[[65307,65307],"disallowed_STD3_mapped",[59]],[[65308,65308],"disallowed_STD3_mapped",[60]],[[65309,65309],"disallowed_STD3_mapped",[61]],[[65310,65310],"disallowed_STD3_mapped",[62]],[[65311,65311],"disallowed_STD3_mapped",[63]],[[65312,65312],"disallowed_STD3_mapped",[64]],[[65313,65313],"mapped",[97]],[[65314,65314],"mapped",[98]],[[65315,65315],"mapped",[99]],[[65316,65316],"mapped",[100]],[[65317,65317],"mapped",[101]],[[65318,65318],"mapped",[102]],[[65319,65319],"mapped",[103]],[[65320,65320],"mapped",[104]],[[65321,65321],"mapped",[105]],[[65322,65322],"mapped",[106]],[[65323,65323],"mapped",[107]],[[65324,65324],"mapped",[108]],[[65325,65325],"mapped",[109]],[[65326,65326],"mapped",[110]],[[65327,65327],"mapped",[111]],[[65328,65328],"mapped",[112]],[[65329,65329],"mapped",[113]],[[65330,65330],"mapped",[114]],[[65331,65331],"mapped",[115]],[[65332,65332],"mapped",[116]],[[65333,65333],"mapped",[117]],[[65334,65334],"mapped",[118]],[[65335,65335],"mapped",[119]],[[65336,65336],"mapped",[120]],[[65337,65337],"mapped",[121]],[[65338,65338],"mapped",[122]],[[65339,65339],"disallowed_STD3_mapped",[91]],[[65340,65340],"disallowed_STD3_mapped",[92]],[[65341,65341],"disallowed_STD3_mapped",[93]],[[65342,65342],"disallowed_STD3_mapped",[94]],[[65343,65343],"disallowed_STD3_mapped",[95]],[[65344,65344],"disallowed_STD3_mapped",[96]],[[65345,65345],"mapped",[97]],[[65346,65346],"mapped",[98]],[[65347,65347],"mapped",[99]],[[65348,65348],"mapped",[100]],[[65349,65349],"mapped",[101]],[[65350,65350],"mapped",[102]],[[65351,65351],"mapped",[103]],[[65352,65352],"mapped",[104]],[[65353,65353],"mapped",[105]],[[65354,65354],"mapped",[106]],[[65355,65355],"mapped",[107]],[[65356,65356],"mapped",[108]],[[65357,65357],"mapped",[109]],[[65358,65358],"mapped",[110]],[[65359,65359],"mapped",[111]],[[65360,65360],"mapped",[112]],[[65361,65361],"mapped",[113]],[[65362,65362],"mapped",[114]],[[65363,65363],"mapped",[115]],[[65364,65364],"mapped",[116]],[[65365,65365],"mapped",[117]],[[65366,65366],"mapped",[118]],[[65367,65367],"mapped",[119]],[[65368,65368],"mapped",[120]],[[65369,65369],"mapped",[121]],[[65370,65370],"mapped",[122]],[[65371,65371],"disallowed_STD3_mapped",[123]],[[65372,65372],"disallowed_STD3_mapped",[124]],[[65373,65373],"disallowed_STD3_mapped",[125]],[[65374,65374],"disallowed_STD3_mapped",[126]],[[65375,65375],"mapped",[10629]],[[65376,65376],"mapped",[10630]],[[65377,65377],"mapped",[46]],[[65378,65378],"mapped",[12300]],[[65379,65379],"mapped",[12301]],[[65380,65380],"mapped",[12289]],[[65381,65381],"mapped",[12539]],[[65382,65382],"mapped",[12530]],[[65383,65383],"mapped",[12449]],[[65384,65384],"mapped",[12451]],[[65385,65385],"mapped",[12453]],[[65386,65386],"mapped",[12455]],[[65387,65387],"mapped",[12457]],[[65388,65388],"mapped",[12515]],[[65389,65389],"mapped",[12517]],[[65390,65390],"mapped",[12519]],[[65391,65391],"mapped",[12483]],[[65392,65392],"mapped",[12540]],[[65393,65393],"mapped",[12450]],[[65394,65394],"mapped",[12452]],[[65395,65395],"mapped",[12454]],[[65396,65396],"mapped",[12456]],[[65397,65397],"mapped",[12458]],[[65398,65398],"mapped",[12459]],[[65399,65399],"mapped",[12461]],[[65400,65400],"mapped",[12463]],[[65401,65401],"mapped",[12465]],[[65402,65402],"mapped",[12467]],[[65403,65403],"mapped",[12469]],[[65404,65404],"mapped",[12471]],[[65405,65405],"mapped",[12473]],[[65406,65406],"mapped",[12475]],[[65407,65407],"mapped",[12477]],[[65408,65408],"mapped",[12479]],[[65409,65409],"mapped",[12481]],[[65410,65410],"mapped",[12484]],[[65411,65411],"mapped",[12486]],[[65412,65412],"mapped",[12488]],[[65413,65413],"mapped",[12490]],[[65414,65414],"mapped",[12491]],[[65415,65415],"mapped",[12492]],[[65416,65416],"mapped",[12493]],[[65417,65417],"mapped",[12494]],[[65418,65418],"mapped",[12495]],[[65419,65419],"mapped",[12498]],[[65420,65420],"mapped",[12501]],[[65421,65421],"mapped",[12504]],[[65422,65422],"mapped",[12507]],[[65423,65423],"mapped",[12510]],[[65424,65424],"mapped",[12511]],[[65425,65425],"mapped",[12512]],[[65426,65426],"mapped",[12513]],[[65427,65427],"mapped",[12514]],[[65428,65428],"mapped",[12516]],[[65429,65429],"mapped",[12518]],[[65430,65430],"mapped",[12520]],[[65431,65431],"mapped",[12521]],[[65432,65432],"mapped",[12522]],[[65433,65433],"mapped",[12523]],[[65434,65434],"mapped",[12524]],[[65435,65435],"mapped",[12525]],[[65436,65436],"mapped",[12527]],[[65437,65437],"mapped",[12531]],[[65438,65438],"mapped",[12441]],[[65439,65439],"mapped",[12442]],[[65440,65440],"disallowed"],[[65441,65441],"mapped",[4352]],[[65442,65442],"mapped",[4353]],[[65443,65443],"mapped",[4522]],[[65444,65444],"mapped",[4354]],[[65445,65445],"mapped",[4524]],[[65446,65446],"mapped",[4525]],[[65447,65447],"mapped",[4355]],[[65448,65448],"mapped",[4356]],[[65449,65449],"mapped",[4357]],[[65450,65450],"mapped",[4528]],[[65451,65451],"mapped",[4529]],[[65452,65452],"mapped",[4530]],[[65453,65453],"mapped",[4531]],[[65454,65454],"mapped",[4532]],[[65455,65455],"mapped",[4533]],[[65456,65456],"mapped",[4378]],[[65457,65457],"mapped",[4358]],[[65458,65458],"mapped",[4359]],[[65459,65459],"mapped",[4360]],[[65460,65460],"mapped",[4385]],[[65461,65461],"mapped",[4361]],[[65462,65462],"mapped",[4362]],[[65463,65463],"mapped",[4363]],[[65464,65464],"mapped",[4364]],[[65465,65465],"mapped",[4365]],[[65466,65466],"mapped",[4366]],[[65467,65467],"mapped",[4367]],[[65468,65468],"mapped",[4368]],[[65469,65469],"mapped",[4369]],[[65470,65470],"mapped",[4370]],[[65471,65473],"disallowed"],[[65474,65474],"mapped",[4449]],[[65475,65475],"mapped",[4450]],[[65476,65476],"mapped",[4451]],[[65477,65477],"mapped",[4452]],[[65478,65478],"mapped",[4453]],[[65479,65479],"mapped",[4454]],[[65480,65481],"disallowed"],[[65482,65482],"mapped",[4455]],[[65483,65483],"mapped",[4456]],[[65484,65484],"mapped",[4457]],[[65485,65485],"mapped",[4458]],[[65486,65486],"mapped",[4459]],[[65487,65487],"mapped",[4460]],[[65488,65489],"disallowed"],[[65490,65490],"mapped",[4461]],[[65491,65491],"mapped",[4462]],[[65492,65492],"mapped",[4463]],[[65493,65493],"mapped",[4464]],[[65494,65494],"mapped",[4465]],[[65495,65495],"mapped",[4466]],[[65496,65497],"disallowed"],[[65498,65498],"mapped",[4467]],[[65499,65499],"mapped",[4468]],[[65500,65500],"mapped",[4469]],[[65501,65503],"disallowed"],[[65504,65504],"mapped",[162]],[[65505,65505],"mapped",[163]],[[65506,65506],"mapped",[172]],[[65507,65507],"disallowed_STD3_mapped",[32,772]],[[65508,65508],"mapped",[166]],[[65509,65509],"mapped",[165]],[[65510,65510],"mapped",[8361]],[[65511,65511],"disallowed"],[[65512,65512],"mapped",[9474]],[[65513,65513],"mapped",[8592]],[[65514,65514],"mapped",[8593]],[[65515,65515],"mapped",[8594]],[[65516,65516],"mapped",[8595]],[[65517,65517],"mapped",[9632]],[[65518,65518],"mapped",[9675]],[[65519,65528],"disallowed"],[[65529,65531],"disallowed"],[[65532,65532],"disallowed"],[[65533,65533],"disallowed"],[[65534,65535],"disallowed"],[[65536,65547],"valid"],[[65548,65548],"disallowed"],[[65549,65574],"valid"],[[65575,65575],"disallowed"],[[65576,65594],"valid"],[[65595,65595],"disallowed"],[[65596,65597],"valid"],[[65598,65598],"disallowed"],[[65599,65613],"valid"],[[65614,65615],"disallowed"],[[65616,65629],"valid"],[[65630,65663],"disallowed"],[[65664,65786],"valid"],[[65787,65791],"disallowed"],[[65792,65794],"valid",[],"NV8"],[[65795,65798],"disallowed"],[[65799,65843],"valid",[],"NV8"],[[65844,65846],"disallowed"],[[65847,65855],"valid",[],"NV8"],[[65856,65930],"valid",[],"NV8"],[[65931,65932],"valid",[],"NV8"],[[65933,65935],"disallowed"],[[65936,65947],"valid",[],"NV8"],[[65948,65951],"disallowed"],[[65952,65952],"valid",[],"NV8"],[[65953,65999],"disallowed"],[[66000,66044],"valid",[],"NV8"],[[66045,66045],"valid"],[[66046,66175],"disallowed"],[[66176,66204],"valid"],[[66205,66207],"disallowed"],[[66208,66256],"valid"],[[66257,66271],"disallowed"],[[66272,66272],"valid"],[[66273,66299],"valid",[],"NV8"],[[66300,66303],"disallowed"],[[66304,66334],"valid"],[[66335,66335],"valid"],[[66336,66339],"valid",[],"NV8"],[[66340,66351],"disallowed"],[[66352,66368],"valid"],[[66369,66369],"valid",[],"NV8"],[[66370,66377],"valid"],[[66378,66378],"valid",[],"NV8"],[[66379,66383],"disallowed"],[[66384,66426],"valid"],[[66427,66431],"disallowed"],[[66432,66461],"valid"],[[66462,66462],"disallowed"],[[66463,66463],"valid",[],"NV8"],[[66464,66499],"valid"],[[66500,66503],"disallowed"],[[66504,66511],"valid"],[[66512,66517],"valid",[],"NV8"],[[66518,66559],"disallowed"],[[66560,66560],"mapped",[66600]],[[66561,66561],"mapped",[66601]],[[66562,66562],"mapped",[66602]],[[66563,66563],"mapped",[66603]],[[66564,66564],"mapped",[66604]],[[66565,66565],"mapped",[66605]],[[66566,66566],"mapped",[66606]],[[66567,66567],"mapped",[66607]],[[66568,66568],"mapped",[66608]],[[66569,66569],"mapped",[66609]],[[66570,66570],"mapped",[66610]],[[66571,66571],"mapped",[66611]],[[66572,66572],"mapped",[66612]],[[66573,66573],"mapped",[66613]],[[66574,66574],"mapped",[66614]],[[66575,66575],"mapped",[66615]],[[66576,66576],"mapped",[66616]],[[66577,66577],"mapped",[66617]],[[66578,66578],"mapped",[66618]],[[66579,66579],"mapped",[66619]],[[66580,66580],"mapped",[66620]],[[66581,66581],"mapped",[66621]],[[66582,66582],"mapped",[66622]],[[66583,66583],"mapped",[66623]],[[66584,66584],"mapped",[66624]],[[66585,66585],"mapped",[66625]],[[66586,66586],"mapped",[66626]],[[66587,66587],"mapped",[66627]],[[66588,66588],"mapped",[66628]],[[66589,66589],"mapped",[66629]],[[66590,66590],"mapped",[66630]],[[66591,66591],"mapped",[66631]],[[66592,66592],"mapped",[66632]],[[66593,66593],"mapped",[66633]],[[66594,66594],"mapped",[66634]],[[66595,66595],"mapped",[66635]],[[66596,66596],"mapped",[66636]],[[66597,66597],"mapped",[66637]],[[66598,66598],"mapped",[66638]],[[66599,66599],"mapped",[66639]],[[66600,66637],"valid"],[[66638,66717],"valid"],[[66718,66719],"disallowed"],[[66720,66729],"valid"],[[66730,66815],"disallowed"],[[66816,66855],"valid"],[[66856,66863],"disallowed"],[[66864,66915],"valid"],[[66916,66926],"disallowed"],[[66927,66927],"valid",[],"NV8"],[[66928,67071],"disallowed"],[[67072,67382],"valid"],[[67383,67391],"disallowed"],[[67392,67413],"valid"],[[67414,67423],"disallowed"],[[67424,67431],"valid"],[[67432,67583],"disallowed"],[[67584,67589],"valid"],[[67590,67591],"disallowed"],[[67592,67592],"valid"],[[67593,67593],"disallowed"],[[67594,67637],"valid"],[[67638,67638],"disallowed"],[[67639,67640],"valid"],[[67641,67643],"disallowed"],[[67644,67644],"valid"],[[67645,67646],"disallowed"],[[67647,67647],"valid"],[[67648,67669],"valid"],[[67670,67670],"disallowed"],[[67671,67679],"valid",[],"NV8"],[[67680,67702],"valid"],[[67703,67711],"valid",[],"NV8"],[[67712,67742],"valid"],[[67743,67750],"disallowed"],[[67751,67759],"valid",[],"NV8"],[[67760,67807],"disallowed"],[[67808,67826],"valid"],[[67827,67827],"disallowed"],[[67828,67829],"valid"],[[67830,67834],"disallowed"],[[67835,67839],"valid",[],"NV8"],[[67840,67861],"valid"],[[67862,67865],"valid",[],"NV8"],[[67866,67867],"valid",[],"NV8"],[[67868,67870],"disallowed"],[[67871,67871],"valid",[],"NV8"],[[67872,67897],"valid"],[[67898,67902],"disallowed"],[[67903,67903],"valid",[],"NV8"],[[67904,67967],"disallowed"],[[67968,68023],"valid"],[[68024,68027],"disallowed"],[[68028,68029],"valid",[],"NV8"],[[68030,68031],"valid"],[[68032,68047],"valid",[],"NV8"],[[68048,68049],"disallowed"],[[68050,68095],"valid",[],"NV8"],[[68096,68099],"valid"],[[68100,68100],"disallowed"],[[68101,68102],"valid"],[[68103,68107],"disallowed"],[[68108,68115],"valid"],[[68116,68116],"disallowed"],[[68117,68119],"valid"],[[68120,68120],"disallowed"],[[68121,68147],"valid"],[[68148,68151],"disallowed"],[[68152,68154],"valid"],[[68155,68158],"disallowed"],[[68159,68159],"valid"],[[68160,68167],"valid",[],"NV8"],[[68168,68175],"disallowed"],[[68176,68184],"valid",[],"NV8"],[[68185,68191],"disallowed"],[[68192,68220],"valid"],[[68221,68223],"valid",[],"NV8"],[[68224,68252],"valid"],[[68253,68255],"valid",[],"NV8"],[[68256,68287],"disallowed"],[[68288,68295],"valid"],[[68296,68296],"valid",[],"NV8"],[[68297,68326],"valid"],[[68327,68330],"disallowed"],[[68331,68342],"valid",[],"NV8"],[[68343,68351],"disallowed"],[[68352,68405],"valid"],[[68406,68408],"disallowed"],[[68409,68415],"valid",[],"NV8"],[[68416,68437],"valid"],[[68438,68439],"disallowed"],[[68440,68447],"valid",[],"NV8"],[[68448,68466],"valid"],[[68467,68471],"disallowed"],[[68472,68479],"valid",[],"NV8"],[[68480,68497],"valid"],[[68498,68504],"disallowed"],[[68505,68508],"valid",[],"NV8"],[[68509,68520],"disallowed"],[[68521,68527],"valid",[],"NV8"],[[68528,68607],"disallowed"],[[68608,68680],"valid"],[[68681,68735],"disallowed"],[[68736,68736],"mapped",[68800]],[[68737,68737],"mapped",[68801]],[[68738,68738],"mapped",[68802]],[[68739,68739],"mapped",[68803]],[[68740,68740],"mapped",[68804]],[[68741,68741],"mapped",[68805]],[[68742,68742],"mapped",[68806]],[[68743,68743],"mapped",[68807]],[[68744,68744],"mapped",[68808]],[[68745,68745],"mapped",[68809]],[[68746,68746],"mapped",[68810]],[[68747,68747],"mapped",[68811]],[[68748,68748],"mapped",[68812]],[[68749,68749],"mapped",[68813]],[[68750,68750],"mapped",[68814]],[[68751,68751],"mapped",[68815]],[[68752,68752],"mapped",[68816]],[[68753,68753],"mapped",[68817]],[[68754,68754],"mapped",[68818]],[[68755,68755],"mapped",[68819]],[[68756,68756],"mapped",[68820]],[[68757,68757],"mapped",[68821]],[[68758,68758],"mapped",[68822]],[[68759,68759],"mapped",[68823]],[[68760,68760],"mapped",[68824]],[[68761,68761],"mapped",[68825]],[[68762,68762],"mapped",[68826]],[[68763,68763],"mapped",[68827]],[[68764,68764],"mapped",[68828]],[[68765,68765],"mapped",[68829]],[[68766,68766],"mapped",[68830]],[[68767,68767],"mapped",[68831]],[[68768,68768],"mapped",[68832]],[[68769,68769],"mapped",[68833]],[[68770,68770],"mapped",[68834]],[[68771,68771],"mapped",[68835]],[[68772,68772],"mapped",[68836]],[[68773,68773],"mapped",[68837]],[[68774,68774],"mapped",[68838]],[[68775,68775],"mapped",[68839]],[[68776,68776],"mapped",[68840]],[[68777,68777],"mapped",[68841]],[[68778,68778],"mapped",[68842]],[[68779,68779],"mapped",[68843]],[[68780,68780],"mapped",[68844]],[[68781,68781],"mapped",[68845]],[[68782,68782],"mapped",[68846]],[[68783,68783],"mapped",[68847]],[[68784,68784],"mapped",[68848]],[[68785,68785],"mapped",[68849]],[[68786,68786],"mapped",[68850]],[[68787,68799],"disallowed"],[[68800,68850],"valid"],[[68851,68857],"disallowed"],[[68858,68863],"valid",[],"NV8"],[[68864,69215],"disallowed"],[[69216,69246],"valid",[],"NV8"],[[69247,69631],"disallowed"],[[69632,69702],"valid"],[[69703,69709],"valid",[],"NV8"],[[69710,69713],"disallowed"],[[69714,69733],"valid",[],"NV8"],[[69734,69743],"valid"],[[69744,69758],"disallowed"],[[69759,69759],"valid"],[[69760,69818],"valid"],[[69819,69820],"valid",[],"NV8"],[[69821,69821],"disallowed"],[[69822,69825],"valid",[],"NV8"],[[69826,69839],"disallowed"],[[69840,69864],"valid"],[[69865,69871],"disallowed"],[[69872,69881],"valid"],[[69882,69887],"disallowed"],[[69888,69940],"valid"],[[69941,69941],"disallowed"],[[69942,69951],"valid"],[[69952,69955],"valid",[],"NV8"],[[69956,69967],"disallowed"],[[69968,70003],"valid"],[[70004,70005],"valid",[],"NV8"],[[70006,70006],"valid"],[[70007,70015],"disallowed"],[[70016,70084],"valid"],[[70085,70088],"valid",[],"NV8"],[[70089,70089],"valid",[],"NV8"],[[70090,70092],"valid"],[[70093,70093],"valid",[],"NV8"],[[70094,70095],"disallowed"],[[70096,70105],"valid"],[[70106,70106],"valid"],[[70107,70107],"valid",[],"NV8"],[[70108,70108],"valid"],[[70109,70111],"valid",[],"NV8"],[[70112,70112],"disallowed"],[[70113,70132],"valid",[],"NV8"],[[70133,70143],"disallowed"],[[70144,70161],"valid"],[[70162,70162],"disallowed"],[[70163,70199],"valid"],[[70200,70205],"valid",[],"NV8"],[[70206,70271],"disallowed"],[[70272,70278],"valid"],[[70279,70279],"disallowed"],[[70280,70280],"valid"],[[70281,70281],"disallowed"],[[70282,70285],"valid"],[[70286,70286],"disallowed"],[[70287,70301],"valid"],[[70302,70302],"disallowed"],[[70303,70312],"valid"],[[70313,70313],"valid",[],"NV8"],[[70314,70319],"disallowed"],[[70320,70378],"valid"],[[70379,70383],"disallowed"],[[70384,70393],"valid"],[[70394,70399],"disallowed"],[[70400,70400],"valid"],[[70401,70403],"valid"],[[70404,70404],"disallowed"],[[70405,70412],"valid"],[[70413,70414],"disallowed"],[[70415,70416],"valid"],[[70417,70418],"disallowed"],[[70419,70440],"valid"],[[70441,70441],"disallowed"],[[70442,70448],"valid"],[[70449,70449],"disallowed"],[[70450,70451],"valid"],[[70452,70452],"disallowed"],[[70453,70457],"valid"],[[70458,70459],"disallowed"],[[70460,70468],"valid"],[[70469,70470],"disallowed"],[[70471,70472],"valid"],[[70473,70474],"disallowed"],[[70475,70477],"valid"],[[70478,70479],"disallowed"],[[70480,70480],"valid"],[[70481,70486],"disallowed"],[[70487,70487],"valid"],[[70488,70492],"disallowed"],[[70493,70499],"valid"],[[70500,70501],"disallowed"],[[70502,70508],"valid"],[[70509,70511],"disallowed"],[[70512,70516],"valid"],[[70517,70783],"disallowed"],[[70784,70853],"valid"],[[70854,70854],"valid",[],"NV8"],[[70855,70855],"valid"],[[70856,70863],"disallowed"],[[70864,70873],"valid"],[[70874,71039],"disallowed"],[[71040,71093],"valid"],[[71094,71095],"disallowed"],[[71096,71104],"valid"],[[71105,71113],"valid",[],"NV8"],[[71114,71127],"valid",[],"NV8"],[[71128,71133],"valid"],[[71134,71167],"disallowed"],[[71168,71232],"valid"],[[71233,71235],"valid",[],"NV8"],[[71236,71236],"valid"],[[71237,71247],"disallowed"],[[71248,71257],"valid"],[[71258,71295],"disallowed"],[[71296,71351],"valid"],[[71352,71359],"disallowed"],[[71360,71369],"valid"],[[71370,71423],"disallowed"],[[71424,71449],"valid"],[[71450,71452],"disallowed"],[[71453,71467],"valid"],[[71468,71471],"disallowed"],[[71472,71481],"valid"],[[71482,71487],"valid",[],"NV8"],[[71488,71839],"disallowed"],[[71840,71840],"mapped",[71872]],[[71841,71841],"mapped",[71873]],[[71842,71842],"mapped",[71874]],[[71843,71843],"mapped",[71875]],[[71844,71844],"mapped",[71876]],[[71845,71845],"mapped",[71877]],[[71846,71846],"mapped",[71878]],[[71847,71847],"mapped",[71879]],[[71848,71848],"mapped",[71880]],[[71849,71849],"mapped",[71881]],[[71850,71850],"mapped",[71882]],[[71851,71851],"mapped",[71883]],[[71852,71852],"mapped",[71884]],[[71853,71853],"mapped",[71885]],[[71854,71854],"mapped",[71886]],[[71855,71855],"mapped",[71887]],[[71856,71856],"mapped",[71888]],[[71857,71857],"mapped",[71889]],[[71858,71858],"mapped",[71890]],[[71859,71859],"mapped",[71891]],[[71860,71860],"mapped",[71892]],[[71861,71861],"mapped",[71893]],[[71862,71862],"mapped",[71894]],[[71863,71863],"mapped",[71895]],[[71864,71864],"mapped",[71896]],[[71865,71865],"mapped",[71897]],[[71866,71866],"mapped",[71898]],[[71867,71867],"mapped",[71899]],[[71868,71868],"mapped",[71900]],[[71869,71869],"mapped",[71901]],[[71870,71870],"mapped",[71902]],[[71871,71871],"mapped",[71903]],[[71872,71913],"valid"],[[71914,71922],"valid",[],"NV8"],[[71923,71934],"disallowed"],[[71935,71935],"valid"],[[71936,72383],"disallowed"],[[72384,72440],"valid"],[[72441,73727],"disallowed"],[[73728,74606],"valid"],[[74607,74648],"valid"],[[74649,74649],"valid"],[[74650,74751],"disallowed"],[[74752,74850],"valid",[],"NV8"],[[74851,74862],"valid",[],"NV8"],[[74863,74863],"disallowed"],[[74864,74867],"valid",[],"NV8"],[[74868,74868],"valid",[],"NV8"],[[74869,74879],"disallowed"],[[74880,75075],"valid"],[[75076,77823],"disallowed"],[[77824,78894],"valid"],[[78895,82943],"disallowed"],[[82944,83526],"valid"],[[83527,92159],"disallowed"],[[92160,92728],"valid"],[[92729,92735],"disallowed"],[[92736,92766],"valid"],[[92767,92767],"disallowed"],[[92768,92777],"valid"],[[92778,92781],"disallowed"],[[92782,92783],"valid",[],"NV8"],[[92784,92879],"disallowed"],[[92880,92909],"valid"],[[92910,92911],"disallowed"],[[92912,92916],"valid"],[[92917,92917],"valid",[],"NV8"],[[92918,92927],"disallowed"],[[92928,92982],"valid"],[[92983,92991],"valid",[],"NV8"],[[92992,92995],"valid"],[[92996,92997],"valid",[],"NV8"],[[92998,93007],"disallowed"],[[93008,93017],"valid"],[[93018,93018],"disallowed"],[[93019,93025],"valid",[],"NV8"],[[93026,93026],"disallowed"],[[93027,93047],"valid"],[[93048,93052],"disallowed"],[[93053,93071],"valid"],[[93072,93951],"disallowed"],[[93952,94020],"valid"],[[94021,94031],"disallowed"],[[94032,94078],"valid"],[[94079,94094],"disallowed"],[[94095,94111],"valid"],[[94112,110591],"disallowed"],[[110592,110593],"valid"],[[110594,113663],"disallowed"],[[113664,113770],"valid"],[[113771,113775],"disallowed"],[[113776,113788],"valid"],[[113789,113791],"disallowed"],[[113792,113800],"valid"],[[113801,113807],"disallowed"],[[113808,113817],"valid"],[[113818,113819],"disallowed"],[[113820,113820],"valid",[],"NV8"],[[113821,113822],"valid"],[[113823,113823],"valid",[],"NV8"],[[113824,113827],"ignored"],[[113828,118783],"disallowed"],[[118784,119029],"valid",[],"NV8"],[[119030,119039],"disallowed"],[[119040,119078],"valid",[],"NV8"],[[119079,119080],"disallowed"],[[119081,119081],"valid",[],"NV8"],[[119082,119133],"valid",[],"NV8"],[[119134,119134],"mapped",[119127,119141]],[[119135,119135],"mapped",[119128,119141]],[[119136,119136],"mapped",[119128,119141,119150]],[[119137,119137],"mapped",[119128,119141,119151]],[[119138,119138],"mapped",[119128,119141,119152]],[[119139,119139],"mapped",[119128,119141,119153]],[[119140,119140],"mapped",[119128,119141,119154]],[[119141,119154],"valid",[],"NV8"],[[119155,119162],"disallowed"],[[119163,119226],"valid",[],"NV8"],[[119227,119227],"mapped",[119225,119141]],[[119228,119228],"mapped",[119226,119141]],[[119229,119229],"mapped",[119225,119141,119150]],[[119230,119230],"mapped",[119226,119141,119150]],[[119231,119231],"mapped",[119225,119141,119151]],[[119232,119232],"mapped",[119226,119141,119151]],[[119233,119261],"valid",[],"NV8"],[[119262,119272],"valid",[],"NV8"],[[119273,119295],"disallowed"],[[119296,119365],"valid",[],"NV8"],[[119366,119551],"disallowed"],[[119552,119638],"valid",[],"NV8"],[[119639,119647],"disallowed"],[[119648,119665],"valid",[],"NV8"],[[119666,119807],"disallowed"],[[119808,119808],"mapped",[97]],[[119809,119809],"mapped",[98]],[[119810,119810],"mapped",[99]],[[119811,119811],"mapped",[100]],[[119812,119812],"mapped",[101]],[[119813,119813],"mapped",[102]],[[119814,119814],"mapped",[103]],[[119815,119815],"mapped",[104]],[[119816,119816],"mapped",[105]],[[119817,119817],"mapped",[106]],[[119818,119818],"mapped",[107]],[[119819,119819],"mapped",[108]],[[119820,119820],"mapped",[109]],[[119821,119821],"mapped",[110]],[[119822,119822],"mapped",[111]],[[119823,119823],"mapped",[112]],[[119824,119824],"mapped",[113]],[[119825,119825],"mapped",[114]],[[119826,119826],"mapped",[115]],[[119827,119827],"mapped",[116]],[[119828,119828],"mapped",[117]],[[119829,119829],"mapped",[118]],[[119830,119830],"mapped",[119]],[[119831,119831],"mapped",[120]],[[119832,119832],"mapped",[121]],[[119833,119833],"mapped",[122]],[[119834,119834],"mapped",[97]],[[119835,119835],"mapped",[98]],[[119836,119836],"mapped",[99]],[[119837,119837],"mapped",[100]],[[119838,119838],"mapped",[101]],[[119839,119839],"mapped",[102]],[[119840,119840],"mapped",[103]],[[119841,119841],"mapped",[104]],[[119842,119842],"mapped",[105]],[[119843,119843],"mapped",[106]],[[119844,119844],"mapped",[107]],[[119845,119845],"mapped",[108]],[[119846,119846],"mapped",[109]],[[119847,119847],"mapped",[110]],[[119848,119848],"mapped",[111]],[[119849,119849],"mapped",[112]],[[119850,119850],"mapped",[113]],[[119851,119851],"mapped",[114]],[[119852,119852],"mapped",[115]],[[119853,119853],"mapped",[116]],[[119854,119854],"mapped",[117]],[[119855,119855],"mapped",[118]],[[119856,119856],"mapped",[119]],[[119857,119857],"mapped",[120]],[[119858,119858],"mapped",[121]],[[119859,119859],"mapped",[122]],[[119860,119860],"mapped",[97]],[[119861,119861],"mapped",[98]],[[119862,119862],"mapped",[99]],[[119863,119863],"mapped",[100]],[[119864,119864],"mapped",[101]],[[119865,119865],"mapped",[102]],[[119866,119866],"mapped",[103]],[[119867,119867],"mapped",[104]],[[119868,119868],"mapped",[105]],[[119869,119869],"mapped",[106]],[[119870,119870],"mapped",[107]],[[119871,119871],"mapped",[108]],[[119872,119872],"mapped",[109]],[[119873,119873],"mapped",[110]],[[119874,119874],"mapped",[111]],[[119875,119875],"mapped",[112]],[[119876,119876],"mapped",[113]],[[119877,119877],"mapped",[114]],[[119878,119878],"mapped",[115]],[[119879,119879],"mapped",[116]],[[119880,119880],"mapped",[117]],[[119881,119881],"mapped",[118]],[[119882,119882],"mapped",[119]],[[119883,119883],"mapped",[120]],[[119884,119884],"mapped",[121]],[[119885,119885],"mapped",[122]],[[119886,119886],"mapped",[97]],[[119887,119887],"mapped",[98]],[[119888,119888],"mapped",[99]],[[119889,119889],"mapped",[100]],[[119890,119890],"mapped",[101]],[[119891,119891],"mapped",[102]],[[119892,119892],"mapped",[103]],[[119893,119893],"disallowed"],[[119894,119894],"mapped",[105]],[[119895,119895],"mapped",[106]],[[119896,119896],"mapped",[107]],[[119897,119897],"mapped",[108]],[[119898,119898],"mapped",[109]],[[119899,119899],"mapped",[110]],[[119900,119900],"mapped",[111]],[[119901,119901],"mapped",[112]],[[119902,119902],"mapped",[113]],[[119903,119903],"mapped",[114]],[[119904,119904],"mapped",[115]],[[119905,119905],"mapped",[116]],[[119906,119906],"mapped",[117]],[[119907,119907],"mapped",[118]],[[119908,119908],"mapped",[119]],[[119909,119909],"mapped",[120]],[[119910,119910],"mapped",[121]],[[119911,119911],"mapped",[122]],[[119912,119912],"mapped",[97]],[[119913,119913],"mapped",[98]],[[119914,119914],"mapped",[99]],[[119915,119915],"mapped",[100]],[[119916,119916],"mapped",[101]],[[119917,119917],"mapped",[102]],[[119918,119918],"mapped",[103]],[[119919,119919],"mapped",[104]],[[119920,119920],"mapped",[105]],[[119921,119921],"mapped",[106]],[[119922,119922],"mapped",[107]],[[119923,119923],"mapped",[108]],[[119924,119924],"mapped",[109]],[[119925,119925],"mapped",[110]],[[119926,119926],"mapped",[111]],[[119927,119927],"mapped",[112]],[[119928,119928],"mapped",[113]],[[119929,119929],"mapped",[114]],[[119930,119930],"mapped",[115]],[[119931,119931],"mapped",[116]],[[119932,119932],"mapped",[117]],[[119933,119933],"mapped",[118]],[[119934,119934],"mapped",[119]],[[119935,119935],"mapped",[120]],[[119936,119936],"mapped",[121]],[[119937,119937],"mapped",[122]],[[119938,119938],"mapped",[97]],[[119939,119939],"mapped",[98]],[[119940,119940],"mapped",[99]],[[119941,119941],"mapped",[100]],[[119942,119942],"mapped",[101]],[[119943,119943],"mapped",[102]],[[119944,119944],"mapped",[103]],[[119945,119945],"mapped",[104]],[[119946,119946],"mapped",[105]],[[119947,119947],"mapped",[106]],[[119948,119948],"mapped",[107]],[[119949,119949],"mapped",[108]],[[119950,119950],"mapped",[109]],[[119951,119951],"mapped",[110]],[[119952,119952],"mapped",[111]],[[119953,119953],"mapped",[112]],[[119954,119954],"mapped",[113]],[[119955,119955],"mapped",[114]],[[119956,119956],"mapped",[115]],[[119957,119957],"mapped",[116]],[[119958,119958],"mapped",[117]],[[119959,119959],"mapped",[118]],[[119960,119960],"mapped",[119]],[[119961,119961],"mapped",[120]],[[119962,119962],"mapped",[121]],[[119963,119963],"mapped",[122]],[[119964,119964],"mapped",[97]],[[119965,119965],"disallowed"],[[119966,119966],"mapped",[99]],[[119967,119967],"mapped",[100]],[[119968,119969],"disallowed"],[[119970,119970],"mapped",[103]],[[119971,119972],"disallowed"],[[119973,119973],"mapped",[106]],[[119974,119974],"mapped",[107]],[[119975,119976],"disallowed"],[[119977,119977],"mapped",[110]],[[119978,119978],"mapped",[111]],[[119979,119979],"mapped",[112]],[[119980,119980],"mapped",[113]],[[119981,119981],"disallowed"],[[119982,119982],"mapped",[115]],[[119983,119983],"mapped",[116]],[[119984,119984],"mapped",[117]],[[119985,119985],"mapped",[118]],[[119986,119986],"mapped",[119]],[[119987,119987],"mapped",[120]],[[119988,119988],"mapped",[121]],[[119989,119989],"mapped",[122]],[[119990,119990],"mapped",[97]],[[119991,119991],"mapped",[98]],[[119992,119992],"mapped",[99]],[[119993,119993],"mapped",[100]],[[119994,119994],"disallowed"],[[119995,119995],"mapped",[102]],[[119996,119996],"disallowed"],[[119997,119997],"mapped",[104]],[[119998,119998],"mapped",[105]],[[119999,119999],"mapped",[106]],[[120000,120000],"mapped",[107]],[[120001,120001],"mapped",[108]],[[120002,120002],"mapped",[109]],[[120003,120003],"mapped",[110]],[[120004,120004],"disallowed"],[[120005,120005],"mapped",[112]],[[120006,120006],"mapped",[113]],[[120007,120007],"mapped",[114]],[[120008,120008],"mapped",[115]],[[120009,120009],"mapped",[116]],[[120010,120010],"mapped",[117]],[[120011,120011],"mapped",[118]],[[120012,120012],"mapped",[119]],[[120013,120013],"mapped",[120]],[[120014,120014],"mapped",[121]],[[120015,120015],"mapped",[122]],[[120016,120016],"mapped",[97]],[[120017,120017],"mapped",[98]],[[120018,120018],"mapped",[99]],[[120019,120019],"mapped",[100]],[[120020,120020],"mapped",[101]],[[120021,120021],"mapped",[102]],[[120022,120022],"mapped",[103]],[[120023,120023],"mapped",[104]],[[120024,120024],"mapped",[105]],[[120025,120025],"mapped",[106]],[[120026,120026],"mapped",[107]],[[120027,120027],"mapped",[108]],[[120028,120028],"mapped",[109]],[[120029,120029],"mapped",[110]],[[120030,120030],"mapped",[111]],[[120031,120031],"mapped",[112]],[[120032,120032],"mapped",[113]],[[120033,120033],"mapped",[114]],[[120034,120034],"mapped",[115]],[[120035,120035],"mapped",[116]],[[120036,120036],"mapped",[117]],[[120037,120037],"mapped",[118]],[[120038,120038],"mapped",[119]],[[120039,120039],"mapped",[120]],[[120040,120040],"mapped",[121]],[[120041,120041],"mapped",[122]],[[120042,120042],"mapped",[97]],[[120043,120043],"mapped",[98]],[[120044,120044],"mapped",[99]],[[120045,120045],"mapped",[100]],[[120046,120046],"mapped",[101]],[[120047,120047],"mapped",[102]],[[120048,120048],"mapped",[103]],[[120049,120049],"mapped",[104]],[[120050,120050],"mapped",[105]],[[120051,120051],"mapped",[106]],[[120052,120052],"mapped",[107]],[[120053,120053],"mapped",[108]],[[120054,120054],"mapped",[109]],[[120055,120055],"mapped",[110]],[[120056,120056],"mapped",[111]],[[120057,120057],"mapped",[112]],[[120058,120058],"mapped",[113]],[[120059,120059],"mapped",[114]],[[120060,120060],"mapped",[115]],[[120061,120061],"mapped",[116]],[[120062,120062],"mapped",[117]],[[120063,120063],"mapped",[118]],[[120064,120064],"mapped",[119]],[[120065,120065],"mapped",[120]],[[120066,120066],"mapped",[121]],[[120067,120067],"mapped",[122]],[[120068,120068],"mapped",[97]],[[120069,120069],"mapped",[98]],[[120070,120070],"disallowed"],[[120071,120071],"mapped",[100]],[[120072,120072],"mapped",[101]],[[120073,120073],"mapped",[102]],[[120074,120074],"mapped",[103]],[[120075,120076],"disallowed"],[[120077,120077],"mapped",[106]],[[120078,120078],"mapped",[107]],[[120079,120079],"mapped",[108]],[[120080,120080],"mapped",[109]],[[120081,120081],"mapped",[110]],[[120082,120082],"mapped",[111]],[[120083,120083],"mapped",[112]],[[120084,120084],"mapped",[113]],[[120085,120085],"disallowed"],[[120086,120086],"mapped",[115]],[[120087,120087],"mapped",[116]],[[120088,120088],"mapped",[117]],[[120089,120089],"mapped",[118]],[[120090,120090],"mapped",[119]],[[120091,120091],"mapped",[120]],[[120092,120092],"mapped",[121]],[[120093,120093],"disallowed"],[[120094,120094],"mapped",[97]],[[120095,120095],"mapped",[98]],[[120096,120096],"mapped",[99]],[[120097,120097],"mapped",[100]],[[120098,120098],"mapped",[101]],[[120099,120099],"mapped",[102]],[[120100,120100],"mapped",[103]],[[120101,120101],"mapped",[104]],[[120102,120102],"mapped",[105]],[[120103,120103],"mapped",[106]],[[120104,120104],"mapped",[107]],[[120105,120105],"mapped",[108]],[[120106,120106],"mapped",[109]],[[120107,120107],"mapped",[110]],[[120108,120108],"mapped",[111]],[[120109,120109],"mapped",[112]],[[120110,120110],"mapped",[113]],[[120111,120111],"mapped",[114]],[[120112,120112],"mapped",[115]],[[120113,120113],"mapped",[116]],[[120114,120114],"mapped",[117]],[[120115,120115],"mapped",[118]],[[120116,120116],"mapped",[119]],[[120117,120117],"mapped",[120]],[[120118,120118],"mapped",[121]],[[120119,120119],"mapped",[122]],[[120120,120120],"mapped",[97]],[[120121,120121],"mapped",[98]],[[120122,120122],"disallowed"],[[120123,120123],"mapped",[100]],[[120124,120124],"mapped",[101]],[[120125,120125],"mapped",[102]],[[120126,120126],"mapped",[103]],[[120127,120127],"disallowed"],[[120128,120128],"mapped",[105]],[[120129,120129],"mapped",[106]],[[120130,120130],"mapped",[107]],[[120131,120131],"mapped",[108]],[[120132,120132],"mapped",[109]],[[120133,120133],"disallowed"],[[120134,120134],"mapped",[111]],[[120135,120137],"disallowed"],[[120138,120138],"mapped",[115]],[[120139,120139],"mapped",[116]],[[120140,120140],"mapped",[117]],[[120141,120141],"mapped",[118]],[[120142,120142],"mapped",[119]],[[120143,120143],"mapped",[120]],[[120144,120144],"mapped",[121]],[[120145,120145],"disallowed"],[[120146,120146],"mapped",[97]],[[120147,120147],"mapped",[98]],[[120148,120148],"mapped",[99]],[[120149,120149],"mapped",[100]],[[120150,120150],"mapped",[101]],[[120151,120151],"mapped",[102]],[[120152,120152],"mapped",[103]],[[120153,120153],"mapped",[104]],[[120154,120154],"mapped",[105]],[[120155,120155],"mapped",[106]],[[120156,120156],"mapped",[107]],[[120157,120157],"mapped",[108]],[[120158,120158],"mapped",[109]],[[120159,120159],"mapped",[110]],[[120160,120160],"mapped",[111]],[[120161,120161],"mapped",[112]],[[120162,120162],"mapped",[113]],[[120163,120163],"mapped",[114]],[[120164,120164],"mapped",[115]],[[120165,120165],"mapped",[116]],[[120166,120166],"mapped",[117]],[[120167,120167],"mapped",[118]],[[120168,120168],"mapped",[119]],[[120169,120169],"mapped",[120]],[[120170,120170],"mapped",[121]],[[120171,120171],"mapped",[122]],[[120172,120172],"mapped",[97]],[[120173,120173],"mapped",[98]],[[120174,120174],"mapped",[99]],[[120175,120175],"mapped",[100]],[[120176,120176],"mapped",[101]],[[120177,120177],"mapped",[102]],[[120178,120178],"mapped",[103]],[[120179,120179],"mapped",[104]],[[120180,120180],"mapped",[105]],[[120181,120181],"mapped",[106]],[[120182,120182],"mapped",[107]],[[120183,120183],"mapped",[108]],[[120184,120184],"mapped",[109]],[[120185,120185],"mapped",[110]],[[120186,120186],"mapped",[111]],[[120187,120187],"mapped",[112]],[[120188,120188],"mapped",[113]],[[120189,120189],"mapped",[114]],[[120190,120190],"mapped",[115]],[[120191,120191],"mapped",[116]],[[120192,120192],"mapped",[117]],[[120193,120193],"mapped",[118]],[[120194,120194],"mapped",[119]],[[120195,120195],"mapped",[120]],[[120196,120196],"mapped",[121]],[[120197,120197],"mapped",[122]],[[120198,120198],"mapped",[97]],[[120199,120199],"mapped",[98]],[[120200,120200],"mapped",[99]],[[120201,120201],"mapped",[100]],[[120202,120202],"mapped",[101]],[[120203,120203],"mapped",[102]],[[120204,120204],"mapped",[103]],[[120205,120205],"mapped",[104]],[[120206,120206],"mapped",[105]],[[120207,120207],"mapped",[106]],[[120208,120208],"mapped",[107]],[[120209,120209],"mapped",[108]],[[120210,120210],"mapped",[109]],[[120211,120211],"mapped",[110]],[[120212,120212],"mapped",[111]],[[120213,120213],"mapped",[112]],[[120214,120214],"mapped",[113]],[[120215,120215],"mapped",[114]],[[120216,120216],"mapped",[115]],[[120217,120217],"mapped",[116]],[[120218,120218],"mapped",[117]],[[120219,120219],"mapped",[118]],[[120220,120220],"mapped",[119]],[[120221,120221],"mapped",[120]],[[120222,120222],"mapped",[121]],[[120223,120223],"mapped",[122]],[[120224,120224],"mapped",[97]],[[120225,120225],"mapped",[98]],[[120226,120226],"mapped",[99]],[[120227,120227],"mapped",[100]],[[120228,120228],"mapped",[101]],[[120229,120229],"mapped",[102]],[[120230,120230],"mapped",[103]],[[120231,120231],"mapped",[104]],[[120232,120232],"mapped",[105]],[[120233,120233],"mapped",[106]],[[120234,120234],"mapped",[107]],[[120235,120235],"mapped",[108]],[[120236,120236],"mapped",[109]],[[120237,120237],"mapped",[110]],[[120238,120238],"mapped",[111]],[[120239,120239],"mapped",[112]],[[120240,120240],"mapped",[113]],[[120241,120241],"mapped",[114]],[[120242,120242],"mapped",[115]],[[120243,120243],"mapped",[116]],[[120244,120244],"mapped",[117]],[[120245,120245],"mapped",[118]],[[120246,120246],"mapped",[119]],[[120247,120247],"mapped",[120]],[[120248,120248],"mapped",[121]],[[120249,120249],"mapped",[122]],[[120250,120250],"mapped",[97]],[[120251,120251],"mapped",[98]],[[120252,120252],"mapped",[99]],[[120253,120253],"mapped",[100]],[[120254,120254],"mapped",[101]],[[120255,120255],"mapped",[102]],[[120256,120256],"mapped",[103]],[[120257,120257],"mapped",[104]],[[120258,120258],"mapped",[105]],[[120259,120259],"mapped",[106]],[[120260,120260],"mapped",[107]],[[120261,120261],"mapped",[108]],[[120262,120262],"mapped",[109]],[[120263,120263],"mapped",[110]],[[120264,120264],"mapped",[111]],[[120265,120265],"mapped",[112]],[[120266,120266],"mapped",[113]],[[120267,120267],"mapped",[114]],[[120268,120268],"mapped",[115]],[[120269,120269],"mapped",[116]],[[120270,120270],"mapped",[117]],[[120271,120271],"mapped",[118]],[[120272,120272],"mapped",[119]],[[120273,120273],"mapped",[120]],[[120274,120274],"mapped",[121]],[[120275,120275],"mapped",[122]],[[120276,120276],"mapped",[97]],[[120277,120277],"mapped",[98]],[[120278,120278],"mapped",[99]],[[120279,120279],"mapped",[100]],[[120280,120280],"mapped",[101]],[[120281,120281],"mapped",[102]],[[120282,120282],"mapped",[103]],[[120283,120283],"mapped",[104]],[[120284,120284],"mapped",[105]],[[120285,120285],"mapped",[106]],[[120286,120286],"mapped",[107]],[[120287,120287],"mapped",[108]],[[120288,120288],"mapped",[109]],[[120289,120289],"mapped",[110]],[[120290,120290],"mapped",[111]],[[120291,120291],"mapped",[112]],[[120292,120292],"mapped",[113]],[[120293,120293],"mapped",[114]],[[120294,120294],"mapped",[115]],[[120295,120295],"mapped",[116]],[[120296,120296],"mapped",[117]],[[120297,120297],"mapped",[118]],[[120298,120298],"mapped",[119]],[[120299,120299],"mapped",[120]],[[120300,120300],"mapped",[121]],[[120301,120301],"mapped",[122]],[[120302,120302],"mapped",[97]],[[120303,120303],"mapped",[98]],[[120304,120304],"mapped",[99]],[[120305,120305],"mapped",[100]],[[120306,120306],"mapped",[101]],[[120307,120307],"mapped",[102]],[[120308,120308],"mapped",[103]],[[120309,120309],"mapped",[104]],[[120310,120310],"mapped",[105]],[[120311,120311],"mapped",[106]],[[120312,120312],"mapped",[107]],[[120313,120313],"mapped",[108]],[[120314,120314],"mapped",[109]],[[120315,120315],"mapped",[110]],[[120316,120316],"mapped",[111]],[[120317,120317],"mapped",[112]],[[120318,120318],"mapped",[113]],[[120319,120319],"mapped",[114]],[[120320,120320],"mapped",[115]],[[120321,120321],"mapped",[116]],[[120322,120322],"mapped",[117]],[[120323,120323],"mapped",[118]],[[120324,120324],"mapped",[119]],[[120325,120325],"mapped",[120]],[[120326,120326],"mapped",[121]],[[120327,120327],"mapped",[122]],[[120328,120328],"mapped",[97]],[[120329,120329],"mapped",[98]],[[120330,120330],"mapped",[99]],[[120331,120331],"mapped",[100]],[[120332,120332],"mapped",[101]],[[120333,120333],"mapped",[102]],[[120334,120334],"mapped",[103]],[[120335,120335],"mapped",[104]],[[120336,120336],"mapped",[105]],[[120337,120337],"mapped",[106]],[[120338,120338],"mapped",[107]],[[120339,120339],"mapped",[108]],[[120340,120340],"mapped",[109]],[[120341,120341],"mapped",[110]],[[120342,120342],"mapped",[111]],[[120343,120343],"mapped",[112]],[[120344,120344],"mapped",[113]],[[120345,120345],"mapped",[114]],[[120346,120346],"mapped",[115]],[[120347,120347],"mapped",[116]],[[120348,120348],"mapped",[117]],[[120349,120349],"mapped",[118]],[[120350,120350],"mapped",[119]],[[120351,120351],"mapped",[120]],[[120352,120352],"mapped",[121]],[[120353,120353],"mapped",[122]],[[120354,120354],"mapped",[97]],[[120355,120355],"mapped",[98]],[[120356,120356],"mapped",[99]],[[120357,120357],"mapped",[100]],[[120358,120358],"mapped",[101]],[[120359,120359],"mapped",[102]],[[120360,120360],"mapped",[103]],[[120361,120361],"mapped",[104]],[[120362,120362],"mapped",[105]],[[120363,120363],"mapped",[106]],[[120364,120364],"mapped",[107]],[[120365,120365],"mapped",[108]],[[120366,120366],"mapped",[109]],[[120367,120367],"mapped",[110]],[[120368,120368],"mapped",[111]],[[120369,120369],"mapped",[112]],[[120370,120370],"mapped",[113]],[[120371,120371],"mapped",[114]],[[120372,120372],"mapped",[115]],[[120373,120373],"mapped",[116]],[[120374,120374],"mapped",[117]],[[120375,120375],"mapped",[118]],[[120376,120376],"mapped",[119]],[[120377,120377],"mapped",[120]],[[120378,120378],"mapped",[121]],[[120379,120379],"mapped",[122]],[[120380,120380],"mapped",[97]],[[120381,120381],"mapped",[98]],[[120382,120382],"mapped",[99]],[[120383,120383],"mapped",[100]],[[120384,120384],"mapped",[101]],[[120385,120385],"mapped",[102]],[[120386,120386],"mapped",[103]],[[120387,120387],"mapped",[104]],[[120388,120388],"mapped",[105]],[[120389,120389],"mapped",[106]],[[120390,120390],"mapped",[107]],[[120391,120391],"mapped",[108]],[[120392,120392],"mapped",[109]],[[120393,120393],"mapped",[110]],[[120394,120394],"mapped",[111]],[[120395,120395],"mapped",[112]],[[120396,120396],"mapped",[113]],[[120397,120397],"mapped",[114]],[[120398,120398],"mapped",[115]],[[120399,120399],"mapped",[116]],[[120400,120400],"mapped",[117]],[[120401,120401],"mapped",[118]],[[120402,120402],"mapped",[119]],[[120403,120403],"mapped",[120]],[[120404,120404],"mapped",[121]],[[120405,120405],"mapped",[122]],[[120406,120406],"mapped",[97]],[[120407,120407],"mapped",[98]],[[120408,120408],"mapped",[99]],[[120409,120409],"mapped",[100]],[[120410,120410],"mapped",[101]],[[120411,120411],"mapped",[102]],[[120412,120412],"mapped",[103]],[[120413,120413],"mapped",[104]],[[120414,120414],"mapped",[105]],[[120415,120415],"mapped",[106]],[[120416,120416],"mapped",[107]],[[120417,120417],"mapped",[108]],[[120418,120418],"mapped",[109]],[[120419,120419],"mapped",[110]],[[120420,120420],"mapped",[111]],[[120421,120421],"mapped",[112]],[[120422,120422],"mapped",[113]],[[120423,120423],"mapped",[114]],[[120424,120424],"mapped",[115]],[[120425,120425],"mapped",[116]],[[120426,120426],"mapped",[117]],[[120427,120427],"mapped",[118]],[[120428,120428],"mapped",[119]],[[120429,120429],"mapped",[120]],[[120430,120430],"mapped",[121]],[[120431,120431],"mapped",[122]],[[120432,120432],"mapped",[97]],[[120433,120433],"mapped",[98]],[[120434,120434],"mapped",[99]],[[120435,120435],"mapped",[100]],[[120436,120436],"mapped",[101]],[[120437,120437],"mapped",[102]],[[120438,120438],"mapped",[103]],[[120439,120439],"mapped",[104]],[[120440,120440],"mapped",[105]],[[120441,120441],"mapped",[106]],[[120442,120442],"mapped",[107]],[[120443,120443],"mapped",[108]],[[120444,120444],"mapped",[109]],[[120445,120445],"mapped",[110]],[[120446,120446],"mapped",[111]],[[120447,120447],"mapped",[112]],[[120448,120448],"mapped",[113]],[[120449,120449],"mapped",[114]],[[120450,120450],"mapped",[115]],[[120451,120451],"mapped",[116]],[[120452,120452],"mapped",[117]],[[120453,120453],"mapped",[118]],[[120454,120454],"mapped",[119]],[[120455,120455],"mapped",[120]],[[120456,120456],"mapped",[121]],[[120457,120457],"mapped",[122]],[[120458,120458],"mapped",[97]],[[120459,120459],"mapped",[98]],[[120460,120460],"mapped",[99]],[[120461,120461],"mapped",[100]],[[120462,120462],"mapped",[101]],[[120463,120463],"mapped",[102]],[[120464,120464],"mapped",[103]],[[120465,120465],"mapped",[104]],[[120466,120466],"mapped",[105]],[[120467,120467],"mapped",[106]],[[120468,120468],"mapped",[107]],[[120469,120469],"mapped",[108]],[[120470,120470],"mapped",[109]],[[120471,120471],"mapped",[110]],[[120472,120472],"mapped",[111]],[[120473,120473],"mapped",[112]],[[120474,120474],"mapped",[113]],[[120475,120475],"mapped",[114]],[[120476,120476],"mapped",[115]],[[120477,120477],"mapped",[116]],[[120478,120478],"mapped",[117]],[[120479,120479],"mapped",[118]],[[120480,120480],"mapped",[119]],[[120481,120481],"mapped",[120]],[[120482,120482],"mapped",[121]],[[120483,120483],"mapped",[122]],[[120484,120484],"mapped",[305]],[[120485,120485],"mapped",[567]],[[120486,120487],"disallowed"],[[120488,120488],"mapped",[945]],[[120489,120489],"mapped",[946]],[[120490,120490],"mapped",[947]],[[120491,120491],"mapped",[948]],[[120492,120492],"mapped",[949]],[[120493,120493],"mapped",[950]],[[120494,120494],"mapped",[951]],[[120495,120495],"mapped",[952]],[[120496,120496],"mapped",[953]],[[120497,120497],"mapped",[954]],[[120498,120498],"mapped",[955]],[[120499,120499],"mapped",[956]],[[120500,120500],"mapped",[957]],[[120501,120501],"mapped",[958]],[[120502,120502],"mapped",[959]],[[120503,120503],"mapped",[960]],[[120504,120504],"mapped",[961]],[[120505,120505],"mapped",[952]],[[120506,120506],"mapped",[963]],[[120507,120507],"mapped",[964]],[[120508,120508],"mapped",[965]],[[120509,120509],"mapped",[966]],[[120510,120510],"mapped",[967]],[[120511,120511],"mapped",[968]],[[120512,120512],"mapped",[969]],[[120513,120513],"mapped",[8711]],[[120514,120514],"mapped",[945]],[[120515,120515],"mapped",[946]],[[120516,120516],"mapped",[947]],[[120517,120517],"mapped",[948]],[[120518,120518],"mapped",[949]],[[120519,120519],"mapped",[950]],[[120520,120520],"mapped",[951]],[[120521,120521],"mapped",[952]],[[120522,120522],"mapped",[953]],[[120523,120523],"mapped",[954]],[[120524,120524],"mapped",[955]],[[120525,120525],"mapped",[956]],[[120526,120526],"mapped",[957]],[[120527,120527],"mapped",[958]],[[120528,120528],"mapped",[959]],[[120529,120529],"mapped",[960]],[[120530,120530],"mapped",[961]],[[120531,120532],"mapped",[963]],[[120533,120533],"mapped",[964]],[[120534,120534],"mapped",[965]],[[120535,120535],"mapped",[966]],[[120536,120536],"mapped",[967]],[[120537,120537],"mapped",[968]],[[120538,120538],"mapped",[969]],[[120539,120539],"mapped",[8706]],[[120540,120540],"mapped",[949]],[[120541,120541],"mapped",[952]],[[120542,120542],"mapped",[954]],[[120543,120543],"mapped",[966]],[[120544,120544],"mapped",[961]],[[120545,120545],"mapped",[960]],[[120546,120546],"mapped",[945]],[[120547,120547],"mapped",[946]],[[120548,120548],"mapped",[947]],[[120549,120549],"mapped",[948]],[[120550,120550],"mapped",[949]],[[120551,120551],"mapped",[950]],[[120552,120552],"mapped",[951]],[[120553,120553],"mapped",[952]],[[120554,120554],"mapped",[953]],[[120555,120555],"mapped",[954]],[[120556,120556],"mapped",[955]],[[120557,120557],"mapped",[956]],[[120558,120558],"mapped",[957]],[[120559,120559],"mapped",[958]],[[120560,120560],"mapped",[959]],[[120561,120561],"mapped",[960]],[[120562,120562],"mapped",[961]],[[120563,120563],"mapped",[952]],[[120564,120564],"mapped",[963]],[[120565,120565],"mapped",[964]],[[120566,120566],"mapped",[965]],[[120567,120567],"mapped",[966]],[[120568,120568],"mapped",[967]],[[120569,120569],"mapped",[968]],[[120570,120570],"mapped",[969]],[[120571,120571],"mapped",[8711]],[[120572,120572],"mapped",[945]],[[120573,120573],"mapped",[946]],[[120574,120574],"mapped",[947]],[[120575,120575],"mapped",[948]],[[120576,120576],"mapped",[949]],[[120577,120577],"mapped",[950]],[[120578,120578],"mapped",[951]],[[120579,120579],"mapped",[952]],[[120580,120580],"mapped",[953]],[[120581,120581],"mapped",[954]],[[120582,120582],"mapped",[955]],[[120583,120583],"mapped",[956]],[[120584,120584],"mapped",[957]],[[120585,120585],"mapped",[958]],[[120586,120586],"mapped",[959]],[[120587,120587],"mapped",[960]],[[120588,120588],"mapped",[961]],[[120589,120590],"mapped",[963]],[[120591,120591],"mapped",[964]],[[120592,120592],"mapped",[965]],[[120593,120593],"mapped",[966]],[[120594,120594],"mapped",[967]],[[120595,120595],"mapped",[968]],[[120596,120596],"mapped",[969]],[[120597,120597],"mapped",[8706]],[[120598,120598],"mapped",[949]],[[120599,120599],"mapped",[952]],[[120600,120600],"mapped",[954]],[[120601,120601],"mapped",[966]],[[120602,120602],"mapped",[961]],[[120603,120603],"mapped",[960]],[[120604,120604],"mapped",[945]],[[120605,120605],"mapped",[946]],[[120606,120606],"mapped",[947]],[[120607,120607],"mapped",[948]],[[120608,120608],"mapped",[949]],[[120609,120609],"mapped",[950]],[[120610,120610],"mapped",[951]],[[120611,120611],"mapped",[952]],[[120612,120612],"mapped",[953]],[[120613,120613],"mapped",[954]],[[120614,120614],"mapped",[955]],[[120615,120615],"mapped",[956]],[[120616,120616],"mapped",[957]],[[120617,120617],"mapped",[958]],[[120618,120618],"mapped",[959]],[[120619,120619],"mapped",[960]],[[120620,120620],"mapped",[961]],[[120621,120621],"mapped",[952]],[[120622,120622],"mapped",[963]],[[120623,120623],"mapped",[964]],[[120624,120624],"mapped",[965]],[[120625,120625],"mapped",[966]],[[120626,120626],"mapped",[967]],[[120627,120627],"mapped",[968]],[[120628,120628],"mapped",[969]],[[120629,120629],"mapped",[8711]],[[120630,120630],"mapped",[945]],[[120631,120631],"mapped",[946]],[[120632,120632],"mapped",[947]],[[120633,120633],"mapped",[948]],[[120634,120634],"mapped",[949]],[[120635,120635],"mapped",[950]],[[120636,120636],"mapped",[951]],[[120637,120637],"mapped",[952]],[[120638,120638],"mapped",[953]],[[120639,120639],"mapped",[954]],[[120640,120640],"mapped",[955]],[[120641,120641],"mapped",[956]],[[120642,120642],"mapped",[957]],[[120643,120643],"mapped",[958]],[[120644,120644],"mapped",[959]],[[120645,120645],"mapped",[960]],[[120646,120646],"mapped",[961]],[[120647,120648],"mapped",[963]],[[120649,120649],"mapped",[964]],[[120650,120650],"mapped",[965]],[[120651,120651],"mapped",[966]],[[120652,120652],"mapped",[967]],[[120653,120653],"mapped",[968]],[[120654,120654],"mapped",[969]],[[120655,120655],"mapped",[8706]],[[120656,120656],"mapped",[949]],[[120657,120657],"mapped",[952]],[[120658,120658],"mapped",[954]],[[120659,120659],"mapped",[966]],[[120660,120660],"mapped",[961]],[[120661,120661],"mapped",[960]],[[120662,120662],"mapped",[945]],[[120663,120663],"mapped",[946]],[[120664,120664],"mapped",[947]],[[120665,120665],"mapped",[948]],[[120666,120666],"mapped",[949]],[[120667,120667],"mapped",[950]],[[120668,120668],"mapped",[951]],[[120669,120669],"mapped",[952]],[[120670,120670],"mapped",[953]],[[120671,120671],"mapped",[954]],[[120672,120672],"mapped",[955]],[[120673,120673],"mapped",[956]],[[120674,120674],"mapped",[957]],[[120675,120675],"mapped",[958]],[[120676,120676],"mapped",[959]],[[120677,120677],"mapped",[960]],[[120678,120678],"mapped",[961]],[[120679,120679],"mapped",[952]],[[120680,120680],"mapped",[963]],[[120681,120681],"mapped",[964]],[[120682,120682],"mapped",[965]],[[120683,120683],"mapped",[966]],[[120684,120684],"mapped",[967]],[[120685,120685],"mapped",[968]],[[120686,120686],"mapped",[969]],[[120687,120687],"mapped",[8711]],[[120688,120688],"mapped",[945]],[[120689,120689],"mapped",[946]],[[120690,120690],"mapped",[947]],[[120691,120691],"mapped",[948]],[[120692,120692],"mapped",[949]],[[120693,120693],"mapped",[950]],[[120694,120694],"mapped",[951]],[[120695,120695],"mapped",[952]],[[120696,120696],"mapped",[953]],[[120697,120697],"mapped",[954]],[[120698,120698],"mapped",[955]],[[120699,120699],"mapped",[956]],[[120700,120700],"mapped",[957]],[[120701,120701],"mapped",[958]],[[120702,120702],"mapped",[959]],[[120703,120703],"mapped",[960]],[[120704,120704],"mapped",[961]],[[120705,120706],"mapped",[963]],[[120707,120707],"mapped",[964]],[[120708,120708],"mapped",[965]],[[120709,120709],"mapped",[966]],[[120710,120710],"mapped",[967]],[[120711,120711],"mapped",[968]],[[120712,120712],"mapped",[969]],[[120713,120713],"mapped",[8706]],[[120714,120714],"mapped",[949]],[[120715,120715],"mapped",[952]],[[120716,120716],"mapped",[954]],[[120717,120717],"mapped",[966]],[[120718,120718],"mapped",[961]],[[120719,120719],"mapped",[960]],[[120720,120720],"mapped",[945]],[[120721,120721],"mapped",[946]],[[120722,120722],"mapped",[947]],[[120723,120723],"mapped",[948]],[[120724,120724],"mapped",[949]],[[120725,120725],"mapped",[950]],[[120726,120726],"mapped",[951]],[[120727,120727],"mapped",[952]],[[120728,120728],"mapped",[953]],[[120729,120729],"mapped",[954]],[[120730,120730],"mapped",[955]],[[120731,120731],"mapped",[956]],[[120732,120732],"mapped",[957]],[[120733,120733],"mapped",[958]],[[120734,120734],"mapped",[959]],[[120735,120735],"mapped",[960]],[[120736,120736],"mapped",[961]],[[120737,120737],"mapped",[952]],[[120738,120738],"mapped",[963]],[[120739,120739],"mapped",[964]],[[120740,120740],"mapped",[965]],[[120741,120741],"mapped",[966]],[[120742,120742],"mapped",[967]],[[120743,120743],"mapped",[968]],[[120744,120744],"mapped",[969]],[[120745,120745],"mapped",[8711]],[[120746,120746],"mapped",[945]],[[120747,120747],"mapped",[946]],[[120748,120748],"mapped",[947]],[[120749,120749],"mapped",[948]],[[120750,120750],"mapped",[949]],[[120751,120751],"mapped",[950]],[[120752,120752],"mapped",[951]],[[120753,120753],"mapped",[952]],[[120754,120754],"mapped",[953]],[[120755,120755],"mapped",[954]],[[120756,120756],"mapped",[955]],[[120757,120757],"mapped",[956]],[[120758,120758],"mapped",[957]],[[120759,120759],"mapped",[958]],[[120760,120760],"mapped",[959]],[[120761,120761],"mapped",[960]],[[120762,120762],"mapped",[961]],[[120763,120764],"mapped",[963]],[[120765,120765],"mapped",[964]],[[120766,120766],"mapped",[965]],[[120767,120767],"mapped",[966]],[[120768,120768],"mapped",[967]],[[120769,120769],"mapped",[968]],[[120770,120770],"mapped",[969]],[[120771,120771],"mapped",[8706]],[[120772,120772],"mapped",[949]],[[120773,120773],"mapped",[952]],[[120774,120774],"mapped",[954]],[[120775,120775],"mapped",[966]],[[120776,120776],"mapped",[961]],[[120777,120777],"mapped",[960]],[[120778,120779],"mapped",[989]],[[120780,120781],"disallowed"],[[120782,120782],"mapped",[48]],[[120783,120783],"mapped",[49]],[[120784,120784],"mapped",[50]],[[120785,120785],"mapped",[51]],[[120786,120786],"mapped",[52]],[[120787,120787],"mapped",[53]],[[120788,120788],"mapped",[54]],[[120789,120789],"mapped",[55]],[[120790,120790],"mapped",[56]],[[120791,120791],"mapped",[57]],[[120792,120792],"mapped",[48]],[[120793,120793],"mapped",[49]],[[120794,120794],"mapped",[50]],[[120795,120795],"mapped",[51]],[[120796,120796],"mapped",[52]],[[120797,120797],"mapped",[53]],[[120798,120798],"mapped",[54]],[[120799,120799],"mapped",[55]],[[120800,120800],"mapped",[56]],[[120801,120801],"mapped",[57]],[[120802,120802],"mapped",[48]],[[120803,120803],"mapped",[49]],[[120804,120804],"mapped",[50]],[[120805,120805],"mapped",[51]],[[120806,120806],"mapped",[52]],[[120807,120807],"mapped",[53]],[[120808,120808],"mapped",[54]],[[120809,120809],"mapped",[55]],[[120810,120810],"mapped",[56]],[[120811,120811],"mapped",[57]],[[120812,120812],"mapped",[48]],[[120813,120813],"mapped",[49]],[[120814,120814],"mapped",[50]],[[120815,120815],"mapped",[51]],[[120816,120816],"mapped",[52]],[[120817,120817],"mapped",[53]],[[120818,120818],"mapped",[54]],[[120819,120819],"mapped",[55]],[[120820,120820],"mapped",[56]],[[120821,120821],"mapped",[57]],[[120822,120822],"mapped",[48]],[[120823,120823],"mapped",[49]],[[120824,120824],"mapped",[50]],[[120825,120825],"mapped",[51]],[[120826,120826],"mapped",[52]],[[120827,120827],"mapped",[53]],[[120828,120828],"mapped",[54]],[[120829,120829],"mapped",[55]],[[120830,120830],"mapped",[56]],[[120831,120831],"mapped",[57]],[[120832,121343],"valid",[],"NV8"],[[121344,121398],"valid"],[[121399,121402],"valid",[],"NV8"],[[121403,121452],"valid"],[[121453,121460],"valid",[],"NV8"],[[121461,121461],"valid"],[[121462,121475],"valid",[],"NV8"],[[121476,121476],"valid"],[[121477,121483],"valid",[],"NV8"],[[121484,121498],"disallowed"],[[121499,121503],"valid"],[[121504,121504],"disallowed"],[[121505,121519],"valid"],[[121520,124927],"disallowed"],[[124928,125124],"valid"],[[125125,125126],"disallowed"],[[125127,125135],"valid",[],"NV8"],[[125136,125142],"valid"],[[125143,126463],"disallowed"],[[126464,126464],"mapped",[1575]],[[126465,126465],"mapped",[1576]],[[126466,126466],"mapped",[1580]],[[126467,126467],"mapped",[1583]],[[126468,126468],"disallowed"],[[126469,126469],"mapped",[1608]],[[126470,126470],"mapped",[1586]],[[126471,126471],"mapped",[1581]],[[126472,126472],"mapped",[1591]],[[126473,126473],"mapped",[1610]],[[126474,126474],"mapped",[1603]],[[126475,126475],"mapped",[1604]],[[126476,126476],"mapped",[1605]],[[126477,126477],"mapped",[1606]],[[126478,126478],"mapped",[1587]],[[126479,126479],"mapped",[1593]],[[126480,126480],"mapped",[1601]],[[126481,126481],"mapped",[1589]],[[126482,126482],"mapped",[1602]],[[126483,126483],"mapped",[1585]],[[126484,126484],"mapped",[1588]],[[126485,126485],"mapped",[1578]],[[126486,126486],"mapped",[1579]],[[126487,126487],"mapped",[1582]],[[126488,126488],"mapped",[1584]],[[126489,126489],"mapped",[1590]],[[126490,126490],"mapped",[1592]],[[126491,126491],"mapped",[1594]],[[126492,126492],"mapped",[1646]],[[126493,126493],"mapped",[1722]],[[126494,126494],"mapped",[1697]],[[126495,126495],"mapped",[1647]],[[126496,126496],"disallowed"],[[126497,126497],"mapped",[1576]],[[126498,126498],"mapped",[1580]],[[126499,126499],"disallowed"],[[126500,126500],"mapped",[1607]],[[126501,126502],"disallowed"],[[126503,126503],"mapped",[1581]],[[126504,126504],"disallowed"],[[126505,126505],"mapped",[1610]],[[126506,126506],"mapped",[1603]],[[126507,126507],"mapped",[1604]],[[126508,126508],"mapped",[1605]],[[126509,126509],"mapped",[1606]],[[126510,126510],"mapped",[1587]],[[126511,126511],"mapped",[1593]],[[126512,126512],"mapped",[1601]],[[126513,126513],"mapped",[1589]],[[126514,126514],"mapped",[1602]],[[126515,126515],"disallowed"],[[126516,126516],"mapped",[1588]],[[126517,126517],"mapped",[1578]],[[126518,126518],"mapped",[1579]],[[126519,126519],"mapped",[1582]],[[126520,126520],"disallowed"],[[126521,126521],"mapped",[1590]],[[126522,126522],"disallowed"],[[126523,126523],"mapped",[1594]],[[126524,126529],"disallowed"],[[126530,126530],"mapped",[1580]],[[126531,126534],"disallowed"],[[126535,126535],"mapped",[1581]],[[126536,126536],"disallowed"],[[126537,126537],"mapped",[1610]],[[126538,126538],"disallowed"],[[126539,126539],"mapped",[1604]],[[126540,126540],"disallowed"],[[126541,126541],"mapped",[1606]],[[126542,126542],"mapped",[1587]],[[126543,126543],"mapped",[1593]],[[126544,126544],"disallowed"],[[126545,126545],"mapped",[1589]],[[126546,126546],"mapped",[1602]],[[126547,126547],"disallowed"],[[126548,126548],"mapped",[1588]],[[126549,126550],"disallowed"],[[126551,126551],"mapped",[1582]],[[126552,126552],"disallowed"],[[126553,126553],"mapped",[1590]],[[126554,126554],"disallowed"],[[126555,126555],"mapped",[1594]],[[126556,126556],"disallowed"],[[126557,126557],"mapped",[1722]],[[126558,126558],"disallowed"],[[126559,126559],"mapped",[1647]],[[126560,126560],"disallowed"],[[126561,126561],"mapped",[1576]],[[126562,126562],"mapped",[1580]],[[126563,126563],"disallowed"],[[126564,126564],"mapped",[1607]],[[126565,126566],"disallowed"],[[126567,126567],"mapped",[1581]],[[126568,126568],"mapped",[1591]],[[126569,126569],"mapped",[1610]],[[126570,126570],"mapped",[1603]],[[126571,126571],"disallowed"],[[126572,126572],"mapped",[1605]],[[126573,126573],"mapped",[1606]],[[126574,126574],"mapped",[1587]],[[126575,126575],"mapped",[1593]],[[126576,126576],"mapped",[1601]],[[126577,126577],"mapped",[1589]],[[126578,126578],"mapped",[1602]],[[126579,126579],"disallowed"],[[126580,126580],"mapped",[1588]],[[126581,126581],"mapped",[1578]],[[126582,126582],"mapped",[1579]],[[126583,126583],"mapped",[1582]],[[126584,126584],"disallowed"],[[126585,126585],"mapped",[1590]],[[126586,126586],"mapped",[1592]],[[126587,126587],"mapped",[1594]],[[126588,126588],"mapped",[1646]],[[126589,126589],"disallowed"],[[126590,126590],"mapped",[1697]],[[126591,126591],"disallowed"],[[126592,126592],"mapped",[1575]],[[126593,126593],"mapped",[1576]],[[126594,126594],"mapped",[1580]],[[126595,126595],"mapped",[1583]],[[126596,126596],"mapped",[1607]],[[126597,126597],"mapped",[1608]],[[126598,126598],"mapped",[1586]],[[126599,126599],"mapped",[1581]],[[126600,126600],"mapped",[1591]],[[126601,126601],"mapped",[1610]],[[126602,126602],"disallowed"],[[126603,126603],"mapped",[1604]],[[126604,126604],"mapped",[1605]],[[126605,126605],"mapped",[1606]],[[126606,126606],"mapped",[1587]],[[126607,126607],"mapped",[1593]],[[126608,126608],"mapped",[1601]],[[126609,126609],"mapped",[1589]],[[126610,126610],"mapped",[1602]],[[126611,126611],"mapped",[1585]],[[126612,126612],"mapped",[1588]],[[126613,126613],"mapped",[1578]],[[126614,126614],"mapped",[1579]],[[126615,126615],"mapped",[1582]],[[126616,126616],"mapped",[1584]],[[126617,126617],"mapped",[1590]],[[126618,126618],"mapped",[1592]],[[126619,126619],"mapped",[1594]],[[126620,126624],"disallowed"],[[126625,126625],"mapped",[1576]],[[126626,126626],"mapped",[1580]],[[126627,126627],"mapped",[1583]],[[126628,126628],"disallowed"],[[126629,126629],"mapped",[1608]],[[126630,126630],"mapped",[1586]],[[126631,126631],"mapped",[1581]],[[126632,126632],"mapped",[1591]],[[126633,126633],"mapped",[1610]],[[126634,126634],"disallowed"],[[126635,126635],"mapped",[1604]],[[126636,126636],"mapped",[1605]],[[126637,126637],"mapped",[1606]],[[126638,126638],"mapped",[1587]],[[126639,126639],"mapped",[1593]],[[126640,126640],"mapped",[1601]],[[126641,126641],"mapped",[1589]],[[126642,126642],"mapped",[1602]],[[126643,126643],"mapped",[1585]],[[126644,126644],"mapped",[1588]],[[126645,126645],"mapped",[1578]],[[126646,126646],"mapped",[1579]],[[126647,126647],"mapped",[1582]],[[126648,126648],"mapped",[1584]],[[126649,126649],"mapped",[1590]],[[126650,126650],"mapped",[1592]],[[126651,126651],"mapped",[1594]],[[126652,126703],"disallowed"],[[126704,126705],"valid",[],"NV8"],[[126706,126975],"disallowed"],[[126976,127019],"valid",[],"NV8"],[[127020,127023],"disallowed"],[[127024,127123],"valid",[],"NV8"],[[127124,127135],"disallowed"],[[127136,127150],"valid",[],"NV8"],[[127151,127152],"disallowed"],[[127153,127166],"valid",[],"NV8"],[[127167,127167],"valid",[],"NV8"],[[127168,127168],"disallowed"],[[127169,127183],"valid",[],"NV8"],[[127184,127184],"disallowed"],[[127185,127199],"valid",[],"NV8"],[[127200,127221],"valid",[],"NV8"],[[127222,127231],"disallowed"],[[127232,127232],"disallowed"],[[127233,127233],"disallowed_STD3_mapped",[48,44]],[[127234,127234],"disallowed_STD3_mapped",[49,44]],[[127235,127235],"disallowed_STD3_mapped",[50,44]],[[127236,127236],"disallowed_STD3_mapped",[51,44]],[[127237,127237],"disallowed_STD3_mapped",[52,44]],[[127238,127238],"disallowed_STD3_mapped",[53,44]],[[127239,127239],"disallowed_STD3_mapped",[54,44]],[[127240,127240],"disallowed_STD3_mapped",[55,44]],[[127241,127241],"disallowed_STD3_mapped",[56,44]],[[127242,127242],"disallowed_STD3_mapped",[57,44]],[[127243,127244],"valid",[],"NV8"],[[127245,127247],"disallowed"],[[127248,127248],"disallowed_STD3_mapped",[40,97,41]],[[127249,127249],"disallowed_STD3_mapped",[40,98,41]],[[127250,127250],"disallowed_STD3_mapped",[40,99,41]],[[127251,127251],"disallowed_STD3_mapped",[40,100,41]],[[127252,127252],"disallowed_STD3_mapped",[40,101,41]],[[127253,127253],"disallowed_STD3_mapped",[40,102,41]],[[127254,127254],"disallowed_STD3_mapped",[40,103,41]],[[127255,127255],"disallowed_STD3_mapped",[40,104,41]],[[127256,127256],"disallowed_STD3_mapped",[40,105,41]],[[127257,127257],"disallowed_STD3_mapped",[40,106,41]],[[127258,127258],"disallowed_STD3_mapped",[40,107,41]],[[127259,127259],"disallowed_STD3_mapped",[40,108,41]],[[127260,127260],"disallowed_STD3_mapped",[40,109,41]],[[127261,127261],"disallowed_STD3_mapped",[40,110,41]],[[127262,127262],"disallowed_STD3_mapped",[40,111,41]],[[127263,127263],"disallowed_STD3_mapped",[40,112,41]],[[127264,127264],"disallowed_STD3_mapped",[40,113,41]],[[127265,127265],"disallowed_STD3_mapped",[40,114,41]],[[127266,127266],"disallowed_STD3_mapped",[40,115,41]],[[127267,127267],"disallowed_STD3_mapped",[40,116,41]],[[127268,127268],"disallowed_STD3_mapped",[40,117,41]],[[127269,127269],"disallowed_STD3_mapped",[40,118,41]],[[127270,127270],"disallowed_STD3_mapped",[40,119,41]],[[127271,127271],"disallowed_STD3_mapped",[40,120,41]],[[127272,127272],"disallowed_STD3_mapped",[40,121,41]],[[127273,127273],"disallowed_STD3_mapped",[40,122,41]],[[127274,127274],"mapped",[12308,115,12309]],[[127275,127275],"mapped",[99]],[[127276,127276],"mapped",[114]],[[127277,127277],"mapped",[99,100]],[[127278,127278],"mapped",[119,122]],[[127279,127279],"disallowed"],[[127280,127280],"mapped",[97]],[[127281,127281],"mapped",[98]],[[127282,127282],"mapped",[99]],[[127283,127283],"mapped",[100]],[[127284,127284],"mapped",[101]],[[127285,127285],"mapped",[102]],[[127286,127286],"mapped",[103]],[[127287,127287],"mapped",[104]],[[127288,127288],"mapped",[105]],[[127289,127289],"mapped",[106]],[[127290,127290],"mapped",[107]],[[127291,127291],"mapped",[108]],[[127292,127292],"mapped",[109]],[[127293,127293],"mapped",[110]],[[127294,127294],"mapped",[111]],[[127295,127295],"mapped",[112]],[[127296,127296],"mapped",[113]],[[127297,127297],"mapped",[114]],[[127298,127298],"mapped",[115]],[[127299,127299],"mapped",[116]],[[127300,127300],"mapped",[117]],[[127301,127301],"mapped",[118]],[[127302,127302],"mapped",[119]],[[127303,127303],"mapped",[120]],[[127304,127304],"mapped",[121]],[[127305,127305],"mapped",[122]],[[127306,127306],"mapped",[104,118]],[[127307,127307],"mapped",[109,118]],[[127308,127308],"mapped",[115,100]],[[127309,127309],"mapped",[115,115]],[[127310,127310],"mapped",[112,112,118]],[[127311,127311],"mapped",[119,99]],[[127312,127318],"valid",[],"NV8"],[[127319,127319],"valid",[],"NV8"],[[127320,127326],"valid",[],"NV8"],[[127327,127327],"valid",[],"NV8"],[[127328,127337],"valid",[],"NV8"],[[127338,127338],"mapped",[109,99]],[[127339,127339],"mapped",[109,100]],[[127340,127343],"disallowed"],[[127344,127352],"valid",[],"NV8"],[[127353,127353],"valid",[],"NV8"],[[127354,127354],"valid",[],"NV8"],[[127355,127356],"valid",[],"NV8"],[[127357,127358],"valid",[],"NV8"],[[127359,127359],"valid",[],"NV8"],[[127360,127369],"valid",[],"NV8"],[[127370,127373],"valid",[],"NV8"],[[127374,127375],"valid",[],"NV8"],[[127376,127376],"mapped",[100,106]],[[127377,127386],"valid",[],"NV8"],[[127387,127461],"disallowed"],[[127462,127487],"valid",[],"NV8"],[[127488,127488],"mapped",[12411,12363]],[[127489,127489],"mapped",[12467,12467]],[[127490,127490],"mapped",[12469]],[[127491,127503],"disallowed"],[[127504,127504],"mapped",[25163]],[[127505,127505],"mapped",[23383]],[[127506,127506],"mapped",[21452]],[[127507,127507],"mapped",[12487]],[[127508,127508],"mapped",[20108]],[[127509,127509],"mapped",[22810]],[[127510,127510],"mapped",[35299]],[[127511,127511],"mapped",[22825]],[[127512,127512],"mapped",[20132]],[[127513,127513],"mapped",[26144]],[[127514,127514],"mapped",[28961]],[[127515,127515],"mapped",[26009]],[[127516,127516],"mapped",[21069]],[[127517,127517],"mapped",[24460]],[[127518,127518],"mapped",[20877]],[[127519,127519],"mapped",[26032]],[[127520,127520],"mapped",[21021]],[[127521,127521],"mapped",[32066]],[[127522,127522],"mapped",[29983]],[[127523,127523],"mapped",[36009]],[[127524,127524],"mapped",[22768]],[[127525,127525],"mapped",[21561]],[[127526,127526],"mapped",[28436]],[[127527,127527],"mapped",[25237]],[[127528,127528],"mapped",[25429]],[[127529,127529],"mapped",[19968]],[[127530,127530],"mapped",[19977]],[[127531,127531],"mapped",[36938]],[[127532,127532],"mapped",[24038]],[[127533,127533],"mapped",[20013]],[[127534,127534],"mapped",[21491]],[[127535,127535],"mapped",[25351]],[[127536,127536],"mapped",[36208]],[[127537,127537],"mapped",[25171]],[[127538,127538],"mapped",[31105]],[[127539,127539],"mapped",[31354]],[[127540,127540],"mapped",[21512]],[[127541,127541],"mapped",[28288]],[[127542,127542],"mapped",[26377]],[[127543,127543],"mapped",[26376]],[[127544,127544],"mapped",[30003]],[[127545,127545],"mapped",[21106]],[[127546,127546],"mapped",[21942]],[[127547,127551],"disallowed"],[[127552,127552],"mapped",[12308,26412,12309]],[[127553,127553],"mapped",[12308,19977,12309]],[[127554,127554],"mapped",[12308,20108,12309]],[[127555,127555],"mapped",[12308,23433,12309]],[[127556,127556],"mapped",[12308,28857,12309]],[[127557,127557],"mapped",[12308,25171,12309]],[[127558,127558],"mapped",[12308,30423,12309]],[[127559,127559],"mapped",[12308,21213,12309]],[[127560,127560],"mapped",[12308,25943,12309]],[[127561,127567],"disallowed"],[[127568,127568],"mapped",[24471]],[[127569,127569],"mapped",[21487]],[[127570,127743],"disallowed"],[[127744,127776],"valid",[],"NV8"],[[127777,127788],"valid",[],"NV8"],[[127789,127791],"valid",[],"NV8"],[[127792,127797],"valid",[],"NV8"],[[127798,127798],"valid",[],"NV8"],[[127799,127868],"valid",[],"NV8"],[[127869,127869],"valid",[],"NV8"],[[127870,127871],"valid",[],"NV8"],[[127872,127891],"valid",[],"NV8"],[[127892,127903],"valid",[],"NV8"],[[127904,127940],"valid",[],"NV8"],[[127941,127941],"valid",[],"NV8"],[[127942,127946],"valid",[],"NV8"],[[127947,127950],"valid",[],"NV8"],[[127951,127955],"valid",[],"NV8"],[[127956,127967],"valid",[],"NV8"],[[127968,127984],"valid",[],"NV8"],[[127985,127991],"valid",[],"NV8"],[[127992,127999],"valid",[],"NV8"],[[128000,128062],"valid",[],"NV8"],[[128063,128063],"valid",[],"NV8"],[[128064,128064],"valid",[],"NV8"],[[128065,128065],"valid",[],"NV8"],[[128066,128247],"valid",[],"NV8"],[[128248,128248],"valid",[],"NV8"],[[128249,128252],"valid",[],"NV8"],[[128253,128254],"valid",[],"NV8"],[[128255,128255],"valid",[],"NV8"],[[128256,128317],"valid",[],"NV8"],[[128318,128319],"valid",[],"NV8"],[[128320,128323],"valid",[],"NV8"],[[128324,128330],"valid",[],"NV8"],[[128331,128335],"valid",[],"NV8"],[[128336,128359],"valid",[],"NV8"],[[128360,128377],"valid",[],"NV8"],[[128378,128378],"disallowed"],[[128379,128419],"valid",[],"NV8"],[[128420,128420],"disallowed"],[[128421,128506],"valid",[],"NV8"],[[128507,128511],"valid",[],"NV8"],[[128512,128512],"valid",[],"NV8"],[[128513,128528],"valid",[],"NV8"],[[128529,128529],"valid",[],"NV8"],[[128530,128532],"valid",[],"NV8"],[[128533,128533],"valid",[],"NV8"],[[128534,128534],"valid",[],"NV8"],[[128535,128535],"valid",[],"NV8"],[[128536,128536],"valid",[],"NV8"],[[128537,128537],"valid",[],"NV8"],[[128538,128538],"valid",[],"NV8"],[[128539,128539],"valid",[],"NV8"],[[128540,128542],"valid",[],"NV8"],[[128543,128543],"valid",[],"NV8"],[[128544,128549],"valid",[],"NV8"],[[128550,128551],"valid",[],"NV8"],[[128552,128555],"valid",[],"NV8"],[[128556,128556],"valid",[],"NV8"],[[128557,128557],"valid",[],"NV8"],[[128558,128559],"valid",[],"NV8"],[[128560,128563],"valid",[],"NV8"],[[128564,128564],"valid",[],"NV8"],[[128565,128576],"valid",[],"NV8"],[[128577,128578],"valid",[],"NV8"],[[128579,128580],"valid",[],"NV8"],[[128581,128591],"valid",[],"NV8"],[[128592,128639],"valid",[],"NV8"],[[128640,128709],"valid",[],"NV8"],[[128710,128719],"valid",[],"NV8"],[[128720,128720],"valid",[],"NV8"],[[128721,128735],"disallowed"],[[128736,128748],"valid",[],"NV8"],[[128749,128751],"disallowed"],[[128752,128755],"valid",[],"NV8"],[[128756,128767],"disallowed"],[[128768,128883],"valid",[],"NV8"],[[128884,128895],"disallowed"],[[128896,128980],"valid",[],"NV8"],[[128981,129023],"disallowed"],[[129024,129035],"valid",[],"NV8"],[[129036,129039],"disallowed"],[[129040,129095],"valid",[],"NV8"],[[129096,129103],"disallowed"],[[129104,129113],"valid",[],"NV8"],[[129114,129119],"disallowed"],[[129120,129159],"valid",[],"NV8"],[[129160,129167],"disallowed"],[[129168,129197],"valid",[],"NV8"],[[129198,129295],"disallowed"],[[129296,129304],"valid",[],"NV8"],[[129305,129407],"disallowed"],[[129408,129412],"valid",[],"NV8"],[[129413,129471],"disallowed"],[[129472,129472],"valid",[],"NV8"],[[129473,131069],"disallowed"],[[131070,131071],"disallowed"],[[131072,173782],"valid"],[[173783,173823],"disallowed"],[[173824,177972],"valid"],[[177973,177983],"disallowed"],[[177984,178205],"valid"],[[178206,178207],"disallowed"],[[178208,183969],"valid"],[[183970,194559],"disallowed"],[[194560,194560],"mapped",[20029]],[[194561,194561],"mapped",[20024]],[[194562,194562],"mapped",[20033]],[[194563,194563],"mapped",[131362]],[[194564,194564],"mapped",[20320]],[[194565,194565],"mapped",[20398]],[[194566,194566],"mapped",[20411]],[[194567,194567],"mapped",[20482]],[[194568,194568],"mapped",[20602]],[[194569,194569],"mapped",[20633]],[[194570,194570],"mapped",[20711]],[[194571,194571],"mapped",[20687]],[[194572,194572],"mapped",[13470]],[[194573,194573],"mapped",[132666]],[[194574,194574],"mapped",[20813]],[[194575,194575],"mapped",[20820]],[[194576,194576],"mapped",[20836]],[[194577,194577],"mapped",[20855]],[[194578,194578],"mapped",[132380]],[[194579,194579],"mapped",[13497]],[[194580,194580],"mapped",[20839]],[[194581,194581],"mapped",[20877]],[[194582,194582],"mapped",[132427]],[[194583,194583],"mapped",[20887]],[[194584,194584],"mapped",[20900]],[[194585,194585],"mapped",[20172]],[[194586,194586],"mapped",[20908]],[[194587,194587],"mapped",[20917]],[[194588,194588],"mapped",[168415]],[[194589,194589],"mapped",[20981]],[[194590,194590],"mapped",[20995]],[[194591,194591],"mapped",[13535]],[[194592,194592],"mapped",[21051]],[[194593,194593],"mapped",[21062]],[[194594,194594],"mapped",[21106]],[[194595,194595],"mapped",[21111]],[[194596,194596],"mapped",[13589]],[[194597,194597],"mapped",[21191]],[[194598,194598],"mapped",[21193]],[[194599,194599],"mapped",[21220]],[[194600,194600],"mapped",[21242]],[[194601,194601],"mapped",[21253]],[[194602,194602],"mapped",[21254]],[[194603,194603],"mapped",[21271]],[[194604,194604],"mapped",[21321]],[[194605,194605],"mapped",[21329]],[[194606,194606],"mapped",[21338]],[[194607,194607],"mapped",[21363]],[[194608,194608],"mapped",[21373]],[[194609,194611],"mapped",[21375]],[[194612,194612],"mapped",[133676]],[[194613,194613],"mapped",[28784]],[[194614,194614],"mapped",[21450]],[[194615,194615],"mapped",[21471]],[[194616,194616],"mapped",[133987]],[[194617,194617],"mapped",[21483]],[[194618,194618],"mapped",[21489]],[[194619,194619],"mapped",[21510]],[[194620,194620],"mapped",[21662]],[[194621,194621],"mapped",[21560]],[[194622,194622],"mapped",[21576]],[[194623,194623],"mapped",[21608]],[[194624,194624],"mapped",[21666]],[[194625,194625],"mapped",[21750]],[[194626,194626],"mapped",[21776]],[[194627,194627],"mapped",[21843]],[[194628,194628],"mapped",[21859]],[[194629,194630],"mapped",[21892]],[[194631,194631],"mapped",[21913]],[[194632,194632],"mapped",[21931]],[[194633,194633],"mapped",[21939]],[[194634,194634],"mapped",[21954]],[[194635,194635],"mapped",[22294]],[[194636,194636],"mapped",[22022]],[[194637,194637],"mapped",[22295]],[[194638,194638],"mapped",[22097]],[[194639,194639],"mapped",[22132]],[[194640,194640],"mapped",[20999]],[[194641,194641],"mapped",[22766]],[[194642,194642],"mapped",[22478]],[[194643,194643],"mapped",[22516]],[[194644,194644],"mapped",[22541]],[[194645,194645],"mapped",[22411]],[[194646,194646],"mapped",[22578]],[[194647,194647],"mapped",[22577]],[[194648,194648],"mapped",[22700]],[[194649,194649],"mapped",[136420]],[[194650,194650],"mapped",[22770]],[[194651,194651],"mapped",[22775]],[[194652,194652],"mapped",[22790]],[[194653,194653],"mapped",[22810]],[[194654,194654],"mapped",[22818]],[[194655,194655],"mapped",[22882]],[[194656,194656],"mapped",[136872]],[[194657,194657],"mapped",[136938]],[[194658,194658],"mapped",[23020]],[[194659,194659],"mapped",[23067]],[[194660,194660],"mapped",[23079]],[[194661,194661],"mapped",[23000]],[[194662,194662],"mapped",[23142]],[[194663,194663],"mapped",[14062]],[[194664,194664],"disallowed"],[[194665,194665],"mapped",[23304]],[[194666,194667],"mapped",[23358]],[[194668,194668],"mapped",[137672]],[[194669,194669],"mapped",[23491]],[[194670,194670],"mapped",[23512]],[[194671,194671],"mapped",[23527]],[[194672,194672],"mapped",[23539]],[[194673,194673],"mapped",[138008]],[[194674,194674],"mapped",[23551]],[[194675,194675],"mapped",[23558]],[[194676,194676],"disallowed"],[[194677,194677],"mapped",[23586]],[[194678,194678],"mapped",[14209]],[[194679,194679],"mapped",[23648]],[[194680,194680],"mapped",[23662]],[[194681,194681],"mapped",[23744]],[[194682,194682],"mapped",[23693]],[[194683,194683],"mapped",[138724]],[[194684,194684],"mapped",[23875]],[[194685,194685],"mapped",[138726]],[[194686,194686],"mapped",[23918]],[[194687,194687],"mapped",[23915]],[[194688,194688],"mapped",[23932]],[[194689,194689],"mapped",[24033]],[[194690,194690],"mapped",[24034]],[[194691,194691],"mapped",[14383]],[[194692,194692],"mapped",[24061]],[[194693,194693],"mapped",[24104]],[[194694,194694],"mapped",[24125]],[[194695,194695],"mapped",[24169]],[[194696,194696],"mapped",[14434]],[[194697,194697],"mapped",[139651]],[[194698,194698],"mapped",[14460]],[[194699,194699],"mapped",[24240]],[[194700,194700],"mapped",[24243]],[[194701,194701],"mapped",[24246]],[[194702,194702],"mapped",[24266]],[[194703,194703],"mapped",[172946]],[[194704,194704],"mapped",[24318]],[[194705,194706],"mapped",[140081]],[[194707,194707],"mapped",[33281]],[[194708,194709],"mapped",[24354]],[[194710,194710],"mapped",[14535]],[[194711,194711],"mapped",[144056]],[[194712,194712],"mapped",[156122]],[[194713,194713],"mapped",[24418]],[[194714,194714],"mapped",[24427]],[[194715,194715],"mapped",[14563]],[[194716,194716],"mapped",[24474]],[[194717,194717],"mapped",[24525]],[[194718,194718],"mapped",[24535]],[[194719,194719],"mapped",[24569]],[[194720,194720],"mapped",[24705]],[[194721,194721],"mapped",[14650]],[[194722,194722],"mapped",[14620]],[[194723,194723],"mapped",[24724]],[[194724,194724],"mapped",[141012]],[[194725,194725],"mapped",[24775]],[[194726,194726],"mapped",[24904]],[[194727,194727],"mapped",[24908]],[[194728,194728],"mapped",[24910]],[[194729,194729],"mapped",[24908]],[[194730,194730],"mapped",[24954]],[[194731,194731],"mapped",[24974]],[[194732,194732],"mapped",[25010]],[[194733,194733],"mapped",[24996]],[[194734,194734],"mapped",[25007]],[[194735,194735],"mapped",[25054]],[[194736,194736],"mapped",[25074]],[[194737,194737],"mapped",[25078]],[[194738,194738],"mapped",[25104]],[[194739,194739],"mapped",[25115]],[[194740,194740],"mapped",[25181]],[[194741,194741],"mapped",[25265]],[[194742,194742],"mapped",[25300]],[[194743,194743],"mapped",[25424]],[[194744,194744],"mapped",[142092]],[[194745,194745],"mapped",[25405]],[[194746,194746],"mapped",[25340]],[[194747,194747],"mapped",[25448]],[[194748,194748],"mapped",[25475]],[[194749,194749],"mapped",[25572]],[[194750,194750],"mapped",[142321]],[[194751,194751],"mapped",[25634]],[[194752,194752],"mapped",[25541]],[[194753,194753],"mapped",[25513]],[[194754,194754],"mapped",[14894]],[[194755,194755],"mapped",[25705]],[[194756,194756],"mapped",[25726]],[[194757,194757],"mapped",[25757]],[[194758,194758],"mapped",[25719]],[[194759,194759],"mapped",[14956]],[[194760,194760],"mapped",[25935]],[[194761,194761],"mapped",[25964]],[[194762,194762],"mapped",[143370]],[[194763,194763],"mapped",[26083]],[[194764,194764],"mapped",[26360]],[[194765,194765],"mapped",[26185]],[[194766,194766],"mapped",[15129]],[[194767,194767],"mapped",[26257]],[[194768,194768],"mapped",[15112]],[[194769,194769],"mapped",[15076]],[[194770,194770],"mapped",[20882]],[[194771,194771],"mapped",[20885]],[[194772,194772],"mapped",[26368]],[[194773,194773],"mapped",[26268]],[[194774,194774],"mapped",[32941]],[[194775,194775],"mapped",[17369]],[[194776,194776],"mapped",[26391]],[[194777,194777],"mapped",[26395]],[[194778,194778],"mapped",[26401]],[[194779,194779],"mapped",[26462]],[[194780,194780],"mapped",[26451]],[[194781,194781],"mapped",[144323]],[[194782,194782],"mapped",[15177]],[[194783,194783],"mapped",[26618]],[[194784,194784],"mapped",[26501]],[[194785,194785],"mapped",[26706]],[[194786,194786],"mapped",[26757]],[[194787,194787],"mapped",[144493]],[[194788,194788],"mapped",[26766]],[[194789,194789],"mapped",[26655]],[[194790,194790],"mapped",[26900]],[[194791,194791],"mapped",[15261]],[[194792,194792],"mapped",[26946]],[[194793,194793],"mapped",[27043]],[[194794,194794],"mapped",[27114]],[[194795,194795],"mapped",[27304]],[[194796,194796],"mapped",[145059]],[[194797,194797],"mapped",[27355]],[[194798,194798],"mapped",[15384]],[[194799,194799],"mapped",[27425]],[[194800,194800],"mapped",[145575]],[[194801,194801],"mapped",[27476]],[[194802,194802],"mapped",[15438]],[[194803,194803],"mapped",[27506]],[[194804,194804],"mapped",[27551]],[[194805,194805],"mapped",[27578]],[[194806,194806],"mapped",[27579]],[[194807,194807],"mapped",[146061]],[[194808,194808],"mapped",[138507]],[[194809,194809],"mapped",[146170]],[[194810,194810],"mapped",[27726]],[[194811,194811],"mapped",[146620]],[[194812,194812],"mapped",[27839]],[[194813,194813],"mapped",[27853]],[[194814,194814],"mapped",[27751]],[[194815,194815],"mapped",[27926]],[[194816,194816],"mapped",[27966]],[[194817,194817],"mapped",[28023]],[[194818,194818],"mapped",[27969]],[[194819,194819],"mapped",[28009]],[[194820,194820],"mapped",[28024]],[[194821,194821],"mapped",[28037]],[[194822,194822],"mapped",[146718]],[[194823,194823],"mapped",[27956]],[[194824,194824],"mapped",[28207]],[[194825,194825],"mapped",[28270]],[[194826,194826],"mapped",[15667]],[[194827,194827],"mapped",[28363]],[[194828,194828],"mapped",[28359]],[[194829,194829],"mapped",[147153]],[[194830,194830],"mapped",[28153]],[[194831,194831],"mapped",[28526]],[[194832,194832],"mapped",[147294]],[[194833,194833],"mapped",[147342]],[[194834,194834],"mapped",[28614]],[[194835,194835],"mapped",[28729]],[[194836,194836],"mapped",[28702]],[[194837,194837],"mapped",[28699]],[[194838,194838],"mapped",[15766]],[[194839,194839],"mapped",[28746]],[[194840,194840],"mapped",[28797]],[[194841,194841],"mapped",[28791]],[[194842,194842],"mapped",[28845]],[[194843,194843],"mapped",[132389]],[[194844,194844],"mapped",[28997]],[[194845,194845],"mapped",[148067]],[[194846,194846],"mapped",[29084]],[[194847,194847],"disallowed"],[[194848,194848],"mapped",[29224]],[[194849,194849],"mapped",[29237]],[[194850,194850],"mapped",[29264]],[[194851,194851],"mapped",[149000]],[[194852,194852],"mapped",[29312]],[[194853,194853],"mapped",[29333]],[[194854,194854],"mapped",[149301]],[[194855,194855],"mapped",[149524]],[[194856,194856],"mapped",[29562]],[[194857,194857],"mapped",[29579]],[[194858,194858],"mapped",[16044]],[[194859,194859],"mapped",[29605]],[[194860,194861],"mapped",[16056]],[[194862,194862],"mapped",[29767]],[[194863,194863],"mapped",[29788]],[[194864,194864],"mapped",[29809]],[[194865,194865],"mapped",[29829]],[[194866,194866],"mapped",[29898]],[[194867,194867],"mapped",[16155]],[[194868,194868],"mapped",[29988]],[[194869,194869],"mapped",[150582]],[[194870,194870],"mapped",[30014]],[[194871,194871],"mapped",[150674]],[[194872,194872],"mapped",[30064]],[[194873,194873],"mapped",[139679]],[[194874,194874],"mapped",[30224]],[[194875,194875],"mapped",[151457]],[[194876,194876],"mapped",[151480]],[[194877,194877],"mapped",[151620]],[[194878,194878],"mapped",[16380]],[[194879,194879],"mapped",[16392]],[[194880,194880],"mapped",[30452]],[[194881,194881],"mapped",[151795]],[[194882,194882],"mapped",[151794]],[[194883,194883],"mapped",[151833]],[[194884,194884],"mapped",[151859]],[[194885,194885],"mapped",[30494]],[[194886,194887],"mapped",[30495]],[[194888,194888],"mapped",[30538]],[[194889,194889],"mapped",[16441]],[[194890,194890],"mapped",[30603]],[[194891,194891],"mapped",[16454]],[[194892,194892],"mapped",[16534]],[[194893,194893],"mapped",[152605]],[[194894,194894],"mapped",[30798]],[[194895,194895],"mapped",[30860]],[[194896,194896],"mapped",[30924]],[[194897,194897],"mapped",[16611]],[[194898,194898],"mapped",[153126]],[[194899,194899],"mapped",[31062]],[[194900,194900],"mapped",[153242]],[[194901,194901],"mapped",[153285]],[[194902,194902],"mapped",[31119]],[[194903,194903],"mapped",[31211]],[[194904,194904],"mapped",[16687]],[[194905,194905],"mapped",[31296]],[[194906,194906],"mapped",[31306]],[[194907,194907],"mapped",[31311]],[[194908,194908],"mapped",[153980]],[[194909,194910],"mapped",[154279]],[[194911,194911],"disallowed"],[[194912,194912],"mapped",[16898]],[[194913,194913],"mapped",[154539]],[[194914,194914],"mapped",[31686]],[[194915,194915],"mapped",[31689]],[[194916,194916],"mapped",[16935]],[[194917,194917],"mapped",[154752]],[[194918,194918],"mapped",[31954]],[[194919,194919],"mapped",[17056]],[[194920,194920],"mapped",[31976]],[[194921,194921],"mapped",[31971]],[[194922,194922],"mapped",[32000]],[[194923,194923],"mapped",[155526]],[[194924,194924],"mapped",[32099]],[[194925,194925],"mapped",[17153]],[[194926,194926],"mapped",[32199]],[[194927,194927],"mapped",[32258]],[[194928,194928],"mapped",[32325]],[[194929,194929],"mapped",[17204]],[[194930,194930],"mapped",[156200]],[[194931,194931],"mapped",[156231]],[[194932,194932],"mapped",[17241]],[[194933,194933],"mapped",[156377]],[[194934,194934],"mapped",[32634]],[[194935,194935],"mapped",[156478]],[[194936,194936],"mapped",[32661]],[[194937,194937],"mapped",[32762]],[[194938,194938],"mapped",[32773]],[[194939,194939],"mapped",[156890]],[[194940,194940],"mapped",[156963]],[[194941,194941],"mapped",[32864]],[[194942,194942],"mapped",[157096]],[[194943,194943],"mapped",[32880]],[[194944,194944],"mapped",[144223]],[[194945,194945],"mapped",[17365]],[[194946,194946],"mapped",[32946]],[[194947,194947],"mapped",[33027]],[[194948,194948],"mapped",[17419]],[[194949,194949],"mapped",[33086]],[[194950,194950],"mapped",[23221]],[[194951,194951],"mapped",[157607]],[[194952,194952],"mapped",[157621]],[[194953,194953],"mapped",[144275]],[[194954,194954],"mapped",[144284]],[[194955,194955],"mapped",[33281]],[[194956,194956],"mapped",[33284]],[[194957,194957],"mapped",[36766]],[[194958,194958],"mapped",[17515]],[[194959,194959],"mapped",[33425]],[[194960,194960],"mapped",[33419]],[[194961,194961],"mapped",[33437]],[[194962,194962],"mapped",[21171]],[[194963,194963],"mapped",[33457]],[[194964,194964],"mapped",[33459]],[[194965,194965],"mapped",[33469]],[[194966,194966],"mapped",[33510]],[[194967,194967],"mapped",[158524]],[[194968,194968],"mapped",[33509]],[[194969,194969],"mapped",[33565]],[[194970,194970],"mapped",[33635]],[[194971,194971],"mapped",[33709]],[[194972,194972],"mapped",[33571]],[[194973,194973],"mapped",[33725]],[[194974,194974],"mapped",[33767]],[[194975,194975],"mapped",[33879]],[[194976,194976],"mapped",[33619]],[[194977,194977],"mapped",[33738]],[[194978,194978],"mapped",[33740]],[[194979,194979],"mapped",[33756]],[[194980,194980],"mapped",[158774]],[[194981,194981],"mapped",[159083]],[[194982,194982],"mapped",[158933]],[[194983,194983],"mapped",[17707]],[[194984,194984],"mapped",[34033]],[[194985,194985],"mapped",[34035]],[[194986,194986],"mapped",[34070]],[[194987,194987],"mapped",[160714]],[[194988,194988],"mapped",[34148]],[[194989,194989],"mapped",[159532]],[[194990,194990],"mapped",[17757]],[[194991,194991],"mapped",[17761]],[[194992,194992],"mapped",[159665]],[[194993,194993],"mapped",[159954]],[[194994,194994],"mapped",[17771]],[[194995,194995],"mapped",[34384]],[[194996,194996],"mapped",[34396]],[[194997,194997],"mapped",[34407]],[[194998,194998],"mapped",[34409]],[[194999,194999],"mapped",[34473]],[[195000,195000],"mapped",[34440]],[[195001,195001],"mapped",[34574]],[[195002,195002],"mapped",[34530]],[[195003,195003],"mapped",[34681]],[[195004,195004],"mapped",[34600]],[[195005,195005],"mapped",[34667]],[[195006,195006],"mapped",[34694]],[[195007,195007],"disallowed"],[[195008,195008],"mapped",[34785]],[[195009,195009],"mapped",[34817]],[[195010,195010],"mapped",[17913]],[[195011,195011],"mapped",[34912]],[[195012,195012],"mapped",[34915]],[[195013,195013],"mapped",[161383]],[[195014,195014],"mapped",[35031]],[[195015,195015],"mapped",[35038]],[[195016,195016],"mapped",[17973]],[[195017,195017],"mapped",[35066]],[[195018,195018],"mapped",[13499]],[[195019,195019],"mapped",[161966]],[[195020,195020],"mapped",[162150]],[[195021,195021],"mapped",[18110]],[[195022,195022],"mapped",[18119]],[[195023,195023],"mapped",[35488]],[[195024,195024],"mapped",[35565]],[[195025,195025],"mapped",[35722]],[[195026,195026],"mapped",[35925]],[[195027,195027],"mapped",[162984]],[[195028,195028],"mapped",[36011]],[[195029,195029],"mapped",[36033]],[[195030,195030],"mapped",[36123]],[[195031,195031],"mapped",[36215]],[[195032,195032],"mapped",[163631]],[[195033,195033],"mapped",[133124]],[[195034,195034],"mapped",[36299]],[[195035,195035],"mapped",[36284]],[[195036,195036],"mapped",[36336]],[[195037,195037],"mapped",[133342]],[[195038,195038],"mapped",[36564]],[[195039,195039],"mapped",[36664]],[[195040,195040],"mapped",[165330]],[[195041,195041],"mapped",[165357]],[[195042,195042],"mapped",[37012]],[[195043,195043],"mapped",[37105]],[[195044,195044],"mapped",[37137]],[[195045,195045],"mapped",[165678]],[[195046,195046],"mapped",[37147]],[[195047,195047],"mapped",[37432]],[[195048,195048],"mapped",[37591]],[[195049,195049],"mapped",[37592]],[[195050,195050],"mapped",[37500]],[[195051,195051],"mapped",[37881]],[[195052,195052],"mapped",[37909]],[[195053,195053],"mapped",[166906]],[[195054,195054],"mapped",[38283]],[[195055,195055],"mapped",[18837]],[[195056,195056],"mapped",[38327]],[[195057,195057],"mapped",[167287]],[[195058,195058],"mapped",[18918]],[[195059,195059],"mapped",[38595]],[[195060,195060],"mapped",[23986]],[[195061,195061],"mapped",[38691]],[[195062,195062],"mapped",[168261]],[[195063,195063],"mapped",[168474]],[[195064,195064],"mapped",[19054]],[[195065,195065],"mapped",[19062]],[[195066,195066],"mapped",[38880]],[[195067,195067],"mapped",[168970]],[[195068,195068],"mapped",[19122]],[[195069,195069],"mapped",[169110]],[[195070,195071],"mapped",[38923]],[[195072,195072],"mapped",[38953]],[[195073,195073],"mapped",[169398]],[[195074,195074],"mapped",[39138]],[[195075,195075],"mapped",[19251]],[[195076,195076],"mapped",[39209]],[[195077,195077],"mapped",[39335]],[[195078,195078],"mapped",[39362]],[[195079,195079],"mapped",[39422]],[[195080,195080],"mapped",[19406]],[[195081,195081],"mapped",[170800]],[[195082,195082],"mapped",[39698]],[[195083,195083],"mapped",[40000]],[[195084,195084],"mapped",[40189]],[[195085,195085],"mapped",[19662]],[[195086,195086],"mapped",[19693]],[[195087,195087],"mapped",[40295]],[[195088,195088],"mapped",[172238]],[[195089,195089],"mapped",[19704]],[[195090,195090],"mapped",[172293]],[[195091,195091],"mapped",[172558]],[[195092,195092],"mapped",[172689]],[[195093,195093],"mapped",[40635]],[[195094,195094],"mapped",[19798]],[[195095,195095],"mapped",[40697]],[[195096,195096],"mapped",[40702]],[[195097,195097],"mapped",[40709]],[[195098,195098],"mapped",[40719]],[[195099,195099],"mapped",[40726]],[[195100,195100],"mapped",[40763]],[[195101,195101],"mapped",[173568]],[[195102,196605],"disallowed"],[[196606,196607],"disallowed"],[[196608,262141],"disallowed"],[[262142,262143],"disallowed"],[[262144,327677],"disallowed"],[[327678,327679],"disallowed"],[[327680,393213],"disallowed"],[[393214,393215],"disallowed"],[[393216,458749],"disallowed"],[[458750,458751],"disallowed"],[[458752,524285],"disallowed"],[[524286,524287],"disallowed"],[[524288,589821],"disallowed"],[[589822,589823],"disallowed"],[[589824,655357],"disallowed"],[[655358,655359],"disallowed"],[[655360,720893],"disallowed"],[[720894,720895],"disallowed"],[[720896,786429],"disallowed"],[[786430,786431],"disallowed"],[[786432,851965],"disallowed"],[[851966,851967],"disallowed"],[[851968,917501],"disallowed"],[[917502,917503],"disallowed"],[[917504,917504],"disallowed"],[[917505,917505],"disallowed"],[[917506,917535],"disallowed"],[[917536,917631],"disallowed"],[[917632,917759],"disallowed"],[[917760,917999],"ignored"],[[918000,983037],"disallowed"],[[983038,983039],"disallowed"],[[983040,1048573],"disallowed"],[[1048574,1048575],"disallowed"],[[1048576,1114109],"disallowed"],[[1114110,1114111],"disallowed"]]')}};var __webpack_module_cache__={};function __nccwpck_require__(e){var p=__webpack_module_cache__[e];if(p!==undefined){return p.exports}var a=__webpack_module_cache__[e]={exports:{}};var d=true;try{__webpack_modules__[e].call(a.exports,a,a.exports,__nccwpck_require__);d=false}finally{if(d)delete __webpack_module_cache__[e]}return a.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=new URL(".",import.meta.url).pathname.slice(import.meta.url.match(/^file:\/\/\/\w:/)?1:0,-1)+"/";var __webpack_exports__={};(()=>{var e=__nccwpck_require__(5438);var p=__nccwpck_require__(2186);var a=__nccwpck_require__(8467);if(!process.env.GITHUB_TOKEN)throw new Error("GITHUB_TOKEN not set");function isUnhelpfulComment(e){return e.replace(/[\s,.!?👍👎👌🙏]+|[\u{1F3FB}-\u{1F3FF}]|[+-]\d+|⬆️|ditt?o|me|too|t?here|on|same|this|issues?|please|pl[sz]|any|updates?|bump|question|solution|following/giu,"")===""}async function run(){try{const{comment:d}=e.context.payload;if(!d)return;const{node_id:t,body:r}=d;if(isUnhelpfulComment(r)){await(0,a.graphql)(`\n mutation minimize($subjectId: ID!) {\n minimizeComment(\n input: { subjectId: $subjectId, classifier: OFF_TOPIC }\n ) {\n minimizedComment {\n isMinimized\n }\n }\n }\n `,{subjectId:t,headers:{authorization:`token ${process.env.GITHUB_TOKEN}`}});(0,p.info)(`Comment (${r.slice(0,15)}) was minimized.`)}}catch(e){(0,p.setFailed)(e)}}run()})();
\ No newline at end of file
diff --git a/.github/actions/minus-one/licenses.txt b/.github/actions/minus-one/licenses.txt
new file mode 100644
index 000000000..f3e049939
--- /dev/null
+++ b/.github/actions/minus-one/licenses.txt
@@ -0,0 +1,659 @@
+@actions/core
+MIT
+The MIT License (MIT)
+
+Copyright 2019 GitHub
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+@actions/github
+MIT
+The MIT License (MIT)
+
+Copyright 2019 GitHub
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+@actions/http-client
+MIT
+Actions Http Client for Node.js
+
+Copyright (c) GitHub, Inc.
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+@octokit/auth-token
+MIT
+The MIT License
+
+Copyright (c) 2019 Octokit contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+@octokit/core
+MIT
+The MIT License
+
+Copyright (c) 2019 Octokit contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+@octokit/endpoint
+MIT
+The MIT License
+
+Copyright (c) 2018 Octokit contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+@octokit/graphql
+MIT
+The MIT License
+
+Copyright (c) 2018 Octokit contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+@octokit/plugin-paginate-rest
+MIT
+MIT License Copyright (c) 2019 Octokit contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+@octokit/plugin-rest-endpoint-methods
+MIT
+MIT License Copyright (c) 2019 Octokit contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+@octokit/request
+MIT
+The MIT License
+
+Copyright (c) 2018 Octokit contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+@octokit/request-error
+MIT
+The MIT License
+
+Copyright (c) 2019 Octokit contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+@vercel/ncc
+MIT
+Copyright 2018 ZEIT, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+before-after-hook
+Apache-2.0
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2018 Gregor Martynus and other contributors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+
+deprecation
+ISC
+The ISC License
+
+Copyright (c) Gregor Martynus and contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+
+is-plain-object
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+nextjs-project
+The MIT License (MIT)
+
+Copyright (c) 2023 Vercel, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+node-fetch
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2016 David Frank
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+
+once
+ISC
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+
+tr46
+MIT
+
+tunnel
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2012 Koichi Kobayashi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+universal-user-agent
+ISC
+# [ISC License](https://spdx.org/licenses/ISC)
+
+Copyright (c) 2018, Gregor Martynus (https://github.com/gr2m)
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+
+uuid
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2010-2020 Robert Kieffer and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+webidl-conversions
+BSD-2-Clause
+# The BSD 2-Clause License
+
+Copyright (c) 2014, Domenic Denicola
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+whatwg-url
+MIT
+The MIT License (MIT)
+
+Copyright (c) 2015–2016 Sebastian Mayr
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+wrappy
+ISC
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/.github/actions/minus-one/package-lock.json b/.github/actions/minus-one/package-lock.json
new file mode 100644
index 000000000..28783d0aa
--- /dev/null
+++ b/.github/actions/minus-one/package-lock.json
@@ -0,0 +1,572 @@
+{
+ "name": "minus-one",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "dependencies": {
+ "@actions/core": "1.10.0",
+ "@actions/github": "5.1.1",
+ "@octokit/graphql": "7.0.1"
+ },
+ "devDependencies": {
+ "@vercel/ncc": "0.34.0"
+ }
+ },
+ "node_modules/@actions/core": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz",
+ "integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==",
+ "dependencies": {
+ "@actions/http-client": "^2.0.1",
+ "uuid": "^8.3.2"
+ }
+ },
+ "node_modules/@actions/github": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@actions/github/-/github-5.1.1.tgz",
+ "integrity": "sha512-Nk59rMDoJaV+mHCOJPXuvB1zIbomlKS0dmSIqPGxd0enAXBnOfn4VWF+CGtRCwXZG9Epa54tZA7VIRlJDS8A6g==",
+ "dependencies": {
+ "@actions/http-client": "^2.0.1",
+ "@octokit/core": "^3.6.0",
+ "@octokit/plugin-paginate-rest": "^2.17.0",
+ "@octokit/plugin-rest-endpoint-methods": "^5.13.0"
+ }
+ },
+ "node_modules/@actions/http-client": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
+ "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
+ "dependencies": {
+ "tunnel": "^0.0.6"
+ }
+ },
+ "node_modules/@octokit/auth-token": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
+ "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
+ "dependencies": {
+ "@octokit/types": "^6.0.3"
+ }
+ },
+ "node_modules/@octokit/core": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz",
+ "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==",
+ "dependencies": {
+ "@octokit/auth-token": "^2.4.4",
+ "@octokit/graphql": "^4.5.8",
+ "@octokit/request": "^5.6.3",
+ "@octokit/request-error": "^2.0.5",
+ "@octokit/types": "^6.0.3",
+ "before-after-hook": "^2.2.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "node_modules/@octokit/core/node_modules/@octokit/graphql": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
+ "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
+ "dependencies": {
+ "@octokit/request": "^5.6.0",
+ "@octokit/types": "^6.0.3",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "node_modules/@octokit/endpoint": {
+ "version": "6.0.12",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
+ "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
+ "dependencies": {
+ "@octokit/types": "^6.0.3",
+ "is-plain-object": "^5.0.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "node_modules/@octokit/graphql": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz",
+ "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==",
+ "dependencies": {
+ "@octokit/request": "^8.0.1",
+ "@octokit/types": "^11.0.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/graphql/node_modules/@octokit/endpoint": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz",
+ "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==",
+ "dependencies": {
+ "@octokit/types": "^11.0.0",
+ "is-plain-object": "^5.0.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/graphql/node_modules/@octokit/openapi-types": {
+ "version": "18.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz",
+ "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw=="
+ },
+ "node_modules/@octokit/graphql/node_modules/@octokit/request": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz",
+ "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==",
+ "dependencies": {
+ "@octokit/endpoint": "^9.0.0",
+ "@octokit/request-error": "^5.0.0",
+ "@octokit/types": "^11.1.0",
+ "is-plain-object": "^5.0.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/graphql/node_modules/@octokit/request-error": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz",
+ "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==",
+ "dependencies": {
+ "@octokit/types": "^11.0.0",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/@octokit/graphql/node_modules/@octokit/types": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz",
+ "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==",
+ "dependencies": {
+ "@octokit/openapi-types": "^18.0.0"
+ }
+ },
+ "node_modules/@octokit/openapi-types": {
+ "version": "12.11.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz",
+ "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ=="
+ },
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "2.21.3",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz",
+ "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==",
+ "dependencies": {
+ "@octokit/types": "^6.40.0"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=2"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "5.16.2",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz",
+ "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==",
+ "dependencies": {
+ "@octokit/types": "^6.39.0",
+ "deprecation": "^2.3.1"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=3"
+ }
+ },
+ "node_modules/@octokit/request": {
+ "version": "5.6.3",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz",
+ "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
+ "dependencies": {
+ "@octokit/endpoint": "^6.0.1",
+ "@octokit/request-error": "^2.1.0",
+ "@octokit/types": "^6.16.1",
+ "is-plain-object": "^5.0.0",
+ "node-fetch": "^2.6.7",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "node_modules/@octokit/request-error": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
+ "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
+ "dependencies": {
+ "@octokit/types": "^6.0.3",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/@octokit/types": {
+ "version": "6.41.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz",
+ "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==",
+ "dependencies": {
+ "@octokit/openapi-types": "^12.11.0"
+ }
+ },
+ "node_modules/@vercel/ncc": {
+ "version": "0.34.0",
+ "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.34.0.tgz",
+ "integrity": "sha512-G9h5ZLBJ/V57Ou9vz5hI8pda/YQX5HQszCs3AmIus3XzsmRn/0Ptic5otD3xVST8QLKk7AMk7AqpsyQGN7MZ9A==",
+ "dev": true,
+ "bin": {
+ "ncc": "dist/ncc/cli.js"
+ }
+ },
+ "node_modules/before-after-hook": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
+ "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="
+ },
+ "node_modules/deprecation": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
+ },
+ "node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz",
+ "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "node_modules/tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+ "engines": {
+ "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
+ }
+ },
+ "node_modules/universal-user-agent": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
+ "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
+ },
+ "node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ },
+ "dependencies": {
+ "@actions/core": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz",
+ "integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==",
+ "requires": {
+ "@actions/http-client": "^2.0.1",
+ "uuid": "^8.3.2"
+ }
+ },
+ "@actions/github": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@actions/github/-/github-5.1.1.tgz",
+ "integrity": "sha512-Nk59rMDoJaV+mHCOJPXuvB1zIbomlKS0dmSIqPGxd0enAXBnOfn4VWF+CGtRCwXZG9Epa54tZA7VIRlJDS8A6g==",
+ "requires": {
+ "@actions/http-client": "^2.0.1",
+ "@octokit/core": "^3.6.0",
+ "@octokit/plugin-paginate-rest": "^2.17.0",
+ "@octokit/plugin-rest-endpoint-methods": "^5.13.0"
+ }
+ },
+ "@actions/http-client": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
+ "integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
+ "requires": {
+ "tunnel": "^0.0.6"
+ }
+ },
+ "@octokit/auth-token": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz",
+ "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==",
+ "requires": {
+ "@octokit/types": "^6.0.3"
+ }
+ },
+ "@octokit/core": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz",
+ "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==",
+ "requires": {
+ "@octokit/auth-token": "^2.4.4",
+ "@octokit/graphql": "^4.5.8",
+ "@octokit/request": "^5.6.3",
+ "@octokit/request-error": "^2.0.5",
+ "@octokit/types": "^6.0.3",
+ "before-after-hook": "^2.2.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "dependencies": {
+ "@octokit/graphql": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz",
+ "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==",
+ "requires": {
+ "@octokit/request": "^5.6.0",
+ "@octokit/types": "^6.0.3",
+ "universal-user-agent": "^6.0.0"
+ }
+ }
+ }
+ },
+ "@octokit/endpoint": {
+ "version": "6.0.12",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz",
+ "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==",
+ "requires": {
+ "@octokit/types": "^6.0.3",
+ "is-plain-object": "^5.0.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/graphql": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz",
+ "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==",
+ "requires": {
+ "@octokit/request": "^8.0.1",
+ "@octokit/types": "^11.0.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "dependencies": {
+ "@octokit/endpoint": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz",
+ "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==",
+ "requires": {
+ "@octokit/types": "^11.0.0",
+ "is-plain-object": "^5.0.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/openapi-types": {
+ "version": "18.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz",
+ "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw=="
+ },
+ "@octokit/request": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz",
+ "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==",
+ "requires": {
+ "@octokit/endpoint": "^9.0.0",
+ "@octokit/request-error": "^5.0.0",
+ "@octokit/types": "^11.1.0",
+ "is-plain-object": "^5.0.0",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/request-error": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz",
+ "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==",
+ "requires": {
+ "@octokit/types": "^11.0.0",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ }
+ },
+ "@octokit/types": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz",
+ "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==",
+ "requires": {
+ "@octokit/openapi-types": "^18.0.0"
+ }
+ }
+ }
+ },
+ "@octokit/openapi-types": {
+ "version": "12.11.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz",
+ "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ=="
+ },
+ "@octokit/plugin-paginate-rest": {
+ "version": "2.21.3",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz",
+ "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==",
+ "requires": {
+ "@octokit/types": "^6.40.0"
+ }
+ },
+ "@octokit/plugin-rest-endpoint-methods": {
+ "version": "5.16.2",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz",
+ "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==",
+ "requires": {
+ "@octokit/types": "^6.39.0",
+ "deprecation": "^2.3.1"
+ }
+ },
+ "@octokit/request": {
+ "version": "5.6.3",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz",
+ "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==",
+ "requires": {
+ "@octokit/endpoint": "^6.0.1",
+ "@octokit/request-error": "^2.1.0",
+ "@octokit/types": "^6.16.1",
+ "is-plain-object": "^5.0.0",
+ "node-fetch": "^2.6.7",
+ "universal-user-agent": "^6.0.0"
+ }
+ },
+ "@octokit/request-error": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz",
+ "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==",
+ "requires": {
+ "@octokit/types": "^6.0.3",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ }
+ },
+ "@octokit/types": {
+ "version": "6.41.0",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz",
+ "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==",
+ "requires": {
+ "@octokit/openapi-types": "^12.11.0"
+ }
+ },
+ "@vercel/ncc": {
+ "version": "0.34.0",
+ "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.34.0.tgz",
+ "integrity": "sha512-G9h5ZLBJ/V57Ou9vz5hI8pda/YQX5HQszCs3AmIus3XzsmRn/0Ptic5otD3xVST8QLKk7AMk7AqpsyQGN7MZ9A==",
+ "dev": true
+ },
+ "before-after-hook": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
+ "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="
+ },
+ "deprecation": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
+ },
+ "is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
+ },
+ "node-fetch": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz",
+ "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==",
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "universal-user-agent": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
+ "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
+ },
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/.github/actions/minus-one/package.json b/.github/actions/minus-one/package.json
new file mode 100644
index 000000000..9b46c1615
--- /dev/null
+++ b/.github/actions/minus-one/package.json
@@ -0,0 +1,21 @@
+{
+ "private": true,
+ "description": "Manage +1 comments on GitHub issues",
+ "author": "Balázs Orbán ",
+ "exports": "./index.mjs",
+ "files": [
+ "src"
+ ],
+ "scripts": {
+ "build": "ncc -m -o . build src/index.mjs --license licenses.txt"
+ },
+ "devDependencies": {
+ "@vercel/ncc": "0.34.0"
+ },
+ "dependencies": {
+ "@actions/core": "1.10.0",
+ "@actions/github": "5.1.1",
+ "@octokit/graphql": "7.0.1"
+ },
+ "packageManager": "npm@9.2.0"
+}
diff --git a/.github/actions/minus-one/src/index.mjs b/.github/actions/minus-one/src/index.mjs
new file mode 100644
index 000000000..a5caf95d3
--- /dev/null
+++ b/.github/actions/minus-one/src/index.mjs
@@ -0,0 +1,63 @@
+// @ts-check
+import { context } from '@actions/github'
+import { info, setFailed } from '@actions/core'
+import { graphql } from '@octokit/graphql'
+
+if (!process.env.GITHUB_TOKEN) throw new Error('GITHUB_TOKEN not set')
+
+/**
+MIT License
+
+Copyright (c) Sindre Sorhus sindresorhus@gmail.com (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+function isUnhelpfulComment(text) {
+ // Borrowed from Refined GitHub:
+ // https://github.com/refined-github/refined-github/blob/c864a20b57bb433aaf3952f88d83c9fc481ae6ff/source/helpers/is-low-quality-comment.ts#L2-L3
+ return (
+ text.replace(
+ /[\s,.!?👍👎👌🙏]+|[\u{1F3FB}-\u{1F3FF}]|[+-]\d+|⬆️|ditt?o|me|too|t?here|on|same|this|issues?|please|pl[sz]|any|updates?|bump|question|solution|following/giu,
+ ''
+ ) === ''
+ )
+}
+
+async function run() {
+ try {
+ const { comment } = context.payload
+ if (!comment) return
+
+ const { node_id: subjectId, body } = comment
+
+ if (isUnhelpfulComment(body)) {
+ await graphql(
+ `
+ mutation minimize($subjectId: ID!) {
+ minimizeComment(
+ input: { subjectId: $subjectId, classifier: OFF_TOPIC }
+ ) {
+ minimizedComment {
+ isMinimized
+ }
+ }
+ }
+ `,
+ {
+ subjectId,
+ headers: { authorization: `token ${process.env.GITHUB_TOKEN}` },
+ }
+ )
+
+ info(`Comment (${body.slice(0, 15)}) was minimized.`)
+ }
+ } catch (error) {
+ setFailed(error)
+ }
+}
+
+run()
diff --git a/.github/workflows/ci-stable.yml b/.github/workflows/ci-stable.yml
deleted file mode 100644
index 80d19dca0..000000000
--- a/.github/workflows/ci-stable.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
-# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
-
-name: CI — Stable
-
-on:
- push:
- branches: [master]
- pull_request:
- branches: [master, 3.3]
-
-permissions:
- contents: read
-
-env:
- CI: true
- TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
- TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
- CACHE_PREFIX: stable
-
-jobs:
- build:
- runs-on: ubuntu-latest
-
- strategy:
- matrix:
- node-version: [14, 18]
-
- steps:
- - uses: actions/checkout@v3
- - name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
- with:
- node-version: ${{ matrix.node-version }}
-
- - name: Use the `stable` engine
- run: |
- node ./scripts/swap-engines.js
-
- - name: Cache node_modules
- uses: actions/cache@v3
- with:
- path: node_modules
- key: ${{ runner.os }}-${{ matrix.node-version }}-${{ env.CACHE_PREFIX }}-node_modules-${{ hashFiles('**/package-lock.json') }}
-
- - name: Install dependencies
- run: npm install
-
- - name: Build Tailwind CSS
- run: npm run build
-
- - name: Test
- run: |
- npm run test || \
- npm run test || \
- npm run test || exit 1
-
- - name: Lint
- run: npm run style
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 3e2433d3b..258fe393a 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,10 +1,10 @@
-name: CI — Oxide
+name: CI
on:
push:
- branches: [master, 3.3]
+ branches: [master]
pull_request:
- branches: [master, 3.3]
+ branches: [master]
permissions:
contents: read
@@ -13,11 +13,11 @@ env:
CI: true
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
- CACHE_PREFIX: oxide
jobs:
build:
runs-on: ubuntu-latest
+ timeout-minutes: 15
strategy:
matrix:
@@ -34,7 +34,7 @@ jobs:
uses: actions/cache@v3
with:
path: node_modules
- key: ${{ runner.os }}-${{ matrix.node-version }}-${{ env.CACHE_PREFIX }}-node_modules-${{ hashFiles('**/package-lock.json') }}
+ key: ${{ runner.os }}-${{ matrix.node-version }}-node_modules-${{ hashFiles('**/package-lock.json') }}
# Cargo already skips downloading dependencies if they already exist
- name: Cache cargo
@@ -62,14 +62,29 @@ jobs:
- name: Install dependencies
run: npm install
+ - name: Check versions
+ run: |
+ echo "Node:" `node --version`
+ echo "NPM:" `npm --version`
+ echo "Rust:" `rustc --version`
+ echo "Cargo:" `cargo --version`
+
- name: Build Tailwind CSS
run: npx turbo run build --filter=//
- - name: Test
+ - name: Test (Node.js)
run: |
npx turbo run test --filter=// || \
npx turbo run test --filter=// || \
npx turbo run test --filter=// || exit 1
+ - name: Test (Rust)
+ run: |
+ cd ./oxide
+ cargo test || \
+ cargo test || \
+ cargo test || exit 1
+ cd -
+
- name: Lint
run: npx turbo run style --filter=//
diff --git a/.github/workflows/integration-tests-stable.yml b/.github/workflows/integration-tests-stable.yml
deleted file mode 100644
index b28207196..000000000
--- a/.github/workflows/integration-tests-stable.yml
+++ /dev/null
@@ -1,83 +0,0 @@
-name: Integration Tests — Stable
-
-on:
- push:
- branches: [master, 3.3]
- pull_request:
- branches: [master, 3.3]
-
-permissions:
- contents: read
-
-env:
- CI: true
- TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
- TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
- CACHE_PREFIX: stable
-
-jobs:
- test:
- runs-on: ubuntu-latest
-
- strategy:
- matrix:
- integration:
- - content-resolution
- - parcel
- - postcss-cli
- - rollup
- - rollup-sass
- - tailwindcss-cli
- - vite
- - webpack-4
- - webpack-5
- node-version: [18]
- fail-fast: false
-
- steps:
- - uses: actions/checkout@v3
- - name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
- with:
- node-version: ${{ matrix.node-version }}
- cache: 'npm'
-
- - name: Use the `stable` engine
- run: |
- node ./scripts/swap-engines.js
-
- - name: Cache node_modules (tailwindcss)
- uses: actions/cache@v3
- with:
- path: node_modules
- key: ${{ runner.os }}-${{ matrix.node-version }}-${{ env.CACHE_PREFIX }}-node_modules-${{ hashFiles('package-lock.json') }}
-
- - name: Cache node_modules (integrations)
- uses: actions/cache@v3
- with:
- path: ./integrations/node_modules
- key: ${{ runner.os }}-${{ matrix.node-version }}-${{ env.CACHE_PREFIX }}-node_modules-integrations-${{ hashFiles('./integrations/package-lock.json') }}
-
- - name: Cache node_modules (integration)
- uses: actions/cache@v3
- with:
- path: ./integrations/${{ matrix.integration }}/node_modules
- key: ${{ runner.os }}-${{ matrix.node-version }}-${{ env.CACHE_PREFIX }}-node_modules-integrations-${{ matrix.integration }}-${{ hashFiles('./integrations/${{ matrix.integration }}/package-lock.json') }}
-
- - name: Install dependencies
- run: npm install
-
- - name: Install dependencies (shared integrations)
- run: npm install --prefix ./integrations
-
- - name: Install dependencies (integration)
- run: npm install --prefix ./integrations/${{ matrix.integration }}
-
- - name: Build Tailwind CSS
- run: npm run build
-
- - name: Test ${{ matrix.integration }}
- run: |
- npm run test --prefix ./integrations/${{ matrix.integration }} || \
- npm run test --prefix ./integrations/${{ matrix.integration }} || \
- npm run test --prefix ./integrations/${{ matrix.integration }} || exit 1
diff --git a/.github/workflows/integration-tests-oxide.yml b/.github/workflows/integration-tests.yml
similarity index 83%
rename from .github/workflows/integration-tests-oxide.yml
rename to .github/workflows/integration-tests.yml
index 9da82b4b8..f23943b90 100644
--- a/.github/workflows/integration-tests-oxide.yml
+++ b/.github/workflows/integration-tests.yml
@@ -1,10 +1,10 @@
-name: Integration Tests — Oxide
+name: Integration Tests
on:
push:
- branches: [master, 3.3]
+ branches: [master]
pull_request:
- branches: [master, 3.3]
+ branches: [master]
permissions:
contents: read
@@ -13,11 +13,11 @@ env:
CI: true
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
- CACHE_PREFIX: oxide
jobs:
test:
runs-on: ubuntu-latest
+ timeout-minutes: 15
strategy:
matrix:
@@ -46,7 +46,7 @@ jobs:
uses: actions/cache@v3
with:
path: node_modules
- key: ${{ runner.os }}-${{ matrix.node-version }}-${{ env.CACHE_PREFIX }}-node_modules-${{ hashFiles('**/package-lock.json') }}
+ key: ${{ runner.os }}-${{ matrix.node-version }}-node_modules-${{ hashFiles('**/package-lock.json') }}
# Cargo already skips downloading dependencies if they already exist
- name: Cache cargo
@@ -74,6 +74,13 @@ jobs:
- name: Install dependencies
run: npm install
+ - name: Check versions
+ run: |
+ echo "Node:" `node --version`
+ echo "NPM:" `npm --version`
+ echo "Rust:" `rustc --version`
+ echo "Cargo:" `cargo --version`
+
- name: Build Tailwind CSS
run: npx turbo run build --filter=//
diff --git a/.github/workflows/issue_on_comment.yml b/.github/workflows/issue_on_comment.yml
new file mode 100644
index 000000000..9263666b3
--- /dev/null
+++ b/.github/workflows/issue_on_comment.yml
@@ -0,0 +1,18 @@
+name: On issue comment
+
+on:
+ issue_comment:
+ types: [created]
+
+jobs:
+ minus-one:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-node@v3
+ with:
+ node-version: 18
+ - name: 'Manage +1 comments'
+ run: node ./.github/actions/minus-one/index.mjs
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml
index 2ad36d3dd..23b48aefc 100644
--- a/.github/workflows/prepare-release.yml
+++ b/.github/workflows/prepare-release.yml
@@ -18,6 +18,7 @@ jobs:
contents: write # for softprops/action-gh-release to create GitHub release
runs-on: macos-11
+ timeout-minutes: 15
strategy:
matrix:
@@ -53,6 +54,13 @@ jobs:
- name: Install dependencies
run: npm install
+ - name: Check versions
+ run: |
+ echo "Node:" `node --version`
+ echo "NPM:" `npm --version`
+ echo "Rust:" `rustc --version`
+ echo "Cargo:" `cargo --version`
+
- name: Build Tailwind CSS
run: npm run build
diff --git a/.github/workflows/release-insiders-stable.yml b/.github/workflows/release-insiders-stable.yml
deleted file mode 100644
index f8bb322d4..000000000
--- a/.github/workflows/release-insiders-stable.yml
+++ /dev/null
@@ -1,78 +0,0 @@
-name: Release Insiders — Stable
-
-on:
- push:
- branches: [master]
-
-permissions:
- contents: read
-
-env:
- CI: true
- TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
- TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
- CACHE_PREFIX: stable
- NODE_VERSION: 16
- RELEASE_CHANNEL: insiders
-
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
-
- - name: Use Node.js ${{ env.NODE_VERSION }}
- uses: actions/setup-node@v3
- with:
- node-version: ${{ env.NODE_VERSION }}
- registry-url: 'https://registry.npmjs.org'
-
- - name: Use the `stable` engine
- run: |
- node ./scripts/swap-engines.js
-
- - name: Cache node_modules
- uses: actions/cache@v3
- with:
- path: node_modules
- key: ${{ runner.os }}-${{ env.NODE_VERSION }}-${{ env.CACHE_PREFIX }}-node_modules-${{ hashFiles('**/package-lock.json') }}
-
- - name: Install dependencies
- run: npm install
-
- - name: Build Tailwind CSS
- run: npm run build
-
- - name: Test
- run: |
- npm run test || \
- npm run test || \
- npm run test || exit 1
-
- - name: Resolve version
- id: vars
- run: |
- echo "SHA_SHORT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
-
- - name: 'Version based on commit: 0.0.0-${{ env.RELEASE_CHANNEL }}.${{ env.SHA_SHORT }}'
- run: npm version 0.0.0-${{ env.RELEASE_CHANNEL }}.${{ env.SHA_SHORT }} --force --no-git-tag-version
-
- - name: Publish
- run: npm publish --tag ${{ env.RELEASE_CHANNEL }}
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
-
- - name: Trigger Tailwind Play update
- uses: actions/github-script@v6
- with:
- github-token: ${{ secrets.TAILWIND_PLAY_TOKEN }}
- script: |
- await github.rest.actions.createWorkflowDispatch({
- owner: 'tailwindlabs',
- repo: 'play.tailwindcss.com',
- ref: 'master',
- workflow_id: 'upgrade-tailwindcss.yml',
- inputs: {
- insidersVersion: '0.0.0-${{ env.RELEASE_CHANNEL }}.${{ env.SHA_SHORT }}'
- }
- })
diff --git a/.github/workflows/release-insiders-oxide.yml b/.github/workflows/release-insiders.yml
similarity index 92%
rename from .github/workflows/release-insiders-oxide.yml
rename to .github/workflows/release-insiders.yml
index 4130349ba..75349cfe7 100644
--- a/.github/workflows/release-insiders-oxide.yml
+++ b/.github/workflows/release-insiders.yml
@@ -1,4 +1,4 @@
-name: Release Insiders — Oxide
+name: Release Insiders
on:
push:
@@ -8,7 +8,7 @@ env:
APP_NAME: tailwindcss-oxide
NODE_VERSION: 16
OXIDE_LOCATION: ./oxide/crates/node
- RELEASE_CHANNEL: oxide-insiders
+ RELEASE_CHANNEL: insiders
jobs:
build:
@@ -26,6 +26,7 @@ jobs:
name: Build ${{ matrix.target }} (OXIDE)
runs-on: ${{ matrix.os }}
+ timeout-minutes: 15
steps:
- uses: actions/checkout@v3
@@ -63,13 +64,6 @@ jobs:
with:
node-version: ${{ env.NODE_VERSION }}
- - name: Install Rust
- uses: actions-rs/toolchain@v1
- with:
- toolchain: stable
- profile: minimal
- override: true
-
- name: Setup rust target
run: rustup target add ${{ matrix.target }}
@@ -96,6 +90,7 @@ jobs:
build-apple-silicon:
name: Build Apple Silicon (OXIDE)
runs-on: macos-latest
+ timeout-minutes: 15
steps:
- uses: actions/checkout@v3
@@ -133,13 +128,6 @@ jobs:
with:
node-version: ${{ env.NODE_VERSION }}
- - name: Install Rust
- uses: actions-rs/toolchain@v1
- with:
- toolchain: stable
- profile: minimal
- override: true
-
- name: Setup rust target
run: rustup target add aarch64-apple-darwin
@@ -170,24 +158,28 @@ jobs:
include:
- target: x86_64-unknown-linux-gnu
strip: strip
- image: docker.io/centos/nodejs-14-centos7
+ image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
+ download: false
- target: aarch64-unknown-linux-gnu
- strip: aarch64-linux-gnu-strip
- image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
- setup: apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu -y
+ strip: llvm-strip
+ image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64
+ download: false
- target: armv7-unknown-linux-gnueabihf
- strip: arm-linux-gnueabihf-strip
- image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
- setup: apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y
+ strip: llvm-strip
+ image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-zig
+ download: false
- target: aarch64-unknown-linux-musl
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
strip: aarch64-linux-musl-strip
+ download: true
- target: x86_64-unknown-linux-musl
image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
strip: strip
+ download: true
name: Build ${{ matrix.target }} (OXIDE)
runs-on: ubuntu-latest
+ timeout-minutes: 15
container:
image: ${{ matrix.image }}
@@ -228,16 +220,10 @@ jobs:
with:
node-version: ${{ env.NODE_VERSION }}
- - name: Install Rust
- uses: actions-rs/toolchain@v1
- with:
- toolchain: stable
- profile: minimal
- override: true
-
- - name: Setup cross compile toolchain
- if: ${{ matrix.setup }}
- run: ${{ matrix.setup }}
+ - name: Install Rust (Stable)
+ if: ${{ matrix.download }}
+ run: |
+ rustup default stable
- name: Setup rust target
run: rustup target add ${{ matrix.target }}
@@ -264,6 +250,7 @@ jobs:
release:
runs-on: ubuntu-latest
+ timeout-minutes: 15
name: Build and release
needs:
- build
@@ -353,8 +340,9 @@ jobs:
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- tailwind_oxide_release:
+ tailwind-release:
runs-on: ubuntu-latest
+ timeout-minutes: 15
name: Build and release Tailwind CSS
needs:
diff --git a/.github/workflows/release-oxide.yml b/.github/workflows/release-oxide.yml
deleted file mode 100644
index ad71ec657..000000000
--- a/.github/workflows/release-oxide.yml
+++ /dev/null
@@ -1,332 +0,0 @@
-name: Release — Oxide
-
-on:
- workflow_dispatch:
-
-env:
- APP_NAME: tailwindcss-oxide
- NODE_VERSION: 14
- OXIDE_LOCATION: ./oxide/crates/node
-
-jobs:
- oxide-build:
- strategy:
- fail-fast: false
- matrix:
- include:
- # Windows
- - os: windows-latest
- target: x86_64-pc-windows-msvc
- # Mac OS
- - os: macos-latest
- target: x86_64-apple-darwin
- strip: strip -x # Must use -x on macOS. This produces larger results on linux.
-
- name: Build ${{ matrix.target }} (OXIDE)
- runs-on: ${{ matrix.os }}
- steps:
- - uses: actions/checkout@v3
-
- - name: Install Node.JS
- uses: actions/setup-node@v3
- with:
- node-version: ${{ env.NODE_VERSION }}
-
- - name: Install Rust
- uses: actions-rs/toolchain@v1
- with:
- toolchain: stable
- profile: minimal
- override: true
-
- - name: Setup rust target
- run: rustup target add ${{ matrix.target }}
-
- # - name: Use cached oxide node_modules
- # id: cache-oxide
- # uses: actions/cache@v3
- # with:
- # path: ${{ env.OXIDE_LOCATION }}/node_modules
- # key: nodeModules-${{ hashFiles('${{ env.OXIDE_LOCATION }}/package-lock.json') }}-${{ matrix.os }}-${{ matrix.target }}-${{ env.NODE_VERSION }}
- # restore-keys: |
- # nodeModules-
-
- - name: Oxide — npm install
- # if: steps.cache-oxide.outputs.cache-hit != 'true'
- run: cd ${{ env.OXIDE_LOCATION }} && npm install
-
- - name: Build release
- run: cd ${{ env.OXIDE_LOCATION }} && npm run build
- env:
- RUST_TARGET: ${{ matrix.target }}
-
- - name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034
- if: ${{ matrix.strip }}
- run: ${{ matrix.strip }} ${{ env.OXIDE_LOCATION }}/*.node
-
- - name: Upload artifacts
- uses: actions/upload-artifact@v3
- with:
- name: bindings-${{ matrix.target }}
- path: |
- ${{ env.OXIDE_LOCATION }}/*.node
- ${{ matrix.binary }}
-
- oxide-build-apple-silicon:
- name: Build Apple Silicon (OXIDE)
- runs-on: macos-latest
- steps:
- - uses: actions/checkout@v3
-
- - name: Cache node_modules
- uses: actions/cache@v3
- with:
- path: node_modules
- key: ${{ runner.os }}-${{ matrix.node-version }}-node_modules-${{ hashFiles('**/package-lock.json') }}
-
- # Cargo already skips downloading dependencies if they already exist
- - name: Cache cargo
- uses: actions/cache@v3
- with:
- path: |
- ~/.cargo/bin/
- ~/.cargo/registry/index/
- ~/.cargo/registry/cache/
- ~/.cargo/git/db/
- target/
- key: ${{ runner.os }}-cargo-${{ hashFiles('./oxide/**/Cargo.lock') }}
-
- - name: Install Node.JS
- uses: actions/setup-node@v3
- with:
- node-version: ${{ env.NODE_VERSION }}
-
- - name: Install Rust
- uses: actions-rs/toolchain@v1
- with:
- toolchain: stable
- profile: minimal
- override: true
-
- - name: Setup rust target
- run: rustup target add aarch64-apple-darwin
-
- - name: Install dependencies
- run: npm install
-
- - name: Build release
- run: cd ${{ env.OXIDE_LOCATION }} && npm run build
- env:
- RUST_TARGET: aarch64-apple-darwin
- JEMALLOC_SYS_WITH_LG_PAGE: 14
-
- - name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034
- run: strip -x ${{ env.OXIDE_LOCATION }}/*.node
-
- - name: Upload artifacts
- uses: actions/upload-artifact@v3
- with:
- name: bindings-aarch64-apple-darwin
- path: |
- ${{ env.OXIDE_LOCATION }}/*.node
- ${{ env.APP_NAME }}
-
- oxide-build-linux:
- strategy:
- fail-fast: false
- matrix:
- include:
- - target: x86_64-unknown-linux-gnu
- strip: strip
- image: docker.io/centos/nodejs-14-centos7
- - target: aarch64-unknown-linux-gnu
- strip: aarch64-linux-gnu-strip
- image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
- setup: apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu -y
- - target: armv7-unknown-linux-gnueabihf
- strip: arm-linux-gnueabihf-strip
- image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
- setup: apt install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y
- - target: aarch64-unknown-linux-musl
- image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
- strip: aarch64-linux-musl-strip
- - target: x86_64-unknown-linux-musl
- image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
- strip: strip
-
- name: Build ${{ matrix.target }} (OXIDE)
- runs-on: ubuntu-latest
- container:
- image: ${{ matrix.image }}
-
- steps:
- - uses: actions/checkout@v3
-
- - name: Install Node.JS
- uses: actions/setup-node@v3
- with:
- node-version: ${{ env.NODE_VERSION }}
-
- - name: Install Rust
- uses: actions-rs/toolchain@v1
- with:
- toolchain: stable
- profile: minimal
- override: true
-
- - name: Setup cross compile toolchain
- if: ${{ matrix.setup }}
- run: ${{ matrix.setup }}
-
- - name: Setup rust target
- run: rustup target add ${{ matrix.target }}
-
- # - name: Use cached oxide node_modules
- # id: cache-oxide
- # uses: actions/cache@v3
- # with:
- # path: ${{ env.OXIDE_LOCATION }}/node_modules
- # key: nodeModules-${{ hashFiles('${{ env.OXIDE_LOCATION }}/package-lock.json') }}-linux-${{ matrix.target }}-${{ env.NODE_VERSION }}
- # restore-keys: |
- # nodeModules-
-
- - name: Oxide — npm install
- # if: steps.cache-oxide.outputs.cache-hit != 'true'
- run: cd ${{ env.OXIDE_LOCATION }} && npm install
-
- - name: Build release
- run: cd ${{ env.OXIDE_LOCATION }} && npm run build
- env:
- RUST_TARGET: ${{ matrix.target }}
-
- - name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034
- if: ${{ matrix.strip }}
- run: ${{ matrix.strip }} ${{ env.OXIDE_LOCATION }}/*.node
-
- - name: Upload artifacts
- uses: actions/upload-artifact@v3
- with:
- name: bindings-${{ matrix.target }}
- path: |
- ${{ env.OXIDE_LOCATION }}/*.node
- ${{ env.APP_NAME }}
-
- oxide-release:
- runs-on: ubuntu-latest
- name: Build and release
- needs:
- - oxide-build
- - oxide-build-linux
- - oxide-build-apple-silicon
- steps:
- - uses: actions/checkout@v3
-
- # - name: Use cached oxide node_modules
- # id: cache-oxide
- # uses: actions/cache@v3
- # with:
- # path: ${{ env.OXIDE_LOCATION }}/node_modules
- # key: nodeModules-${{ hashFiles('${{ env.OXIDE_LOCATION }}/package-lock.json') }}-ubuntu-latest-${{ env.NODE_VERSION }}
- # restore-keys: |
- # nodeModules-
-
- - name: Oxide — npm install
- # if: steps.cache-oxide.outputs.cache-hit != 'true'
- run: cd ${{ env.OXIDE_LOCATION }} && npm install
-
- - name: Download artifacts
- uses: actions/download-artifact@v3
- with:
- path: ${{ env.OXIDE_LOCATION }}
-
- - run: echo //registry.npmjs.org/:_authToken=${NPM_TOKEN} > ~/.npmrc
- env:
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
-
- - name: Move artifacts
- run: |
- cd ${{ env.OXIDE_LOCATION }}
- cp bindings-aarch64-apple-darwin/oxide/crates/node/* ./npm/darwin-arm64/
- cp bindings-aarch64-unknown-linux-gnu/oxide/crates/node/* ./npm/linux-arm64-gnu/
- cp bindings-aarch64-unknown-linux-musl/oxide/crates/node/* ./npm/linux-arm64-musl/
- cp bindings-armv7-unknown-linux-gnueabihf/oxide/crates/node/* ./npm/linux-arm-gnueabihf/
- cp bindings-x86_64-apple-darwin/* ./npm/darwin-x64/
- cp bindings-x86_64-pc-windows-msvc/* ./npm/win32-x64-msvc/
- cp bindings-x86_64-unknown-linux-gnu/oxide/crates/node/* ./npm/linux-x64-gnu/
- cp bindings-x86_64-unknown-linux-musl/oxide/crates/node/* ./npm/linux-x64-musl/
-
- - name: Resolve version
- id: vars
- run: |
- echo "NPM_VERSION=0.0.0-insiders.$(git rev-parse --short HEAD)" >> $GITHUB_ENV
-
- - name: Generate entry point
- run: npm run build --prefix ${{ env.OXIDE_LOCATION }}
-
- - name: Publish to npm
- run: |
- for pkg in ${{ env.OXIDE_LOCATION }}/npm/*; do
- echo "Publishing $pkg..."
- cd $pkg
- npm version ${{ env.NPM_VERSION }} --force --no-git-tag-version
- npm publish --tag insiders --access public
- cd -
- done
-
- echo "Publishing ${{ env.APP_NAME }}...";
- cd ${{ env.OXIDE_LOCATION }}
- npm version ${{ env.NPM_VERSION }} --force --no-git-tag-version
- sed "s#\"0.0.0\"#\"${{ env.NPM_VERSION }}\"#g" package.json > package_updated.json
- mv package_updated.json package.json
- npm publish --tag insiders --access public
- cd -
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
-
- tailwind_oxide_release:
- runs-on: ubuntu-latest
- name: Build and release Tailwind CSS
-
- needs:
- - oxide-release
-
- strategy:
- matrix:
- node-version: [14]
-
- steps:
- - uses: actions/checkout@v3
-
- - name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
- with:
- node-version: ${{ matrix.node-version }}
- registry-url: 'https://registry.npmjs.org'
-
- - name: Resolve version
- id: vars
- run: |
- echo "SHA_SHORT=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- echo "OXIDE_NPM_VERSION=0.0.0-insiders.$(git rev-parse --short HEAD)" >> $GITHUB_ENV
-
- - name: Setup `@tailwindcss/oxide` version
- run: |
- sed "s#\"@tailwindcss/oxide\": \".*\"#\"@tailwindcss/oxide\": \"${{ env.OXIDE_NPM_VERSION }}\"#" package.json > package_updated.json
- mv package_updated.json package.json
-
- - name: Install dependencies
- run: npm install
-
- - name: Build Tailwind CSS
- run: npm run build
-
- - name: Test
- run: npm test
-
- - name: 'Version based on commit: 0.0.0-oxide.${{ env.SHA_SHORT }}'
- run: npm version 0.0.0-oxide.${{ env.SHA_SHORT }} --force --no-git-tag-version
-
- - name: Publish
- run: npm publish --tag oxide
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/.github/workflows/release-stable.yml b/.github/workflows/release-stable.yml
deleted file mode 100644
index 23a3f2dc0..000000000
--- a/.github/workflows/release-stable.yml
+++ /dev/null
@@ -1,68 +0,0 @@
-name: Release — Stable
-
-on:
- release:
- types: [published]
-
-permissions:
- contents: read
-
-env:
- CI: true
-
-jobs:
- build:
- runs-on: ubuntu-latest
-
- strategy:
- matrix:
- node-version: [14]
-
- steps:
- - uses: actions/checkout@v3
-
- - name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
- with:
- node-version: ${{ matrix.node-version }}
- registry-url: 'https://registry.npmjs.org'
- cache: 'npm'
-
- - name: Use the `stable` engine
- run: |
- node ./scripts/swap-engines.js
-
- - name: Install dependencies
- run: npm install
-
- - name: Build Tailwind CSS
- run: npm run build
-
- - name: Test
- run: npm run test
-
- - name: Calculate environment variables
- run: |
- echo "RELEASE_CHANNEL=$(node ./scripts/release-channel.js)" >> $GITHUB_ENV
- echo "TAILWINDCSS_VERSION=$(node -e 'console.log(require(`./package.json`).version);')" >> $GITHUB_ENV
-
- - name: Publish
- run: npm publish --tag ${{ env.RELEASE_CHANNEL }}
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
-
- - name: Trigger Tailwind Play update
- if: env.RELEASE_CHANNEL == 'latest'
- uses: actions/github-script@v6
- with:
- github-token: ${{ secrets.TAILWIND_PLAY_TOKEN }}
- script: |
- await github.rest.actions.createWorkflowDispatch({
- owner: 'tailwindlabs',
- repo: 'play.tailwindcss.com',
- ref: 'master',
- workflow_id: 'upgrade-tailwindcss.yml',
- inputs: {
- version: '${{ env.TAILWINDCSS_VERSION }}'
- }
- })
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 000000000..80cddbc3c
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,429 @@
+name: Release
+
+on:
+ release:
+ types: [published]
+
+permissions:
+ contents: read
+
+env:
+ APP_NAME: tailwindcss-oxide
+ NODE_VERSION: 16
+ OXIDE_LOCATION: ./oxide/crates/node
+
+jobs:
+ build:
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ # Windows
+ - os: windows-latest
+ target: x86_64-pc-windows-msvc
+ # Mac OS
+ - os: macos-latest
+ target: x86_64-apple-darwin
+ strip: strip -x # Must use -x on macOS. This produces larger results on linux.
+
+ name: Build ${{ matrix.target }} (OXIDE)
+ runs-on: ${{ matrix.os }}
+ timeout-minutes: 15
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Cache node_modules
+ uses: actions/cache@v3
+ with:
+ path: node_modules
+ key: ${{ runner.os }}-${{ matrix.target }}-${{ env.NODE_VERSION }}-node_modules-${{ hashFiles('**/package-lock.json') }}
+
+ # Cargo already skips downloading dependencies if they already exist
+ - name: Cache cargo
+ uses: actions/cache@v3
+ with:
+ path: |
+ ~/.cargo/bin/
+ ~/.cargo/registry/index/
+ ~/.cargo/registry/cache/
+ ~/.cargo/git/db/
+ target/
+ key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+
+ # Cache the `oxide` Rust build
+ - name: Cache oxide build
+ uses: actions/cache@v3
+ with:
+ path: |
+ ./oxide/target/
+ ./oxide/crates/node/*.node
+ ./oxide/crates/node/index.js
+ ./oxide/crates/node/index.d.ts
+ key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./oxide/crates/**/*') }}
+
+ - name: Install Node.JS
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ env.NODE_VERSION }}
+
+ - name: Setup rust target
+ run: rustup target add ${{ matrix.target }}
+
+ - name: Install dependencies
+ run: npm install
+
+ - name: Build release
+ run: cd ${{ env.OXIDE_LOCATION }} && npm run build
+ env:
+ RUST_TARGET: ${{ matrix.target }}
+
+ - name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034
+ if: ${{ matrix.strip }}
+ run: ${{ matrix.strip }} ${{ env.OXIDE_LOCATION }}/*.node
+
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: bindings-${{ matrix.target }}
+ path: |
+ ${{ env.OXIDE_LOCATION }}/*.node
+ ${{ matrix.binary }}
+
+ build-apple-silicon:
+ name: Build Apple Silicon (OXIDE)
+ runs-on: macos-latest
+ timeout-minutes: 15
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Cache node_modules
+ uses: actions/cache@v3
+ with:
+ path: node_modules
+ key: ${{ runner.os }}-${{ env.NODE_VERSION }}-node_modules-${{ hashFiles('**/package-lock.json') }}
+
+ # Cargo already skips downloading dependencies if they already exist
+ - name: Cache cargo
+ uses: actions/cache@v3
+ with:
+ path: |
+ ~/.cargo/bin/
+ ~/.cargo/registry/index/
+ ~/.cargo/registry/cache/
+ ~/.cargo/git/db/
+ target/
+ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+
+ # Cache the `oxide` Rust build
+ - name: Cache oxide build
+ uses: actions/cache@v3
+ with:
+ path: |
+ ./oxide/target/
+ ./oxide/crates/node/*.node
+ ./oxide/crates/node/index.js
+ ./oxide/crates/node/index.d.ts
+ key: ${{ runner.os }}-oxide-${{ hashFiles('./oxide/crates/**/*') }}
+
+ - name: Install Node.JS
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ env.NODE_VERSION }}
+
+ - name: Setup rust target
+ run: rustup target add aarch64-apple-darwin
+
+ - name: Install dependencies
+ run: npm install
+
+ - name: Build release
+ run: cd ${{ env.OXIDE_LOCATION }} && npm run build
+ env:
+ RUST_TARGET: aarch64-apple-darwin
+ JEMALLOC_SYS_WITH_LG_PAGE: 14
+
+ - name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034
+ run: strip -x ${{ env.OXIDE_LOCATION }}/*.node
+
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: bindings-aarch64-apple-darwin
+ path: |
+ ${{ env.OXIDE_LOCATION }}/*.node
+ ${{ env.APP_NAME }}
+
+ build-linux:
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - target: x86_64-unknown-linux-gnu
+ strip: strip
+ image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian
+ - target: aarch64-unknown-linux-gnu
+ strip: llvm-strip
+ image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64
+ - target: armv7-unknown-linux-gnueabihf
+ strip: llvm-strip
+ image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-zig
+ - target: aarch64-unknown-linux-musl
+ image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
+ strip: aarch64-linux-musl-strip
+ - target: x86_64-unknown-linux-musl
+ image: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
+ strip: strip
+
+ name: Build ${{ matrix.target }} (OXIDE)
+ runs-on: ubuntu-latest
+ timeout-minutes: 15
+ container:
+ image: ${{ matrix.image }}
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Cache node_modules
+ uses: actions/cache@v3
+ with:
+ path: node_modules
+ key: ${{ runner.os }}-${{ matrix.target }}-${{ env.NODE_VERSION }}-node_modules-${{ hashFiles('**/package-lock.json') }}
+
+ # Cargo already skips downloading dependencies if they already exist
+ - name: Cache cargo
+ uses: actions/cache@v3
+ with:
+ path: |
+ ~/.cargo/bin/
+ ~/.cargo/registry/index/
+ ~/.cargo/registry/cache/
+ ~/.cargo/git/db/
+ target/
+ key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+
+ # Cache the `oxide` Rust build
+ - name: Cache oxide build
+ uses: actions/cache@v3
+ with:
+ path: |
+ ./oxide/target/
+ ./oxide/crates/node/*.node
+ ./oxide/crates/node/index.js
+ ./oxide/crates/node/index.d.ts
+ key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./oxide/crates/**/*') }}
+
+ - name: Install Node.JS
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ env.NODE_VERSION }}
+
+ - name: Setup cross compile toolchain
+ if: ${{ matrix.setup }}
+ run: ${{ matrix.setup }}
+
+ - name: Setup rust target
+ run: rustup target add ${{ matrix.target }}
+
+ - name: Install dependencies
+ run: npm install
+
+ - name: Build release
+ run: cd ${{ env.OXIDE_LOCATION }} && npm run build
+ env:
+ RUST_TARGET: ${{ matrix.target }}
+
+ - name: Strip debug symbols # https://github.com/rust-lang/rust/issues/46034
+ if: ${{ matrix.strip }}
+ run: ${{ matrix.strip }} ${{ env.OXIDE_LOCATION }}/*.node
+
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: bindings-${{ matrix.target }}
+ path: |
+ ${{ env.OXIDE_LOCATION }}/*.node
+ ${{ env.APP_NAME }}
+
+ release:
+ runs-on: ubuntu-latest
+ timeout-minutes: 15
+ name: Build and release
+ needs:
+ - build
+ - build-linux
+ - build-apple-silicon
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Cache node_modules
+ uses: actions/cache@v3
+ with:
+ path: node_modules
+ key: ${{ runner.os }}-${{ env.NODE_VERSION }}-node_modules-${{ hashFiles('**/package-lock.json') }}
+
+ # Cargo already skips downloading dependencies if they already exist
+ - name: Cache cargo
+ uses: actions/cache@v3
+ with:
+ path: |
+ ~/.cargo/bin/
+ ~/.cargo/registry/index/
+ ~/.cargo/registry/cache/
+ ~/.cargo/git/db/
+ target/
+ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+
+ # Cache the `oxide` Rust build
+ - name: Cache oxide build
+ uses: actions/cache@v3
+ with:
+ path: |
+ ./oxide/target/
+ ./oxide/crates/node/*.node
+ ./oxide/crates/node/index.js
+ ./oxide/crates/node/index.d.ts
+ key: ${{ runner.os }}-oxide-${{ hashFiles('./oxide/crates/**/*') }}
+
+ - name: Install dependencies
+ run: npm install
+
+ - name: Calculate environment variables
+ run: |
+ echo "RELEASE_CHANNEL=$(node ./scripts/release-channel.js)" >> $GITHUB_ENV
+ echo "VERSION=$(node -e 'console.log(require(`./package.json`).version);')" >> $GITHUB_ENV
+
+ - name: Download artifacts
+ uses: actions/download-artifact@v3
+ with:
+ path: ${{ env.OXIDE_LOCATION }}
+
+ - run: echo //registry.npmjs.org/:_authToken=${NPM_TOKEN} > ~/.npmrc
+ env:
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+
+ - name: Move artifacts
+ run: |
+ cd ${{ env.OXIDE_LOCATION }}
+ cp bindings-aarch64-apple-darwin/oxide/crates/node/* ./npm/darwin-arm64/
+ cp bindings-aarch64-unknown-linux-gnu/oxide/crates/node/* ./npm/linux-arm64-gnu/
+ cp bindings-aarch64-unknown-linux-musl/oxide/crates/node/* ./npm/linux-arm64-musl/
+ cp bindings-armv7-unknown-linux-gnueabihf/oxide/crates/node/* ./npm/linux-arm-gnueabihf/
+ cp bindings-x86_64-apple-darwin/* ./npm/darwin-x64/
+ cp bindings-x86_64-pc-windows-msvc/* ./npm/win32-x64-msvc/
+ cp bindings-x86_64-unknown-linux-gnu/oxide/crates/node/* ./npm/linux-x64-gnu/
+ cp bindings-x86_64-unknown-linux-musl/oxide/crates/node/* ./npm/linux-x64-musl/
+
+ - name: Generate entry point
+ run: npm run build --prefix ${{ env.OXIDE_LOCATION }}
+
+ - name: Publish to npm
+ run: |
+ for pkg in ${{ env.OXIDE_LOCATION }}/npm/*; do
+ echo "Publishing $pkg..."
+ cd $pkg
+ npm version ${{ env.VERSION }} --force --no-git-tag-version
+ npm publish --tag ${{ env.RELEASE_CHANNEL }} --access public
+ cd -
+ done
+
+ echo "Publishing ${{ env.APP_NAME }}...";
+ cd ${{ env.OXIDE_LOCATION }}
+ npm version ${{ env.VERSION }} --force --no-git-tag-version
+ sed "s#\"0.0.0\"#\"${{ env.VERSION }}\"#g" package.json > package_updated.json
+ mv package_updated.json package.json
+ npm publish --tag ${{ env.RELEASE_CHANNEL }} --access public
+ cd -
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
+
+ tailwind-release:
+ runs-on: ubuntu-latest
+ timeout-minutes: 15
+ name: Build and release Tailwind CSS
+
+ needs:
+ - release
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Cache node_modules
+ uses: actions/cache@v3
+ with:
+ path: node_modules
+ key: ${{ runner.os }}-${{ matrix.target }}-${{ env.NODE_VERSION }}-node_modules-${{ hashFiles('**/package-lock.json') }}
+
+ # Cargo already skips downloading dependencies if they already exist
+ - name: Cache cargo
+ uses: actions/cache@v3
+ with:
+ path: |
+ ~/.cargo/bin/
+ ~/.cargo/registry/index/
+ ~/.cargo/registry/cache/
+ ~/.cargo/git/db/
+ target/
+ key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+
+ # Cache the `oxide` Rust build
+ - name: Cache oxide build
+ uses: actions/cache@v3
+ with:
+ path: |
+ ./oxide/target/
+ ./oxide/crates/node/*.node
+ ./oxide/crates/node/index.js
+ ./oxide/crates/node/index.d.ts
+ key: ${{ runner.os }}-${{ matrix.target }}-oxide-${{ hashFiles('./oxide/crates/**/*') }}
+
+ - name: Use Node.js ${{ env.NODE_VERSION }}
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ env.NODE_VERSION }}
+ registry-url: 'https://registry.npmjs.org'
+
+ - name: Calculate environment variables
+ run: |
+ echo "RELEASE_CHANNEL=$(node ./scripts/release-channel.js)" >> $GITHUB_ENV
+ echo "VERSION=$(node -e 'console.log(require(`./package.json`).version);')" >> $GITHUB_ENV
+
+ - name: Setup `@tailwindcss/oxide` version
+ run: |
+ sed "s#\"@tailwindcss/oxide\": \".*\"#\"@tailwindcss/oxide\": \"${{ env.VERSION }}\"#" package.json > package_updated.json
+ mv package_updated.json package.json
+
+ - name: Install dependencies
+ run: npm install
+
+ - name: Build Tailwind CSS
+ run: npm run build
+
+ - name: Test
+ run: |
+ npm test || \
+ npm test || \
+ npm test || exit 1
+
+ - name: 'Version: ${{ env.VERSION }}'
+ run: npm version ${{ env.VERSION }} --force --no-git-tag-version
+
+ - name: Publish
+ run: npm publish --tag ${{ env.RELEASE_CHANNEL }}
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
+
+ # - name: Trigger Tailwind Play update
+ # if: env.RELEASE_CHANNEL == 'latest'
+ # uses: actions/github-script@v6
+ # with:
+ # github-token: ${{ secrets.TAILWIND_PLAY_TOKEN }}
+ # script: |
+ # await github.rest.actions.createWorkflowDispatch({
+ # owner: 'tailwindlabs',
+ # repo: 'play.tailwindcss.com',
+ # ref: 'master',
+ # workflow_id: 'upgrade-tailwindcss.yml',
+ # inputs: {
+ # version: '${{ env.TAILWINDCSS_VERSION }}'
+ # }
+ # })
diff --git a/.gitignore b/.gitignore
index ac4d2e969..b4d8c1d6e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
/node_modules
+.github/**/node_modules
/coverage
/cli
/lib
diff --git a/.swcrc b/.swcrc
index 3e2821cdc..0dd828104 100644
--- a/.swcrc
+++ b/.swcrc
@@ -2,12 +2,8 @@
"module": {
"type": "commonjs"
},
- "env": {
- "targets": {
- "node": "12.13.0"
- }
- },
"jsc": {
+ "target": "es2018",
"parser": {
"syntax": "typescript",
"tsx": false
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fd899dc53..2c8c9838d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,7 +7,104 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
-- Nothing yet!
+### Fixed
+
+- Improve types for `resolveConfig` ([#12272](https://github.com/tailwindlabs/tailwindcss/pull/12272))
+- Don’t add spaces to negative numbers following a comma ([#12324](https://github.com/tailwindlabs/tailwindcss/pull/12324))
+- Don't emit `@config` in CSS when watching via the CLI ([#12327](https://github.com/tailwindlabs/tailwindcss/pull/12327))
+- Ensure configured `font-feature-settings` for `mono` are included in Preflight ([#12342](https://github.com/tailwindlabs/tailwindcss/pull/12342))
+- Improve candidate detection in minified JS arrays (without spaces) ([#12396](https://github.com/tailwindlabs/tailwindcss/pull/12396))
+- Don't crash when given applying a variant to a negated version of a simple utility ([#12514](https://github.com/tailwindlabs/tailwindcss/pull/12514))
+- Fix support for slashes in arbitrary modifiers ([#12515](https://github.com/tailwindlabs/tailwindcss/pull/12515))
+- Fix source maps of variant utilities that come from an `@layer` rule ([#12508](https://github.com/tailwindlabs/tailwindcss/pull/12508))
+- Fix loading of built-in plugins when using an ESM or TypeScript config with the Standalone CLI ([#12506](https://github.com/tailwindlabs/tailwindcss/pull/12506))
+- [Oxide] Remove `autoprefixer` dependency ([#11315](https://github.com/tailwindlabs/tailwindcss/pull/11315))
+- [Oxide] Fix source maps issue resulting in a crash ([#11319](https://github.com/tailwindlabs/tailwindcss/pull/11319))
+- [Oxide] Fallback to RegEx based parser when using custom transformers or extractors ([#11335](https://github.com/tailwindlabs/tailwindcss/pull/11335))
+- [Oxide] Bump `lightningcss` and reflect related improvements in tests ([#11550](https://github.com/tailwindlabs/tailwindcss/pull/11550))
+
+### Added
+
+- Add `svh`, `lvh`, and `dvh` values to default `height`/`min-height`/`max-height` theme ([#11317](https://github.com/tailwindlabs/tailwindcss/pull/11317))
+- Add `has-*` variants for `:has(...)` pseudo-class ([#11318](https://github.com/tailwindlabs/tailwindcss/pull/11318))
+- Add `text-wrap` utilities including `text-balance` and `text-pretty` ([#11320](https://github.com/tailwindlabs/tailwindcss/pull/11320), [#12031](https://github.com/tailwindlabs/tailwindcss/pull/12031))
+- Extend default `opacity` scale to include all steps of 5 ([#11832](https://github.com/tailwindlabs/tailwindcss/pull/11832))
+- Update Preflight `html` styles to include shadow DOM `:host` pseudo-class ([#11200](https://github.com/tailwindlabs/tailwindcss/pull/11200))
+- Increase default values for `grid-rows-*` utilities from 1–6 to 1–12 ([#12180](https://github.com/tailwindlabs/tailwindcss/pull/12180))
+- Add `size-*` utilities ([#12287](https://github.com/tailwindlabs/tailwindcss/pull/12287))
+- Add utilities for CSS subgrid ([#12298](https://github.com/tailwindlabs/tailwindcss/pull/12298))
+- Add spacing scale to `min-w-*`, `min-h-*`, and `max-w-*` utilities ([#12300](https://github.com/tailwindlabs/tailwindcss/pull/12300))
+- Add `forced-color-adjust` utilities ([#11931](https://github.com/tailwindlabs/tailwindcss/pull/11931))
+- Add `forced-colors` variant ([#11694](https://github.com/tailwindlabs/tailwindcss/pull/11694))
+- Add `appearance-auto` utility ([#12404](https://github.com/tailwindlabs/tailwindcss/pull/12404))
+- Add logical property values for `float` and `clear` utilities ([#12480](https://github.com/tailwindlabs/tailwindcss/pull/12480))
+- [Oxide] New Rust template parsing engine ([#10252](https://github.com/tailwindlabs/tailwindcss/pull/10252))
+- [Oxide] Support `@import "tailwindcss"` using top-level `index.css` file ([#11205](https://github.com/tailwindlabs/tailwindcss/pull/11205), ([#11260](https://github.com/tailwindlabs/tailwindcss/pull/11260)))
+- [Oxide] Use `lightningcss` for nesting and vendor prefixes in PostCSS plugin ([#10399](https://github.com/tailwindlabs/tailwindcss/pull/10399))
+- [Oxide] Automatically detect content paths when no `content` configuration is provided ([#11173](https://github.com/tailwindlabs/tailwindcss/pull/11173), [#11221](https://github.com/tailwindlabs/tailwindcss/pull/11221))
+- [Oxide] Process and inline `@import` at-rules natively ([#11239](https://github.com/tailwindlabs/tailwindcss/pull/11239))
+- [Oxide] Explicitly configure Lightning CSS features, and prefer user browserslist over default browserslist ([#11402](https://github.com/tailwindlabs/tailwindcss/pull/11402), [#11412](https://github.com/tailwindlabs/tailwindcss/pull/11412))
+- [Oxide] Support loading plugins by package / file name ([#12087](https://github.com/tailwindlabs/tailwindcss/pull/12087))
+
+### Changed
+
+- Simplify the `sans` font-family stack ([#11748](https://github.com/tailwindlabs/tailwindcss/pull/11748))
+- Disable the tap highlight overlay on iOS ([#12299](https://github.com/tailwindlabs/tailwindcss/pull/12299))
+- [Oxide] Deprecate `--no-autoprefixer` flag in the CLI ([#11280](https://github.com/tailwindlabs/tailwindcss/pull/11280))
+- [Oxide] Make the Rust based parser the default ([#11394](https://github.com/tailwindlabs/tailwindcss/pull/11394))
+
+## [3.3.5] - 2023-10-25
+
+### Fixed
+
+- Fix incorrect spaces around `-` in `calc()` expression ([#12283](https://github.com/tailwindlabs/tailwindcss/pull/12283))
+
+## [3.3.4] - 2023-10-24
+
+### Fixed
+
+- Improve normalisation of `calc()`-like functions ([#11686](https://github.com/tailwindlabs/tailwindcss/pull/11686))
+- Skip `calc()` normalisation in nested `theme()` calls ([#11705](https://github.com/tailwindlabs/tailwindcss/pull/11705))
+- Fix incorrectly generated CSS when using square brackets inside arbitrary properties ([#11709](https://github.com/tailwindlabs/tailwindcss/pull/11709))
+- Make `content` optional for presets in TypeScript types ([#11730](https://github.com/tailwindlabs/tailwindcss/pull/11730))
+- Handle variable colors that have variable fallback values ([#12049](https://github.com/tailwindlabs/tailwindcss/pull/12049))
+- Batch reading content files to prevent `too many open files` error ([#12079](https://github.com/tailwindlabs/tailwindcss/pull/12079))
+- Skip over classes inside `:not(…)` when nested in an at-rule ([#12105](https://github.com/tailwindlabs/tailwindcss/pull/12105))
+- Update types to work with `Node16` module resolution ([#12097](https://github.com/tailwindlabs/tailwindcss/pull/12097))
+- Don’t crash when important and parent selectors are equal in `@apply` ([#12112](https://github.com/tailwindlabs/tailwindcss/pull/12112))
+- Eliminate irrelevant rules when applying variants ([#12113](https://github.com/tailwindlabs/tailwindcss/pull/12113))
+- Improve RegEx parser, reduce possibilities as the key for arbitrary properties ([#12121](https://github.com/tailwindlabs/tailwindcss/pull/12121))
+- Fix sorting of utilities that share multiple candidates ([#12173](https://github.com/tailwindlabs/tailwindcss/pull/12173))
+- Ensure variants with arbitrary values and a modifier are correctly matched in the RegEx based parser ([#12179](https://github.com/tailwindlabs/tailwindcss/pull/12179))
+- Fix crash when watching renamed files on FreeBSD ([#12193](https://github.com/tailwindlabs/tailwindcss/pull/12193))
+- Allow plugins from a parent document to be used in an iframe ([#12208](https://github.com/tailwindlabs/tailwindcss/pull/12208))
+- Add types for `tailwindcss/nesting` ([#12269](https://github.com/tailwindlabs/tailwindcss/pull/12269))
+- Bump `jiti`, `fast-glob`, and `browserlist` dependencies ([#11550](https://github.com/tailwindlabs/tailwindcss/pull/11550))
+- Improve automatic `var` injection for properties that accept a `` ([#12236](https://github.com/tailwindlabs/tailwindcss/pull/12236))
+
+## [3.3.3] - 2023-07-13
+
+### Fixed
+
+- Fix issue where some pseudo-element variants generated the wrong selector ([#10943](https://github.com/tailwindlabs/tailwindcss/pull/10943), [#10962](https://github.com/tailwindlabs/tailwindcss/pull/10962), [#11111](https://github.com/tailwindlabs/tailwindcss/pull/11111))
+- Make font settings propagate into buttons, inputs, etc. ([#10940](https://github.com/tailwindlabs/tailwindcss/pull/10940))
+- Fix parsing of `theme()` inside `calc()` when there are no spaces around operators ([#11157](https://github.com/tailwindlabs/tailwindcss/pull/11157))
+- Ensure `repeating-conic-gradient` is detected as an image ([#11180](https://github.com/tailwindlabs/tailwindcss/pull/11180))
+- Move unknown pseudo-elements outside of `:is` by default ([#11345](https://github.com/tailwindlabs/tailwindcss/pull/11345))
+- Escape animation names when prefixes contain special characters ([#11470](https://github.com/tailwindlabs/tailwindcss/pull/11470))
+- Don't prefix arbitrary classes in `group` and `peer` variants ([#11454](https://github.com/tailwindlabs/tailwindcss/pull/11454))
+- Sort classes using position of first matching rule ([#11504](https://github.com/tailwindlabs/tailwindcss/pull/11504))
+- Allow variant to be an at-rule without a prelude ([#11589](https://github.com/tailwindlabs/tailwindcss/pull/11589))
+- Make PostCSS plugin async to improve performance ([#11548](https://github.com/tailwindlabs/tailwindcss/pull/11548))
+- Don’t error when a config file is missing ([f97759f](https://github.com/tailwindlabs/tailwindcss/commit/f97759f808d15ace66647b1405744fcf95a392e5))
+
+### Added
+
+- Add `aria-busy` utility ([#10966](https://github.com/tailwindlabs/tailwindcss/pull/10966))
+
+### Changed
+
+- Reset padding for `` elements in preflight ([#11069](https://github.com/tailwindlabs/tailwindcss/pull/11069))
## [3.3.2] - 2023-04-25
@@ -2236,7 +2333,10 @@ No release notes
- Everything!
-[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v3.3.2...HEAD
+[unreleased]: https://github.com/tailwindlabs/tailwindcss/compare/v3.3.5...HEAD
+[3.3.5]: https://github.com/tailwindlabs/tailwindcss/compare/v3.3.4...v3.3.5
+[3.3.4]: https://github.com/tailwindlabs/tailwindcss/compare/v3.3.3...v3.3.4
+[3.3.3]: https://github.com/tailwindlabs/tailwindcss/compare/v3.3.2...v3.3.3
[3.3.2]: https://github.com/tailwindlabs/tailwindcss/compare/v3.3.1...v3.3.2
[3.3.1]: https://github.com/tailwindlabs/tailwindcss/compare/v3.3.0...v3.3.1
[3.3.0]: https://github.com/tailwindlabs/tailwindcss/compare/v3.2.7...v3.3.0
diff --git a/README.md b/README.md
index 17663787f..625b83ad5 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,7 @@
-
+
diff --git a/index.css b/index.css
new file mode 100644
index 000000000..7f393742a
--- /dev/null
+++ b/index.css
@@ -0,0 +1,5 @@
+@tailwind base;
+
+@tailwind components;
+
+@tailwind utilities;
diff --git a/integrations/content-resolution/package.json b/integrations/content-resolution/package.json
index 5587595d7..dec24baea 100644
--- a/integrations/content-resolution/package.json
+++ b/integrations/content-resolution/package.json
@@ -18,7 +18,7 @@
}
},
"devDependencies": {
- "postcss": "^8.4.23",
+ "postcss": "^8.4.31",
"postcss-cli": "^10.1.0"
}
}
diff --git a/integrations/content-resolution/tests/content.test.js b/integrations/content-resolution/tests/content.test.js
index a4db09f1b..baf9a3543 100644
--- a/integrations/content-resolution/tests/content.test.js
+++ b/integrations/content-resolution/tests/content.test.js
@@ -60,7 +60,7 @@ it('looks in the CWD by default', async () => {
let result = await build({ cwd: path.resolve(__dirname, '..') })
- expect(result.css).toMatchCss(css`
+ expect(result.css).toMatchFormattedCss(css`
.content-\[real-static-positive\] {
--tw-content: real-static-positive;
content: var(--tw-content);
@@ -69,7 +69,7 @@ it('looks in the CWD by default', async () => {
result = await build({ cwd: path.resolve(__dirname, '../src') })
- expect(result.css).toMatchCss(``)
+ expect(result.css).toMatchFormattedCss(``)
})
it('looks in the CWD for non-config-relative paths', async () => {
@@ -88,7 +88,7 @@ it('looks in the CWD for non-config-relative paths', async () => {
let result = await build({ cwd: path.resolve(__dirname, '..') })
- expect(result.css).toMatchCss(css`
+ expect(result.css).toMatchFormattedCss(css`
.content-\[real-static-positive\] {
--tw-content: real-static-positive;
content: var(--tw-content);
@@ -97,7 +97,7 @@ it('looks in the CWD for non-config-relative paths', async () => {
result = await build({ cwd: path.resolve(__dirname, '../src') })
- expect(result.css).toMatchCss(``)
+ expect(result.css).toMatchFormattedCss(``)
})
it('can look for content files relative to the config', async () => {
@@ -113,12 +113,12 @@ it('can look for content files relative to the config', async () => {
// Here `./real` doesn't exist next to the config in the root directory
let result = await build({ cwd: path.resolve(__dirname, '..') })
- expect(result.css).toMatchCss(css``)
+ expect(result.css).toMatchFormattedCss(css``)
// But here it `./real` does exist next to the config in the `./src` directory!
result = await build({ cwd: path.resolve(__dirname, '../src') })
- expect(result.css).toMatchCss(css`
+ expect(result.css).toMatchFormattedCss(css`
.content-\[real-static-positive\] {
--tw-content: real-static-positive;
content: var(--tw-content);
@@ -143,7 +143,7 @@ it('it handles ignored globs correctly when not relative to the config', async (
let result = await build({ cwd: path.resolve(__dirname, '..') })
- expect(result.css).toMatchCss(css`
+ expect(result.css).toMatchFormattedCss(css`
.content-\[real-dynamic-positive\] {
--tw-content: real-dynamic-positive;
content: var(--tw-content);
@@ -157,7 +157,7 @@ it('it handles ignored globs correctly when not relative to the config', async (
// But here it `./real` does exist next to the config in the `./src` directory!
result = await build({ cwd: path.resolve(__dirname, '../src') })
- expect(result.css).toMatchCss(``)
+ expect(result.css).toMatchFormattedCss(``)
})
it('it handles ignored globs correctly when relative to the config', async () => {
@@ -177,12 +177,12 @@ it('it handles ignored globs correctly when relative to the config', async () =>
let result = await build({ cwd: path.resolve(__dirname, '..') })
- expect(result.css).toMatchCss(``)
+ expect(result.css).toMatchFormattedCss(``)
// But here it `./real` does exist next to the config in the `./src` directory!
result = await build({ cwd: path.resolve(__dirname, '../src') })
- expect(result.css).toMatchCss(css`
+ expect(result.css).toMatchFormattedCss(css`
.content-\[real-dynamic-positive\] {
--tw-content: real-dynamic-positive;
content: var(--tw-content);
@@ -215,7 +215,7 @@ it('it can resolve symlinks for files when not relative to the config', async ()
let result = await build({ cwd: path.resolve(__dirname, '..') })
- expect(result.css).toMatchCss(css`
+ expect(result.css).toMatchFormattedCss(css`
.content-\[real-dynamic-positive\] {
--tw-content: real-dynamic-positive;
content: var(--tw-content);
@@ -237,7 +237,7 @@ it('it can resolve symlinks for files when not relative to the config', async ()
// But here it `./real` does exist next to the config in the `./src` directory!
result = await build({ cwd: path.resolve(__dirname, '../src') })
- expect(result.css).toMatchCss(``)
+ expect(result.css).toMatchFormattedCss(``)
})
it('it can resolve symlinks for files when relative to the config', async () => {
@@ -261,12 +261,12 @@ it('it can resolve symlinks for files when relative to the config', async () =>
let result = await build({ cwd: path.resolve(__dirname, '..') })
- expect(result.css).toMatchCss(``)
+ expect(result.css).toMatchFormattedCss(``)
// But here it `./real` does exist next to the config in the `./src` directory!
result = await build({ cwd: path.resolve(__dirname, '../src') })
- expect(result.css).toMatchCss(css`
+ expect(result.css).toMatchFormattedCss(css`
.content-\[real-dynamic-positive\] {
--tw-content: real-dynamic-positive;
content: var(--tw-content);
diff --git a/integrations/execute.js b/integrations/execute.js
index 6c5f20363..7a39f28d9 100644
--- a/integrations/execute.js
+++ b/integrations/execute.js
@@ -5,10 +5,10 @@ let resolveToolRoot = require('./resolve-tool-root')
let SHOW_OUTPUT = false
-let runningProcessess = []
+let runningProcesses = []
afterEach(() => {
- runningProcessess.splice(0).forEach((runningProcess) => runningProcess.stop())
+ runningProcesses.splice(0).forEach((runningProcess) => runningProcess.stop())
})
function debounce(fn, ms) {
@@ -64,7 +64,7 @@ module.exports = function $(command, options = {}) {
messages.splice(0, idx + 1)
let actorIdx = actors.indexOf(next)
actors.splice(actorIdx, 1)
- next.resolve()
+ next.resolve(message)
break
}
}
@@ -129,7 +129,7 @@ module.exports = function $(command, options = {}) {
})
})
- runningProcessess.push(runningProcess)
+ runningProcesses.push(runningProcess)
return Object.assign(runningProcess, {
stop() {
diff --git a/integrations/io.js b/integrations/io.js
index c555ac8ba..0716aac7e 100644
--- a/integrations/io.js
+++ b/integrations/io.js
@@ -5,6 +5,9 @@ let fs = require('fs/promises')
let chokidar = require('chokidar')
let resolveToolRoot = require('./resolve-tool-root')
+let FILE_STATE = {
+ NotFound: Symbol(),
+}
function getWatcherOptions() {
return {
@@ -28,7 +31,7 @@ module.exports = function ({
cleanup = true,
} = {}) {
let toolRoot = resolveToolRoot()
- let fileCache = {}
+ let fileCache = new Map()
let absoluteOutputFolder = path.resolve(toolRoot, output)
let absoluteInputFolder = path.resolve(toolRoot, input)
@@ -41,9 +44,9 @@ module.exports = function ({
// Restore all written files
afterEach(async () => {
await Promise.all(
- Object.entries(fileCache).map(async ([file, content]) => {
+ Array.from(fileCache.entries()).map(async ([file, content]) => {
try {
- if (content === null) {
+ if (content === FILE_STATE.NotFound) {
return await fs.unlink(file)
} else {
return await fs.writeFile(file, content, 'utf8')
@@ -89,7 +92,7 @@ module.exports = function ({
return {
cleanupFile(file) {
let filePath = path.resolve(toolRoot, file)
- fileCache[filePath] = null
+ fileCache.set(filePath, FILE_STATE.NotFound)
},
async fileExists(file) {
let filePath = path.resolve(toolRoot, file)
@@ -98,8 +101,11 @@ module.exports = function ({
async removeFile(file) {
let filePath = path.resolve(toolRoot, file)
- if (!fileCache[filePath]) {
- fileCache[filePath] = await fs.readFile(filePath, 'utf8').catch(() => null)
+ if (!fileCache.has(filePath)) {
+ fileCache.set(
+ filePath,
+ await fs.readFile(filePath, 'utf8').catch(() => FILE_STATE.NotFound)
+ )
}
await fs.unlink(filePath).catch(() => null)
@@ -114,20 +120,31 @@ module.exports = function ({
},
async appendToInputFile(file, contents) {
let filePath = path.resolve(absoluteInputFolder, file)
- if (!fileCache[filePath]) {
- fileCache[filePath] = await fs.readFile(filePath, 'utf8')
+ if (!fileCache.has(filePath)) {
+ fileCache.set(filePath, await fs.readFile(filePath, 'utf8'))
}
return fs.appendFile(filePath, contents, 'utf8')
},
async writeInputFile(file, contents) {
let filePath = path.resolve(absoluteInputFolder, file)
- if (!fileCache[filePath]) {
+
+ // Ensure the parent folder of the file exists
+ if (
+ !(await fs
+ .stat(filePath)
+ .then(() => true)
+ .catch(() => false))
+ ) {
+ await fs.mkdir(path.dirname(filePath), { recursive: true })
+ }
+
+ if (!fileCache.has(filePath)) {
try {
- fileCache[filePath] = await fs.readFile(filePath, 'utf8')
+ fileCache.set(filePath, await fs.readFile(filePath, 'utf8'))
} catch (err) {
if (err.code === 'ENOENT') {
- fileCache[filePath] = null // Sentinel value to `delete` the file afterwards. This also means that we are writing to a `new` file inside the test.
+ fileCache.set(filePath, FILE_STATE.NotFound)
} else {
throw err
}
diff --git a/integrations/parcel/package.json b/integrations/parcel/package.json
index c61b3df00..d6c87ad4c 100644
--- a/integrations/parcel/package.json
+++ b/integrations/parcel/package.json
@@ -19,6 +19,6 @@
}
},
"devDependencies": {
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
}
}
diff --git a/integrations/parcel/tests/integration.test.js b/integrations/parcel/tests/integration.test.js
index b86af727e..36ebe1bf0 100644
--- a/integrations/parcel/tests/integration.test.js
+++ b/integrations/parcel/tests/integration.test.js
@@ -1,6 +1,5 @@
let $ = require('../../execute')
let { css, html, javascript } = require('../../syntax')
-let { env } = require('../../../lib/lib/sharedState')
let {
appendToInputFile,
@@ -40,7 +39,7 @@ describe('static build', () => {
'index.html',
html`
-
+
`
)
await writeInputFile(
@@ -58,8 +57,8 @@ describe('static build', () => {
content: ['./src/index.html'],
theme: {
extend: {
- colors: {
- primary: 'black',
+ zIndex: {
+ primary: 0,
},
},
},
@@ -74,26 +73,13 @@ describe('static build', () => {
env: { NODE_ENV: 'production' },
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
- css`
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
- css`
- .bg-primary {
- background-color: black;
- }
- `
- )
- }
+ expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
})
it('can use a tailwind.config.ts configuration file', async () => {
@@ -102,7 +88,7 @@ describe('static build', () => {
'index.html',
html`
-
+
`
)
await writeInputFile(
@@ -122,8 +108,8 @@ describe('static build', () => {
content: ['./src/index.html'],
theme: {
extend: {
- colors: {
- primary: 'black',
+ zIndex: {
+ primary: 0,
},
},
},
@@ -138,26 +124,13 @@ describe('static build', () => {
env: { NODE_ENV: 'production' },
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
- css`
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
- css`
- .bg-primary {
- background-color: black;
- }
- `
- )
- }
+ expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
})
})
@@ -199,41 +172,22 @@ describe('watcher', () => {
)
await waitForOutputFileChange(/index\.\w+\.css$/, async () => {
- await appendToInputFile('index.html', html`
`)
+ await appendToInputFile('index.html', html`
`)
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -271,41 +225,22 @@ describe('watcher', () => {
)
await waitForOutputFileChange(/index\.\w+\.css$/, async () => {
- await appendToInputFile('glob/index.html', html`
`)
+ await appendToInputFile('glob/index.html', html`
`)
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -328,7 +263,7 @@ describe('watcher', () => {
.font-bold {
font-weight: 700;
}
- @media (min-width: 768px) {
+ @media (width >= 768px) {
.md\:font-medium {
font-weight: 500;
}
@@ -366,7 +301,7 @@ describe('watcher', () => {
.font-bold {
font-weight: bold;
}
- @media (min-width: 800px) {
+ @media (width >= 800px) {
.md\:font-medium {
font-weight: 500;
}
@@ -417,11 +352,11 @@ describe('watcher', () => {
expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
css`
- /* prettier-ignore */
.btn {
- border-radius: .25rem;
- padding: .25rem .5rem;
+ border-radius: 0.25rem;
+ padding: 0.25rem 0.5rem;
}
+
.font-bold {
font-weight: 700;
}
@@ -438,43 +373,25 @@ describe('watcher', () => {
@layer components {
.btn {
- @apply rounded bg-red-500 px-2 py-1;
+ @apply rounded z-0 px-2 py-1;
}
}
`
)
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
- css`
- .btn {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- border-radius: 0.25rem;
- padding: 0.25rem 0.5rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
- css`
- .btn {
- background-color: #ef4444;
- border-radius: 0.25rem;
- padding: 0.25rem 0.5rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
+ expect(await readOutputFile(/index\.\w+\.css$/)).toIncludeCss(
+ css`
+ .btn {
+ z-index: 0;
+ border-radius: 0.25rem;
+ padding: 0.25rem 0.5rem;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
return runningProcess.stop()
})
diff --git a/integrations/postcss-cli/package.json b/integrations/postcss-cli/package.json
index 07967231d..e6f54d0ca 100644
--- a/integrations/postcss-cli/package.json
+++ b/integrations/postcss-cli/package.json
@@ -18,7 +18,7 @@
}
},
"devDependencies": {
- "postcss": "^8.4.23",
+ "postcss": "^8.4.31",
"postcss-cli": "^10.1.0"
}
}
diff --git a/integrations/postcss-cli/tests/integration.test.js b/integrations/postcss-cli/tests/integration.test.js
index 46f5a61a6..aefd47214 100644
--- a/integrations/postcss-cli/tests/integration.test.js
+++ b/integrations/postcss-cli/tests/integration.test.js
@@ -1,6 +1,5 @@
let $ = require('../../execute')
let { css, html, javascript } = require('../../syntax')
-let { env } = require('../../../lib/lib/sharedState')
let { readOutputFile, appendToInputFile, writeInputFile } = require('../../io')({
output: 'dist',
@@ -58,41 +57,22 @@ describe('watcher', () => {
`
)
- await appendToInputFile('index.html', html`
`)
+ await appendToInputFile('index.html', html`
`)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -125,41 +105,22 @@ describe('watcher', () => {
`
)
- await appendToInputFile('glob/index.html', html`
`)
+ await appendToInputFile('glob/index.html', html`
`)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -187,23 +148,23 @@ describe('watcher', () => {
await writeInputFile(
'../tailwind.config.js',
javascript`
- module.exports = {
- content: ['./src/index.html'],
- theme: {
- extend: {
- screens: {
- md: '800px'
- },
- fontWeight: {
- bold: 'bold'
- }
+ module.exports = {
+ content: ['./src/index.html'],
+ theme: {
+ extend: {
+ screens: {
+ md: '800px'
},
+ fontWeight: {
+ bold: 'bold'
+ }
},
- corePlugins: {
- preflight: false,
- },
- plugins: [],
- }
+ },
+ corePlugins: {
+ preflight: false,
+ },
+ plugins: [],
+ }
`
)
await runningProcess.onStderr(ready)
@@ -277,47 +238,25 @@ describe('watcher', () => {
@layer components {
.btn {
- @apply rounded bg-red-500 px-2 py-1;
+ @apply rounded z-0 px-2 py-1;
}
}
`
)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .btn {
- border-radius: 0.25rem;
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- /* prettier-ignore */
- .btn {
- border-radius: 0.25rem;
- background-color: #ef4444;
- padding: 0.25rem 0.5rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .btn {
+ z-index: 0;
+ border-radius: 0.25rem;
+ padding: 0.25rem 0.5rem;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
return runningProcess.stop()
})
diff --git a/integrations/rollup-sass/package.json b/integrations/rollup-sass/package.json
index b1eaa6e94..aa6cafcf1 100644
--- a/integrations/rollup-sass/package.json
+++ b/integrations/rollup-sass/package.json
@@ -18,8 +18,8 @@
}
},
"devDependencies": {
- "rollup": "^3.21.0",
+ "rollup": "^4.5.0",
"rollup-plugin-postcss": "^4.0.2",
- "sass": "^1.62.0"
+ "sass": "^1.69.5"
}
}
diff --git a/integrations/rollup-sass/tests/integration.test.js b/integrations/rollup-sass/tests/integration.test.js
index 19a769565..a552a3742 100644
--- a/integrations/rollup-sass/tests/integration.test.js
+++ b/integrations/rollup-sass/tests/integration.test.js
@@ -1,6 +1,5 @@
let $ = require('../../execute')
let { css, html, javascript } = require('../../syntax')
-let { env } = require('../../../lib/lib/sharedState')
let { readOutputFile, appendToInputFile, writeInputFile } = require('../../io')({
output: 'dist',
@@ -58,41 +57,22 @@ describe('watcher', () => {
`
)
- await appendToInputFile('index.html', html`
`)
+ await appendToInputFile('index.html', html`
`)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await readOutputFile('index.css')).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -125,41 +105,22 @@ describe('watcher', () => {
`
)
- await appendToInputFile('glob/index.html', html`
`)
+ await appendToInputFile('glob/index.html', html`
`)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await readOutputFile('index.css')).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -275,43 +236,25 @@ describe('watcher', () => {
@layer components {
.btn {
- @apply rounded bg-red-500 px-2 py-1;
+ @apply rounded z-0 px-2 py-1;
}
}
`
)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .btn {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- border-radius: 0.25rem;
- padding: 0.25rem 0.5rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .btn {
- background-color: #ef4444;
- border-radius: 0.25rem;
- padding: 0.25rem 0.5rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
+ expect(await readOutputFile('index.css')).toIncludeCss(
+ css`
+ .btn {
+ z-index: 0;
+ border-radius: 0.25rem;
+ padding: 0.25rem 0.5rem;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -352,6 +295,8 @@ describe('watcher', () => {
)
await runningProcess.onStderr(ready)
+ await new Promise((resolve) => setTimeout(resolve, 5000))
+
expect(await readOutputFile('index.css')).toIncludeCss(
css`
.btn {
@@ -370,44 +315,26 @@ describe('watcher', () => {
css`
@layer components {
.btn {
- @apply rounded bg-red-500 px-2 py-1;
+ @apply rounded z-0 px-2 py-1;
}
}
`
)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .btn {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- border-radius: 0.25rem;
- padding: 0.25rem 0.5rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .btn {
- background-color: #ef4444;
- border-radius: 0.25rem;
- padding: 0.25rem 0.5rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
+ expect(await readOutputFile('index.css')).toIncludeCss(
+ css`
+ .btn {
+ z-index: 0;
+ border-radius: 0.25rem;
+ padding: 0.25rem 0.5rem;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
return runningProcess.stop()
- })
+ }, 30000)
})
diff --git a/integrations/rollup/package.json b/integrations/rollup/package.json
index 21da41dbd..768e3716a 100644
--- a/integrations/rollup/package.json
+++ b/integrations/rollup/package.json
@@ -18,7 +18,7 @@
}
},
"devDependencies": {
- "rollup": "^3.21.0",
+ "rollup": "^4.5.0",
"rollup-plugin-postcss": "^4.0.2"
}
}
diff --git a/integrations/rollup/tests/integration.test.js b/integrations/rollup/tests/integration.test.js
index c3209af65..6a35285e3 100644
--- a/integrations/rollup/tests/integration.test.js
+++ b/integrations/rollup/tests/integration.test.js
@@ -1,6 +1,5 @@
let $ = require('../../execute')
let { css, html, javascript } = require('../../syntax')
-let { env } = require('../../../lib/lib/sharedState')
let { readOutputFile, appendToInputFile, writeInputFile, removeFile } = require('../../io')({
output: 'dist',
@@ -30,7 +29,7 @@ describe('static build', () => {
it('can use a tailwind.config.js configuration file with ESM syntax', async () => {
await removeFile('tailwind.config.js')
- await writeInputFile('index.html', html`
`)
+ await writeInputFile('index.html', html`
`)
await writeInputFile(
'index.css',
css`
@@ -46,8 +45,8 @@ describe('static build', () => {
content: ['./src/index.html'],
theme: {
extend: {
- colors: {
- primary: 'black',
+ zIndex: {
+ primary: 0,
},
},
},
@@ -62,31 +61,18 @@ describe('static build', () => {
env: { NODE_ENV: 'production' },
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .bg-primary {
- background-color: black;
- }
- `
- )
- }
+ expect(await readOutputFile('index.css')).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
})
it('can use a tailwind.config.ts configuration file', async () => {
await removeFile('tailwind.config.js')
- await writeInputFile('index.html', html`
`)
+ await writeInputFile('index.html', html`
`)
await writeInputFile(
'index.css',
css`
@@ -104,8 +90,8 @@ describe('static build', () => {
content: ['./src/index.html'],
theme: {
extend: {
- colors: {
- primary: 'black',
+ zIndex: {
+ primary: 0,
},
},
},
@@ -120,26 +106,13 @@ describe('static build', () => {
env: { NODE_ENV: 'production' },
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .bg-primary {
- background-color: black;
- }
- `
- )
- }
+ expect(await readOutputFile('index.css')).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
})
})
@@ -172,41 +145,22 @@ describe('watcher', () => {
`
)
- await appendToInputFile('index.html', html`
`)
+ await appendToInputFile('index.html', html`
`)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await readOutputFile('index.css')).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -239,41 +193,22 @@ describe('watcher', () => {
`
)
- await appendToInputFile('glob/index.html', html`
`)
+ await appendToInputFile('glob/index.html', html`
`)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await readOutputFile('index.css')).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -389,46 +324,25 @@ describe('watcher', () => {
@layer components {
.btn {
- @apply rounded bg-red-500 px-2 py-1;
+ @apply rounded z-0 px-2 py-1;
}
}
`
)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .btn {
- border-radius: 0.25rem;
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('index.css')).toIncludeCss(
- css`
- .btn {
- border-radius: 0.25rem;
- background-color: #ef4444;
- padding: 0.25rem 0.5rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
+ expect(await readOutputFile('index.css')).toIncludeCss(
+ css`
+ .btn {
+ z-index: 0;
+ border-radius: 0.25rem;
+ padding: 0.25rem 0.5rem;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
return runningProcess.stop()
})
diff --git a/integrations/tailwindcss-cli/fixtures/example-app/src/index.css b/integrations/tailwindcss-cli/fixtures/example-app/src/index.css
new file mode 100644
index 000000000..b5c61c956
--- /dev/null
+++ b/integrations/tailwindcss-cli/fixtures/example-app/src/index.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/integrations/tailwindcss-cli/fixtures/example-app/src/index.html b/integrations/tailwindcss-cli/fixtures/example-app/src/index.html
new file mode 100644
index 000000000..b956240c2
--- /dev/null
+++ b/integrations/tailwindcss-cli/fixtures/example-app/src/index.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/integrations/tailwindcss-cli/tests/cli.test.js b/integrations/tailwindcss-cli/tests/cli.test.js
index 0c42ce0cc..a4d72dc28 100644
--- a/integrations/tailwindcss-cli/tests/cli.test.js
+++ b/integrations/tailwindcss-cli/tests/cli.test.js
@@ -2,7 +2,6 @@ let path = require('path')
let $ = require('../../execute')
let { css, html, javascript } = require('../../syntax')
let resolveToolRoot = require('../../resolve-tool-root')
-let { env } = require('../../../lib/lib/sharedState')
let version = require('../../../package.json').version
@@ -19,7 +18,6 @@ let {
})
let EXECUTABLE = 'node ../../lib/cli.js'
-let testStable = env.ENGINE === 'stable' ? test : test.skip
function dedent(input) {
let lines = input.split('\n')
@@ -98,26 +96,36 @@ describe('Build command', () => {
expect(withoutMinify.length).toBeGreaterThan(withMinify.length)
})
- testStable('--no-autoprefixer', async () => {
+ // Deprecated
+ test('--no-autoprefixer (should produce a warning)', async () => {
await writeInputFile('index.html', html`
`)
+ await writeInputFile(
+ 'index.css',
+ css`
+ @tailwind utilities;
+ `
+ )
- await $(`${EXECUTABLE} --output ./dist/main.css`)
- let withAutoprefixer = await readOutputFile('main.css')
+ let runningProcess = $(
+ `${EXECUTABLE} --input ./src/index.css --output ./dist/main.css --no-autoprefixer`
+ )
+ let warning = runningProcess.onStderr((message) => message.includes('--no-autoprefixer'))
+ await runningProcess
+ expect(await warning).toMatchInlineSnapshot(`
+ "[deprecation] The --no-autoprefixer flag is deprecated and has no effect.
+ "
+ `)
+ let withoutAutoprefixer = await readOutputFile('main.css')
- expect(withAutoprefixer).toIncludeCss(css`
+ // This contains --webkit-user-select which may be strange, but it is expected because we are
+ // not handling the `--no-autoprefixer` flag anymore at all.
+ expect(withoutAutoprefixer).toMatchInlineSnapshot(`
+ "/* ! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com */
.select-none {
-webkit-user-select: none;
user-select: none;
}
- `)
-
- await $(`${EXECUTABLE} --output ./dist/main.css --no-autoprefixer`)
- let withoutAutoprefixer = await readOutputFile('main.css')
-
- expect(withoutAutoprefixer).toIncludeCss(css`
- .select-none {
- user-select: none;
- }
+ "
`)
})
@@ -143,7 +151,7 @@ describe('Build command', () => {
theme: {
extend: {
fontWeight: {
- bold: 'BOLD',
+ bold: 'bold',
},
},
},
@@ -164,7 +172,7 @@ describe('Build command', () => {
expect(await readOutputFile('main.css')).toIncludeCss(
css`
.font-bold {
- font-weight: BOLD;
+ font-weight: bold;
}
`
)
@@ -184,7 +192,7 @@ describe('Build command', () => {
)
})
- testStable('--postcss (postcss.config.js)', async () => {
+ test('--postcss (postcss.config.js)', async () => {
await writeInputFile('index.html', html`
`)
let customConfig = javascript`
@@ -196,7 +204,7 @@ describe('Build command', () => {
function before(root, result) {
// Inject a custom component with @apply rules to prove that we run
// this _before_ the actual tailwind plugin.
- let btn = postcss.parse('.btn { @apply bg-red-500 px-2 py-1 }')
+ let btn = postcss.parse('.btn { @apply flex px-2 py-1 }')
root.append(btn.nodes)
},
function tailwindcss() {
@@ -217,45 +225,21 @@ describe('Build command', () => {
await $(`${EXECUTABLE} --output ./dist/main.css --postcss`)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .font-bold-after {
- font-weight: 700;
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .font-bold-after {
+ font-weight: 700;
+ }
- .btn-after {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .font-bold-after {
- font-weight: 700;
- }
-
- .btn-after {
- background-color: #ef4444;
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- }
- `
- )
- }
+ .btn-after {
+ padding: 0.25rem 0.5rem;
+ display: flex;
+ }
+ `
+ )
})
- testStable('--postcss (custom.postcss.config.js)', async () => {
+ test('--postcss (custom.postcss.config.js)', async () => {
await writeInputFile('index.html', html`
`)
let customConfig = javascript`
@@ -267,7 +251,7 @@ describe('Build command', () => {
function before(root, result) {
// Inject a custom component with @apply rules to prove that we run
// this _before_ the actual tailwind plugin.
- let btn = postcss.parse('.btn { @apply bg-red-500 px-2 py-1 }')
+ let btn = postcss.parse('.btn { @apply flex px-2 py-1 }')
root.append(btn.nodes)
},
function tailwindcss() {
@@ -288,45 +272,21 @@ describe('Build command', () => {
await $(`${EXECUTABLE} --output ./dist/main.css --postcss ./custom.postcss.config.js`)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .font-bold-after {
- font-weight: 700;
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .font-bold-after {
+ font-weight: 700;
+ }
- .btn-after {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .font-bold-after {
- font-weight: 700;
- }
-
- .btn-after {
- background-color: #ef4444;
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- }
- `
- )
- }
+ .btn-after {
+ padding: 0.25rem 0.5rem;
+ display: flex;
+ }
+ `
+ )
})
- testStable('--postcss supports process options', async () => {
+ test('--postcss supports process options', async () => {
await writeInputFile('index.html', html`
`)
let customConfig = javascript`
@@ -360,7 +320,7 @@ describe('Build command', () => {
expect(contents).toContain(`/*# sourceMappingURL`)
})
- testStable('--postcss supports process options with custom config', async () => {
+ test('--postcss supports process options with custom config', async () => {
await writeInputFile('index.html', html`
`)
let customConfig = javascript`
@@ -472,7 +432,7 @@ describe('Build command', () => {
css`
@media (min-width: 768px) {
.md\:something-cool {
- color: blue;
+ color: #00f;
}
}
`
@@ -481,10 +441,18 @@ describe('Build command', () => {
return runningProcess.stop()
})
- testStable('postcss-import is included when using a custom postcss configuration', async () => {
+ test('postcss-import is included when using a custom postcss configuration', async () => {
cleanupFile('src/test.css')
await writeInputFile('index.html', html`
`)
+ await writeInputFile(
+ 'imported.css',
+ css`
+ .foo {
+ color: white;
+ }
+ `
+ )
await writeInputFile(
'test.css',
css`
@@ -501,7 +469,9 @@ describe('Build command', () => {
expect(await readOutputFile('main.css')).toIncludeCss(
css`
- @import './imported.css';
+ .foo {
+ color: #fff;
+ }
`
)
})
@@ -509,28 +479,8 @@ describe('Build command', () => {
test('--help', async () => {
let { combined } = await $(`${EXECUTABLE} --help`)
- if (env.ENGINE === 'oxide') {
- expect(dedent(combined)).toEqual(
- dedent(`
- tailwindcss v${version}
-
- Usage:
- tailwindcss build [options]
-
- Options:
- -i, --input Input file
- -o, --output Output file
- -w, --watch Watch for changes and rebuild as needed
- -p, --poll Use polling instead of filesystem events when watching
- --content Content paths to use for removing unused classes
- -m, --minify Minify the output
- -c, --config Path to a custom config file
- -h, --help Display usage information
- `)
- )
- } else if (env.ENGINE === 'stable') {
- expect(dedent(combined)).toEqual(
- dedent(`
+ expect(dedent(combined)).toEqual(
+ dedent(`
tailwindcss v${version}
Usage:
@@ -545,11 +495,9 @@ describe('Build command', () => {
--postcss Load custom PostCSS configuration
-m, --minify Minify the output
-c, --config Path to a custom config file
- --no-autoprefixer Disable autoprefixer
-h, --help Display usage information
`)
- )
- }
+ )
})
})
@@ -562,7 +510,6 @@ describe('Init command', () => {
{ flags: ['--ts', '--full'], name: 'tailwind.config.ts' },
{ flags: ['--esm', '--full'], name: 'tailwind.config.js' },
])('works with all these flags: %j', async ({ flags, name }) => {
- cleanupFile(name)
await removeFile(name)
let { combined } = await $(`${EXECUTABLE} init ${flags.join(' ')}`)
@@ -611,7 +558,7 @@ describe('Init command', () => {
expect((await readOutputFile('../full.config.js')).split('\n').length).toBeGreaterThan(50)
})
- testStable('--postcss', async () => {
+ test('--postcss', async () => {
expect(await fileExists('postcss.config.js')).toBe(true)
await removeFile('postcss.config.js')
expect(await fileExists('postcss.config.js')).toBe(false)
@@ -631,24 +578,8 @@ describe('Init command', () => {
test('--help', async () => {
let { combined } = await $(`${EXECUTABLE} init --help`)
- if (env.ENGINE === 'oxide') {
- expect(dedent(combined)).toEqual(
- dedent(`
- tailwindcss v${version}
-
- Usage:
- tailwindcss init [options]
-
- Options:
- --esm Initialize configuration file as ESM
- --ts Initialize configuration file as TypeScript
- -f, --full Include the default values for all options in the generated configuration file
- -h, --help Display usage information
- `)
- )
- } else if (env.ENGINE === 'stable') {
- expect(dedent(combined)).toEqual(
- dedent(`
+ expect(dedent(combined)).toEqual(
+ dedent(`
tailwindcss v${version}
Usage:
@@ -661,12 +592,10 @@ describe('Init command', () => {
-f, --full Include the default values for all options in the generated configuration file
-h, --help Display usage information
`)
- )
- }
+ )
})
test('ESM config is created by default in an ESM project', async () => {
- cleanupFile('tailwind.config.js')
await removeFile('tailwind.config.js')
let pkg = await readOutputFile('../package.json')
@@ -696,7 +625,6 @@ describe('Init command', () => {
})
test('CJS config is created by default in a non-ESM project', async () => {
- cleanupFile('tailwind.config.js')
await removeFile('tailwind.config.js')
let pkg = await readOutputFile('../package.json')
diff --git a/integrations/tailwindcss-cli/tests/integration.test.js b/integrations/tailwindcss-cli/tests/integration.test.js
index 75c9779af..ce02e7fdd 100644
--- a/integrations/tailwindcss-cli/tests/integration.test.js
+++ b/integrations/tailwindcss-cli/tests/integration.test.js
@@ -1,7 +1,7 @@
let fs = require('fs')
+let path = require('path')
let $ = require('../../execute')
let { css, html, javascript } = require('../../syntax')
-let { env } = require('../../../lib/lib/sharedState')
let { readOutputFile, appendToInputFile, writeInputFile, removeFile } = require('../../io')({
output: 'dist',
@@ -55,7 +55,7 @@ describe('static build', () => {
content: {
files: ['./src/index.html'],
},
- safelist: ['bg-red-500','bg-red-600'],
+ safelist: ['flex','block'],
theme: {
extend: {
},
@@ -72,48 +72,26 @@ describe('static build', () => {
env: { NODE_ENV: 'production' },
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .block {
+ display: block;
+ }
- .bg-red-600 {
- --tw-bg-opacity: 1;
- background-color: rgb(220 38 38 / var(--tw-bg-opacity));
- }
+ .flex {
+ display: flex;
+ }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
-
- .bg-red-600 {
- background-color: #dc2626;
- }
-
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
})
it('can use a tailwind.config.js configuration file with ESM syntax', async () => {
await removeFile('tailwind.config.js')
- await writeInputFile('index.html', html`
`)
+ await writeInputFile('index.html', html`
`)
await writeInputFile(
'index.css',
css`
@@ -129,8 +107,8 @@ describe('static build', () => {
content: ['./src/index.html'],
theme: {
extend: {
- colors: {
- primary: 'black',
+ zIndex: {
+ primary: 0
},
},
},
@@ -145,31 +123,18 @@ describe('static build', () => {
env: { NODE_ENV: 'production' },
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-primary {
- background-color: black;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
})
it('can use a tailwind.config.ts configuration file', async () => {
await removeFile('tailwind.config.js')
- await writeInputFile('index.html', html`
`)
+ await writeInputFile('index.html', html`
`)
await writeInputFile(
'index.css',
css`
@@ -187,8 +152,8 @@ describe('static build', () => {
content: ['./src/index.html'],
theme: {
extend: {
- colors: {
- primary: 'black',
+ zIndex: {
+ primary: 0
},
},
},
@@ -203,30 +168,17 @@ describe('static build', () => {
env: { NODE_ENV: 'production' },
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-primary {
- background-color: black;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
})
it('can read from a config file from an @config directive', async () => {
- await writeInputFile('index.html', html`
`)
+ await writeInputFile('index.html', html`
`)
await writeInputFile(
'index.css',
css`
@@ -246,8 +198,8 @@ describe('static build', () => {
},
theme: {
extend: {
- colors: {
- yellow: '#ff0',
+ zIndex: {
+ primary: 0
}
},
},
@@ -262,32 +214,19 @@ describe('static build', () => {
env: { NODE_ENV: 'production' },
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-yellow {
- --tw-bg-opacity: 1;
- background-color: rgb(255 255 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-yellow {
- background-color: #ff0;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
})
it('can read from a config file from an @config directive inside an @import from postcss-import', async () => {
await fs.promises.mkdir('./src/config', { recursive: true })
- await writeInputFile('index.html', html`
`)
+ await writeInputFile('index.html', html`
`)
await writeInputFile(
'config/myconfig.css',
css`
@@ -313,8 +252,8 @@ describe('static build', () => {
},
theme: {
extend: {
- colors: {
- yellow: '#ff0',
+ zIndex: {
+ primary: 0
}
},
},
@@ -329,26 +268,13 @@ describe('static build', () => {
env: { NODE_ENV: 'production' },
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-yellow {
- --tw-bg-opacity: 1;
- background-color: rgb(255 255 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-yellow {
- background-color: #ff0;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
})
it('should work with raw content', async () => {
@@ -357,7 +283,7 @@ describe('static build', () => {
javascript`
module.exports = {
content: {
- files: [{ raw: 'bg-red-500'}],
+ files: [{ raw: 'flex'}],
},
theme: {
extend: {
@@ -375,26 +301,13 @@ describe('static build', () => {
env: { NODE_ENV: 'production' },
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .flex {
+ display: flex;
+ }
+ `
+ )
})
})
@@ -427,41 +340,22 @@ describe('watcher', () => {
`
)
- await appendToInputFile('index.html', html`
`)
+ await appendToInputFile('index.html', html`
`)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .flex {
+ display: flex;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -494,41 +388,22 @@ describe('watcher', () => {
`
)
- await appendToInputFile('glob/index.html', html`
`)
+ await appendToInputFile('glob/index.html', html`
`)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .flex {
+ display: flex;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -696,55 +571,31 @@ describe('watcher', () => {
@layer components {
.btn {
- @apply rounded bg-red-500 px-2 py-1;
+ @apply rounded flex px-2 py-1;
}
}
`
)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .btn {
- border-radius: 0.25rem;
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .btn {
- border-radius: 0.25rem;
- background-color: #ef4444;
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .btn {
+ border-radius: 0.25rem;
+ padding: 0.25rem 0.5rem;
+ display: flex;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
return runningProcess.stop()
})
test('listens for changes to the @config directive', async () => {
- await writeInputFile('index.html', html`
`)
+ await writeInputFile('index.html', html`
`)
await writeInputFile(
'index.css',
css`
@@ -764,8 +615,8 @@ describe('watcher', () => {
},
theme: {
extend: {
- colors: {
- yellow: '#ff0',
+ zIndex: {
+ primary: 0
}
},
},
@@ -785,8 +636,8 @@ describe('watcher', () => {
},
theme: {
extend: {
- colors: {
- yellow: '#ff7',
+ zIndex: {
+ primary: 10
}
},
},
@@ -800,26 +651,13 @@ describe('watcher', () => {
let runningProcess = $('node ../../lib/cli.js -i ./src/index.css -o ./dist/main.css -w')
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-yellow {
- --tw-bg-opacity: 1;
- background-color: rgb(255 255 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-yellow {
- background-color: #ff0;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
await writeInputFile(
'index.css',
@@ -832,26 +670,13 @@ describe('watcher', () => {
)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-yellow {
- --tw-bg-opacity: 1;
- background-color: rgb(255 255 119 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-yellow {
- background-color: #ff7;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 10;
+ }
+ `
+ )
await writeInputFile(
'tailwind.2.config.js',
@@ -863,8 +688,8 @@ describe('watcher', () => {
},
theme: {
extend: {
- colors: {
- yellow: '#fff',
+ zIndex: {
+ primary: 20
}
},
},
@@ -876,26 +701,13 @@ describe('watcher', () => {
)
await runningProcess.onStderr(ready)
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-yellow {
- --tw-bg-opacity: 1;
- background-color: rgb(255 255 255 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-yellow {
- background-color: #fff;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 20;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -1000,4 +812,560 @@ describe('watcher', () => {
return runningProcess.stop()
})
+
+ describe('auto content', () => {
+ let { readOutputFile, writeInputFile } = require('../../io')({
+ output: 'fixtures/example-app/dist',
+ input: 'fixtures/example-app/src',
+ })
+ let options = {
+ cwd: path.resolve(__dirname, '..', 'fixtures', 'example-app'),
+ }
+
+ it('should detect classes in existing files', async () => {
+ await writeInputFile(
+ '../tailwind.config.js',
+ javascript`
+ module.exports = {
+ corePlugins: {
+ preflight: false,
+ },
+ }
+ `
+ )
+
+ let runningProcess = $(
+ 'node ../../../../lib/cli.js -i ./src/index.css -o ./dist/main.css -w',
+ options
+ )
+
+ await writeInputFile('index.html', html`
`)
+ await runningProcess.onStderr(ready)
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
+
+ return runningProcess.stop()
+ })
+
+ it('should detect changes in existing files', async () => {
+ await writeInputFile(
+ '../tailwind.config.js',
+ javascript`
+ module.exports = {
+ corePlugins: {
+ preflight: false,
+ },
+ }
+ `
+ )
+
+ await writeInputFile('index.html', html`
`)
+
+ let runningProcess = $(
+ 'node ../../../../lib/cli.js -i ./src/index.css -o ./dist/main.css -w',
+ options
+ )
+ await runningProcess.onStderr(ready)
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
+
+ expect(await readOutputFile('main.css')).not.toIncludeCss(
+ css`
+ .underline {
+ text-decoration-line: underline;
+ }
+ `
+ )
+
+ // Make a change
+
+ await writeInputFile('index.html', html`
`)
+ await runningProcess.onStderr(ready)
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .underline {
+ text-decoration-line: underline;
+ }
+ `
+ )
+
+ return runningProcess.stop()
+ })
+
+ it('should detect changes in new files in existing folders with a known extension', async () => {
+ await writeInputFile(
+ '../tailwind.config.js',
+ javascript`
+ module.exports = {
+ corePlugins: {
+ preflight: false,
+ },
+ }
+ `
+ )
+
+ await writeInputFile('index.html', html`
`)
+
+ let runningProcess = $(
+ 'node ../../../../lib/cli.js -i ./src/index.css -o ./dist/main.css -w',
+ options
+ )
+ await runningProcess.onStderr(ready)
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
+
+ expect(await readOutputFile('main.css')).not.toIncludeCss(
+ css`
+ .underline {
+ text-decoration-line: underline;
+ }
+ `
+ )
+
+ // Make a change to a new file in an existing folder with a known extension.
+
+ await writeInputFile('other.html', html`
`)
+ await runningProcess.onStderr(ready)
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .underline {
+ text-decoration-line: underline;
+ }
+ `
+ )
+
+ return runningProcess.stop()
+ })
+
+ it('should not scan ignored files', async () => {
+ await writeInputFile(
+ '../tailwind.config.js',
+ javascript`
+ module.exports = {
+ corePlugins: {
+ preflight: false,
+ },
+ }
+ `
+ )
+ await writeInputFile('../.gitignore', 'generated-folder/')
+ await writeInputFile('../generated-folder/bad.html', html`
`)
+ await writeInputFile('index.html', html`
`)
+
+ let runningProcess = $(
+ 'node ../../../../lib/cli.js -i ./src/index.css -o ./dist/main.css -w',
+ options
+ )
+ await runningProcess.onStderr(ready)
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
+
+ expect(await readOutputFile('main.css')).not.toIncludeCss(
+ css`
+ .italic {
+ font-style: italic;
+ }
+ `
+ )
+
+ return runningProcess.stop()
+ })
+
+ it('should not scan for known binary files', async () => {
+ await writeInputFile(
+ '../tailwind.config.js',
+ javascript`
+ module.exports = {
+ corePlugins: {
+ preflight: false,
+ },
+ }
+ `
+ )
+ await writeInputFile('example-1.png', html`
`)
+ await writeInputFile('example-2.mp4', html`
`)
+ await writeInputFile('index.html', html`
`)
+
+ let runningProcess = $(
+ 'node ../../../../lib/cli.js -i ./src/index.css -o ./dist/main.css -w',
+ options
+ )
+ await runningProcess.onStderr(ready)
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
+
+ expect(await readOutputFile('main.css')).not.toIncludeCss(
+ css`
+ .italic {
+ font-style: italic;
+ }
+
+ .underline {
+ text-decoration-line: underline;
+ }
+ `
+ )
+
+ return runningProcess.stop()
+ })
+
+ it('should not scan for explicitly ignored extensions (such as css/scss/less/...)', async () => {
+ await writeInputFile(
+ '../tailwind.config.js',
+ javascript`
+ module.exports = {
+ corePlugins: {
+ preflight: false,
+ },
+ }
+ `
+ )
+ await writeInputFile('example.css', html`
`)
+ await writeInputFile('example.less', html`
`)
+ await writeInputFile('index.html', html`
`)
+
+ let runningProcess = $(
+ 'node ../../../../lib/cli.js -i ./src/index.css -o ./dist/main.css -w',
+ options
+ )
+ await runningProcess.onStderr(ready)
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
+
+ expect(await readOutputFile('main.css')).not.toIncludeCss(
+ css`
+ .italic {
+ font-style: italic;
+ }
+
+ .underline {
+ text-decoration-line: underline;
+ }
+ `
+ )
+
+ return runningProcess.stop()
+ })
+
+ it('should not scan for explicitly ignored files (such as package-lock.json)', async () => {
+ await writeInputFile(
+ '../tailwind.config.js',
+ javascript`
+ module.exports = {
+ corePlugins: {
+ preflight: false,
+ },
+ }
+ `
+ )
+ await writeInputFile('package-lock.json', html`
`)
+ await writeInputFile('yarn.lock', html`
`)
+ await writeInputFile('pnpm-lock.yaml', html`
`)
+ await writeInputFile('index.html', html`
`)
+
+ let runningProcess = $(
+ 'node ../../../../lib/cli.js -i ./src/index.css -o ./dist/main.css -w',
+ options
+ )
+ await runningProcess.onStderr(ready)
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
+
+ expect(await readOutputFile('main.css')).not.toIncludeCss(
+ css`
+ .italic {
+ font-style: italic;
+ }
+ `
+ )
+
+ return runningProcess.stop()
+ })
+
+ it('should not include the tailwind.config.js file as a template file', async () => {
+ await writeInputFile(
+ '../tailwind.config.js',
+ javascript`
+ // Example class that should not be included: flex italic
+ module.exports = {
+ corePlugins: {
+ preflight: false,
+ },
+ }
+ `
+ )
+ await writeInputFile('index.html', html`
`)
+
+ let runningProcess = $(
+ 'node ../../../../lib/cli.js -i ./src/index.css -o ./dist/main.css -w',
+ options
+ )
+ await runningProcess.onStderr(ready)
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
+
+ expect(await readOutputFile('main.css')).not.toIncludeCss(
+ css`
+ .flex {
+ display: flex;
+ }
+ `
+ )
+ expect(await readOutputFile('main.css')).not.toIncludeCss(
+ css`
+ .italic {
+ font-style: italic;
+ }
+ `
+ )
+
+ return runningProcess.stop()
+ })
+
+ it('should optimize the globs and ensure that nested ignored folders are not scanned', async () => {
+ await writeInputFile(
+ '../tailwind.config.js',
+ javascript`
+ module.exports = {
+ corePlugins: {
+ preflight: false,
+ },
+ }
+ `
+ )
+
+ await writeInputFile('../.gitignore', 'node_modules')
+ await writeInputFile('../node_modules/a.html', html`
`)
+ await writeInputFile('index.html', html`
`)
+ await writeInputFile('nested/index.html', html`
`)
+ await writeInputFile('nested/node_modules/index.html', html`
`)
+
+ let runningProcess = $(
+ 'node ../../../../lib/cli.js -i ./src/index.css -o ./dist/main.css -w',
+ options
+ )
+ await runningProcess.onStderr(ready)
+
+ // Root node_modules
+ expect(await readOutputFile('main.css')).not.toIncludeCss(
+ css`
+ .z-10 {
+ z-index: 10;
+ }
+ `
+ )
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-20 {
+ z-index: 20;
+ }
+ `
+ )
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-30 {
+ z-index: 30;
+ }
+ `
+ )
+
+ // Nested node_modules
+ expect(await readOutputFile('main.css')).not.toIncludeCss(
+ css`
+ .z-40 {
+ z-index: 40;
+ }
+ `
+ )
+
+ return runningProcess.stop()
+ })
+
+ it("should use auto content when content is explicitly set to 'auto'", async () => {
+ await writeInputFile(
+ '../tailwind.config.js',
+ javascript`
+ module.exports = {
+ content: 'auto',
+ corePlugins: {
+ preflight: false,
+ },
+ }
+ `
+ )
+
+ await writeInputFile('../.gitignore', 'node_modules')
+ await writeInputFile('../node_modules/a.html', html`
`)
+ await writeInputFile('index.html', html`
`)
+ await writeInputFile('nested/index.html', html`
`)
+ await writeInputFile('nested/node_modules/index.html', html`
`)
+
+ let runningProcess = $(
+ 'node ../../../../lib/cli.js -i ./src/index.css -o ./dist/main.css -w',
+ options
+ )
+ await runningProcess.onStderr(ready)
+
+ // Root node_modules
+ expect(await readOutputFile('main.css')).not.toIncludeCss(
+ css`
+ .z-10 {
+ z-index: 10;
+ }
+ `
+ )
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-20 {
+ z-index: 20;
+ }
+ `
+ )
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-30 {
+ z-index: 30;
+ }
+ `
+ )
+
+ // Nested node_modules
+ expect(await readOutputFile('main.css')).not.toIncludeCss(
+ css`
+ .z-40 {
+ z-index: 40;
+ }
+ `
+ )
+
+ return runningProcess.stop()
+ })
+
+ it('should be possible to merge "auto" and custom defined paths', async () => {
+ await writeInputFile(
+ '../tailwind.config.js',
+ javascript`
+ module.exports = {
+ content: ['auto'], // Ignoring the library-example.html file for now
+ corePlugins: {
+ preflight: false,
+ },
+ }
+ `
+ )
+
+ await writeInputFile('../.gitignore', 'node_modules')
+ await writeInputFile('../node_modules/library-example.html', html`
`)
+ await writeInputFile('index.html', html`
`)
+
+ let runningProcess = $(
+ 'node ../../../../lib/cli.js -i ./src/index.css -o ./dist/main.css -w',
+ options
+ )
+ await runningProcess.onStderr(ready)
+
+ // example.html should be ignored right now
+ expect(await readOutputFile('main.css')).not.toIncludeCss(
+ css`
+ .z-10 {
+ z-index: 10;
+ }
+ `
+ )
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-20 {
+ z-index: 20;
+ }
+ `
+ )
+
+ await writeInputFile(
+ '../tailwind.config.js',
+ javascript`
+ module.exports = {
+ content: ['auto', 'node_modules/library-example.html'], // Explicitly adding the library-example.html file
+ corePlugins: {
+ preflight: false,
+ },
+ }
+ `
+ )
+ await runningProcess.onStderr(ready)
+
+ // z-10 from `example.html` should be available now
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-10 {
+ z-index: 10;
+ }
+ `
+ )
+
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-20 {
+ z-index: 20;
+ }
+ `
+ )
+
+ return runningProcess.stop()
+ })
+ })
})
diff --git a/integrations/vite/package.json b/integrations/vite/package.json
index 4b9649cab..ae6aa6ba7 100644
--- a/integrations/vite/package.json
+++ b/integrations/vite/package.json
@@ -21,6 +21,6 @@
},
"devDependencies": {
"isomorphic-fetch": "^3.0.0",
- "vite": "^4.3.2"
+ "vite": "^5.0.2"
}
}
diff --git a/integrations/vite/tests/integration.test.js b/integrations/vite/tests/integration.test.js
index b1a8163b2..b0a4f6c79 100644
--- a/integrations/vite/tests/integration.test.js
+++ b/integrations/vite/tests/integration.test.js
@@ -2,7 +2,6 @@ require('isomorphic-fetch')
let $ = require('../../execute')
let { css, html, javascript } = require('../../syntax')
-let { env } = require('../../../lib/lib/sharedState')
let { readOutputFile, appendToInputFile, writeInputFile, removeFile } = require('../../io')({
output: 'dist',
@@ -48,7 +47,7 @@ describe('static build', () => {
'index.html',
html`
-
+
`
)
await removeFile('tailwind.config.js')
@@ -59,8 +58,8 @@ describe('static build', () => {
content: ['index.html'],
theme: {
extend: {
- colors: {
- primary: 'black',
+ zIndex: {
+ primary: 0,
},
},
},
@@ -75,26 +74,13 @@ describe('static build', () => {
env: { NODE_ENV: 'production', NO_COLOR: '1' },
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile(/index.\w+\.css$/)).toIncludeCss(
- css`
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile(/index.\w+\.css$/)).toIncludeCss(
- css`
- .bg-primary {
- background-color: black;
- }
- `
- )
- }
+ expect(await readOutputFile(/index.\w+\.css$/)).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
})
it('can use a tailwind.config.ts configuration file', async () => {
@@ -102,7 +88,7 @@ describe('static build', () => {
'index.html',
html`
-
+
`
)
await removeFile('tailwind.config.js')
@@ -115,8 +101,8 @@ describe('static build', () => {
content: ['index.html'],
theme: {
extend: {
- colors: {
- primary: 'black',
+ zIndex: {
+ primary: 0,
},
},
},
@@ -131,26 +117,13 @@ describe('static build', () => {
env: { NODE_ENV: 'production', NO_COLOR: '1' },
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile(/index.\w+\.css$/)).toIncludeCss(
- css`
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile(/index.\w+\.css$/)).toIncludeCss(
- css`
- .bg-primary {
- background-color: black;
- }
- `
- )
- }
+ expect(await readOutputFile(/index.\w+\.css$/)).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
})
})
@@ -191,41 +164,22 @@ describe('watcher', () => {
`
)
- await appendToInputFile('index.html', html`
`)
+ await appendToInputFile('index.html', html`
`)
await runningProcess.onStdout((message) => message.includes('page reload'))
- if (env.ENGINE === 'stable') {
- expect(await fetchCSS()).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await fetchCSS()).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await fetchCSS()).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -262,41 +216,22 @@ describe('watcher', () => {
`
)
- await appendToInputFile('glob/index.html', html`
`)
+ await appendToInputFile('glob/index.html', html`
`)
await runningProcess.onStdout((message) => message.includes('page reload'))
- if (env.ENGINE === 'stable') {
- expect(await fetchCSS()).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await fetchCSS()).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await fetchCSS()).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -428,49 +363,25 @@ describe('watcher', () => {
@layer components {
.btn {
- @apply rounded bg-red-500 px-2 py-1;
+ @apply rounded z-0 px-2 py-1;
}
}
`
)
await runningProcess.onStdout((message) => message.includes('hmr update /index.css'))
- if (env.ENGINE === 'stable') {
- expect(await fetchCSS()).toIncludeCss(
- css`
- .btn {
- border-radius: 0.25rem;
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await fetchCSS()).toIncludeCss(
- css`
- .btn {
- border-radius: 0.25rem;
- background-color: #ef4444;
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
+ expect(await fetchCSS()).toIncludeCss(
+ css`
+ .btn {
+ z-index: 0;
+ border-radius: 0.25rem;
+ padding: 0.25rem 0.5rem;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
return runningProcess.stop()
})
diff --git a/integrations/webpack-4/tests/integration.test.js b/integrations/webpack-4/tests/integration.test.js
index e2e24cf45..ae7011edd 100644
--- a/integrations/webpack-4/tests/integration.test.js
+++ b/integrations/webpack-4/tests/integration.test.js
@@ -1,6 +1,5 @@
let $ = require('../../execute')
let { css, html, javascript } = require('../../syntax')
-let { env } = require('../../../lib/lib/sharedState')
let {
appendToInputFile,
@@ -28,7 +27,7 @@ describe('static build', () => {
it('can use a tailwind.config.js configuration file with ESM syntax', async () => {
await removeFile('tailwind.config.js')
- await writeInputFile('index.html', html`
`)
+ await writeInputFile('index.html', html`
`)
await writeInputFile(
'index.css',
css`
@@ -44,8 +43,8 @@ describe('static build', () => {
content: ['./src/index.html'],
theme: {
extend: {
- colors: {
- primary: 'black',
+ zIndex: {
+ primary: 0,
},
},
},
@@ -58,31 +57,18 @@ describe('static build', () => {
await $('webpack --mode=production')
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-primary {
- background-color: black;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
})
it('can use a tailwind.config.ts configuration file', async () => {
await removeFile('tailwind.config.js')
- await writeInputFile('index.html', html`
`)
+ await writeInputFile('index.html', html`
`)
await writeInputFile(
'index.css',
css`
@@ -100,8 +86,8 @@ describe('static build', () => {
content: ['./src/index.html'],
theme: {
extend: {
- colors: {
- primary: 'black',
+ zIndex: {
+ primary: 0,
},
},
},
@@ -114,26 +100,13 @@ describe('static build', () => {
await $('webpack --mode=production')
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-primary {
- background-color: black;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
})
})
@@ -169,41 +142,22 @@ describe('watcher', () => {
)
await waitForOutputFileChange('main.css', async () => {
- await appendToInputFile('index.html', html`
`)
+ await appendToInputFile('index.html', html`
`)
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -239,41 +193,22 @@ describe('watcher', () => {
)
await waitForOutputFileChange('main.css', async () => {
- await appendToInputFile('glob/index.html', html`
`)
+ await appendToInputFile('glob/index.html', html`
`)
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -394,46 +329,25 @@ describe('watcher', () => {
@layer components {
.btn {
- @apply rounded bg-red-500 px-2 py-1;
+ @apply rounded z-0 px-2 py-1;
}
}
`
)
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .btn {
- border-radius: 0.25rem;
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .btn {
- background-color: #ef4444;
- border-radius: 0.25rem;
- padding: 0.25rem 0.5rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .btn {
+ z-index: 0;
+ border-radius: 0.25rem;
+ padding: 0.25rem 0.5rem;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
return runningProcess.stop()
})
diff --git a/integrations/webpack-5/tests/integration.test.js b/integrations/webpack-5/tests/integration.test.js
index 83b42f5f8..c1f0a0629 100644
--- a/integrations/webpack-5/tests/integration.test.js
+++ b/integrations/webpack-5/tests/integration.test.js
@@ -1,6 +1,5 @@
let $ = require('../../execute')
let { css, html, javascript } = require('../../syntax')
-let { env } = require('../../../lib/lib/sharedState')
let {
appendToInputFile,
@@ -28,7 +27,7 @@ describe('static build', () => {
it('can use a tailwind.config.js configuration file with ESM syntax', async () => {
await removeFile('tailwind.config.js')
- await writeInputFile('index.html', html`
`)
+ await writeInputFile('index.html', html`
`)
await writeInputFile(
'index.css',
css`
@@ -44,8 +43,8 @@ describe('static build', () => {
content: ['./src/index.html'],
theme: {
extend: {
- colors: {
- primary: 'black',
+ zIndex: {
+ primary: 0,
},
},
},
@@ -58,31 +57,18 @@ describe('static build', () => {
await $('webpack --mode=production')
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-primary {
- background-color: black;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
})
it('can use a tailwind.config.ts configuration file', async () => {
await removeFile('tailwind.config.js')
- await writeInputFile('index.html', html`
`)
+ await writeInputFile('index.html', html`
`)
await writeInputFile(
'index.css',
css`
@@ -100,8 +86,8 @@ describe('static build', () => {
content: ['./src/index.html'],
theme: {
extend: {
- colors: {
- primary: 'black',
+ zIndex: {
+ primary: 0,
},
},
},
@@ -114,26 +100,13 @@ describe('static build', () => {
await $('webpack --mode=production')
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-primary {
- background-color: black;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-primary {
+ z-index: 0;
+ }
+ `
+ )
})
})
@@ -169,41 +142,22 @@ describe('watcher', () => {
)
await waitForOutputFileChange('main.css', async () => {
- await appendToInputFile('index.html', html`
`)
+ await appendToInputFile('index.html', html`
`)
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -239,41 +193,22 @@ describe('watcher', () => {
)
await waitForOutputFileChange('main.css', async () => {
- await appendToInputFile('index.html', html`
`)
+ await appendToInputFile('index.html', html`
`)
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
- .font-bold {
- font-weight: 700;
- }
- .font-normal {
- font-weight: 400;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .font-normal {
+ font-weight: 400;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -394,46 +329,25 @@ describe('watcher', () => {
@layer components {
.btn {
- @apply rounded bg-red-500 px-2 py-1;
+ @apply rounded z-0 px-2 py-1;
}
}
`
)
})
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .btn {
- border-radius: 0.25rem;
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- padding-top: 0.25rem;
- padding-bottom: 0.25rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .btn {
- background-color: #ef4444;
- border-radius: 0.25rem;
- padding: 0.25rem 0.5rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .btn {
+ z-index: 0;
+ border-radius: 0.25rem;
+ padding: 0.25rem 0.5rem;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
return runningProcess.stop()
})
@@ -447,7 +361,7 @@ describe('watcher', () => {
content: {
files: ['./src/index.html'],
},
- safelist: ['bg-red-500','bg-red-600'],
+ safelist: ['z-0', 'z-10'],
theme: {
extend: {
},
@@ -464,43 +378,21 @@ describe('watcher', () => {
await waitForOutputFileCreation('main.css')
- if (env.ENGINE === 'stable') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
+ expect(await readOutputFile('main.css')).toIncludeCss(
+ css`
+ .z-0 {
+ z-index: 0;
+ }
- .bg-red-600 {
- --tw-bg-opacity: 1;
- background-color: rgb(220 38 38 / var(--tw-bg-opacity));
- }
+ .z-10 {
+ z-index: 10;
+ }
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
-
- if (env.ENGINE === 'oxide') {
- expect(await readOutputFile('main.css')).toIncludeCss(
- css`
- .bg-red-500 {
- background-color: #ef4444;
- }
-
- .bg-red-600 {
- background-color: #dc2626;
- }
-
- .font-bold {
- font-weight: 700;
- }
- `
- )
- }
+ .font-bold {
+ font-weight: 700;
+ }
+ `
+ )
return runningProcess.stop()
})
diff --git a/jest/customMatchers.js b/jest/customMatchers.js
index 9b1c6b6d0..0103e2d93 100644
--- a/jest/customMatchers.js
+++ b/jest/customMatchers.js
@@ -1,7 +1,11 @@
const prettier = require('prettier')
const { diff } = require('jest-diff')
-const lightningcss = require('lightningcss')
const log = require('../src/util/log').default
+const { version } = require('../package.json')
+
+function license() {
+ return `/* ! tailwindcss v${version} | MIT License | https://tailwindcss.com */\n`
+}
let warn
@@ -22,46 +26,7 @@ function formatPrettier(input) {
}
function format(input) {
- try {
- return lightningcss
- .transform({
- filename: 'input.css',
- code: Buffer.from(input),
- minify: false,
- targets: { chrome: 106 << 16 },
- drafts: {
- nesting: true,
- customMedia: true,
- },
- })
- .code.toString('utf8')
- } catch (err) {
- try {
- // Lightning CSS is pretty strict, so it will fail for `@media screen(md) {}` for example,
- // in that case we can fallback to prettier since it doesn't really care. However if an
- // actual syntax error is made, then we still want to show the proper error.
- return formatPrettier(input.replace(/\n/g, ''))
- } catch {
- let lines = err.source.split('\n')
- let e = new Error(
- [
- 'Error formatting using Lightning CSS:',
- '',
- ...[
- '```css',
- ...lines.slice(Math.max(err.loc.line - 3, 0), err.loc.line),
- ' '.repeat(err.loc.column - 1) + '^-- ' + err.toString(),
- ...lines.slice(err.loc.line, err.loc.line + 2),
- '```',
- ],
- ].join('\n')
- )
- if (Error.captureStackTrace) {
- Error.captureStackTrace(e, toMatchFormattedCss)
- }
- throw e
- }
- }
+ return formatPrettier(input).replace(/\n{2,}/g, '\n')
}
function toMatchFormattedCss(received = '', argument = '') {
@@ -71,6 +36,11 @@ function toMatchFormattedCss(received = '', argument = '') {
promise: this.promise,
}
+ // Drop the license from the tests such that we can purely focus on the actual CSS being
+ // generated.
+ received = received.replace(license(), '')
+ argument = argument.replace(license(), '')
+
let formattedReceived = format(received)
let formattedArgument = format(argument)
@@ -86,10 +56,7 @@ function toMatchFormattedCss(received = '', argument = '') {
)
}
: () => {
- let actual = formatPrettier(formattedReceived).replace(/\n\n/g, '\n')
- let expected = formatPrettier(formattedArgument).replace(/\n\n/g, '\n')
-
- let diffString = diff(expected, actual, {
+ let diffString = diff(formattedArgument, formattedReceived, {
expand: this.expand,
})
@@ -98,8 +65,8 @@ function toMatchFormattedCss(received = '', argument = '') {
'\n\n' +
(diffString && diffString.includes('- Expect')
? `Difference:\n\n${diffString}`
- : `Expected: ${this.utils.printExpected(expected)}\n` +
- `Received: ${this.utils.printReceived(actual)}`)
+ : `Expected: ${this.utils.printExpected(formattedArgument)}\n` +
+ `Received: ${this.utils.printReceived(formattedReceived)}`)
)
}
@@ -107,13 +74,10 @@ function toMatchFormattedCss(received = '', argument = '') {
}
expect.extend({
- // Compare two CSS strings with all whitespace removed
- // This is probably naive but it's fast and works well enough.
- toMatchCss: toMatchFormattedCss,
toMatchFormattedCss: toMatchFormattedCss,
toIncludeCss(received, argument) {
let options = {
- comment: 'stripped(received).includes(stripped(argument))',
+ comment: 'formatCSS(received).includes(formatCSS(argument))',
isNot: this.isNot,
promise: this.promise,
}
diff --git a/nesting/index.d.ts b/nesting/index.d.ts
new file mode 100644
index 000000000..72ea4644b
--- /dev/null
+++ b/nesting/index.d.ts
@@ -0,0 +1,4 @@
+import type { AcceptedPlugin, PluginCreator } from 'postcss'
+
+declare const plugin: PluginCreator
+export = plugin
diff --git a/oxide/Cargo.lock b/oxide/Cargo.lock
index 5b959d726..06f4e1b6e 100644
--- a/oxide/Cargo.lock
+++ b/oxide/Cargo.lock
@@ -11,13 +11,71 @@ dependencies = [
"memchr",
]
+[[package]]
+name = "aho-corasick"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anstream"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
[[package]]
name = "atty"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
- "hermit-abi",
+ "hermit-abi 0.1.19",
"libc",
"winapi",
]
@@ -35,22 +93,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
-name = "bstr"
-version = "0.2.17"
+name = "bitflags"
+version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
-dependencies = [
- "lazy_static",
- "memchr",
- "regex-automata",
- "serde",
-]
+checksum = "6776fc96284a0bb647b615056fc496d1fe1644a7ab01829818a6d91cae888b84"
[[package]]
name = "bstr"
-version = "1.0.1"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fca0852af221f458706eb0725c03e4ed6c46af9ac98e6a689d5e634215d594dd"
+checksum = "a246e68bb43f6cd9db24bea052a53e40405417c5fb372e3d1a8a7f770a564ef5"
dependencies = [
"memchr",
"once_cell",
@@ -60,9 +112,9 @@ dependencies = [
[[package]]
name = "bumpalo"
-version = "3.11.1"
+version = "3.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
[[package]]
name = "byteorder"
@@ -76,6 +128,12 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
[[package]]
name = "cfg-if"
version = "1.0.0"
@@ -88,47 +146,58 @@ version = "2.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"textwrap",
"unicode-width",
]
[[package]]
name = "clap"
-version = "4.0.26"
+version = "4.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2148adefda54e14492fb9bddcc600b4344c5d1a3123bd666dcb939c6f0e0e57e"
+checksum = "93aae7a4192245f70fe75dd9157fc7b4a5bf53e88d30bd4396f7d8f9284d5acc"
dependencies = [
- "atty",
- "bitflags",
+ "clap_builder",
"clap_derive",
- "clap_lex",
"once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f423e341edefb78c9caba2d9c7f7687d0e72e89df3ce3394554754393ac3990"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "bitflags 1.3.2",
+ "clap_lex",
"strsim",
- "termcolor",
]
[[package]]
name = "clap_derive"
-version = "4.0.21"
+version = "4.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0177313f9f02afc995627906bbd8967e2be069f5261954222dac78290c2b9014"
+checksum = "191d9573962933b4027f932c600cd252ce27a8ad5979418fe78e43c07996f27b"
dependencies = [
"heck",
- "proc-macro-error",
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.18",
]
[[package]]
name = "clap_lex"
-version = "0.3.0"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8"
-dependencies = [
- "os_str_bytes",
-]
+checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]]
name = "convert_case"
@@ -191,9 +260,9 @@ dependencies = [
[[package]]
name = "crossbeam-channel"
-version = "0.5.6"
+version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
dependencies = [
"cfg-if",
"crossbeam-utils",
@@ -201,9 +270,9 @@ dependencies = [
[[package]]
name = "crossbeam-deque"
-version = "0.8.2"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
dependencies = [
"cfg-if",
"crossbeam-epoch",
@@ -212,9 +281,9 @@ dependencies = [
[[package]]
name = "crossbeam-epoch"
-version = "0.9.13"
+version = "0.9.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
dependencies = [
"autocfg",
"cfg-if",
@@ -235,22 +304,21 @@ dependencies = [
[[package]]
name = "crossbeam-utils"
-version = "0.8.14"
+version = "0.8.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
dependencies = [
"cfg-if",
]
[[package]]
name = "csv"
-version = "1.1.6"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
+checksum = "0b015497079b9a9d69c02ad25de6c0a6edef051ea6360a327d0bd05802ef64ad"
dependencies = [
- "bstr 0.2.17",
"csv-core",
- "itoa 0.4.8",
+ "itoa",
"ryu",
"serde",
]
@@ -266,19 +334,49 @@ dependencies = [
[[package]]
name = "ctor"
-version = "0.1.26"
+version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+checksum = "990a40740adf249724a6000c0fc4bd574712f50bb17c2d6f6cec837ae2f0ee75"
dependencies = [
"quote",
- "syn",
+ "syn 2.0.18",
]
[[package]]
name = "either"
-version = "1.8.0"
+version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
[[package]]
name = "fnv"
@@ -297,12 +395,12 @@ dependencies = [
[[package]]
name = "globset"
-version = "0.4.9"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a"
+checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc"
dependencies = [
- "aho-corasick",
- "bstr 0.2.17",
+ "aho-corasick 0.7.20",
+ "bstr",
"fnv",
"log",
"regex",
@@ -314,7 +412,7 @@ version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
"ignore",
"walkdir",
]
@@ -327,9 +425,9 @@ checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
[[package]]
name = "heck"
-version = "0.4.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "hermit-abi"
@@ -341,12 +439,26 @@ dependencies = [
]
[[package]]
-name = "ignore"
-version = "0.4.18"
+name = "hermit-abi"
+version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "ignore"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
dependencies = [
- "crossbeam-utils",
"globset",
"lazy_static",
"log",
@@ -358,6 +470,38 @@ dependencies = [
"winapi-util",
]
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
[[package]]
name = "itertools"
version = "0.10.5"
@@ -369,21 +513,15 @@ dependencies = [
[[package]]
name = "itoa"
-version = "0.4.8"
+version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
-
-[[package]]
-name = "itoa"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
[[package]]
name = "js-sys"
-version = "0.3.60"
+version = "0.3.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
+checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790"
dependencies = [
"wasm-bindgen",
]
@@ -396,9 +534,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
-version = "0.2.137"
+version = "0.2.144"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
[[package]]
name = "libloading"
@@ -411,13 +549,16 @@ dependencies = [
]
[[package]]
-name = "log"
-version = "0.4.17"
+name = "linux-raw-sys"
+version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
-dependencies = [
- "cfg-if",
-]
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "log"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de"
[[package]]
name = "matchers"
@@ -436,24 +577,24 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
[[package]]
name = "memoffset"
-version = "0.7.1"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
dependencies = [
"autocfg",
]
[[package]]
name = "napi"
-version = "2.10.1"
+version = "2.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "466b16c759694cb07fbb023b0bde55afcc2ae35e8c0264b070c86a3e9a18cb6c"
+checksum = "d7f0a2e93526dd9c8c522d72a4d0c88678be8966fabe9fb8f2947fde6339b682"
dependencies = [
- "bitflags",
+ "bitflags 2.3.1",
"ctor",
+ "napi-derive",
"napi-sys",
"once_cell",
- "thread_local",
]
[[package]]
@@ -464,36 +605,38 @@ checksum = "882a73d9ef23e8dc2ebbffb6a6ae2ef467c0f18ac10711e4cc59c5485d41df0e"
[[package]]
name = "napi-derive"
-version = "2.11.2"
+version = "2.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e367c72b3f0243d490f0cf4feed9a28e40e4e9cba16912951dbeccf6c607576"
+checksum = "da1c6a8fa84d549aa8708fcd062372bf8ec6e849de39016ab921067d21bde367"
dependencies = [
+ "cfg-if",
"convert_case",
"napi-derive-backend",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.109",
]
[[package]]
name = "napi-derive-backend"
-version = "1.0.45"
+version = "1.0.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2cf4ba5f1f6d51b9b5e2d809e229201f3aa14f198d58ec9ba4ecf82dbabb381"
+checksum = "20bbc7c69168d06a848f925ec5f0e0997f98e8c8d4f2cc30157f0da51c009e17"
dependencies = [
"convert_case",
"once_cell",
"proc-macro2",
"quote",
"regex",
- "syn",
+ "semver",
+ "syn 1.0.109",
]
[[package]]
name = "napi-sys"
-version = "2.2.2"
+version = "2.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "529671ebfae679f2ce9630b62dd53c72c56b3eb8b2c852e7e2fa91704ff93d67"
+checksum = "166b5ef52a3ab5575047a9fe8d4a030cdd0f63c96f071cd6907674453b07bae3"
dependencies = [
"libloading",
]
@@ -519,19 +662,19 @@ dependencies = [
[[package]]
name = "num_cpus"
-version = "1.14.0"
+version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
dependencies = [
- "hermit-abi",
+ "hermit-abi 0.2.6",
"libc",
]
[[package]]
name = "once_cell"
-version = "1.16.0"
+version = "1.17.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860"
+checksum = "9670a07f94779e00908f3e686eab508878ebb390ba6e604d3a284c00e8d0487b"
[[package]]
name = "oorandom"
@@ -539,12 +682,6 @@ version = "11.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
-[[package]]
-name = "os_str_bytes"
-version = "6.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
-
[[package]]
name = "overload"
version = "0.1.1"
@@ -585,64 +722,39 @@ dependencies = [
"plotters-backend",
]
-[[package]]
-name = "proc-macro-error"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
-dependencies = [
- "proc-macro-error-attr",
- "proc-macro2",
- "quote",
- "syn",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro-error-attr"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-dependencies = [
- "proc-macro2",
- "quote",
- "version_check",
-]
-
[[package]]
name = "proc-macro2"
-version = "1.0.47"
+version = "1.0.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
+checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
-version = "1.0.21"
+version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
dependencies = [
"proc-macro2",
]
[[package]]
name = "rayon"
-version = "1.6.0"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e060280438193c554f654141c9ea9417886713b7acd75974c85b18a69a88e0b"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
dependencies = [
- "crossbeam-deque",
"either",
"rayon-core",
]
[[package]]
name = "rayon-core"
-version = "1.10.1"
+version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
dependencies = [
"crossbeam-channel",
"crossbeam-deque",
@@ -651,14 +763,23 @@ dependencies = [
]
[[package]]
-name = "regex"
-version = "1.7.0"
+name = "redox_syscall"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
dependencies = [
- "aho-corasick",
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390"
+dependencies = [
+ "aho-corasick 1.0.1",
"memchr",
- "regex-syntax",
+ "regex-syntax 0.7.2",
]
[[package]]
@@ -667,20 +788,40 @@ version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
dependencies = [
- "regex-syntax",
+ "regex-syntax 0.6.29",
]
[[package]]
name = "regex-syntax"
-version = "0.6.28"
+version = "0.6.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
[[package]]
name = "ryu"
-version = "1.0.11"
+version = "1.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
[[package]]
name = "same-file"
@@ -698,10 +839,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
-name = "serde"
-version = "1.0.147"
+name = "semver"
+version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
[[package]]
name = "serde_cbor"
@@ -715,22 +862,22 @@ dependencies = [
[[package]]
name = "serde_derive"
-version = "1.0.147"
+version = "1.0.163"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.18",
]
[[package]]
name = "serde_json"
-version = "1.0.89"
+version = "1.0.96"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
dependencies = [
- "itoa 1.0.4",
+ "itoa",
"ryu",
"serde",
]
@@ -758,9 +905,20 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "syn"
-version = "1.0.103"
+version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
dependencies = [
"proc-macro2",
"quote",
@@ -786,33 +944,40 @@ version = "0.1.0"
name = "tailwindcss-core"
version = "0.1.0"
dependencies = [
- "bstr 1.0.1",
+ "bstr",
"criterion",
"crossbeam",
"fxhash",
"globwalk",
+ "ignore",
"log",
"rayon",
+ "tempfile",
"tracing",
"tracing-subscriber",
+ "walkdir",
]
[[package]]
name = "tailwindcss-oxide"
version = "0.1.0"
dependencies = [
- "clap 4.0.26",
+ "clap 4.3.0",
"rayon",
"tailwindcss-core",
]
[[package]]
-name = "termcolor"
-version = "1.1.3"
+name = "tempfile"
+version = "3.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
dependencies = [
- "winapi-util",
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.45.0",
]
[[package]]
@@ -826,10 +991,11 @@ dependencies = [
[[package]]
name = "thread_local"
-version = "1.1.4"
+version = "1.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
dependencies = [
+ "cfg-if",
"once_cell",
]
@@ -857,20 +1023,20 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.23"
+version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
+checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.18",
]
[[package]]
name = "tracing-core"
-version = "0.1.30"
+version = "0.1.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
dependencies = [
"once_cell",
"valuable",
@@ -889,9 +1055,9 @@ dependencies = [
[[package]]
name = "tracing-subscriber"
-version = "0.3.16"
+version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
dependencies = [
"matchers",
"nu-ansi-term",
@@ -907,9 +1073,9 @@ dependencies = [
[[package]]
name = "unicode-ident"
-version = "1.0.5"
+version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
+checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
[[package]]
name = "unicode-segmentation"
@@ -923,34 +1089,33 @@ version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
[[package]]
name = "valuable"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
-[[package]]
-name = "version_check"
-version = "0.9.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-
[[package]]
name = "walkdir"
-version = "2.3.2"
+version = "2.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
dependencies = [
"same-file",
- "winapi",
"winapi-util",
]
[[package]]
name = "wasm-bindgen"
-version = "0.2.83"
+version = "0.2.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
+checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73"
dependencies = [
"cfg-if",
"wasm-bindgen-macro",
@@ -958,24 +1123,24 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.83"
+version = "0.2.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
+checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb"
dependencies = [
"bumpalo",
"log",
"once_cell",
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.18",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.83"
+version = "0.2.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
+checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -983,28 +1148,28 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.83"
+version = "0.2.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
+checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.18",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.83"
+version = "0.2.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
+checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93"
[[package]]
name = "web-sys"
-version = "0.3.60"
+version = "0.3.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
+checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -1040,3 +1205,135 @@ name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
diff --git a/oxide/crates/cli/src/main.rs b/oxide/crates/cli/src/main.rs
index cda7c48aa..767d440ae 100644
--- a/oxide/crates/cli/src/main.rs
+++ b/oxide/crates/cli/src/main.rs
@@ -105,7 +105,7 @@ fn main() -> Result<(), std::io::Error> {
let candidates = content_paths.par_bridge().flat_map(|path| {
read_lines(path)
.unwrap()
- .filter_map(Result::ok)
+ .map_while(Result::ok)
.par_bridge()
.flat_map_iter(|line| {
Extractor::unique(line.as_bytes(), Default::default())
diff --git a/oxide/crates/core/Cargo.toml b/oxide/crates/core/Cargo.toml
index ae895f34a..3b0b3d123 100644
--- a/oxide/crates/core/Cargo.toml
+++ b/oxide/crates/core/Cargo.toml
@@ -12,14 +12,17 @@ fxhash = "0.2.1"
crossbeam = "0.8.2"
tracing = { version = "0.1.37", features = [] }
tracing-subscriber = { version = "0.3.16", features = ["env-filter"] }
+walkdir = "2.3.3"
+ignore = "0.4.20"
[dev-dependencies]
criterion = { version = "0.3", features = ['html_reports'] }
+tempfile = "3.5.0"
[[bench]]
name = "parse_candidates"
harness = false
[[bench]]
-name = "parse_candidate_strings_from_files"
+name = "parse_candidate_strings"
harness = false
diff --git a/oxide/crates/core/benches/parse_candidate_strings_from_files.rs b/oxide/crates/core/benches/parse_candidate_strings.rs
similarity index 85%
rename from oxide/crates/core/benches/parse_candidate_strings_from_files.rs
rename to oxide/crates/core/benches/parse_candidate_strings.rs
index a9e5faf9d..16672f058 100644
--- a/oxide/crates/core/benches/parse_candidate_strings_from_files.rs
+++ b/oxide/crates/core/benches/parse_candidate_strings.rs
@@ -1,6 +1,6 @@
use criterion::{criterion_group, criterion_main, Criterion};
use std::path::PathBuf;
-use tailwindcss_core::{parse_candidate_strings_from_files, ChangedContent};
+use tailwindcss_core::{parse_candidate_strings, ChangedContent, Parsing, IO};
pub fn criterion_benchmark(c: &mut Criterion) {
// current_dir will be set to ./crates/core
@@ -11,7 +11,6 @@ pub fn criterion_benchmark(c: &mut Criterion) {
let mut all_files: Vec<(u64, PathBuf)> = std::fs::read_dir(fixtures_path)
.unwrap()
- .into_iter()
.filter_map(Result::ok)
.map(|dir_entry| dir_entry.path())
.filter(|path| path.is_file())
@@ -51,8 +50,13 @@ pub fn criterion_benchmark(c: &mut Criterion) {
})
.collect();
- c.bench_function("parse_candidate_strings_from_files", |b| {
- b.iter(|| parse_candidate_strings_from_files(changed_content.clone()))
+ c.bench_function("parse_candidate_strings", |b| {
+ b.iter(|| {
+ parse_candidate_strings(
+ changed_content.clone(),
+ Parsing::Parallel as u8 | IO::Parallel as u8,
+ )
+ })
});
}
diff --git a/oxide/crates/core/benches/parse_candidates.rs b/oxide/crates/core/benches/parse_candidates.rs
index 55c919471..aacc1469e 100644
--- a/oxide/crates/core/benches/parse_candidates.rs
+++ b/oxide/crates/core/benches/parse_candidates.rs
@@ -31,6 +31,18 @@ pub fn criterion_benchmark(c: &mut Criterion) {
c.bench_function("parse_candidate_strings (real world)", |b| {
b.iter(|| parse(include_bytes!("./fixtures/template-499.html")))
});
+
+ let mut group = c.benchmark_group("sample-size-example");
+ group.sample_size(10);
+
+ group.bench_function("parse_candidate_strings (fast space skipping)", |b| {
+ let count = 10_000;
+ let crazy1 = format!("{}underline", " ".repeat(count));
+ let crazy2 = crazy1.repeat(count);
+ let crazy3 = crazy2.as_bytes();
+
+ b.iter(|| parse(black_box(crazy3)))
+ });
}
criterion_group!(benches, criterion_benchmark);
diff --git a/oxide/crates/core/src/candidate.rs b/oxide/crates/core/src/candidate.rs
index b77ace8b2..3a608a152 100644
--- a/oxide/crates/core/src/candidate.rs
+++ b/oxide/crates/core/src/candidate.rs
@@ -22,7 +22,6 @@ impl Candidate {
x == ':' && !in_arbitrary
}
})
- .into_iter()
.collect::>();
let utility = match parts.pop() {
diff --git a/oxide/crates/core/src/cursor.rs b/oxide/crates/core/src/cursor.rs
new file mode 100644
index 000000000..0c422c6ff
--- /dev/null
+++ b/oxide/crates/core/src/cursor.rs
@@ -0,0 +1,159 @@
+use std::{ascii::escape_default, fmt::Display};
+
+#[derive(Debug, Clone)]
+pub struct Cursor<'a> {
+ // The input we're scanning
+ pub input: &'a [u8],
+
+ // The location of the cursor in the input
+ pub pos: usize,
+
+ /// Is the cursor at the start of the input
+ pub at_start: bool,
+
+ /// Is the cursor at the end of the input
+ pub at_end: bool,
+
+ /// The previously consumed character
+ /// If `at_start` is true, this will be NUL
+ pub prev: u8,
+
+ /// The current character
+ pub curr: u8,
+
+ /// The upcoming character (if any)
+ /// If `at_end` is true, this will be NUL
+ pub next: u8,
+}
+
+impl<'a> Cursor<'a> {
+ pub fn new(input: &'a [u8]) -> Self {
+ let mut cursor = Self {
+ input,
+ pos: 0,
+ at_start: true,
+ at_end: false,
+ prev: 0x00,
+ curr: 0x00,
+ next: 0x00,
+ };
+ cursor.move_to(0);
+ cursor
+ }
+
+ pub fn rewind_by(&mut self, amount: usize) {
+ self.move_to(self.pos.saturating_sub(amount));
+ }
+
+ pub fn advance_by(&mut self, amount: usize) {
+ self.move_to(self.pos.saturating_add(amount));
+ }
+
+ pub fn move_to(&mut self, pos: usize) {
+ let len = self.input.len();
+ let pos = pos.clamp(0, len);
+
+ self.pos = pos;
+ self.at_start = pos == 0;
+ self.at_end = pos + 1 >= len;
+
+ self.prev = if pos > 0 { self.input[pos - 1] } else { 0x00 };
+ self.curr = if pos < len { self.input[pos] } else { 0x00 };
+ self.next = if pos + 1 < len {
+ self.input[pos + 1]
+ } else {
+ 0x00
+ };
+ }
+}
+
+impl<'a> Display for Cursor<'a> {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ let len = self.input.len().to_string();
+
+ let pos = format!("{: >len_count$}", self.pos, len_count = len.len());
+ write!(f, "{}/{} ", pos, len)?;
+
+ if self.at_start {
+ write!(f, "S ")?;
+ } else if self.at_end {
+ write!(f, "E ")?;
+ } else {
+ write!(f, "M ")?;
+ }
+
+ fn to_str(c: u8) -> String {
+ if c == 0x00 {
+ "NUL".into()
+ } else {
+ format!("{:?}", escape_default(c).to_string())
+ }
+ }
+
+ write!(
+ f,
+ "[{} {} {}]",
+ to_str(self.prev),
+ to_str(self.curr),
+ to_str(self.next)
+ )
+ }
+}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+
+ #[test]
+ fn test_cursor() {
+ let mut cursor = Cursor::new(b"hello world");
+ assert_eq!(cursor.pos, 0);
+ assert!(cursor.at_start);
+ assert!(!cursor.at_end);
+ assert_eq!(cursor.prev, 0x00);
+ assert_eq!(cursor.curr, b'h');
+ assert_eq!(cursor.next, b'e');
+
+ cursor.advance_by(1);
+ assert_eq!(cursor.pos, 1);
+ assert!(!cursor.at_start);
+ assert!(!cursor.at_end);
+ assert_eq!(cursor.prev, b'h');
+ assert_eq!(cursor.curr, b'e');
+ assert_eq!(cursor.next, b'l');
+
+ // Advancing too far should stop at the end
+ cursor.advance_by(10);
+ assert_eq!(cursor.pos, 11);
+ assert!(!cursor.at_start);
+ assert!(cursor.at_end);
+ assert_eq!(cursor.prev, b'd');
+ assert_eq!(cursor.curr, 0x00);
+ assert_eq!(cursor.next, 0x00);
+
+ // Can't advance past the end
+ cursor.advance_by(1);
+ assert_eq!(cursor.pos, 11);
+ assert!(!cursor.at_start);
+ assert!(cursor.at_end);
+ assert_eq!(cursor.prev, b'd');
+ assert_eq!(cursor.curr, 0x00);
+ assert_eq!(cursor.next, 0x00);
+
+ cursor.rewind_by(1);
+ assert_eq!(cursor.pos, 10);
+ assert!(!cursor.at_start);
+ assert!(cursor.at_end);
+ assert_eq!(cursor.prev, b'l');
+ assert_eq!(cursor.curr, b'd');
+ assert_eq!(cursor.next, 0x00);
+
+ cursor.rewind_by(10);
+ assert_eq!(cursor.pos, 0);
+ assert!(cursor.at_start);
+ assert!(!cursor.at_end);
+ assert_eq!(cursor.prev, 0x00);
+ assert_eq!(cursor.curr, b'h');
+ assert_eq!(cursor.next, b'e');
+ }
+}
diff --git a/oxide/crates/core/src/fast_skip.rs b/oxide/crates/core/src/fast_skip.rs
new file mode 100644
index 000000000..488e61bd6
--- /dev/null
+++ b/oxide/crates/core/src/fast_skip.rs
@@ -0,0 +1,89 @@
+use crate::cursor::Cursor;
+
+const STRIDE: usize = 16;
+type Mask = [bool; STRIDE];
+
+#[inline(always)]
+pub fn fast_skip(cursor: &Cursor) -> Option {
+ // If we don't have enough bytes left to check then bail early
+ if cursor.pos + STRIDE >= cursor.input.len() {
+ return None;
+ }
+
+ if !cursor.curr.is_ascii_whitespace() {
+ return None;
+ }
+
+ let mut offset = 1;
+
+ // SAFETY: We've already checked (indirectly) that this index is valid
+ let remaining = unsafe { cursor.input.get_unchecked(cursor.pos..) };
+
+ // NOTE: This loop uses primitives designed to be auto-vectorized
+ // Do not change this loop without benchmarking the results
+ // And checking the generated assembly using godbolt.org
+ for (i, chunk) in remaining.chunks_exact(STRIDE).enumerate() {
+ let value = load(chunk);
+ let is_whitespace = is_ascii_whitespace(value);
+ let is_all_whitespace = all_true(is_whitespace);
+
+ if is_all_whitespace {
+ offset = (i + 1) * STRIDE;
+ } else {
+ break;
+ }
+ }
+
+ Some(cursor.pos + offset)
+}
+
+#[inline(always)]
+fn load(input: &[u8]) -> [u8; STRIDE] {
+ let mut value = [0u8; STRIDE];
+ value.copy_from_slice(input);
+ value
+}
+
+#[inline(always)]
+fn eq(input: [u8; STRIDE], val: u8) -> Mask {
+ let mut res = [false; STRIDE];
+ for n in 0..STRIDE {
+ res[n] = input[n] == val
+ }
+ res
+}
+
+#[inline(always)]
+fn or(a: [bool; STRIDE], b: [bool; STRIDE]) -> [bool; STRIDE] {
+ let mut res = [false; STRIDE];
+ for n in 0..STRIDE {
+ res[n] = a[n] | b[n];
+ }
+ res
+}
+
+#[inline(always)]
+fn all_true(a: [bool; STRIDE]) -> bool {
+ let mut res = true;
+ for item in a.iter().take(STRIDE) {
+ res &= item;
+ }
+ res
+}
+
+#[inline(always)]
+fn is_ascii_whitespace(value: [u8; STRIDE]) -> [bool; STRIDE] {
+ let whitespace_1 = eq(value, b'\t');
+ let whitespace_2 = eq(value, b'\n');
+ let whitespace_3 = eq(value, b'\x0C');
+ let whitespace_4 = eq(value, b'\r');
+ let whitespace_5 = eq(value, b' ');
+
+ or(
+ or(
+ or(or(whitespace_1, whitespace_2), whitespace_3),
+ whitespace_4,
+ ),
+ whitespace_5,
+ )
+}
diff --git a/oxide/crates/core/src/fixtures/binary-extensions.txt b/oxide/crates/core/src/fixtures/binary-extensions.txt
new file mode 100644
index 000000000..b7cee312c
--- /dev/null
+++ b/oxide/crates/core/src/fixtures/binary-extensions.txt
@@ -0,0 +1,259 @@
+3dm
+3ds
+3g2
+3gp
+7z
+DS_Store
+a
+aac
+adp
+ai
+aif
+aiff
+alz
+ape
+apk
+appimage
+ar
+arj
+asf
+au
+avi
+bak
+baml
+bh
+bin
+bk
+bmp
+btif
+bz2
+bzip2
+cab
+caf
+cgm
+class
+cmx
+cpio
+cr2
+cur
+dat
+dcm
+deb
+dex
+djvu
+dll
+dmg
+dng
+doc
+docm
+docx
+dot
+dotm
+dra
+dsk
+dts
+dtshd
+dvb
+dwg
+dxf
+ecelp4800
+ecelp7470
+ecelp9600
+egg
+eol
+eot
+epub
+exe
+f4v
+fbs
+fh
+fla
+flac
+flatpak
+fli
+flv
+fpx
+fst
+fvt
+g3
+gh
+gif
+graffle
+gz
+gzip
+h261
+h263
+h264
+icns
+ico
+ief
+img
+ipa
+iso
+jar
+jpeg
+jpg
+jpgv
+jpm
+jxr
+key
+ktx
+lha
+lib
+lockb
+lvp
+lz
+lzh
+lzma
+lzo
+m3u
+m4a
+m4v
+mar
+mdi
+mht
+mid
+midi
+mj2
+mka
+mkv
+mmr
+mng
+mobi
+mov
+movie
+mp3
+mp4
+mp4a
+mpeg
+mpg
+mpga
+mxu
+nef
+npx
+numbers
+nupkg
+o
+odp
+ods
+odt
+oga
+ogg
+ogv
+otf
+ott
+pages
+pbm
+pcx
+pdb
+pdf
+pea
+pgm
+pic
+png
+pnm
+pot
+potm
+potx
+ppa
+ppam
+ppm
+pps
+ppsm
+ppsx
+ppt
+pptm
+pptx
+psd
+pya
+pyc
+pyo
+pyv
+qt
+rar
+ras
+raw
+resources
+rgb
+rip
+rlc
+rmf
+rmvb
+rpm
+rtf
+rz
+s3m
+s7z
+scpt
+sgi
+shar
+sil
+sketch
+slk
+smv
+snap
+snk
+so
+stl
+sub
+suo
+swf
+tar
+tbz
+tbz2
+tga
+tgz
+thmx
+tif
+tiff
+tlz
+ttc
+ttf
+txz
+udf
+uvh
+uvi
+uvm
+uvp
+uvs
+uvu
+viv
+vob
+war
+wav
+wax
+wbmp
+wdp
+weba
+webm
+webp
+whl
+wim
+wm
+wma
+wmv
+wmx
+woff
+woff2
+wrm
+wvx
+xbm
+xif
+xla
+xlam
+xls
+xlsb
+xlsm
+xlsx
+xlt
+xltm
+xltx
+xm
+xmind
+xpi
+xpm
+xwd
+xz
+z
+zip
+zipx
diff --git a/oxide/crates/core/src/fixtures/ignored-extensions.txt b/oxide/crates/core/src/fixtures/ignored-extensions.txt
new file mode 100644
index 000000000..f147c24fe
--- /dev/null
+++ b/oxide/crates/core/src/fixtures/ignored-extensions.txt
@@ -0,0 +1,6 @@
+css
+less
+lock
+sass
+scss
+styl
diff --git a/oxide/crates/core/src/fixtures/ignored-files.txt b/oxide/crates/core/src/fixtures/ignored-files.txt
new file mode 100644
index 000000000..45d4ced87
--- /dev/null
+++ b/oxide/crates/core/src/fixtures/ignored-files.txt
@@ -0,0 +1,3 @@
+package-lock.json
+pnpm-lock.yaml
+bun.lockb
diff --git a/oxide/crates/core/src/fixtures/template-extensions.txt b/oxide/crates/core/src/fixtures/template-extensions.txt
new file mode 100644
index 000000000..c059eff3a
--- /dev/null
+++ b/oxide/crates/core/src/fixtures/template-extensions.txt
@@ -0,0 +1,57 @@
+# HTML
+html
+pug
+
+# JS
+astro
+cjs
+cts
+jade
+js
+jsx
+mjs
+mts
+svelte
+ts
+tsx
+vue
+
+# Markdown
+md
+mdx
+
+# ASP
+aspx
+razor
+
+# Handlebars
+handlebars
+hbs
+mustache
+
+# PHP
+php
+twig
+
+# Ruby
+erb
+haml
+liquid
+rb
+rhtml
+slim
+
+# Elixir / Phoenix
+eex
+heex
+
+# Nunjucks
+njk
+nunjucks
+
+# Python
+py
+tpl
+
+# Rust
+rs
diff --git a/oxide/crates/core/src/glob.rs b/oxide/crates/core/src/glob.rs
index f9e355075..f0ed8ab71 100644
--- a/oxide/crates/core/src/glob.rs
+++ b/oxide/crates/core/src/glob.rs
@@ -12,7 +12,6 @@ pub fn fast_glob(
.follow_links(true)
.build()
.unwrap()
- .into_iter()
.filter_map(Result::ok)
.map(|file| file.path().to_path_buf())
}))
diff --git a/oxide/crates/core/src/lib.rs b/oxide/crates/core/src/lib.rs
index 84713e61b..c0bd47666 100644
--- a/oxide/crates/core/src/lib.rs
+++ b/oxide/crates/core/src/lib.rs
@@ -1,9 +1,16 @@
use crate::parser::Extractor;
+use fxhash::FxHashSet;
+use ignore::WalkBuilder;
use rayon::prelude::*;
+use std::cmp::Ordering;
+use std::path::Path;
use std::path::PathBuf;
use tracing::event;
+use walkdir::WalkDir;
pub mod candidate;
+pub mod cursor;
+pub mod fast_skip;
pub mod glob;
pub mod location;
pub mod modifier;
@@ -11,14 +18,7 @@ pub mod parser;
pub mod utility;
pub mod variant;
-#[derive(Debug, Clone)]
-pub struct ChangedContent {
- pub file: Option,
- pub content: Option,
- pub extension: String,
-}
-
-pub fn parse_candidate_strings_from_files(changed_content: Vec) -> Vec {
+fn init_tracing() {
if matches!(std::env::var("DEBUG"), Ok(value) if value.eq("*") || value.eq("1") || value.eq("true") || value.contains("tailwind"))
{
tracing_subscriber::fmt()
@@ -27,8 +27,325 @@ pub fn parse_candidate_strings_from_files(changed_content: Vec)
.compact()
.init();
}
+}
- parse_all_blobs(read_all_files(changed_content))
+#[derive(Debug, Clone)]
+pub struct ChangedContent {
+ pub file: Option,
+ pub content: Option,
+ pub extension: String,
+}
+
+#[derive(Debug, Clone)]
+pub struct ContentPathInfo {
+ pub base: String,
+}
+
+pub fn resolve_content_paths(args: ContentPathInfo) -> Vec {
+ let root = Path::new(&args.base);
+
+ let allowed_paths = FxHashSet::from_iter(
+ WalkBuilder::new(root)
+ .hidden(false)
+ .filter_entry(|entry| match entry.file_type() {
+ Some(file_type) if file_type.is_dir() => entry
+ .file_name()
+ .to_str()
+ .map(|s| s != ".git")
+ .unwrap_or(false),
+ _ => true,
+ })
+ .build()
+ .filter_map(Result::ok)
+ .map(|x| x.into_path()),
+ );
+
+ // A list of directory names where we can't use globs, but we should track each file
+ // individually instead. This is because these directories are often used for both source and
+ // destination files.
+ let mut forced_static_directories = vec![root.join("public")];
+
+ // A list of known extensions + a list of extensions we found in the project.
+ let mut found_extensions = FxHashSet::from_iter(
+ include_str!("fixtures/template-extensions.txt")
+ .trim()
+ .lines()
+ .filter(|x| !x.starts_with('#')) // Drop commented lines
+ .filter(|x| !x.is_empty()) // Drop empty lines
+ .map(|x| x.to_string()),
+ );
+
+ // A list of static files that we should track directly.
+ let mut static_files = vec![];
+
+ // All root directories.
+ let mut root_directories = FxHashSet::from_iter(vec![root.to_path_buf()]);
+
+ // All directories where we can safely use deeply nested globs to watch all files.
+ // In other comments we refer to these as "deep glob directories" or similar.
+ //
+ // E.g.: ./src/**/*.{html,js}
+ let mut deep_globable_directories: FxHashSet = FxHashSet::default();
+
+ // All directories where we can only use shallow globs to watch all direct files but not
+ // folders.
+ // In other comments we refer to these as "shallow glob directories" or similar.
+ //
+ // E.g.: ./src/*/*.{html,js}
+ let mut shallow_globable_directories: FxHashSet = FxHashSet::default();
+
+ // Collect all valid paths from the root. This will already filter out ignored files, unknown
+ // extensions and binary files.
+ let mut it = WalkDir::new(root)
+ // Sorting to make sure that we always see the directories before the files. Also sorting
+ // alphabetically by default.
+ .sort_by(
+ |a, z| match (a.file_type().is_dir(), z.file_type().is_dir()) {
+ (true, false) => Ordering::Less,
+ (false, true) => Ordering::Greater,
+ _ => a.file_name().cmp(z.file_name()),
+ },
+ )
+ .into_iter();
+
+ loop {
+ // We are only interested in valid entries
+ let entry = match it.next() {
+ Some(Ok(entry)) => entry,
+ _ => break,
+ };
+
+ // Ignore known directories that we don't want to traverse into.
+ if entry.file_type().is_dir() && entry.file_name() == ".git" {
+ it.skip_current_dir();
+ continue;
+ }
+
+ if entry.file_type().is_dir() {
+ // If we are in a directory where we know that we can't use any globs, then we have to
+ // track each file individually.
+ if forced_static_directories.contains(&entry.path().to_path_buf()) {
+ forced_static_directories.push(entry.path().to_path_buf());
+ root_directories.insert(entry.path().to_path_buf());
+ continue;
+ }
+
+ // If we are in a directory where the parent is a forced static directory, then this
+ // will become a forced static directory as well.
+ if forced_static_directories.contains(&entry.path().parent().unwrap().to_path_buf()) {
+ forced_static_directories.push(entry.path().to_path_buf());
+ root_directories.insert(entry.path().to_path_buf());
+ continue;
+ }
+
+ // If we are in a directory, and the directory is git ignored, then we don't have to
+ // descent into the directory. However, we have to make sure that we mark the _parent_
+ // directory as a shallow glob directory because using deep globs from any of the
+ // parent directories will include this ignored directory which should not be the case.
+ //
+ // Another important part is that if one of the ignored directories is a deep glob
+ // directory, then all of its parents (until the root) should be marked as shallow glob
+ // directories as well.
+ if !allowed_paths.contains(&entry.path().to_path_buf()) {
+ let mut parent = entry.path().parent();
+ while let Some(parent_path) = parent {
+ // If the parent is already marked as a valid deep glob directory, then we have
+ // to mark it as a shallow glob directory instead, because we won't be able to
+ // use deep globs for this directory anymore.
+ if deep_globable_directories.contains(parent_path) {
+ deep_globable_directories.remove(parent_path);
+ shallow_globable_directories.insert(parent_path.to_path_buf());
+ }
+
+ // If we reached the root, then we can stop.
+ if parent_path == root {
+ break;
+ }
+
+ // Mark the parent directory as a shallow glob directory and continue with its
+ // parent.
+ shallow_globable_directories.insert(parent_path.to_path_buf());
+ parent = parent_path.parent();
+ }
+
+ it.skip_current_dir();
+ continue;
+ }
+ // If we are in a directory that is not git ignored, then we can mark this directory as
+ // a valid deep glob directory. This is only necessary if any of its parents aren't
+ // marked as deep glob directories already.
+ else {
+ let mut found_deep_glob_parent = false;
+ let mut parent = entry.path().parent();
+ while let Some(parent_path) = parent {
+ // If we reached the root, then we can stop.
+ if parent_path == root {
+ break;
+ }
+
+ // If the parent is already marked as a deep glob directory, then we can stop
+ // because this glob will match the current directory already.
+ if deep_globable_directories.contains(parent_path) {
+ found_deep_glob_parent = true;
+ break;
+ }
+
+ parent = parent_path.parent();
+ }
+
+ // If we didn't find a deep glob directory parent, then we can mark this directory
+ // as a deep glob directory (unless it is the root).
+ if !found_deep_glob_parent && entry.path() != root {
+ deep_globable_directories.insert(entry.path().to_path_buf());
+ }
+ }
+ }
+
+ // Handle allowed content paths
+ if is_allowed_content_path(entry.path())
+ && allowed_paths.contains(&entry.path().to_path_buf())
+ {
+ let path = entry.path();
+
+ // Collect the extension for future use when building globs.
+ if let Some(extension) = path.extension().and_then(|x| x.to_str()) {
+ found_extensions.insert(extension.to_string());
+ }
+
+ // If the current path is a file inside any of the root directories, then we have to
+ // track it directly as a static file.
+ if let Some(parent_path) = path.parent() {
+ if root_directories.contains(parent_path) {
+ static_files.push(format!("{}", path.display()));
+ }
+ }
+ }
+ }
+
+ // Build the globs for all globable directories.
+ let shallow_globs = shallow_globable_directories
+ .iter()
+ .map(|path| format!("{}", path.display()));
+ let deep_globs = deep_globable_directories
+ .iter()
+ .map(|path| format!("{}/**", path.display()));
+ let globs = shallow_globs
+ .chain(deep_globs)
+ .flat_map(|path| match found_extensions.len() {
+ 0 => None, // This should never happen
+ 1 => Some(format!(
+ "{}/*.{}",
+ path,
+ found_extensions.iter().next().unwrap()
+ )),
+ _ => Some(format!(
+ "{}/*.{{{}}}",
+ path,
+ found_extensions
+ .iter()
+ .map(|x| x.to_string())
+ .collect::>()
+ .join(","),
+ )),
+ })
+ .collect::>();
+
+ static_files.extend(globs);
+ static_files
+}
+
+pub fn is_git_ignored_content_path(base: &Path, path: &Path) -> bool {
+ !WalkBuilder::new(base)
+ .hidden(false)
+ .filter_entry(|entry| match entry.file_type() {
+ Some(file_type) if file_type.is_dir() => entry
+ .file_name()
+ .to_str()
+ .map(|s| s != ".git")
+ .unwrap_or(false),
+ _ => true,
+ })
+ .build()
+ .filter_map(Result::ok)
+ .any(|e| e.path() == path)
+}
+
+pub fn is_allowed_content_path(path: &Path) -> bool {
+ let binary_extensions = include_str!("fixtures/binary-extensions.txt")
+ .trim()
+ .lines()
+ .collect::>();
+ let ignored_extensions = include_str!("fixtures/ignored-extensions.txt")
+ .trim()
+ .lines()
+ .collect::>();
+ let ignored_files = include_str!("fixtures/ignored-files.txt")
+ .trim()
+ .lines()
+ .collect::>();
+
+ let path = PathBuf::from(path);
+
+ // Skip known ignored files
+ if path
+ .file_name()
+ .unwrap()
+ .to_str()
+ .map(|s| ignored_files.contains(&s))
+ .unwrap_or(false)
+ {
+ return false;
+ }
+
+ // Skip known ignored extensions
+ return path
+ .extension()
+ .map(|s| s.to_str().unwrap_or_default())
+ .map(|ext| !ignored_extensions.contains(&ext) && !binary_extensions.contains(&ext))
+ .unwrap_or(false);
+}
+
+#[derive(Debug)]
+pub enum IO {
+ Sequential = 0b0001,
+ Parallel = 0b0010,
+}
+
+impl From for IO {
+ fn from(item: u8) -> Self {
+ match item & 0b0011 {
+ 0b0001 => IO::Sequential,
+ 0b0010 => IO::Parallel,
+ _ => unimplemented!("Unknown 'IO' strategy"),
+ }
+ }
+}
+
+#[derive(Debug)]
+pub enum Parsing {
+ Sequential = 0b0100,
+ Parallel = 0b1000,
+}
+
+impl From for Parsing {
+ fn from(item: u8) -> Self {
+ match item & 0b1100 {
+ 0b0100 => Parsing::Sequential,
+ 0b1000 => Parsing::Parallel,
+ _ => unimplemented!("Unknown 'Parsing' strategy"),
+ }
+ }
+}
+
+pub fn parse_candidate_strings(input: Vec, options: u8) -> Vec {
+ init_tracing();
+
+ match (IO::from(options), Parsing::from(options)) {
+ (IO::Sequential, Parsing::Sequential) => parse_all_blobs_sync(read_all_files_sync(input)),
+ (IO::Sequential, Parsing::Parallel) => parse_all_blobs(read_all_files_sync(input)),
+ (IO::Parallel, Parsing::Sequential) => parse_all_blobs_sync(read_all_files(input)),
+ (IO::Parallel, Parsing::Parallel) => parse_all_blobs(read_all_files(input)),
+ }
}
#[tracing::instrument(skip(changed_content))]
@@ -41,6 +358,30 @@ fn read_all_files(changed_content: Vec) -> Vec> {
changed_content
.into_par_iter()
+ .map(|c| match (c.file, c.content) {
+ (Some(file), None) => match std::fs::read(file) {
+ Ok(content) => content,
+ Err(e) => {
+ event!(tracing::Level::ERROR, "Failed to read file: {:?}", e);
+ Default::default()
+ }
+ },
+ (None, Some(content)) => content.into_bytes(),
+ _ => Default::default(),
+ })
+ .collect()
+}
+
+#[tracing::instrument(skip(changed_content))]
+fn read_all_files_sync(changed_content: Vec) -> Vec> {
+ event!(
+ tracing::Level::INFO,
+ "Reading {:?} file(s)",
+ changed_content.len()
+ );
+
+ changed_content
+ .into_iter()
.map(|c| match (c.file, c.content) {
(Some(file), None) => std::fs::read(file).unwrap(),
(None, Some(content)) => content.into_bytes(),
@@ -72,3 +413,27 @@ fn parse_all_blobs(blobs: Vec>) -> Vec {
result.sort();
result
}
+
+#[tracing::instrument(skip(blobs))]
+fn parse_all_blobs_sync(blobs: Vec>) -> Vec {
+ let input: Vec<_> = blobs.iter().map(|blob| &blob[..]).collect();
+ let input = &input[..];
+
+ let mut result: Vec = input
+ .iter()
+ .map(|input| Extractor::unique(input, Default::default()))
+ .fold(FxHashSet::default(), |mut a, b| {
+ a.extend(b);
+ a
+ })
+ .into_iter()
+ .map(|s| {
+ // SAFETY: When we parsed the candidates, we already guaranteed that the byte slices
+ // are valid, therefore we don't have to re-check here when we want to convert it back
+ // to a string.
+ unsafe { String::from_utf8_unchecked(s.to_vec()) }
+ })
+ .collect();
+ result.sort();
+ result
+}
diff --git a/oxide/crates/core/src/parser.rs b/oxide/crates/core/src/parser.rs
index 16831afff..2ac3a97cd 100644
--- a/oxide/crates/core/src/parser.rs
+++ b/oxide/crates/core/src/parser.rs
@@ -2,6 +2,39 @@ use bstr::ByteSlice;
use fxhash::FxHashSet;
use tracing::trace;
+use crate::{cursor::Cursor, fast_skip::fast_skip};
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub enum ParseAction<'a> {
+ Consume,
+ Skip,
+ RestartAt(usize),
+
+ SingleCandidate(&'a [u8]),
+ MultipleCandidates(Vec<&'a [u8]>),
+ Done,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub enum Bracketing<'a> {
+ Included(&'a [u8]),
+ Wrapped(&'a [u8]),
+ None,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub struct SplitCandidate<'a> {
+ variant: &'a [u8],
+ utility: &'a [u8],
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub enum ValidationResult {
+ Invalid,
+ Valid,
+ Restart,
+}
+
#[derive(Default)]
pub struct ExtractorOptions {
pub preserve_spaces_in_arbitrary: bool,
@@ -11,9 +44,7 @@ pub struct Extractor<'a> {
opts: ExtractorOptions,
input: &'a [u8],
- pos: usize,
-
- prev: u8,
+ cursor: Cursor<'a>,
idx_start: usize,
idx_end: usize,
@@ -24,24 +55,24 @@ pub struct Extractor<'a> {
in_candidate: bool,
in_escape: bool,
+ discard_next: bool,
+
quote_stack: Vec,
bracket_stack: Vec,
- // buffer: [Option<&'a [u8]>; 8],
}
impl<'a> Extractor<'a> {
pub fn all(input: &'a [u8], opts: ExtractorOptions) -> Vec<&'a [u8]> {
- Self::new(input, opts).into_iter().collect()
+ Self::new(input, opts).flatten().collect()
}
pub fn unique(input: &'a [u8], opts: ExtractorOptions) -> FxHashSet<&'a [u8]> {
let mut candidates: FxHashSet<&[u8]> = Default::default();
candidates.reserve(100);
- candidates.extend(Self::new(input, opts).into_iter());
+ candidates.extend(Self::new(input, opts).flatten());
candidates
}
- #[cfg(test)]
pub fn unique_ord(input: &'a [u8], opts: ExtractorOptions) -> Vec<&'a [u8]> {
// This is an inefficient way to get an ordered, unique
// list as a Vec but it is only meant for testing.
@@ -59,8 +90,7 @@ impl<'a> Extractor<'a> {
Self {
opts,
input,
- pos: 0,
- prev: 0,
+ cursor: Cursor::new(input),
idx_start: 0,
idx_end: 0,
@@ -70,10 +100,11 @@ impl<'a> Extractor<'a> {
in_candidate: false,
in_escape: false,
+ discard_next: false,
+
idx_last: input.len(),
quote_stack: Vec::with_capacity(8),
bracket_stack: Vec::with_capacity(8),
- // buffer: [None; 8],
}
}
}
@@ -86,126 +117,222 @@ impl<'a> Extractor<'a> {
}
#[inline(always)]
- fn get_current_candidate(&mut self) -> Option<&'a [u8]> {
- let candidate = &self.input[self.idx_start..=self.idx_end];
+ fn get_current_candidate(&mut self) -> ParseAction<'a> {
+ if self.discard_next {
+ return ParseAction::Skip;
+ }
- if Extractor::is_valid_candidate_string(candidate) {
- Some(candidate)
- } else {
- None
+ let mut candidate = &self.input[self.idx_start..=self.idx_end];
+
+ while !candidate.is_empty() {
+ match Extractor::is_valid_candidate_string(candidate) {
+ ValidationResult::Valid => return ParseAction::SingleCandidate(candidate),
+ ValidationResult::Restart => return ParseAction::RestartAt(self.idx_start + 1),
+ _ => {}
+ }
+
+ match candidate.split_last() {
+ // At this point the candidate is technically invalid, however it can be that it
+ // has a few dangling characters attached to it. For example, think about a
+ // JavaScript object:
+ //
+ // ```js
+ // { underline: true }
+ // ```
+ //
+ // The candidate at this point will be `underline:`, which is invalid. However, we
+ // can assume in this case that the `:` should not be there, and therefore we can
+ // try to slice it off and retry the validation.
+ Some((b':' | b'/' | b'.', head)) => {
+ candidate = head;
+ }
+
+ // It could also be that we have the candidate is nested inside of bracket or quote
+ // pairs. In this case we want to retrieve the inner part and try to validate that
+ // inner part instead. For example, in a JavaScript array:
+ //
+ // ```js
+ // let myClasses = ["underline"]
+ // ```
+ //
+ // The `underline` is nested inside of quotes and in square brackets. Let's try to
+ // get the inner part and validate that instead.
+ _ => match Self::slice_surrounding(candidate) {
+ Some(shorter) if shorter != candidate => {
+ candidate = shorter;
+ }
+ _ => break,
+ },
+ }
+ }
+
+ ParseAction::Consume
+ }
+
+ #[inline(always)]
+ fn split_candidate(candidate: &'a [u8]) -> SplitCandidate {
+ let mut brackets = 0;
+ let mut idx_end = 0;
+
+ for (n, c) in candidate.iter().enumerate() {
+ match c {
+ b'[' => brackets += 1,
+ b']' if brackets > 0 => brackets -= 1,
+ b':' if brackets == 0 => idx_end = n + 1,
+ _ => {}
+ }
+ }
+
+ SplitCandidate {
+ variant: &candidate[0..idx_end],
+ utility: &candidate[idx_end..],
}
}
#[inline(always)]
- fn is_valid_candidate_string(candidate: &'a [u8]) -> bool {
- let original_candidate = &candidate;
- let mut offset = 0;
+ fn contains_in_constrained(candidate: &'a [u8], bytes: Vec) -> bool {
+ let mut brackets = 0;
- // Some special cases that we can ignore while testing the validations.
- if candidate.starts_with(b"!-") {
+ for c in candidate {
+ match c {
+ b'[' => brackets += 1,
+ b']' if brackets > 0 => brackets -= 1,
+ _ if brackets == 0 && bytes.contains(c) => return true,
+ _ => {}
+ }
+ }
+
+ false
+ }
+
+ #[inline(always)]
+ fn is_valid_candidate_string(candidate: &'a [u8]) -> ValidationResult {
+ let split_candidate = Extractor::split_candidate(candidate);
+
+ let mut offset = 0;
+ let utility = &split_candidate.utility;
+ let original_utility = &utility;
+
+ // Some special cases that we can ignore while validating
+ if utility.starts_with(b"!-") {
offset += 2;
- } else if candidate.starts_with(b"!") || candidate.starts_with(b"-") {
+ } else if utility.starts_with(b"!") || utility.starts_with(b"-") {
offset += 1;
}
+ // These are allowed in arbitrary values and in variants but nowhere else
+ if Extractor::contains_in_constrained(utility, vec![b'<', b'>']) {
+ return ValidationResult::Restart;
+ }
+
+ // It's an arbitrary property
+ if utility.starts_with(b"[")
+ && utility.ends_with(b"]")
+ && (utility.starts_with(b"['")
+ || utility.starts_with(b"[\"")
+ || utility.starts_with(b"[`"))
+ {
+ return ValidationResult::Restart;
+ }
+
// Pluck out the part that we are interested in.
- let candidate = &candidate[offset..];
+ let utility = &utility[offset..];
// Validations
// We should have _something_
- if candidate.is_empty() {
- return false;
+ if utility.is_empty() {
+ return ValidationResult::Invalid;
}
// = b'0' && candidate[0] <= b'9' && !candidate.contains(&b':') {
- return false;
+ if utility[0] >= b'0' && utility[0] <= b'9' && !utility.contains(&b':') {
+ return ValidationResult::Invalid;
}
// In case of an arbitrary property, we should have at least this structure: [a:b]
- if candidate.starts_with(b"[") && candidate.ends_with(b"]") {
+ if utility.starts_with(b"[") && utility.ends_with(b"]") {
// [a:b] is at least 5 characters long
- if candidate.len() < 5 {
- return false;
+ if utility.len() < 5 {
+ return ValidationResult::Invalid;
}
// Should contain a `:`
- if !candidate.contains(&b':') {
- return false;
+ if !utility.contains(&b':') {
+ return ValidationResult::Invalid;
}
// Now that we validated that the candidate is technically fine, let's ensure that it
// doesn't start with a `-` because that would make it invalid for arbitrary properties.
- if original_candidate.starts_with(b"-") || original_candidate.starts_with(b"!-") {
- return false;
+ if original_utility.starts_with(b"-") || original_utility.starts_with(b"!-") {
+ return ValidationResult::Invalid;
}
// The ':` must be preceded by a-Z0-9 because it represents a property name.
- let colon = candidate.find(":").unwrap();
+ let colon = utility.find(":").unwrap();
- if !candidate
+ if !utility
.chars()
.nth(colon - 1)
.map_or_else(|| false, |c| c.is_ascii_alphanumeric())
{
- return false;
+ return ValidationResult::Invalid;
}
}
// In case of an arbitrary property, we should not have a modifier of any kind
- if candidate.starts_with(b"[") {
+ if utility.starts_with(b"[") {
if let Some(first_non_escaped_closing_bracket_idx) =
- candidate.char_indices().position(|(s, _, other)| {
+ utility.char_indices().position(|(s, _, other)| {
other == ']'
- && candidate
+ && utility
.get((s - 1)..s)
.map(|c| !c.eq(b"\\"))
.unwrap_or(false)
})
{
- if let Some(next) = candidate
+ if let Some(next) = utility
.chars()
.nth(first_non_escaped_closing_bracket_idx + 1)
{
// `/` is the indicator for a modifier, this is not allowed after arbitrary
// properties
if next == '/' {
- return false;
+ return ValidationResult::Invalid;
}
}
}
}
- true
+ ValidationResult::Valid
}
#[inline(always)]
- fn parse_escaped(&mut self) -> bool {
+ fn parse_escaped(&mut self) -> ParseAction<'a> {
// If this character is escaped, we don't care about it.
// It gets consumed.
trace!("Escape::Consume");
self.in_escape = false;
- true
+ ParseAction::Consume
}
#[inline(always)]
- fn parse_arbitrary(&mut self, curr: u8, pos: usize) -> bool {
+ fn parse_arbitrary(&mut self) -> ParseAction<'a> {
// In this we could technically use memchr 6 times (then looped) to find the indexes / bounds of arbitrary valuesq
if self.in_escape {
return self.parse_escaped();
}
- match curr {
+ match self.cursor.curr {
b'\\' => {
// The `\` character is used to escape characters in arbitrary content _and_ to prevent the starting of arbitrary content
trace!("Arbitrary::Escape");
@@ -213,7 +340,7 @@ impl<'a> Extractor<'a> {
}
// Make sure the brackets are balanced
- b'[' => self.bracket_stack.push(curr),
+ b'[' => self.bracket_stack.push(self.cursor.curr),
b']' => match self.bracket_stack.last() {
// We've ended a nested bracket
Some(&last_bracket) if last_bracket == b'[' => {
@@ -222,12 +349,16 @@ impl<'a> Extractor<'a> {
// This is the last bracket meaning the end of arbitrary content
_ if !self.in_quotes() => {
+ if matches!(self.cursor.next, b'a'..=b'z' | b'A'..=b'Z' | b'0'..=b'9') {
+ return ParseAction::Consume;
+ }
+
trace!("Arbitrary::End\t");
self.in_arbitrary = false;
- if pos - self.idx_arbitrary_start == 1 {
+ if self.cursor.pos - self.idx_arbitrary_start == 1 {
// We have an empty arbitrary value, which is not allowed
- return false;
+ return ParseAction::Skip;
}
}
@@ -239,19 +370,22 @@ impl<'a> Extractor<'a> {
// These can "escape" the arbitrary value mode
// switching of `[` and `]` characters
b'"' | b'\'' | b'`' => match self.quote_stack.last() {
- Some(&last_quote) if last_quote == curr => {
+ Some(&last_quote) if last_quote == self.cursor.curr => {
trace!("Quote::End\t");
self.quote_stack.pop();
}
_ => {
trace!("Quote::Start\t");
- self.quote_stack.push(curr);
+ self.quote_stack.push(self.cursor.curr);
}
},
b' ' if !self.opts.preserve_spaces_in_arbitrary => {
trace!("Arbitrary::SkipAndEndEarly\t");
- return false;
+
+ // Restart the parser ahead of the arbitrary value
+ // It may pick up more candidates
+ return ParseAction::RestartAt(self.idx_arbitrary_start + 1);
}
// Arbitrary values allow any character inside them
@@ -262,51 +396,55 @@ impl<'a> Extractor<'a> {
}
}
- true
+ ParseAction::Consume
}
#[inline(always)]
- fn parse_start(&mut self, curr: u8, pos: usize) -> bool {
- match curr {
+ fn parse_start(&mut self) -> ParseAction<'a> {
+ match self.cursor.curr {
// Enter arbitrary value mode
b'[' => {
trace!("Arbitrary::Start\t");
self.in_arbitrary = true;
- self.idx_arbitrary_start = pos;
+ self.idx_arbitrary_start = self.cursor.pos;
- true
+ ParseAction::Consume
}
// Allowed first characters.
- b'@' | b'!' | b'-' | b'<' | b'0'..=b'9' | b'a'..=b'z' | b'A'..=b'Z' => {
+ b'@' | b'!' | b'-' | b'<' | b'>' | b'0'..=b'9' | b'a'..=b'z' | b'A'..=b'Z' => {
// TODO: A bunch of characters that we currently support but maybe we only want it behind
// a flag. E.g.: '' | '$' | '^' | '_'
+ // | '$' | '^' | '_'
+
+ // When the new candidate is preceded by a `:`, then we want to keep parsing, but
+ // throw away the full candidate because it can not be a valid candidate at the end
+ // of the day.
+ if self.cursor.prev == b':' {
+ self.discard_next = true;
+ }
trace!("Candidate::Start\t");
- true
+ ParseAction::Consume
}
- _ => false,
+ _ => ParseAction::Skip,
}
}
#[inline(always)]
- fn parse_continue(&mut self, prev: u8, curr: u8, pos: usize) -> bool {
- match curr {
+ fn parse_continue(&mut self) -> ParseAction<'a> {
+ match self.cursor.curr {
// Enter arbitrary value mode
- b'[' if prev == b'@'
- || prev == b'-'
- || prev == b' '
- || prev == b':' // Variant separator
- || prev == b'/' // Modifier separator
- || prev == b'!'
- || prev == b'\0' =>
+ b'[' if matches!(
+ self.cursor.prev,
+ b'@' | b'-' | b' ' | b':' | b'/' | b'!' | b'\0'
+ ) =>
{
trace!("Arbitrary::Start\t");
self.in_arbitrary = true;
- self.idx_arbitrary_start = pos;
+ self.idx_arbitrary_start = self.cursor.pos;
}
// Can't enter arbitrary value mode
@@ -314,154 +452,305 @@ impl<'a> Extractor<'a> {
b'[' => {
trace!("Arbitrary::Skip_Start\t");
- return false;
+ return ParseAction::Skip;
+ }
+
+ // A % can only appear at the end of the candidate itself. It can also only be after a
+ // digit 0-9. This covers the following cases:
+ // - from-15%
+ b'%' if self.cursor.prev.is_ascii_digit() => {
+ return match (self.cursor.at_end, self.cursor.next) {
+ // End of string == end of candidate == okay
+ (true, _) => ParseAction::Consume,
+
+ // Looks like the end of a candidate == okay
+ (_, b' ' | b'\'' | b'"' | b'`') => ParseAction::Consume,
+
+ // Otherwise, not a valid character in a candidate
+ _ => ParseAction::Skip,
+ };
+ }
+ b'%' => return ParseAction::Skip,
+
+ // < and > can only be part of a variant and only be the first or last character
+ b'<' | b'>' => {
+ // Can only be the first or last character
+ // E.g.:
+ // - :underline
+ // ^
+ if self.cursor.pos == self.idx_start || self.cursor.pos == self.idx_last {
+ trace!("Candidate::Consume\t");
+ }
+ // If it is in the middle, it can only be part of a stacked variant
+ // - dark::underline
+ // ^
+ else if self.cursor.prev == b':' || self.cursor.next == b':' {
+ trace!("Candidate::Consume\t");
+ } else {
+ return ParseAction::Skip;
+ }
}
// Allowed characters in the candidate itself
// None of these can come after a closing bracket `]`
- b'a'..=b'z'
- | b'A'..=b'Z'
- | b'0'..=b'9'
- | b'-'
- | b'_'
- | b'('
- | b')'
- | b'!'
- | b'@'
- | b'%'
- if prev != b']' =>
+ b'a'..=b'z' | b'A'..=b'Z' | b'0'..=b'9' | b'-' | b'_' | b'!' | b'@'
+ if self.cursor.prev != b']' =>
{
/* TODO: The `b'@'` is necessary for custom separators like _@, maybe we can handle this in a better way... */
trace!("Candidate::Consume\t");
}
+ // A dot (.) can only appear in the candidate itself (not the arbitrary part), if the previous
+ // and next characters are both digits. This covers the following cases:
+ // - p-1.5
+ b'.' if self.cursor.prev.is_ascii_digit() => match self.cursor.next {
+ next if next.is_ascii_digit() => {
+ trace!("Candidate::Consume\t");
+ }
+ _ => return ParseAction::Skip,
+ },
+
// Allowed characters in the candidate itself
// These MUST NOT appear at the end of the candidate
- b'/' | b':' | b'.' if pos + 1 < self.idx_last => {
+ b'/' | b':' if !self.cursor.at_end => {
trace!("Candidate::Consume\t");
}
- _ => return false,
+ _ => return ParseAction::Skip,
}
- true
+ ParseAction::Consume
}
#[inline(always)]
- fn can_be_candidate(&mut self, c: u8) -> bool {
+ fn can_be_candidate(&mut self) -> bool {
self.in_candidate
&& !self.in_arbitrary
- && (0..=127).contains(&c)
- && (self.idx_start == 0 || self.input[(self.idx_start - 1)] <= 127)
+ && (0..=127).contains(&self.cursor.curr)
+ && (self.idx_start == 0 || self.input[self.idx_start - 1] <= 127)
}
#[inline(always)]
- fn handle_skip(&mut self, pos: usize) {
+ fn handle_skip(&mut self) {
// In all other cases, we skip characters and reset everything so we can make new candidates
trace!("Characters::Skip\t");
- self.idx_start = pos;
- self.idx_end = pos;
+ self.idx_start = self.cursor.pos;
+ self.idx_end = self.cursor.pos;
self.in_candidate = false;
self.in_arbitrary = false;
self.in_escape = false;
}
#[inline(always)]
- fn parse_char(&mut self, prev: u8, curr: u8, pos: usize) -> bool {
+ fn parse_char(&mut self) -> ParseAction<'a> {
if self.in_arbitrary {
- self.parse_arbitrary(curr, pos)
+ self.parse_arbitrary()
} else if self.in_candidate {
- self.parse_continue(prev, curr, pos)
- } else if self.parse_start(curr, pos) {
+ self.parse_continue()
+ } else if self.parse_start() == ParseAction::Consume {
self.in_candidate = true;
- self.idx_start = pos;
- self.idx_end = pos;
+ self.idx_start = self.cursor.pos;
+ self.idx_end = self.cursor.pos;
- true
+ ParseAction::Consume
} else {
- false
+ ParseAction::Skip
}
}
#[inline(always)]
- fn yield_candidate(&mut self, pos: usize, curr: u8, did_consume: bool) -> Option<&'a [u8]> {
- // If we're still consuming characters, we keep going
- // Only exception is if we've hit the end of the input
- if did_consume && pos + 1 < self.idx_last {
- return None;
- }
-
- let candidate = if self.can_be_candidate(curr) {
+ fn yield_candidate(&mut self) -> ParseAction<'a> {
+ if self.can_be_candidate() {
self.get_current_candidate()
} else {
- None
- };
-
- self.handle_skip(pos);
-
- candidate
+ ParseAction::Consume
+ }
}
#[inline(always)]
- fn read(&mut self) -> (usize, u8) {
- if self.pos == self.idx_last {
- return (usize::MAX, 0);
- }
+ fn restart(&mut self, pos: usize) {
+ trace!("Parser::Restart\t{}", pos);
- let r = (self.pos, self.input[self.pos]);
- self.pos += 1;
+ self.idx_start = pos;
+ self.idx_end = pos;
+ self.idx_arbitrary_start = 0;
- r
+ self.in_arbitrary = false;
+ self.in_candidate = false;
+ self.in_escape = false;
+
+ self.discard_next = false;
+
+ self.quote_stack.clear();
+ self.bracket_stack.clear();
+ self.cursor.move_to(pos);
}
#[inline(always)]
- fn parse_and_yield(&mut self) -> Option> {
- let (pos, curr) = self.read();
- let did_consume = self.parse_char(self.prev, curr, pos);
+ fn without_surrounding(&self) -> Bracketing<'a> {
+ let range = self.idx_start..=self.idx_end;
+ let clipped = &self.input[range];
- if did_consume {
- self.idx_end = pos;
+ Self::slice_surrounding(clipped)
+ .map(Bracketing::Included)
+ .or_else(|| {
+ if self.idx_start == 0 || self.idx_end + 1 == self.idx_last {
+ return None;
+ }
+
+ let range = self.idx_start - 1..=self.idx_end + 1;
+ let clipped = &self.input[range];
+ Self::slice_surrounding(clipped).map(Bracketing::Wrapped)
+ })
+ .unwrap_or(Bracketing::None)
+ }
+
+ #[inline(always)]
+ fn is_balanced(input: &[u8]) -> bool {
+ let mut depth = 0isize;
+
+ for n in input {
+ match n {
+ b'[' | b'{' | b'(' => depth += 1,
+ b']' | b'}' | b')' => depth -= 1,
+ _ => continue,
+ }
+
+ if depth < 0 {
+ return false;
+ }
}
- let candidate = self.yield_candidate(pos, curr, did_consume);
- self.prev = curr;
+ depth == 0
+ }
- if curr == 0 {
- None
- } else {
- Some(candidate)
+ #[inline(always)]
+ fn slice_surrounding(input: &[u8]) -> Option<&[u8]> {
+ let mut prev = None;
+ let mut input = input;
+
+ loop {
+ let leading = input.first().unwrap_or(&0x00);
+ let trailing = input.last().unwrap_or(&0x00);
+
+ let needed = matches!(
+ (leading, trailing),
+ (b'(', b')')
+ | (b'{', b'}')
+ | (b'[', b']')
+ | (b'"', b'"')
+ | (b'`', b'`')
+ | (b'\'', b'\'')
+ );
+
+ if needed {
+ prev = Some(input);
+ input = &input[1..input.len() - 1];
+ continue;
+ } else if Self::is_balanced(input) && prev.is_some() {
+ return Some(input);
+ } else {
+ return prev;
+ }
+ }
+ }
+
+ #[inline(always)]
+ fn parse_and_yield(&mut self) -> ParseAction<'a> {
+ trace!("Cursor {}", self.cursor);
+
+ // Fast skipping of invalid characters
+ let can_skip_whitespace = false; // if self.opts.preserve_spaces_in_arbitrary { !self.in_arbitrary } else { true };
+ if can_skip_whitespace {
+ if let Some(pos) = fast_skip(&self.cursor) {
+ trace!("FastSkip::Restart\t{}", pos);
+ return ParseAction::RestartAt(pos);
+ }
+ }
+
+ let action = self.parse_char();
+
+ match action {
+ ParseAction::RestartAt(_) => return action,
+ ParseAction::Consume => {
+ self.idx_end = self.cursor.pos;
+
+ // If we're still consuming characters, we keep going
+ // Only exception is if we've hit the end of the input
+ if !self.cursor.at_end {
+ return action;
+ }
+ }
+ _ => {}
+ }
+
+ let action = self.yield_candidate();
+
+ match (&action, self.cursor.curr) {
+ (ParseAction::RestartAt(_), _) => action,
+ (_, 0x00) => ParseAction::Done,
+ (ParseAction::SingleCandidate(candidate), _) => self.generate_slices(candidate),
+ _ => ParseAction::RestartAt(self.cursor.pos + 1),
+ }
+ }
+
+ /// Peek inside `[]`, `{}`, and `()` pairs
+ /// to look for an additional candidate
+ #[inline(always)]
+ fn generate_slices(&mut self, candidate: &'a [u8]) -> ParseAction<'a> {
+ match self.without_surrounding() {
+ Bracketing::None => ParseAction::SingleCandidate(candidate),
+ Bracketing::Included(sliceable) if sliceable == candidate => {
+ ParseAction::SingleCandidate(candidate)
+ }
+ Bracketing::Included(sliceable) | Bracketing::Wrapped(sliceable) => {
+ let parts = vec![candidate, sliceable];
+ let parts = parts
+ .into_iter()
+ .filter(|v| !v.is_empty())
+ .collect::>();
+
+ ParseAction::MultipleCandidates(parts)
+ }
}
}
}
impl<'a> Iterator for Extractor<'a> {
- type Item = &'a [u8];
+ type Item = Vec<&'a [u8]>;
fn next(&mut self) -> Option {
- if self.pos == self.idx_last {
+ if self.cursor.at_end {
return None;
}
loop {
- let candidate = self.parse_and_yield()?;
- if candidate.is_some() {
- return candidate;
+ let result = self.parse_and_yield();
+
+ // Cursor control
+ match result {
+ ParseAction::RestartAt(pos) => self.restart(pos),
+ _ => self.cursor.advance_by(1),
}
- let candidate = self.parse_and_yield()?;
- if candidate.is_some() {
- return candidate;
+ // Candidate state control
+ match result {
+ ParseAction::SingleCandidate(_) => self.handle_skip(),
+ ParseAction::MultipleCandidates(_) => self.handle_skip(),
+ _ => {}
}
- let candidate = self.parse_and_yield()?;
- if candidate.is_some() {
- return candidate;
- }
-
- let candidate = self.parse_and_yield()?;
- if candidate.is_some() {
- return candidate;
- }
+ // Iterator results
+ return match result {
+ ParseAction::SingleCandidate(candidate) => Some(vec![candidate]),
+ ParseAction::MultipleCandidates(candidates) => Some(candidates),
+ ParseAction::Done => None,
+ _ => continue,
+ };
}
}
}
@@ -470,7 +759,7 @@ impl<'a> Iterator for Extractor<'a> {
mod test {
use super::*;
- fn please_trace() {
+ fn _please_trace() {
tracing_subscriber::fmt()
.with_max_level(tracing::Level::TRACE)
.with_span_events(tracing_subscriber::fmt::format::FmtSpan::ACTIVE)
@@ -542,8 +831,7 @@ mod test {
fn it_should_not_keep_spaces() {
let candidates = run("bg-[rgba(0, 0, 0)]", false);
- // TODO: This should be empty, because the arbitrary value is unbalanced.
- assert!(candidates.is_empty());
+ assert_eq!(candidates, vec!["rgba"]);
}
#[test]
@@ -564,7 +852,7 @@ mod test {
assert!(candidates.is_empty());
let candidates = run("[something]", false);
- assert!(candidates.is_empty());
+ assert_eq!(candidates, vec!["something"]);
let candidates = run("[color:red]/dark", false);
assert!(candidates.is_empty());
@@ -573,7 +861,7 @@ mod test {
assert!(candidates.is_empty());
let candidates = run(" [feature(slice_as_chunks)]", false);
- assert!(candidates.is_empty());
+ assert_eq!(candidates, vec!["feature(slice_as_chunks)"]);
let candidates = run("![feature(slice_as_chunks)]", false);
assert!(candidates.is_empty());
@@ -632,6 +920,7 @@ mod test {
assert_eq!(
candidates,
vec![
+ "div",
"class",
r#"dark:lg:hover:[&>*]:underline"#,
r#"[&_.foo\_\_bar]:hover:underline"#,
@@ -646,7 +935,7 @@ mod test {
assert_eq!(
candidates,
vec![
- // "p", // TODO: This is missing. Maybe?
+ "p",
"class",
"text-sm",
"text-blue-700",
@@ -655,22 +944,22 @@ mod test {
"software",
"update",
"is",
- "available.",
+ "available",
"See",
// "what", // what is dropped because it is followed by the fancy: ’
- // "s", // s is dropped because it is preceeded by the fancy: ’
+ // "s", // s is dropped because it is preceded by the fancy: ’
// "new", // Already seen
"in",
"version",
- "p", // Hmm, becuse "
"
]
);
}
#[test]
fn ignores_arbitrary_property_ish_things() {
+ // FIXME: () are only valid in an arbitrary
let candidates = run(" [feature(slice_as_chunks)]", false);
- assert!(candidates.is_empty());
+ assert_eq!(candidates, vec!["feature(slice_as_chunks)",]);
}
#[test]
@@ -697,7 +986,7 @@ mod test {
#[test]
fn bad_001() {
let candidates = run("[杛杛]/", false);
- assert!(candidates.is_empty())
+ assert_eq!(candidates, vec!["杛杛"]);
}
#[test]
@@ -708,7 +997,139 @@ mod test {
#[test]
fn bad_003() {
+ // TODO: This seems… wrong
let candidates = run(r"[:]", false);
- assert!(candidates.is_empty());
+ assert_eq!(candidates, vec!["", ":"]);
+ }
+
+ #[test]
+ fn classes_in_js_arrays() {
+ let candidates = run(
+ r#"let classes = ['bg-black', 'hover:px-0.5', 'text-[13px]', '[--my-var:1_/_2]', '[.foo_&]:px-[0]', '[.foo_&]:[color:red]']">"#,
+ false,
+ );
+ assert_eq!(
+ candidates,
+ vec![
+ "let",
+ "classes",
+ "bg-black",
+ "hover:px-0.5",
+ "text-[13px]",
+ "[--my-var:1_/_2]",
+ "--my-var:1_/_2",
+ "[.foo_&]:px-[0]",
+ "[.foo_&]:[color:red]",
+ ]
+ );
+ }
+
+ #[test]
+ fn classes_in_js_arrays_without_spaces() {
+ let candidates = run(
+ r#"let classes = ['bg-black','hover:px-0.5','text-[13px]','[--my-var:1_/_2]','[.foo_&]:px-[0]','[.foo_&]:[color:red]']">"#,
+ false,
+ );
+ assert_eq!(
+ candidates,
+ vec![
+ "let",
+ "classes",
+ "bg-black",
+ "hover:px-0.5",
+ "text-[13px]",
+ "[--my-var:1_/_2]",
+ "--my-var:1_/_2",
+ "[.foo_&]:px-[0]",
+ "[.foo_&]:[color:red]",
+ ]
+ );
+ }
+
+ #[test]
+ fn classes_as_object_keys() {
+ let candidates = run(
+ r#"
"#,
+ false,
+ );
+ assert_eq!(
+ candidates,
+ vec!["div", "underline", "isActive", "px-1.5", "isOnline"]
+ );
+ }
+
+ #[test]
+ fn multiple_nested_candidates() {
+ let candidates = run(r#"{color:red}"#, false);
+ assert_eq!(candidates, vec!["color:red"]);
+ }
+
+ #[test]
+ fn percent_ended_candidates() {
+ let candidates = run(
+ r#""#,
+ false,
+ );
+ assert_eq!(
+ candidates,
+ vec![
+ "!--",
+ "This",
+ "should",
+ "work",
+ "underline",
+ "from-50%",
+ "flex",
+ "--"
+ ]
+ );
+ }
+
+ #[test]
+ fn ruby_percent_formatted_strings() {
+ let candidates = run(r#"%w[hover:flex]"#, false);
+ assert_eq!(candidates, vec!["w", "hover:flex"]);
+ }
+
+ #[test]
+ fn candidate_slicing() {
+ let result = Extractor::slice_surrounding(&b".foo_&]:px-[0"[..])
+ .map(std::str::from_utf8)
+ .transpose()
+ .unwrap();
+ assert_eq!(result, None);
+
+ let result = Extractor::slice_surrounding(&b"[.foo_&]:px-[0]"[..])
+ .map(std::str::from_utf8)
+ .transpose()
+ .unwrap();
+ assert_eq!(result, Some("[.foo_&]:px-[0]"));
+
+ let result = Extractor::slice_surrounding(&b"{[.foo_&]:px-[0]}"[..])
+ .map(std::str::from_utf8)
+ .transpose()
+ .unwrap();
+ assert_eq!(result, Some("[.foo_&]:px-[0]"));
+
+ let result = Extractor::slice_surrounding(&b"![foo:bar]"[..])
+ .map(std::str::from_utf8)
+ .transpose()
+ .unwrap();
+ assert_eq!(result, None);
+
+ let result = Extractor::slice_surrounding(&b"[\"pt-1.5\"]"[..])
+ .map(std::str::from_utf8)
+ .transpose()
+ .unwrap();
+ assert_eq!(result, Some("pt-1.5"));
+
+ let count = 1_000;
+ let crazy = format!("{}[.foo_&]:px-[0]{}", "[".repeat(count), "]".repeat(count));
+
+ let result = Extractor::slice_surrounding(crazy.as_bytes())
+ .map(std::str::from_utf8)
+ .transpose()
+ .unwrap();
+ assert_eq!(result, Some("[.foo_&]:px-[0]"));
}
}
diff --git a/oxide/crates/core/tests/auto_content.rs b/oxide/crates/core/tests/auto_content.rs
new file mode 100644
index 000000000..f7a185f6c
--- /dev/null
+++ b/oxide/crates/core/tests/auto_content.rs
@@ -0,0 +1,248 @@
+#[cfg(test)]
+mod auto_content {
+ use std::fs;
+ use std::process::Command;
+
+ use tailwindcss_core::*;
+ use tempfile::tempdir;
+
+ fn test(paths_with_content: &[(&str, Option<&str>)]) -> Vec {
+ // Create a temporary working directory
+ let dir = tempdir().unwrap().into_path();
+
+ // Initialize this directory as a git repository
+ let _ = Command::new("git").arg("init").current_dir(&dir).output();
+
+ // Create the necessary files
+ for (path, contents) in paths_with_content {
+ let path = dir.join(path);
+ let parent = path.parent().unwrap();
+ if !parent.exists() {
+ fs::create_dir_all(parent).unwrap();
+ }
+
+ match contents {
+ Some(contents) => fs::write(path, contents).unwrap(),
+ None => fs::write(path, "").unwrap(),
+ }
+ }
+
+ let base = format!("{}", dir.display());
+
+ // Resolve all content paths for the (temporary) current working directory
+ let mut paths: Vec<_> = resolve_content_paths(ContentPathInfo { base: base.clone() })
+ .into_iter()
+ .map(|x| x.replace(&format!("{}/", &base), ""))
+ .collect();
+
+ // Sort the output for easier comparison (depending on internal datastructure the order
+ // _could_ be random)
+ paths.sort();
+
+ paths
+ }
+
+ #[test]
+ fn it_should_work_with_a_set_of_root_files() {
+ let globs = test(&[
+ ("index.html", None),
+ ("a.html", None),
+ ("b.html", None),
+ ("c.html", None),
+ ]);
+ assert_eq!(globs, vec!["a.html", "b.html", "c.html", "index.html"]);
+ }
+
+ #[test]
+ fn it_should_work_with_a_set_of_root_files_and_ignore_ignored_files() {
+ let globs = test(&[
+ (".gitignore", Some("b.html")),
+ ("index.html", None),
+ ("a.html", None),
+ ("b.html", None),
+ ("c.html", None),
+ ]);
+ assert_eq!(globs, vec!["a.html", "c.html", "index.html"]);
+ }
+
+ #[test]
+ fn it_should_list_all_files_in_the_public_folder_explicitly() {
+ let globs = test(&[
+ ("index.html", None),
+ ("public/a.html", None),
+ ("public/b.html", None),
+ ("public/c.html", None),
+ ]);
+ assert_eq!(
+ globs,
+ vec![
+ "index.html",
+ "public/a.html",
+ "public/b.html",
+ "public/c.html",
+ ]
+ );
+ }
+
+ #[test]
+ fn it_should_list_nested_folders_explicitly_in_the_public_folder() {
+ let globs = test(&[
+ ("index.html", None),
+ ("public/a.html", None),
+ ("public/b.html", None),
+ ("public/c.html", None),
+ ("public/nested/a.html", None),
+ ("public/nested/b.html", None),
+ ("public/nested/c.html", None),
+ ("public/nested/again/a.html", None),
+ ("public/very/deeply/nested/a.html", None),
+ ]);
+ assert_eq!(
+ globs,
+ vec![
+ "index.html",
+ "public/a.html",
+ "public/b.html",
+ "public/c.html",
+ "public/nested/a.html",
+ "public/nested/again/a.html",
+ "public/nested/b.html",
+ "public/nested/c.html",
+ "public/very/deeply/nested/a.html",
+ ]
+ );
+ }
+
+ #[test]
+ fn it_should_list_all_files_in_the_public_folder_explicitly_except_ignored_files() {
+ let globs = test(&[
+ (".gitignore", Some("public/b.html\na.html")),
+ ("index.html", None),
+ ("public/a.html", None),
+ ("public/b.html", None),
+ ("public/c.html", None),
+ ]);
+ assert_eq!(globs, vec!["index.html", "public/c.html",]);
+ }
+
+ #[test]
+ fn it_should_use_a_glob_for_top_level_folders() {
+ let globs = test(&[
+ ("index.html", None),
+ ("src/a.html", None),
+ ("src/b.html", None),
+ ("src/c.html", None),
+ ]);
+ assert_eq!(globs, vec!["index.html", "src/**/*.{py,tpl,js,vue,php,mjs,cts,jsx,tsx,rhtml,slim,handlebars,twig,rs,njk,svelte,liquid,pug,md,ts,heex,mts,astro,nunjucks,rb,eex,haml,cjs,html,hbs,jade,aspx,razor,erb,mustache,mdx}"]);
+ }
+
+ #[test]
+ fn it_should_ignore_binary_files() {
+ let globs = test(&[
+ ("index.html", None),
+ ("a.mp4", None),
+ ("b.png", None),
+ ("c.lock", None),
+ ]);
+ assert_eq!(globs, vec!["index.html"]);
+ }
+
+ #[test]
+ fn it_should_ignore_known_extensions() {
+ let globs = test(&[
+ ("index.html", None),
+ ("a.css", None),
+ ("b.sass", None),
+ ("c.less", None),
+ ]);
+ assert_eq!(globs, vec!["index.html"]);
+ }
+
+ #[test]
+ fn it_should_ignore_known_files() {
+ let globs = test(&[
+ ("index.html", None),
+ ("package-lock.json", None),
+ ("yarn.lock", None),
+ ]);
+ assert_eq!(globs, vec!["index.html"]);
+ }
+
+ #[test]
+ fn it_should_ignore_and_expand_nested_ignored_folders() {
+ let globs = test(&[
+ // Explicitly listed root files
+ ("foo.html", None),
+ ("bar.html", None),
+ ("baz.html", None),
+ // Nested folder A, using glob
+ ("nested-a/foo.html", None),
+ ("nested-a/bar.html", None),
+ ("nested-a/baz.html", None),
+ // Nested folder B, with deeply nested files, using glob
+ ("nested-b/deeply-nested/foo.html", None),
+ ("nested-b/deeply-nested/bar.html", None),
+ ("nested-b/deeply-nested/baz.html", None),
+ // Nested folder C, with ignored sub-folder
+ ("nested-c/foo.html", None),
+ ("nested-c/bar.html", None),
+ ("nested-c/baz.html", None),
+ // Ignored folder
+ ("nested-c/.gitignore", Some("ignored-folder/")),
+ ("nested-c/ignored-folder/foo.html", None),
+ ("nested-c/ignored-folder/bar.html", None),
+ ("nested-c/ignored-folder/baz.html", None),
+ // Deeply nested, without issues
+ ("nested-c/sibling-folder/foo.html", None),
+ ("nested-c/sibling-folder/bar.html", None),
+ ("nested-c/sibling-folder/baz.html", None),
+ // Nested folder D, with deeply nested ignored folder
+ ("nested-d/foo.html", None),
+ ("nested-d/bar.html", None),
+ ("nested-d/baz.html", None),
+ ("nested-d/.gitignore", Some("deep/")),
+ ("nested-d/very/deeply/nested/deep/foo.html", None),
+ ("nested-d/very/deeply/nested/deep/bar.html", None),
+ ("nested-d/very/deeply/nested/deep/baz.html", None),
+ ("nested-d/very/deeply/nested/foo.html", None),
+ ("nested-d/very/deeply/nested/bar.html", None),
+ ("nested-d/very/deeply/nested/baz.html", None),
+ ("nested-d/very/deeply/nested/directory/foo.html", None),
+ ("nested-d/very/deeply/nested/directory/bar.html", None),
+ ("nested-d/very/deeply/nested/directory/baz.html", None),
+ ("nested-d/very/deeply/nested/directory/again/foo.html", None),
+ ]);
+
+ assert_eq!(
+ globs,
+ vec![
+ // Listed explicitly because they are in the root
+ "bar.html",
+ "baz.html",
+ "foo.html",
+
+ // Listed using a deep glob, because nothing inside is ignored
+ "nested-a/**/*.{py,tpl,js,vue,php,mjs,cts,jsx,tsx,rhtml,slim,handlebars,twig,rs,njk,svelte,liquid,pug,md,ts,heex,mts,astro,nunjucks,rb,eex,haml,cjs,html,hbs,jade,aspx,razor,erb,mustache,mdx}",
+
+ // Listed using a deep glob, because nothing inside is ignored (but contains deeply
+ // nested folders)
+ "nested-b/**/*.{py,tpl,js,vue,php,mjs,cts,jsx,tsx,rhtml,slim,handlebars,twig,rs,njk,svelte,liquid,pug,md,ts,heex,mts,astro,nunjucks,rb,eex,haml,cjs,html,hbs,jade,aspx,razor,erb,mustache,mdx}",
+
+ // Listed using a shallow glob, because `nested-c` contains ignored folders, deeply
+ // nested globs can't be used anymore
+ "nested-c/*.{py,tpl,js,vue,php,mjs,cts,jsx,tsx,rhtml,slim,handlebars,twig,rs,njk,svelte,liquid,pug,md,ts,heex,mts,astro,nunjucks,rb,eex,haml,cjs,html,hbs,jade,aspx,razor,erb,mustache,mdx}",
+
+ // Deeply nested folder can use a deep glob again
+ "nested-c/sibling-folder/**/*.{py,tpl,js,vue,php,mjs,cts,jsx,tsx,rhtml,slim,handlebars,twig,rs,njk,svelte,liquid,pug,md,ts,heex,mts,astro,nunjucks,rb,eex,haml,cjs,html,hbs,jade,aspx,razor,erb,mustache,mdx}",
+
+ // The deeply nested folder can use a deep glob, however all of its parents can
+ // only contain a shallow glob because of the ignored folder
+ "nested-d/*.{py,tpl,js,vue,php,mjs,cts,jsx,tsx,rhtml,slim,handlebars,twig,rs,njk,svelte,liquid,pug,md,ts,heex,mts,astro,nunjucks,rb,eex,haml,cjs,html,hbs,jade,aspx,razor,erb,mustache,mdx}",
+ "nested-d/very/*.{py,tpl,js,vue,php,mjs,cts,jsx,tsx,rhtml,slim,handlebars,twig,rs,njk,svelte,liquid,pug,md,ts,heex,mts,astro,nunjucks,rb,eex,haml,cjs,html,hbs,jade,aspx,razor,erb,mustache,mdx}",
+ "nested-d/very/deeply/*.{py,tpl,js,vue,php,mjs,cts,jsx,tsx,rhtml,slim,handlebars,twig,rs,njk,svelte,liquid,pug,md,ts,heex,mts,astro,nunjucks,rb,eex,haml,cjs,html,hbs,jade,aspx,razor,erb,mustache,mdx}",
+ "nested-d/very/deeply/nested/*.{py,tpl,js,vue,php,mjs,cts,jsx,tsx,rhtml,slim,handlebars,twig,rs,njk,svelte,liquid,pug,md,ts,heex,mts,astro,nunjucks,rb,eex,haml,cjs,html,hbs,jade,aspx,razor,erb,mustache,mdx}",
+ "nested-d/very/deeply/nested/directory/**/*.{py,tpl,js,vue,php,mjs,cts,jsx,tsx,rhtml,slim,handlebars,twig,rs,njk,svelte,liquid,pug,md,ts,heex,mts,astro,nunjucks,rb,eex,haml,cjs,html,hbs,jade,aspx,razor,erb,mustache,mdx}",
+ ]
+ );
+ }
+}
diff --git a/oxide/crates/node/Cargo.toml b/oxide/crates/node/Cargo.toml
index 54995fa9e..0ded64922 100644
--- a/oxide/crates/node/Cargo.toml
+++ b/oxide/crates/node/Cargo.toml
@@ -8,8 +8,8 @@ crate-type = ["cdylib"]
[dependencies]
# Default enable napi4 feature, see https://nodejs.org/api/n-api.html#node-api-version-matrix
-napi = { version = "2.10.0", default-features = false, features = ["napi4"] }
-napi-derive = "2.11.1"
+napi = { version = "2.13.1", default-features = false, features = ["napi4"] }
+napi-derive = "2.13.0"
tailwindcss-core = { path = "../core" }
rayon = "1.5.3"
diff --git a/oxide/crates/node/package.json b/oxide/crates/node/package.json
index f9841b69f..19f7eae8c 100644
--- a/oxide/crates/node/package.json
+++ b/oxide/crates/node/package.json
@@ -19,7 +19,7 @@
},
"license": "MIT",
"devDependencies": {
- "@napi-rs/cli": "^2.15.2"
+ "@napi-rs/cli": "^2.16.5"
},
"engines": {
"node": ">= 10"
diff --git a/oxide/crates/node/src/lib.rs b/oxide/crates/node/src/lib.rs
index 20961adcb..f974de1d5 100644
--- a/oxide/crates/node/src/lib.rs
+++ b/oxide/crates/node/src/lib.rs
@@ -1,3 +1,4 @@
+use napi::bindgen_prelude::{FromNapiValue, ToNapiValue};
use std::path::PathBuf;
#[macro_use]
@@ -11,16 +12,42 @@ pub struct ChangedContent {
pub extension: String,
}
-#[napi]
-pub fn parse_candidate_strings_from_files(changed_content: Vec) -> Vec {
- tailwindcss_core::parse_candidate_strings_from_files(
- changed_content
- .into_iter()
- .map(|changed_content| tailwindcss_core::ChangedContent {
- file: changed_content.file.map(PathBuf::from),
- content: changed_content.content,
- extension: changed_content.extension,
- })
- .collect(),
- )
+impl From for tailwindcss_core::ChangedContent {
+ fn from(changed_content: ChangedContent) -> Self {
+ tailwindcss_core::ChangedContent {
+ file: changed_content.file.map(PathBuf::from),
+ content: changed_content.content,
+ extension: changed_content.extension,
+ }
+ }
+}
+
+#[derive(Debug, Clone)]
+#[napi(object)]
+pub struct ContentPathInfo {
+ pub base: String,
+}
+
+#[napi]
+pub fn resolve_content_paths(args: ContentPathInfo) -> Vec {
+ tailwindcss_core::resolve_content_paths(tailwindcss_core::ContentPathInfo { base: args.base })
+}
+
+#[derive(Debug)]
+#[napi]
+pub enum IO {
+ Sequential = 0b0001,
+ Parallel = 0b0010,
+}
+
+#[derive(Debug)]
+#[napi]
+pub enum Parsing {
+ Sequential = 0b0100,
+ Parallel = 0b1000,
+}
+
+#[napi]
+pub fn parse_candidate_strings(input: Vec, strategy: u8) -> Vec {
+ tailwindcss_core::parse_candidate_strings(input.into_iter().map(Into::into).collect(), strategy)
}
diff --git a/package-lock.json b/package-lock.json
index ecdc2141e..16d8237ee 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,52 +16,49 @@
"@alloc/quick-lru": "^5.2.0",
"@tailwindcss/oxide": "file:oxide/crates/node",
"arg": "^5.0.2",
- "browserslist": "^4.21.5",
+ "browserslist": "^4.22.1",
"chokidar": "^3.5.3",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
- "fast-glob": "^3.2.12",
+ "fast-glob": "^3.3.2",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
- "jiti": "^1.18.2",
- "lightningcss": "^1.18.0",
- "lilconfig": "^2.1.0",
+ "jiti": "^1.21.0",
+ "lightningcss": "^1.22.1",
+ "lilconfig": "^3.0.0",
"micromatch": "^4.0.5",
"normalize-path": "^3.0.0",
"object-hash": "^3.0.0",
"picocolors": "^1.0.0",
- "postcss": "^8.4.23",
+ "postcss": "^8.4.31",
"postcss-import": "^15.1.0",
"postcss-js": "^4.0.1",
- "postcss-load-config": "^4.0.1",
+ "postcss-load-config": "^4.0.2",
"postcss-nested": "^6.0.1",
- "postcss-selector-parser": "^6.0.11",
+ "postcss-selector-parser": "^6.0.12",
"postcss-value-parser": "^4.2.0",
- "resolve": "^1.22.2",
- "sucrase": "^3.32.0"
+ "resolve": "^1.22.8",
+ "sucrase": "^3.34.0"
},
"bin": {
"tailwind": "lib/cli.js",
"tailwindcss": "lib/cli.js"
},
"devDependencies": {
- "@swc/cli": "^0.1.62",
- "@swc/core": "^1.3.55",
- "@swc/jest": "^0.2.26",
+ "@swc/cli": "^0.1.63",
+ "@swc/core": "^1.3.95",
+ "@swc/jest": "^0.2.29",
"@swc/register": "^0.1.10",
- "autoprefixer": "^10.4.14",
"concurrently": "^8.0.1",
- "cssnano": "^6.0.0",
- "esbuild": "^0.17.18",
- "eslint": "^8.39.0",
- "eslint-config-prettier": "^8.8.0",
+ "eslint": "^8.52.0",
+ "eslint-config-prettier": "^9.0.0",
"eslint-plugin-prettier": "^4.2.1",
- "jest": "^29.5.0",
- "jest-diff": "^29.5.0",
+ "jest": "^29.7.0",
+ "jest-diff": "^29.7.0",
"prettier": "^2.8.8",
"rimraf": "^5.0.0",
"source-map-js": "^1.0.2",
- "turbo": "^1.9.3"
+ "turbo": "^1.10.16"
},
"engines": {
"node": ">=16.0.0"
@@ -71,7 +68,7 @@
"name": "@tailwindcss/integrations-content-resolution",
"version": "0.0.0",
"devDependencies": {
- "postcss": "^8.4.23",
+ "postcss": "^8.4.31",
"postcss-cli": "^10.1.0"
}
},
@@ -79,14 +76,14 @@
"name": "@tailwindcss/integrations-parcel",
"version": "0.0.0",
"devDependencies": {
- "parcel": "^2.8.3"
+ "parcel": "2.10.3"
}
},
"integrations/postcss-cli": {
"name": "@tailwindcss/integrations-postcss-cli",
"version": "0.0.0",
"devDependencies": {
- "postcss": "^8.4.23",
+ "postcss": "^8.4.31",
"postcss-cli": "^10.1.0"
}
},
@@ -94,7 +91,7 @@
"name": "@tailwindcss/integrations-rollup",
"version": "0.0.0",
"devDependencies": {
- "rollup": "^3.21.0",
+ "rollup": "^4.5.0",
"rollup-plugin-postcss": "^4.0.2"
}
},
@@ -102,9 +99,9 @@
"name": "@tailwindcss/integrations-rollup-sass",
"version": "0.0.0",
"devDependencies": {
- "rollup": "^3.21.0",
+ "rollup": "^4.5.0",
"rollup-plugin-postcss": "^4.0.2",
- "sass": "^1.62.0"
+ "sass": "^1.69.5"
}
},
"integrations/tailwindcss-cli": {
@@ -119,7 +116,7 @@
"version": "0.0.0",
"devDependencies": {
"isomorphic-fetch": "^3.0.0",
- "vite": "^4.3.2"
+ "vite": "^5.0.2"
}
},
"integrations/webpack-4": {
@@ -604,6 +601,15 @@
}
}
},
+ "node_modules/@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/@alloc/quick-lru": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
@@ -616,12 +622,12 @@
}
},
"node_modules/@ampproject/remapping": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
- "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
"dev": true,
"dependencies": {
- "@jridgewell/gen-mapping": "^0.1.0",
+ "@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
@@ -629,46 +635,119 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.18.6",
+ "version": "7.22.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
+ "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/highlight": "^7.18.6"
+ "@babel/highlight": "^7.22.13",
+ "chalk": "^2.4.2"
},
"engines": {
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/code-frame/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/@babel/compat-data": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz",
- "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz",
+ "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz",
- "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz",
+ "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.21.3",
- "@babel/helper-compilation-targets": "^7.20.7",
- "@babel/helper-module-transforms": "^7.21.2",
- "@babel/helpers": "^7.21.0",
- "@babel/parser": "^7.21.3",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.3",
- "@babel/types": "^7.21.3",
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.22.15",
+ "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/helper-module-transforms": "^7.22.20",
+ "@babel/helpers": "^7.22.15",
+ "@babel/parser": "^7.22.16",
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.22.20",
+ "@babel/types": "^7.22.19",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
- "json5": "^2.2.2",
- "semver": "^6.3.0"
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
@@ -684,13 +763,22 @@
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
"dev": true
},
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
"node_modules/@babel/generator": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz",
- "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz",
+ "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.21.3",
+ "@babel/types": "^7.22.15",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
@@ -699,37 +787,20 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "dev": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz",
- "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
+ "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.20.5",
- "@babel/helper-validator-option": "^7.18.6",
- "browserslist": "^4.21.3",
+ "@babel/compat-data": "^7.22.9",
+ "@babel/helper-validator-option": "^7.22.15",
+ "browserslist": "^4.21.9",
"lru-cache": "^5.1.1",
- "semver": "^6.3.0"
+ "semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
@@ -741,6 +812,15 @@
"yallist": "^3.0.2"
}
},
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
"node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -748,151 +828,152 @@
"dev": true
},
"node_modules/@babel/helper-environment-visitor": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
- "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-function-name": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz",
- "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
+ "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.20.7",
- "@babel/types": "^7.21.0"
+ "@babel/template": "^7.22.5",
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-hoist-variables": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
- "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
- "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+ "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.21.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz",
- "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz",
+ "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==",
"dev": true,
"dependencies": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.20.2",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.19.1",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.2",
- "@babel/types": "^7.21.2"
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-module-imports": "^7.22.15",
+ "@babel/helper-simple-access": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-validator-identifier": "^7.22.20"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
- "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
+ "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-simple-access": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
- "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+ "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.20.2"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-split-export-declaration": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
- "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.19.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
- "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
+ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
- "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
- "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
+ "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz",
- "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz",
+ "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.0",
- "@babel/types": "^7.21.0"
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.22.15",
+ "@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.18.6",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
+ "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
"dev": true,
- "license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
"js-tokens": "^4.0.0"
},
"engines": {
@@ -901,8 +982,9 @@
},
"node_modules/@babel/highlight/node_modules/ansi-styles": {
"version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
- "license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -912,8 +994,9 @@
},
"node_modules/@babel/highlight/node_modules/chalk": {
"version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -925,37 +1008,42 @@
},
"node_modules/@babel/highlight/node_modules/color-convert": {
"version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
- "license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/@babel/highlight/node_modules/color-name": {
"version": "1.1.3",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
},
"node_modules/@babel/highlight/node_modules/escape-string-regexp": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/@babel/highlight/node_modules/has-flag": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/@babel/highlight/node_modules/supports-color": {
"version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
- "license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -964,9 +1052,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz",
- "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==",
+ "version": "7.22.16",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz",
+ "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -1036,12 +1124,12 @@
}
},
"node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
- "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz",
+ "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1138,12 +1226,12 @@
}
},
"node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz",
- "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz",
+ "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.19.0"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1153,33 +1241,33 @@
}
},
"node_modules/@babel/template": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
- "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.18.6",
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7"
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz",
- "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz",
+ "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.21.3",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.21.0",
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.21.3",
- "@babel/types": "^7.21.3",
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.22.15",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.22.16",
+ "@babel/types": "^7.22.19",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -1188,13 +1276,13 @@
}
},
"node_modules/@babel/types": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz",
- "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==",
+ "version": "7.22.19",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz",
+ "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==",
"dev": true,
"dependencies": {
- "@babel/helper-string-parser": "^7.19.4",
- "@babel/helper-validator-identifier": "^7.19.1",
+ "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.19",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -1241,9 +1329,9 @@
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz",
- "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.7.tgz",
+ "integrity": "sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==",
"cpu": [
"arm"
],
@@ -1257,9 +1345,9 @@
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz",
- "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.7.tgz",
+ "integrity": "sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==",
"cpu": [
"arm64"
],
@@ -1273,9 +1361,9 @@
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz",
- "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.7.tgz",
+ "integrity": "sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==",
"cpu": [
"x64"
],
@@ -1289,9 +1377,9 @@
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz",
- "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.7.tgz",
+ "integrity": "sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==",
"cpu": [
"arm64"
],
@@ -1305,9 +1393,9 @@
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz",
- "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.7.tgz",
+ "integrity": "sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==",
"cpu": [
"x64"
],
@@ -1321,9 +1409,9 @@
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz",
- "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.7.tgz",
+ "integrity": "sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==",
"cpu": [
"arm64"
],
@@ -1337,9 +1425,9 @@
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz",
- "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.7.tgz",
+ "integrity": "sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==",
"cpu": [
"x64"
],
@@ -1353,9 +1441,9 @@
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz",
- "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.7.tgz",
+ "integrity": "sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==",
"cpu": [
"arm"
],
@@ -1369,9 +1457,9 @@
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz",
- "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.7.tgz",
+ "integrity": "sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==",
"cpu": [
"arm64"
],
@@ -1385,9 +1473,9 @@
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz",
- "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.7.tgz",
+ "integrity": "sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==",
"cpu": [
"ia32"
],
@@ -1401,9 +1489,9 @@
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz",
- "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.7.tgz",
+ "integrity": "sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==",
"cpu": [
"loong64"
],
@@ -1417,9 +1505,9 @@
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz",
- "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.7.tgz",
+ "integrity": "sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==",
"cpu": [
"mips64el"
],
@@ -1433,9 +1521,9 @@
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz",
- "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.7.tgz",
+ "integrity": "sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==",
"cpu": [
"ppc64"
],
@@ -1449,9 +1537,9 @@
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz",
- "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.7.tgz",
+ "integrity": "sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==",
"cpu": [
"riscv64"
],
@@ -1465,9 +1553,9 @@
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz",
- "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.7.tgz",
+ "integrity": "sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==",
"cpu": [
"s390x"
],
@@ -1481,9 +1569,9 @@
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz",
- "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.7.tgz",
+ "integrity": "sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==",
"cpu": [
"x64"
],
@@ -1497,9 +1585,9 @@
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz",
- "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.7.tgz",
+ "integrity": "sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==",
"cpu": [
"x64"
],
@@ -1513,9 +1601,9 @@
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz",
- "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.7.tgz",
+ "integrity": "sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==",
"cpu": [
"x64"
],
@@ -1529,9 +1617,9 @@
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz",
- "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.7.tgz",
+ "integrity": "sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==",
"cpu": [
"x64"
],
@@ -1545,9 +1633,9 @@
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz",
- "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.7.tgz",
+ "integrity": "sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==",
"cpu": [
"arm64"
],
@@ -1561,9 +1649,9 @@
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz",
- "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.7.tgz",
+ "integrity": "sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==",
"cpu": [
"ia32"
],
@@ -1577,9 +1665,9 @@
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz",
- "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.7.tgz",
+ "integrity": "sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==",
"cpu": [
"x64"
],
@@ -1608,23 +1696,23 @@
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz",
- "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==",
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz",
+ "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==",
"dev": true,
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
"node_modules/@eslint/eslintrc": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz",
- "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
+ "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.5.1",
+ "espree": "^9.6.0",
"globals": "^13.19.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
@@ -1646,9 +1734,9 @@
"dev": true
},
"node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "version": "13.23.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -1673,20 +1761,21 @@
}
},
"node_modules/@eslint/js": {
- "version": "8.39.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz",
- "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==",
+ "version": "8.53.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
+ "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.11.8",
+ "version": "0.11.13",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
+ "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
"dev": true,
- "license": "Apache-2.0",
"dependencies": {
- "@humanwhocodes/object-schema": "^1.2.1",
+ "@humanwhocodes/object-schema": "^2.0.1",
"debug": "^4.1.1",
"minimatch": "^3.0.5"
},
@@ -1707,9 +1796,10 @@
}
},
"node_modules/@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "dev": true,
- "license": "BSD-3-Clause"
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
+ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
+ "dev": true
},
"node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
@@ -1737,16 +1827,16 @@
}
},
"node_modules/@jest/console": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz",
- "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
+ "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
"slash": "^3.0.0"
},
"engines": {
@@ -1754,12 +1844,12 @@
}
},
"node_modules/@jest/console/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -1771,46 +1861,46 @@
}
},
"node_modules/@jest/console/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/@jest/core": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz",
- "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
+ "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
"dev": true,
"dependencies": {
- "@jest/console": "^29.5.0",
- "@jest/reporters": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/console": "^29.7.0",
+ "@jest/reporters": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
- "jest-changed-files": "^29.5.0",
- "jest-config": "^29.5.0",
- "jest-haste-map": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-resolve-dependencies": "^29.5.0",
- "jest-runner": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
- "jest-watcher": "^29.5.0",
+ "jest-changed-files": "^29.7.0",
+ "jest-config": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-resolve-dependencies": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "jest-watcher": "^29.7.0",
"micromatch": "^4.0.4",
- "pretty-format": "^29.5.0",
+ "pretty-format": "^29.7.0",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
},
@@ -1827,12 +1917,12 @@
}
},
"node_modules/@jest/core/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -1844,9 +1934,9 @@
}
},
"node_modules/@jest/core/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
@@ -1864,27 +1954,27 @@
}
},
"node_modules/@jest/environment": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz",
- "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
+ "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
"dev": true,
"dependencies": {
- "@jest/fake-timers": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
- "jest-mock": "^29.5.0"
+ "jest-mock": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/environment/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -1896,63 +1986,63 @@
}
},
"node_modules/@jest/environment/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/@jest/expect": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz",
- "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
"dev": true,
"dependencies": {
- "expect": "^29.5.0",
- "jest-snapshot": "^29.5.0"
+ "expect": "^29.7.0",
+ "jest-snapshot": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/expect-utils": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz",
- "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
+ "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
"dev": true,
"dependencies": {
- "jest-get-type": "^29.4.3"
+ "jest-get-type": "^29.6.3"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/fake-timers": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz",
- "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
+ "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@sinonjs/fake-timers": "^10.0.2",
"@types/node": "*",
- "jest-message-util": "^29.5.0",
- "jest-mock": "^29.5.0",
- "jest-util": "^29.5.0"
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/fake-timers/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -1964,36 +2054,36 @@
}
},
"node_modules/@jest/fake-timers/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/@jest/globals": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz",
- "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
+ "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
"dev": true,
"dependencies": {
- "@jest/environment": "^29.5.0",
- "@jest/expect": "^29.5.0",
- "@jest/types": "^29.5.0",
- "jest-mock": "^29.5.0"
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "jest-mock": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/globals/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -2005,26 +2095,26 @@
}
},
"node_modules/@jest/globals/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/@jest/reporters": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz",
- "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
+ "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
"dev": true,
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@jridgewell/trace-mapping": "^0.3.15",
+ "@jest/console": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
"@types/node": "*",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
@@ -2032,13 +2122,13 @@
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
"istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^5.1.0",
+ "istanbul-lib-instrument": "^6.0.0",
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.1.3",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-worker": "^29.5.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
"slash": "^3.0.0",
"string-length": "^4.0.1",
"strip-ansi": "^6.0.0",
@@ -2057,12 +2147,12 @@
}
},
"node_modules/@jest/reporters/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -2074,33 +2164,33 @@
}
},
"node_modules/@jest/reporters/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/@jest/schemas": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz",
- "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
"dev": true,
"dependencies": {
- "@sinclair/typebox": "^0.25.16"
+ "@sinclair/typebox": "^0.27.8"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/source-map": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz",
- "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
+ "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
"dev": true,
"dependencies": {
- "@jridgewell/trace-mapping": "^0.3.15",
+ "@jridgewell/trace-mapping": "^0.3.18",
"callsites": "^3.0.0",
"graceful-fs": "^4.2.9"
},
@@ -2109,13 +2199,13 @@
}
},
"node_modules/@jest/test-result": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz",
- "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
+ "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
"dev": true,
"dependencies": {
- "@jest/console": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/console": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
},
@@ -2124,12 +2214,12 @@
}
},
"node_modules/@jest/test-result/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -2141,23 +2231,23 @@
}
},
"node_modules/@jest/test-result/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/@jest/test-sequencer": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz",
- "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
+ "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
"dev": true,
"dependencies": {
- "@jest/test-result": "^29.5.0",
+ "@jest/test-result": "^29.7.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
+ "jest-haste-map": "^29.7.0",
"slash": "^3.0.0"
},
"engines": {
@@ -2165,22 +2255,22 @@
}
},
"node_modules/@jest/transform": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz",
- "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
+ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
"dev": true,
"dependencies": {
"@babel/core": "^7.11.6",
- "@jest/types": "^29.5.0",
- "@jridgewell/trace-mapping": "^0.3.15",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
"babel-plugin-istanbul": "^6.1.1",
"chalk": "^4.0.0",
"convert-source-map": "^2.0.0",
"fast-json-stable-stringify": "^2.1.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-util": "^29.5.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
"micromatch": "^4.0.4",
"pirates": "^4.0.4",
"slash": "^3.0.0",
@@ -2191,12 +2281,12 @@
}
},
"node_modules/@jest/transform/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -2208,9 +2298,9 @@
}
},
"node_modules/@jest/transform/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
@@ -2232,13 +2322,13 @@
}
},
"node_modules/@jridgewell/gen-mapping": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
- "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
- "dev": true,
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"dependencies": {
- "@jridgewell/set-array": "^1.0.0",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
@@ -2268,52 +2358,38 @@
"@jridgewell/trace-mapping": "^0.3.9"
}
},
- "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "dev": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.17",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
- "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
+ "version": "0.3.18",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
+ "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
"dependencies": {
"@jridgewell/resolve-uri": "3.1.0",
"@jridgewell/sourcemap-codec": "1.4.14"
}
},
"node_modules/@lezer/common": {
- "version": "0.15.12",
- "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz",
- "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.1.1.tgz",
+ "integrity": "sha512-aAPB9YbvZHqAW+bIwiuuTDGB4DG0sYNRObGLxud8cW7osw1ZQxfDuTZ8KQiqfZ0QJGcR34CvpTMDXEyo/+Htgg==",
"dev": true
},
"node_modules/@lezer/lr": {
- "version": "0.15.8",
- "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz",
- "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==",
+ "version": "1.3.14",
+ "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.14.tgz",
+ "integrity": "sha512-z5mY4LStlA3yL7aHT/rqgG614cfcvklS+8oFRFBYrs4YaWLJyKKM4+nN6KopToX0o9Hj6zmH6M5kinOYuy06ug==",
"dev": true,
"dependencies": {
- "@lezer/common": "^0.15.0"
+ "@lezer/common": "^1.0.0"
}
},
"node_modules/@lmdb/lmdb-darwin-arm64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz",
- "integrity": "sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.8.5.tgz",
+ "integrity": "sha512-KPDeVScZgA1oq0CiPBcOa3kHIqU+pTOwRFDIhxvmf8CTNvqdZQYp5cCKW0bUk69VygB2PuTiINFWbY78aR2pQw==",
"cpu": [
"arm64"
],
@@ -2324,9 +2400,9 @@
]
},
"node_modules/@lmdb/lmdb-darwin-x64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz",
- "integrity": "sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.8.5.tgz",
+ "integrity": "sha512-w/sLhN4T7MW1nB3R/U8WK5BgQLz904wh+/SmA2jD8NnF7BLLoUgflCNxOeSPOWp8geP6nP/+VjWzZVip7rZ1ug==",
"cpu": [
"x64"
],
@@ -2337,9 +2413,9 @@
]
},
"node_modules/@lmdb/lmdb-linux-arm": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz",
- "integrity": "sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.8.5.tgz",
+ "integrity": "sha512-c0TGMbm2M55pwTDIfkDLB6BpIsgxV4PjYck2HiOX+cy/JWiBXz32lYbarPqejKs9Flm7YVAKSILUducU9g2RVg==",
"cpu": [
"arm"
],
@@ -2350,9 +2426,9 @@
]
},
"node_modules/@lmdb/lmdb-linux-arm64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz",
- "integrity": "sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.8.5.tgz",
+ "integrity": "sha512-vtbZRHH5UDlL01TT5jB576Zox3+hdyogvpcbvVJlmU5PdL3c5V7cj1EODdh1CHPksRl+cws/58ugEHi8bcj4Ww==",
"cpu": [
"arm64"
],
@@ -2363,9 +2439,9 @@
]
},
"node_modules/@lmdb/lmdb-linux-x64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz",
- "integrity": "sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.8.5.tgz",
+ "integrity": "sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ==",
"cpu": [
"x64"
],
@@ -2376,9 +2452,9 @@
]
},
"node_modules/@lmdb/lmdb-win32-x64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz",
- "integrity": "sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.8.5.tgz",
+ "integrity": "sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ==",
"cpu": [
"x64"
],
@@ -2389,13 +2465,13 @@
]
},
"node_modules/@mischnic/json-sourcemap": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz",
- "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==",
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.1.tgz",
+ "integrity": "sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==",
"dev": true,
"dependencies": {
- "@lezer/common": "^0.15.7",
- "@lezer/lr": "^0.15.4",
+ "@lezer/common": "^1.0.0",
+ "@lezer/lr": "^1.0.0",
"json5": "^2.2.1"
},
"engines": {
@@ -2422,9 +2498,9 @@
}
},
"node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-2.2.0.tgz",
- "integrity": "sha512-Z9LFPzfoJi4mflGWV+rv7o7ZbMU5oAU9VmzCgL240KnqDW65Y2HFCT3MW06/ITJSnbVLacmcEJA8phywK7JinQ==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz",
+ "integrity": "sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==",
"cpu": [
"arm64"
],
@@ -2435,9 +2511,9 @@
]
},
"node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-2.2.0.tgz",
- "integrity": "sha512-vq0tT8sjZsy4JdSqmadWVw6f66UXqUCabLmUVHZwUFzMgtgoIIQjT4VVRHKvlof3P/dMCkbMJ5hB1oJ9OWHaaw==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz",
+ "integrity": "sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==",
"cpu": [
"x64"
],
@@ -2448,9 +2524,9 @@
]
},
"node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-2.2.0.tgz",
- "integrity": "sha512-SaJ3Qq4lX9Syd2xEo9u3qPxi/OB+5JO/ngJKK97XDpa1C587H9EWYO6KD8995DAjSinWvdHKRrCOXVUC5fvGOg==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz",
+ "integrity": "sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==",
"cpu": [
"arm"
],
@@ -2461,9 +2537,9 @@
]
},
"node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-2.2.0.tgz",
- "integrity": "sha512-hlxxLdRmPyq16QCutUtP8Tm6RDWcyaLsRssaHROatgnkOxdleMTgetf9JsdncL8vLh7FVy/RN9i3XR5dnb9cRA==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz",
+ "integrity": "sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==",
"cpu": [
"arm64"
],
@@ -2474,9 +2550,9 @@
]
},
"node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-2.2.0.tgz",
- "integrity": "sha512-94y5PJrSOqUNcFKmOl7z319FelCLAE0rz/jPCWS+UtdMZvpa4jrQd+cJPQCLp2Fes1yAW/YUQj/Di6YVT3c3Iw==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz",
+ "integrity": "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==",
"cpu": [
"x64"
],
@@ -2487,9 +2563,9 @@
]
},
"node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-2.2.0.tgz",
- "integrity": "sha512-XrC0JzsqQSvOyM3t04FMLO6z5gCuhPE6k4FXuLK5xf52ZbdvcFe1yBmo7meCew9B8G2f0T9iu9t3kfTYRYROgA==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz",
+ "integrity": "sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==",
"cpu": [
"x64"
],
@@ -2500,9 +2576,9 @@
]
},
"node_modules/@napi-rs/cli": {
- "version": "2.15.2",
- "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-2.15.2.tgz",
- "integrity": "sha512-80tBCtCnEhAmFtB9oPM0FL74uW7fAmtpeqjvERH7Q1z/aZzCAs/iNfE7U3ehpwg9Q07Ob2Eh/+1guyCdX/p24w==",
+ "version": "2.16.5",
+ "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-2.16.5.tgz",
+ "integrity": "sha512-mFEzwrg4IOLngGd2/P6yeqIWgwQNn59Z08n1rndu6kLDq1gg954NH9cM1O9Da0RJuybt46p43lqgSsnAY2mxqA==",
"dev": true,
"bin": {
"napi": "scripts/index.js"
@@ -2545,21 +2621,21 @@
}
},
"node_modules/@parcel/bundler-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.8.3.tgz",
- "integrity": "sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.10.3.tgz",
+ "integrity": "sha512-a+yq8zH8mrg6FBgUjrC+r3z6cfK7dQVMNzduEU/LF52Z4FVAmTR8gefl/YGmAbquJL3PFAHdhICrljYnQ1WQkg==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/graph": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/graph": "3.0.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -2567,15 +2643,15 @@
}
},
"node_modules/@parcel/cache": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.8.3.tgz",
- "integrity": "sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.10.3.tgz",
+ "integrity": "sha512-fNNOFOl4dwOlzP8iAa+evZ+3BakX0sV+3+PiYA0zaps7EmPmkTSGDhCWzaYRSO8fhmNDlrUX9Xh7b/X738LFqA==",
"dev": true,
"dependencies": {
- "@parcel/fs": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/utils": "2.8.3",
- "lmdb": "2.5.2"
+ "@parcel/fs": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "lmdb": "2.8.5"
},
"engines": {
"node": ">= 12.0.0"
@@ -2585,13 +2661,13 @@
"url": "https://opencollective.com/parcel"
},
"peerDependencies": {
- "@parcel/core": "^2.8.3"
+ "@parcel/core": "^2.10.3"
}
},
"node_modules/@parcel/codeframe": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.8.3.tgz",
- "integrity": "sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.10.3.tgz",
+ "integrity": "sha512-70ovUzeXBowDMjK+1xaLT4hm3jZUK7EbaCS6tN1cmmr0S1TDhU7g37jnpni+u9de9Lc/lErwTaDVXUf9WSQzQw==",
"dev": true,
"dependencies": {
"chalk": "^4.1.0"
@@ -2605,16 +2681,16 @@
}
},
"node_modules/@parcel/compressor-raw": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.8.3.tgz",
- "integrity": "sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.10.3.tgz",
+ "integrity": "sha512-5SUZ80uwu7o0D+0RjhjBnSUXJRgaayfqVQtBRP3U7/W/Bb1Ixm1yDGXtDlyCbzimWqWVMMJ4/eVCEW7I8Ln4Bw==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3"
+ "@parcel/plugin": "2.10.3"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -2622,70 +2698,72 @@
}
},
"node_modules/@parcel/config-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.8.3.tgz",
- "integrity": "sha512-o/A/mbrO6X/BfGS65Sib8d6SSG45NYrNooNBkH/o7zbOBSRQxwyTlysleK1/3Wa35YpvFyLOwgfakqCtbGy4fw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.10.3.tgz",
+ "integrity": "sha512-gHVw5cKZVA9h/J4E33qQLg3QG3cYMyWVruyVzF8dFy/Rar5ebXMof1f38IhR2BIavpoThbnCnxgD4SVK8xOPag==",
"dev": true,
"dependencies": {
- "@parcel/bundler-default": "2.8.3",
- "@parcel/compressor-raw": "2.8.3",
- "@parcel/namer-default": "2.8.3",
- "@parcel/optimizer-css": "2.8.3",
- "@parcel/optimizer-htmlnano": "2.8.3",
- "@parcel/optimizer-image": "2.8.3",
- "@parcel/optimizer-svgo": "2.8.3",
- "@parcel/optimizer-terser": "2.8.3",
- "@parcel/packager-css": "2.8.3",
- "@parcel/packager-html": "2.8.3",
- "@parcel/packager-js": "2.8.3",
- "@parcel/packager-raw": "2.8.3",
- "@parcel/packager-svg": "2.8.3",
- "@parcel/reporter-dev-server": "2.8.3",
- "@parcel/resolver-default": "2.8.3",
- "@parcel/runtime-browser-hmr": "2.8.3",
- "@parcel/runtime-js": "2.8.3",
- "@parcel/runtime-react-refresh": "2.8.3",
- "@parcel/runtime-service-worker": "2.8.3",
- "@parcel/transformer-babel": "2.8.3",
- "@parcel/transformer-css": "2.8.3",
- "@parcel/transformer-html": "2.8.3",
- "@parcel/transformer-image": "2.8.3",
- "@parcel/transformer-js": "2.8.3",
- "@parcel/transformer-json": "2.8.3",
- "@parcel/transformer-postcss": "2.8.3",
- "@parcel/transformer-posthtml": "2.8.3",
- "@parcel/transformer-raw": "2.8.3",
- "@parcel/transformer-react-refresh-wrap": "2.8.3",
- "@parcel/transformer-svg": "2.8.3"
+ "@parcel/bundler-default": "2.10.3",
+ "@parcel/compressor-raw": "2.10.3",
+ "@parcel/namer-default": "2.10.3",
+ "@parcel/optimizer-css": "2.10.3",
+ "@parcel/optimizer-htmlnano": "2.10.3",
+ "@parcel/optimizer-image": "2.10.3",
+ "@parcel/optimizer-svgo": "2.10.3",
+ "@parcel/optimizer-swc": "2.10.3",
+ "@parcel/packager-css": "2.10.3",
+ "@parcel/packager-html": "2.10.3",
+ "@parcel/packager-js": "2.10.3",
+ "@parcel/packager-raw": "2.10.3",
+ "@parcel/packager-svg": "2.10.3",
+ "@parcel/packager-wasm": "2.10.3",
+ "@parcel/reporter-dev-server": "2.10.3",
+ "@parcel/resolver-default": "2.10.3",
+ "@parcel/runtime-browser-hmr": "2.10.3",
+ "@parcel/runtime-js": "2.10.3",
+ "@parcel/runtime-react-refresh": "2.10.3",
+ "@parcel/runtime-service-worker": "2.10.3",
+ "@parcel/transformer-babel": "2.10.3",
+ "@parcel/transformer-css": "2.10.3",
+ "@parcel/transformer-html": "2.10.3",
+ "@parcel/transformer-image": "2.10.3",
+ "@parcel/transformer-js": "2.10.3",
+ "@parcel/transformer-json": "2.10.3",
+ "@parcel/transformer-postcss": "2.10.3",
+ "@parcel/transformer-posthtml": "2.10.3",
+ "@parcel/transformer-raw": "2.10.3",
+ "@parcel/transformer-react-refresh-wrap": "2.10.3",
+ "@parcel/transformer-svg": "2.10.3"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
},
"peerDependencies": {
- "@parcel/core": "^2.8.3"
+ "@parcel/core": "^2.10.3"
}
},
"node_modules/@parcel/core": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.8.3.tgz",
- "integrity": "sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.10.3.tgz",
+ "integrity": "sha512-b64FdqJi4CX6iWeLZNfmwdTrC1VLPXHMuFusf1sTZTuRBFw2oRpgJvuiqsrInaZ82o3lbLMo4a9/5LtNaZKa+Q==",
"dev": true,
"dependencies": {
"@mischnic/json-sourcemap": "^0.1.0",
- "@parcel/cache": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/events": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/graph": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/package-manager": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/cache": "2.10.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/events": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/graph": "3.0.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/package-manager": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/profiler": "2.10.3",
+ "@parcel/rust": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3",
"abortcontroller-polyfill": "^1.1.9",
"base-x": "^3.0.8",
"browserslist": "^4.6.6",
@@ -2693,9 +2771,9 @@
"dotenv": "^7.0.0",
"dotenv-expand": "^5.1.0",
"json5": "^2.2.0",
- "msgpackr": "^1.5.4",
+ "msgpackr": "^1.9.9",
"nullthrows": "^1.1.1",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"engines": {
"node": ">= 12.0.0"
@@ -2706,18 +2784,24 @@
}
},
"node_modules/@parcel/core/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
"bin": {
- "semver": "bin/semver"
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/@parcel/diagnostic": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.8.3.tgz",
- "integrity": "sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.10.3.tgz",
+ "integrity": "sha512-Hf3xG9UVkDABDXWi89TjEP5U1CLUUj81kx/QFeupBXnzt5GEQZBhkxdBq6+4w17Mmuvk7H5uumNsSptkWq9PCA==",
"dev": true,
"dependencies": {
"@mischnic/json-sourcemap": "^0.1.0",
@@ -2732,9 +2816,9 @@
}
},
"node_modules/@parcel/events": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.8.3.tgz",
- "integrity": "sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.10.3.tgz",
+ "integrity": "sha512-I3FsZYmKzgvo1f6frUWdF7hWwpeWTshPrFqpn9ICDXs/1Hjlf32jNXLBqon9b9XUDfMw4nSRMFMzMLJpbdheGA==",
"dev": true,
"engines": {
"node": ">= 12.0.0"
@@ -2745,16 +2829,16 @@
}
},
"node_modules/@parcel/fs": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.8.3.tgz",
- "integrity": "sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.10.3.tgz",
+ "integrity": "sha512-0w4+Lc7B5VpwqX4GQfjnI5qN7tc9qbGPSPsf/6U2YPWU4dkGsMfPEmLBx7dZvJy3UiGxpsjMMuRHa14+jJ5QrQ==",
"dev": true,
"dependencies": {
- "@parcel/fs-search": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"@parcel/watcher": "^2.0.7",
- "@parcel/workers": "2.8.3"
+ "@parcel/workers": "2.10.3"
},
"engines": {
"node": ">= 12.0.0"
@@ -2764,29 +2848,13 @@
"url": "https://opencollective.com/parcel"
},
"peerDependencies": {
- "@parcel/core": "^2.8.3"
- }
- },
- "node_modules/@parcel/fs-search": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.8.3.tgz",
- "integrity": "sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==",
- "dev": true,
- "dependencies": {
- "detect-libc": "^1.0.3"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
+ "@parcel/core": "^2.10.3"
}
},
"node_modules/@parcel/graph": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.8.3.tgz",
- "integrity": "sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-3.0.3.tgz",
+ "integrity": "sha512-zUA8KsjR2+v2Q2bFBF7zBk33ejriDiRA/+LK5QE8LrFpkaDa+gjkx76h2x7JqGXIDHNos446KX4nz2OUCVwrNQ==",
"dev": true,
"dependencies": {
"nullthrows": "^1.1.1"
@@ -2799,31 +2867,14 @@
"url": "https://opencollective.com/parcel"
}
},
- "node_modules/@parcel/hash": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.8.3.tgz",
- "integrity": "sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==",
- "dev": true,
- "dependencies": {
- "detect-libc": "^1.0.3",
- "xxhash-wasm": "^0.4.2"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
"node_modules/@parcel/logger": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.8.3.tgz",
- "integrity": "sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.10.3.tgz",
+ "integrity": "sha512-mAVTA0NgbbwEUzkzjBqjqyBBax+8bscRaZIAsEqMiSFWGcUmRgwVlH/jy3QDkFc7OHzwvdPK+XlMLV7s/3DJNw==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/events": "2.8.3"
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/events": "2.10.3"
},
"engines": {
"node": ">= 12.0.0"
@@ -2834,9 +2885,9 @@
}
},
"node_modules/@parcel/markdown-ansi": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.8.3.tgz",
- "integrity": "sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.10.3.tgz",
+ "integrity": "sha512-uzN1AJmp1oYh/ZLdD9WA7xP5u/L3Bs/6AFZz5s695zus74RCx9OtQcF0Yyl1hbKVJDfuw9WFuzMfPL/9p/C5DQ==",
"dev": true,
"dependencies": {
"chalk": "^4.1.0"
@@ -2850,18 +2901,18 @@
}
},
"node_modules/@parcel/namer-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.8.3.tgz",
- "integrity": "sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.10.3.tgz",
+ "integrity": "sha512-s7kgB/x7TISIHhen9IK4+CBXgmRJYahVS+oiAbMm18vcUVuXeZDBeTedOco6zUQIKuB71vx/4DBIuiIp6Q9hpg==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"nullthrows": "^1.1.1"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -2869,15 +2920,18 @@
}
},
"node_modules/@parcel/node-resolver-core": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.8.3.tgz",
- "integrity": "sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-3.1.3.tgz",
+ "integrity": "sha512-o7XK1KiK3ymO39bhc5qfDQiZpKA1xQmKg0TEPDNiLIXHKLEBheqarhw3Nwwt9MOFibfwsisQtDTIS+2v9A640A==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@mischnic/json-sourcemap": "^0.1.0",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"engines": {
"node": ">= 12.0.0"
@@ -2888,31 +2942,37 @@
}
},
"node_modules/@parcel/node-resolver-core/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
"bin": {
- "semver": "bin/semver"
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/@parcel/optimizer-css": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.8.3.tgz",
- "integrity": "sha512-JotGAWo8JhuXsQDK0UkzeQB0UR5hDAKvAviXrjqB4KM9wZNLhLleeEAW4Hk8R9smCeQFP6Xg/N/NkLDpqMwT3g==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.10.3.tgz",
+ "integrity": "sha512-Pc8jwV3U9w5DJDNcRQML5FlKdpPGnuCTtk1P+9FfyEUjdxoVxC+YeMIQcE961clAgl47qh7eNObXtsX/lb04Dg==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/utils": "2.10.3",
"browserslist": "^4.6.6",
"lightningcss": "^1.16.1",
"nullthrows": "^1.1.1"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -2920,12 +2980,12 @@
}
},
"node_modules/@parcel/optimizer-htmlnano": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.8.3.tgz",
- "integrity": "sha512-L8/fHbEy8Id2a2E0fwR5eKGlv9VYDjrH9PwdJE9Za9v1O/vEsfl/0T/79/x129l5O0yB6EFQkFa20MiK3b+vOg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.10.3.tgz",
+ "integrity": "sha512-KTIZOy19tYeG0j3JRv435A6jnTh3O1LPhsUfo6Xlea7Cz1yUUxAANl9MG8lHZKYbZCFFKbfk2I9QBycmcYxAAw==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3",
+ "@parcel/plugin": "2.10.3",
"htmlnano": "^2.0.0",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5",
@@ -2933,7 +2993,7 @@
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3009,40 +3069,43 @@
}
},
"node_modules/@parcel/optimizer-image": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.8.3.tgz",
- "integrity": "sha512-SD71sSH27SkCDNUNx9A3jizqB/WIJr3dsfp+JZGZC42tpD/Siim6Rqy9M4To/BpMMQIIiEXa5ofwS+DgTEiEHQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.10.3.tgz",
+ "integrity": "sha512-hbeI6+GoddJxib8MlK5iafbCm1oy3p0UL9bb8s5mjTZiHtj1PORlH8gP7mT1WlYOCgoy45QdHelcrmL9fJ8kBA==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
- "detect-libc": "^1.0.3"
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
+ },
+ "peerDependencies": {
+ "@parcel/core": "^2.10.3"
}
},
"node_modules/@parcel/optimizer-svgo": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.8.3.tgz",
- "integrity": "sha512-9KQed99NZnQw3/W4qBYVQ7212rzA9EqrQG019TIWJzkA9tjGBMIm2c/nXpK1tc3hQ3e7KkXkFCQ3C+ibVUnHNA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.10.3.tgz",
+ "integrity": "sha512-STN7sdjz6wGnQnvy22SkQaLi5C1E+j7J0xy96T0/mCP9KoIsBDE7panCtf53p4sWCNRsXNVrXt5KrpCC+u0LHg==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"svgo": "^2.4.0"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3117,22 +3180,22 @@
"node": ">=10.13.0"
}
},
- "node_modules/@parcel/optimizer-terser": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.8.3.tgz",
- "integrity": "sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA==",
+ "node_modules/@parcel/optimizer-swc": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-swc/-/optimizer-swc-2.10.3.tgz",
+ "integrity": "sha512-Cxy05CysiKbv/PtX++ETje4cbhCJySmN6EmFyQBs0jvzsUdWwqnsttavYRoMviUUK9mjm/i5q+cyewBO/8Oc5g==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
- "nullthrows": "^1.1.1",
- "terser": "^5.2.0"
+ "@parcel/utils": "2.10.3",
+ "@swc/core": "^1.3.36",
+ "nullthrows": "^1.1.1"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3140,18 +3203,19 @@
}
},
"node_modules/@parcel/package-manager": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.8.3.tgz",
- "integrity": "sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.10.3.tgz",
+ "integrity": "sha512-KqOW5oUmElrcb7d+hOC68ja1PI2qbPZTwdduduRvB90DAweMt7r1046+W2Df5bd+p9iv72DxGEn9xomX+qz9MA==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
- "semver": "^5.7.1"
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/node-resolver-core": "3.1.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3",
+ "semver": "^7.5.2"
},
"engines": {
"node": ">= 12.0.0"
@@ -3161,32 +3225,39 @@
"url": "https://opencollective.com/parcel"
},
"peerDependencies": {
- "@parcel/core": "^2.8.3"
+ "@parcel/core": "^2.10.3"
}
},
"node_modules/@parcel/package-manager/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
"bin": {
- "semver": "bin/semver"
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/@parcel/packager-css": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.8.3.tgz",
- "integrity": "sha512-WyvkMmsurlHG8d8oUVm7S+D+cC/T3qGeqogb7sTI52gB6uiywU7lRCizLNqGFyFGIxcVTVHWnSHqItBcLN76lA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.10.3.tgz",
+ "integrity": "sha512-Jk165fFU2XyWjN7agKy+YvvRoOJbWIb57VlVDgBHanB5ptS7aCildambrljGNTivatr+zFrchE5ZDNUFXZhYnw==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3194,20 +3265,20 @@
}
},
"node_modules/@parcel/packager-html": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.8.3.tgz",
- "integrity": "sha512-OhPu1Hx1RRKJodpiu86ZqL8el2Aa4uhBHF6RAL1Pcrh2EhRRlPf70Sk0tC22zUpYL7es+iNKZ/n0Rl+OWSHWEw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.10.3.tgz",
+ "integrity": "sha512-bEI6FhBvERuoqyi/h681qGImTRBUnqNW4sKoFO67q/bxWLevXtEGMFOeqridiVOjYQH9s1kKwM/ln/UwKVazZw==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3215,22 +3286,23 @@
}
},
"node_modules/@parcel/packager-js": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.8.3.tgz",
- "integrity": "sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.10.3.tgz",
+ "integrity": "sha512-SjLSDw0juC7bEk/0geUtSVXaZqm2SgHL2IZaPnkoBQxVqzh2MdvAxJCrS2LxiR/cuQRfvQ5bnoJA7Kk1w2VNAg==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"globals": "^13.2.0",
"nullthrows": "^1.1.1"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3238,9 +3310,9 @@
}
},
"node_modules/@parcel/packager-js/node_modules/globals": {
- "version": "13.19.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
- "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
+ "version": "13.23.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -3253,16 +3325,16 @@
}
},
"node_modules/@parcel/packager-raw": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.8.3.tgz",
- "integrity": "sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.10.3.tgz",
+ "integrity": "sha512-d236tnP2ViOnUJR0+qG6EHw7MUWSA14fLKnYYzL5SRQ4BVo5XC+CM9HKN5O4YCCVu3+9Su2X1+RESo5sxbFq7w==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3"
+ "@parcel/plugin": "2.10.3"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3270,19 +3342,36 @@
}
},
"node_modules/@parcel/packager-svg": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.8.3.tgz",
- "integrity": "sha512-mvIoHpmv5yzl36OjrklTDFShLUfPFTwrmp1eIwiszGdEBuQaX7JVI3Oo2jbVQgcN4W7J6SENzGQ3Q5hPTW3pMw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.10.3.tgz",
+ "integrity": "sha512-Rk/GokkNs9uLwiy6Ux/xXpD8nMVhA9LN9eIbVqi8+eR42xUmICmEoUoSm+CnekkXxY2a5e3mKpL7JZbT9vOEhA==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"posthtml": "^0.16.4"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/packager-wasm": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-wasm/-/packager-wasm-2.10.3.tgz",
+ "integrity": "sha512-j6VmU84LKy+XRHgZQFoASG98P50a9tkeT3LYRrol3RGGQrvx7PT3/D6rOqbnQjR2iGnaHzYoAlgg9jIMmWXYiA==",
+ "dev": true,
+ "dependencies": {
+ "@parcel/plugin": "2.10.3"
+ },
+ "engines": {
+ "node": ">=12.0.0",
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3290,12 +3379,30 @@
}
},
"node_modules/@parcel/plugin": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.8.3.tgz",
- "integrity": "sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.10.3.tgz",
+ "integrity": "sha512-FgsfGKSdtSV1EcO2NWFCZaY14W0PnEEF8vZaRCTML3vKfUbilYs/biaqf5geFOu4DwRuCC8unOTqFy7dLwcK/A==",
"dev": true,
"dependencies": {
- "@parcel/types": "2.8.3"
+ "@parcel/types": "2.10.3"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/profiler": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/profiler/-/profiler-2.10.3.tgz",
+ "integrity": "sha512-yikaM6/vsvjDCcBHAXTKmDsWUF3UvC0lMG8RpnuVSN+R40MGH1vyrR4vNnqhkiCcs0RkVXm7bpuz3cDJLNLYSQ==",
+ "dev": true,
+ "dependencies": {
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/events": "2.10.3",
+ "chrome-trace-event": "^1.0.2"
},
"engines": {
"node": ">= 12.0.0"
@@ -3306,20 +3413,20 @@
}
},
"node_modules/@parcel/reporter-cli": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.8.3.tgz",
- "integrity": "sha512-3sJkS6tFFzgIOz3u3IpD/RsmRxvOKKiQHOTkiiqRt1l44mMDGKS7zANRnJYsQzdCsgwc9SOP30XFgJwtoVlMbw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.10.3.tgz",
+ "integrity": "sha512-p5xQTPRuB1K3eI3Ro90vcdxpdt0VqIgrUP/VJKtSI8I3fLLGgPBNmSZejqqLup3jFRzUttQPHYkWl/R14LHjAQ==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"chalk": "^4.1.0",
"term-size": "^2.2.1"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3327,17 +3434,37 @@
}
},
"node_modules/@parcel/reporter-dev-server": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.8.3.tgz",
- "integrity": "sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.10.3.tgz",
+ "integrity": "sha512-1Kzb2TrlnOYhGwFXZYCeoO18hpVhI3pRXnN22li9ZmdpeugZ0zZJamfPV8Duj4sBvBoSajbZhiPAe/6tQgWDSA==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3"
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/reporter-tracer": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/reporter-tracer/-/reporter-tracer-2.10.3.tgz",
+ "integrity": "sha512-53T9VPJvCi4Co0iTmNN+nqFD+Fkt3QFW8CPXBVlmlQzOtufVjDb01VsE1NPD8/J7O0jd548HJX/s5uqT0380jg==",
+ "dev": true,
+ "dependencies": {
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "chrome-trace-event": "^1.0.3",
+ "nullthrows": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 12.0.0",
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3345,17 +3472,17 @@
}
},
"node_modules/@parcel/resolver-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.8.3.tgz",
- "integrity": "sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.10.3.tgz",
+ "integrity": "sha512-TQc1LwpvEKyF3CnU9ifHOKV2usFLVYmMAVAkxyKKGTbnJGEqBDQ0ITqTapA6bJLvZ6d2eUT7guqd4nrBEjeZpw==",
"dev": true,
"dependencies": {
- "@parcel/node-resolver-core": "2.8.3",
- "@parcel/plugin": "2.8.3"
+ "@parcel/node-resolver-core": "3.1.3",
+ "@parcel/plugin": "2.10.3"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3363,17 +3490,17 @@
}
},
"node_modules/@parcel/runtime-browser-hmr": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.8.3.tgz",
- "integrity": "sha512-2O1PYi2j/Q0lTyGNV3JdBYwg4rKo6TEVFlYGdd5wCYU9ZIN9RRuoCnWWH2qCPj3pjIVtBeppYxzfVjPEHINWVg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.10.3.tgz",
+ "integrity": "sha512-+6+mlJiLL3aNVIEyXMUPbPSgljYgnbl9JNMbEXikDQpGGiXTZ7gNNKsqwYeYzgQBYwgqRfR2ir6Bznc2R7dvxg==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3"
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3381,18 +3508,19 @@
}
},
"node_modules/@parcel/runtime-js": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.8.3.tgz",
- "integrity": "sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.10.3.tgz",
+ "integrity": "sha512-EMLgZzBGf5ylOT5U/N2rBK5ZZxnmEM4aJsissEAxcE/2cgE8TyhSng6p3A88vVJlO/unHcwRuFGlxKCueugGsQ==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3400,19 +3528,19 @@
}
},
"node_modules/@parcel/runtime-react-refresh": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.8.3.tgz",
- "integrity": "sha512-2v/qFKp00MfG0234OdOgQNAo6TLENpFYZMbVbAsPMY9ITiqG73MrEsrGXVoGbYiGTMB/Toer/lSWlJxtacOCuA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.10.3.tgz",
+ "integrity": "sha512-l03mni8XJq3fmeAV8UYlKJ/+u0LYRuk6ZVP0VLYLwgK4O0mlRuxwaZWYUeB8r/kTsEjB3gF/9AAtUZdAC7Swow==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"react-error-overlay": "6.0.9",
"react-refresh": "^0.9.0"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3420,18 +3548,31 @@
}
},
"node_modules/@parcel/runtime-service-worker": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.8.3.tgz",
- "integrity": "sha512-/Skkw+EeRiwzOJso5fQtK8c9b452uWLNhQH1ISTodbmlcyB4YalAiSsyHCtMYD0c3/t5Sx4ZS7vxBAtQd0RvOw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.10.3.tgz",
+ "integrity": "sha512-NjhS80t+O5iBgKXIQ+i07ZEh/VW8XHzanwTHmznJXEoIjLoBpELZ9r6bV/eUD3mYgM1vmW9Aijdu5xtsd0JW6A==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/rust": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/rust/-/rust-2.10.3.tgz",
+ "integrity": "sha512-s1dD1QI/6JkWLICsFh8/iUvO7W1aj/avx+2mCSzuwEIsMywexpBf56qhVYMa3D9D50hS1h5FMk9RrSnSiPf8WA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
@@ -3451,23 +3592,23 @@
}
},
"node_modules/@parcel/transformer-babel": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.8.3.tgz",
- "integrity": "sha512-L6lExfpvvC7T/g3pxf3CIJRouQl+sgrSzuWQ0fD4PemUDHvHchSP4SNUVnd6gOytF3Y1KpnEZIunQGi5xVqQCQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.10.3.tgz",
+ "integrity": "sha512-SDTyDZX3WTkX7WS5Dg5cBLjWtIkUeeHezIjeOI4cw40tBjj5bXRR2TBfPsqwOnpTHr5jhNSicD6DN+XfTI2MMw==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/utils": "2.10.3",
"browserslist": "^4.6.6",
"json5": "^2.2.0",
"nullthrows": "^1.1.1",
- "semver": "^5.7.0"
+ "semver": "^7.5.2"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3475,31 +3616,37 @@
}
},
"node_modules/@parcel/transformer-babel/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
"bin": {
- "semver": "bin/semver"
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/@parcel/transformer-css": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.8.3.tgz",
- "integrity": "sha512-xTqFwlSXtnaYen9ivAgz+xPW7yRl/u4QxtnDyDpz5dr8gSeOpQYRcjkd4RsYzKsWzZcGtB5EofEk8ayUbWKEUg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.10.3.tgz",
+ "integrity": "sha512-qlPYcwVgbqFHrec6CKcTQ4hY7EkjvH40Wyqf0xjAyIoIuOPmrpSUOp+VKjeRdbyFwH/4GBjrDZMBvCUsgeM2GA==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/utils": "2.10.3",
"browserslist": "^4.6.6",
"lightningcss": "^1.16.1",
"nullthrows": "^1.1.1"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3507,24 +3654,24 @@
}
},
"node_modules/@parcel/transformer-html": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.8.3.tgz",
- "integrity": "sha512-kIZO3qsMYTbSnSpl9cnZog+SwL517ffWH54JeB410OSAYF1ouf4n5v9qBnALZbuCCmPwJRGs4jUtE452hxwN4g==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.10.3.tgz",
+ "integrity": "sha512-u0uklWpliEcPADtBlboxhxBvlGrP0yPRZk/A2iL0VhfAi9ONFEuJkEoesispNhAg3KiojEh0Ddzu7bYp9U0yww==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5",
"posthtml-parser": "^0.10.1",
"posthtml-render": "^3.0.0",
- "semver": "^5.7.1",
+ "semver": "^7.5.2",
"srcset": "4"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3532,93 +3679,96 @@
}
},
"node_modules/@parcel/transformer-html/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
"bin": {
- "semver": "bin/semver"
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/@parcel/transformer-image": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.8.3.tgz",
- "integrity": "sha512-cO4uptcCGTi5H6bvTrAWEFUsTNhA4kCo8BSvRSCHA2sf/4C5tGQPHt3JhdO0GQLPwZRCh/R41EkJs5HZ8A8DAg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.10.3.tgz",
+ "integrity": "sha512-At7D7eMauE+/EnlXiDfNSap2te11L0TIW55SC9iTRTI/CqesWfT96ZB/LcH3HXckYy/GJi0xyTjYxC/YjUqDog==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3",
"nullthrows": "^1.1.1"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"peerDependencies": {
- "@parcel/core": "^2.8.3"
+ "@parcel/core": "^2.10.3"
}
},
"node_modules/@parcel/transformer-js": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.8.3.tgz",
- "integrity": "sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.10.3.tgz",
+ "integrity": "sha512-9pGqrCSLlipXvL7hOrLsaW5Pq4bjFBOTiZ5k5kizk1qeuHKMIHxySGdy0E35eSsJ6JzXP0lTXPywMPysSI6owQ==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
- "@swc/helpers": "^0.4.12",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3",
+ "@swc/helpers": "^0.5.0",
"browserslist": "^4.6.6",
- "detect-libc": "^1.0.3",
"nullthrows": "^1.1.1",
"regenerator-runtime": "^0.13.7",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
},
"peerDependencies": {
- "@parcel/core": "^2.8.3"
- }
- },
- "node_modules/@parcel/transformer-js/node_modules/@swc/helpers": {
- "version": "0.4.14",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
- "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.4.0"
+ "@parcel/core": "^2.10.3"
}
},
"node_modules/@parcel/transformer-js/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
"bin": {
- "semver": "bin/semver"
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/@parcel/transformer-json": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.8.3.tgz",
- "integrity": "sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.10.3.tgz",
+ "integrity": "sha512-cPhiQNgrX92VEATuxf3GCPQnlfnZW1iCsOHMT1CzgmofE7tVlW1hOOokWw21/8spG44Zax0SrRW0udi9TdmpQA==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3",
+ "@parcel/plugin": "2.10.3",
"json5": "^2.2.0"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3626,23 +3776,23 @@
}
},
"node_modules/@parcel/transformer-postcss": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.8.3.tgz",
- "integrity": "sha512-e8luB/poIlz6jBsD1Izms+6ElbyzuoFVa4lFVLZnTAChI3UxPdt9p/uTsIO46HyBps/Bk8ocvt3J4YF84jzmvg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.10.3.tgz",
+ "integrity": "sha512-SpTZQdGQ3aVvl6+3tLlw/txUyzZSsv8t+hcfc9PM0n1rd4mfjWxVKmgNC1Y3nFoSubLMp+03GbMq16ym8t89WQ==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/utils": "2.10.3",
"clone": "^2.1.1",
"nullthrows": "^1.1.1",
"postcss-value-parser": "^4.2.0",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3650,31 +3800,37 @@
}
},
"node_modules/@parcel/transformer-postcss/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
"bin": {
- "semver": "bin/semver"
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/@parcel/transformer-posthtml": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.8.3.tgz",
- "integrity": "sha512-pkzf9Smyeaw4uaRLsT41RGrPLT5Aip8ZPcntawAfIo+KivBQUV0erY1IvHYjyfFzq1ld/Fo2Ith9He6mxpPifA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.10.3.tgz",
+ "integrity": "sha512-k6pz0H/W1k+i9uDNXjum7XkaFYKvSSrgEsmhoh7OriXPrLunboIzMBXFQcQSCyxCpw/kLuKFBLP38mQnYC5BbQ==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5",
"posthtml-parser": "^0.10.1",
"posthtml-render": "^3.0.0",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3682,25 +3838,31 @@
}
},
"node_modules/@parcel/transformer-posthtml/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
"bin": {
- "semver": "bin/semver"
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/@parcel/transformer-raw": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.8.3.tgz",
- "integrity": "sha512-G+5cXnd2/1O3nV/pgRxVKZY/HcGSseuhAe71gQdSQftb8uJEURyUHoQ9Eh0JUD3MgWh9V+nIKoyFEZdf9T0sUQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.10.3.tgz",
+ "integrity": "sha512-r//P2Hg14m/vJK/XJyq0cmcS4RTRy4bPSL4c0FxbEdDRrSm0Hcd1gdfgl0HeqSQQfcz0Xu4nCM5zAhg6FUpiXQ==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3"
+ "@parcel/plugin": "2.10.3"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3708,18 +3870,18 @@
}
},
"node_modules/@parcel/transformer-react-refresh-wrap": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.8.3.tgz",
- "integrity": "sha512-q8AAoEvBnCf/nPvgOwFwKZfEl/thwq7c2duxXkhl+tTLDRN2vGmyz4355IxCkavSX+pLWSQ5MexklSEeMkgthg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.10.3.tgz",
+ "integrity": "sha512-Sc6ExGQy/YhNYFxRgEyi4SikYmV3wbATYo/VzqUjvZ4vE9YXM0sC5CyJhcoWVHmMPhm5eowOwFA6UrTsgHd2+g==",
"dev": true,
"dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"react-refresh": "^0.9.0"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3727,23 +3889,23 @@
}
},
"node_modules/@parcel/transformer-svg": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.8.3.tgz",
- "integrity": "sha512-3Zr/gBzxi1ZH1fftH/+KsZU7w5GqkmxlB0ZM8ovS5E/Pl1lq1t0xvGJue9m2VuQqP8Mxfpl5qLFmsKlhaZdMIQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.10.3.tgz",
+ "integrity": "sha512-fjkTdPB8y467I/yHPEaNxNxoGtRIgEqNjVkBhtE/ibhF/YfqIEpDlJyI7G5G71pt2peLMLXZnJowzHqeoEUHOQ==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5",
"posthtml-parser": "^0.10.1",
"posthtml-render": "^3.0.0",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"engines": {
"node": ">= 12.0.0",
- "parcel": "^2.8.3"
+ "parcel": "^2.10.3"
},
"funding": {
"type": "opencollective",
@@ -3751,42 +3913,49 @@
}
},
"node_modules/@parcel/transformer-svg/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
"bin": {
- "semver": "bin/semver"
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/@parcel/types": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.8.3.tgz",
- "integrity": "sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.10.3.tgz",
+ "integrity": "sha512-4ISgDKcbJsR7NKj2jquPUPQWc/b2x6zHb/jZVdHVzMQxJp98DX+cvQR137iOTXUAFtwkKVjFcHWfejwGdGf9bw==",
"dev": true,
"dependencies": {
- "@parcel/cache": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/package-manager": "2.8.3",
+ "@parcel/cache": "2.10.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/package-manager": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/workers": "2.8.3",
+ "@parcel/workers": "2.10.3",
"utility-types": "^3.10.0"
}
},
"node_modules/@parcel/utils": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.8.3.tgz",
- "integrity": "sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.10.3.tgz",
+ "integrity": "sha512-l9pEQgq+D57t42m2sJkdU08Dpp0HVzDEwVrp/by/l37ZkYPJ2Me3oXtsJhvA+hej2kO8+FuKPm64FaUVaA2g+w==",
"dev": true,
"dependencies": {
- "@parcel/codeframe": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/markdown-ansi": "2.8.3",
+ "@parcel/codeframe": "2.10.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/markdown-ansi": "2.10.3",
+ "@parcel/rust": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "chalk": "^4.1.0"
+ "chalk": "^4.1.0",
+ "nullthrows": "^1.1.1"
},
"engines": {
"node": ">= 12.0.0"
@@ -3797,36 +3966,290 @@
}
},
"node_modules/@parcel/watcher": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz",
- "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.3.0.tgz",
+ "integrity": "sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
+ "detect-libc": "^1.0.3",
"is-glob": "^4.0.3",
"micromatch": "^4.0.5",
- "node-addon-api": "^3.2.1",
- "node-gyp-build": "^4.3.0"
+ "node-addon-api": "^7.0.0"
},
"engines": {
"node": ">= 10.0.0"
},
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "@parcel/watcher-android-arm64": "2.3.0",
+ "@parcel/watcher-darwin-arm64": "2.3.0",
+ "@parcel/watcher-darwin-x64": "2.3.0",
+ "@parcel/watcher-freebsd-x64": "2.3.0",
+ "@parcel/watcher-linux-arm-glibc": "2.3.0",
+ "@parcel/watcher-linux-arm64-glibc": "2.3.0",
+ "@parcel/watcher-linux-arm64-musl": "2.3.0",
+ "@parcel/watcher-linux-x64-glibc": "2.3.0",
+ "@parcel/watcher-linux-x64-musl": "2.3.0",
+ "@parcel/watcher-win32-arm64": "2.3.0",
+ "@parcel/watcher-win32-ia32": "2.3.0",
+ "@parcel/watcher-win32-x64": "2.3.0"
+ }
+ },
+ "node_modules/@parcel/watcher-android-arm64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.3.0.tgz",
+ "integrity": "sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-darwin-arm64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.3.0.tgz",
+ "integrity": "sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-darwin-x64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.3.0.tgz",
+ "integrity": "sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-freebsd-x64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.3.0.tgz",
+ "integrity": "sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm-glibc": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.3.0.tgz",
+ "integrity": "sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm64-glibc": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.3.0.tgz",
+ "integrity": "sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-arm64-musl": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.3.0.tgz",
+ "integrity": "sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-x64-glibc": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.3.0.tgz",
+ "integrity": "sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-linux-x64-musl": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.3.0.tgz",
+ "integrity": "sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-arm64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.3.0.tgz",
+ "integrity": "sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-ia32": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.3.0.tgz",
+ "integrity": "sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/@parcel/watcher-win32-x64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.3.0.tgz",
+ "integrity": "sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10.0.0"
+ },
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/workers": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.8.3.tgz",
- "integrity": "sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.10.3.tgz",
+ "integrity": "sha512-qlN8G3VybPHVIbD6fsZr2gmrXG2UlROUQIPW/kkAvjQ29uRfFn7YEC8CHTICt8M1HhCNkr0cMXkuXQBi0l3kAg==",
"dev": true,
"dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "chrome-trace-event": "^1.0.2",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/profiler": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
},
"engines": {
@@ -3837,7 +4260,7 @@
"url": "https://opencollective.com/parcel"
},
"peerDependencies": {
- "@parcel/core": "^2.8.3"
+ "@parcel/core": "^2.10.3"
}
},
"node_modules/@pkgjs/parseargs": {
@@ -3850,10 +4273,166 @@
"node": ">=14"
}
},
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.1.tgz",
+ "integrity": "sha512-YaN43wTyEBaMqLDYeze+gQ4ZrW5RbTEGtT5o1GVDkhpdNcsLTnLRcLccvwy3E9wiDKWg9RIhuoy3JQKDRBfaZA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.1.tgz",
+ "integrity": "sha512-n1bX+LCGlQVuPlCofO0zOKe1b2XkFozAVRoczT+yxWZPGnkEAKTTYVOGZz8N4sKuBnKMxDbfhUsB1uwYdup/sw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.1.tgz",
+ "integrity": "sha512-QqJBumdvfBqBBmyGHlKxje+iowZwrHna7pokj/Go3dV1PJekSKfmjKrjKQ/e6ESTGhkfPNLq3VXdYLAc+UtAQw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.1.tgz",
+ "integrity": "sha512-RrkDNkR/P5AEQSPkxQPmd2ri8WTjSl0RYmuFOiEABkEY/FSg0a4riihWQGKDJ4LnV9gigWZlTMx2DtFGzUrYQw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.1.tgz",
+ "integrity": "sha512-ZFPxvUZmE+fkB/8D9y/SWl/XaDzNSaxd1TJUSE27XAKlRpQ2VNce/86bGd9mEUgL3qrvjJ9XTGwoX0BrJkYK/A==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.1.tgz",
+ "integrity": "sha512-FEuAjzVIld5WVhu+M2OewLmjmbXWd3q7Zcx+Rwy4QObQCqfblriDMMS7p7+pwgjZoo9BLkP3wa9uglQXzsB9ww==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.1.tgz",
+ "integrity": "sha512-f5Gs8WQixqGRtI0Iq/cMqvFYmgFzMinuJO24KRfnv7Ohi/HQclwrBCYkzQu1XfLEEt3DZyvveq9HWo4bLJf1Lw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.1.tgz",
+ "integrity": "sha512-CWPkPGrFfN2vj3mw+S7A/4ZaU3rTV7AkXUr08W9lNP+UzOvKLVf34tWCqrKrfwQ0NTk5GFqUr2XGpeR2p6R4gw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.1.tgz",
+ "integrity": "sha512-ZRETMFA0uVukUC9u31Ed1nx++29073goCxZtmZARwk5aF/ltuENaeTtRVsSQzFlzdd4J6L3qUm+EW8cbGt0CKQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.1.tgz",
+ "integrity": "sha512-ihqfNJNb2XtoZMSCPeoo0cYMgU04ksyFIoOw5S0JUVbOhafLot+KD82vpKXOurE2+9o/awrqIxku9MRR9hozHQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.1.tgz",
+ "integrity": "sha512-zK9MRpC8946lQ9ypFn4gLpdwr5a01aQ/odiIJeL9EbgZDMgbZjjT/XzTqJvDfTmnE1kHdbG20sAeNlpc91/wbg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.1.tgz",
+ "integrity": "sha512-5I3Nz4Sb9TYOtkRwlH0ow+BhMH2vnh38tZ4J4mggE48M/YyJyp/0sPSxhw1UeS1+oBgQ8q7maFtSeKpeRJu41Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
"node_modules/@sinclair/typebox": {
- "version": "0.25.24",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz",
- "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==",
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
"dev": true
},
"node_modules/@sindresorhus/is": {
@@ -3869,27 +4448,27 @@
}
},
"node_modules/@sinonjs/commons": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
- "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
+ "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
"dev": true,
"dependencies": {
"type-detect": "4.0.8"
}
},
"node_modules/@sinonjs/fake-timers": {
- "version": "10.0.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz",
- "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==",
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
+ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
"dev": true,
"dependencies": {
- "@sinonjs/commons": "^2.0.0"
+ "@sinonjs/commons": "^3.0.0"
}
},
"node_modules/@swc/cli": {
- "version": "0.1.62",
- "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.62.tgz",
- "integrity": "sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==",
+ "version": "0.1.63",
+ "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.63.tgz",
+ "integrity": "sha512-EM9oxxHzmmsprYRbGqsS2M4M/Gr5Gkcl0ROYYIdlUyTkhOiX822EQiRCpPCwdutdnzH2GyaTN7wc6i0Y+CKd3A==",
"dev": true,
"dependencies": {
"@mole-inc/bin-wrapper": "^8.0.1",
@@ -3940,11 +4519,15 @@
}
},
"node_modules/@swc/core": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.55.tgz",
- "integrity": "sha512-w/lN3OuJsuy868yJZKop+voZLVzI5pVSoopQVtgDNkEzejnPuRp9XaeAValvuMaWqKoTMtOjLzEPyv/xiAGYQQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.95.tgz",
+ "integrity": "sha512-PMrNeuqIusq9DPDooV3FfNEbZuTu5jKAc04N3Hm6Uk2Fl49cqElLFQ4xvl4qDmVDz97n3n/C1RE0/f6WyGPEiA==",
"dev": true,
"hasInstallScript": true,
+ "dependencies": {
+ "@swc/counter": "^0.1.1",
+ "@swc/types": "^0.1.5"
+ },
"engines": {
"node": ">=10"
},
@@ -3953,16 +4536,16 @@
"url": "https://opencollective.com/swc"
},
"optionalDependencies": {
- "@swc/core-darwin-arm64": "1.3.55",
- "@swc/core-darwin-x64": "1.3.55",
- "@swc/core-linux-arm-gnueabihf": "1.3.55",
- "@swc/core-linux-arm64-gnu": "1.3.55",
- "@swc/core-linux-arm64-musl": "1.3.55",
- "@swc/core-linux-x64-gnu": "1.3.55",
- "@swc/core-linux-x64-musl": "1.3.55",
- "@swc/core-win32-arm64-msvc": "1.3.55",
- "@swc/core-win32-ia32-msvc": "1.3.55",
- "@swc/core-win32-x64-msvc": "1.3.55"
+ "@swc/core-darwin-arm64": "1.3.95",
+ "@swc/core-darwin-x64": "1.3.95",
+ "@swc/core-linux-arm-gnueabihf": "1.3.95",
+ "@swc/core-linux-arm64-gnu": "1.3.95",
+ "@swc/core-linux-arm64-musl": "1.3.95",
+ "@swc/core-linux-x64-gnu": "1.3.95",
+ "@swc/core-linux-x64-musl": "1.3.95",
+ "@swc/core-win32-arm64-msvc": "1.3.95",
+ "@swc/core-win32-ia32-msvc": "1.3.95",
+ "@swc/core-win32-x64-msvc": "1.3.95"
},
"peerDependencies": {
"@swc/helpers": "^0.5.0"
@@ -3974,9 +4557,9 @@
}
},
"node_modules/@swc/core-darwin-arm64": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.55.tgz",
- "integrity": "sha512-UnHC8aPg/JvHhgXxTU6EhTtfnYNS7nhq8EKB8laNPxlHbwEyMBVQ2QuJHlNCtFtvSfX/uH5l04Ld1iGXnBTfdQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.95.tgz",
+ "integrity": "sha512-VAuBAP3MNetO/yBIBzvorUXq7lUBwhfpJxYViSxyluMwtoQDhE/XWN598TWMwMl1ZuImb56d7eUsuFdjgY7pJw==",
"cpu": [
"arm64"
],
@@ -3990,9 +4573,9 @@
}
},
"node_modules/@swc/core-darwin-x64": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.55.tgz",
- "integrity": "sha512-VNJkFVARrktIqtaLrD1NFA54gqekH7eAUcUY2U2SdHwO67HYjfMXMxlugLP5PDasSKpTkrVooUdhkffoA5W50g==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.95.tgz",
+ "integrity": "sha512-20vF2rvUsN98zGLZc+dsEdHvLoCuiYq/1B+TDeE4oolgTFDmI1jKO+m44PzWjYtKGU9QR95sZ6r/uec0QC5O4Q==",
"cpu": [
"x64"
],
@@ -4006,9 +4589,9 @@
}
},
"node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.55.tgz",
- "integrity": "sha512-6OcohhIFKKNW/TpJt26Tpul8zyL7dmp1Lnyj2BX9ycsZZ5UnsNiGqn37mrqJgVTx/ansEmbyOmKu2mzm/Ct6cQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.95.tgz",
+ "integrity": "sha512-oEudEM8PST1MRNGs+zu0cx5i9uP8TsLE4/L9HHrS07Ck0RJ3DCj3O2fU832nmLe2QxnAGPwBpSO9FntLfOiWEQ==",
"cpu": [
"arm"
],
@@ -4022,9 +4605,9 @@
}
},
"node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.55.tgz",
- "integrity": "sha512-MfZtXGBv21XWwvrSMP0CMxScDolT/iv5PRl9UBprYUehwWr7BNjA3V9W7QQ+kKoPyORWk7LX7OpJZF3FnO618Q==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.95.tgz",
+ "integrity": "sha512-pIhFI+cuC1aYg+0NAPxwT/VRb32f2ia8oGxUjQR6aJg65gLkUYQzdwuUmpMtFR2WVf7WVFYxUnjo4UyMuyh3ng==",
"cpu": [
"arm64"
],
@@ -4038,9 +4621,9 @@
}
},
"node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.55.tgz",
- "integrity": "sha512-iZJo+7L5lv10W0f0C6SlyteAyMJt5Tp+aH3+nlAwKdtc+VjyL1sGhR8DJMXp2/buBRZJ9tjEtpXKDaWUdSdF7Q==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.95.tgz",
+ "integrity": "sha512-ZpbTr+QZDT4OPJfjPAmScqdKKaT+wGurvMU5AhxLaf85DuL8HwUwwlL0n1oLieLc47DwIJEMuKQkYhXMqmJHlg==",
"cpu": [
"arm64"
],
@@ -4054,9 +4637,9 @@
}
},
"node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.55.tgz",
- "integrity": "sha512-Rmc8ny/mslzzz0+wNK9/mLdyAWVbMZHRSvljhpzASmq48NBkmZ5vk9/WID6MnUz2e9cQ0JxJQs8t39KlFJtW3g==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.95.tgz",
+ "integrity": "sha512-n9SuHEFtdfSJ+sHdNXNRuIOVprB8nbsz+08apKfdo4lEKq6IIPBBAk5kVhPhkjmg2dFVHVo4Tr/OHXM1tzWCCw==",
"cpu": [
"x64"
],
@@ -4070,9 +4653,9 @@
}
},
"node_modules/@swc/core-linux-x64-musl": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.55.tgz",
- "integrity": "sha512-Ymoc4xxINzS93ZjVd2UZfLZk1jF6wHjdCbC1JF+0zK3IrNrxCIDoWoaAj0+Bbvyo3hD1Xg/cneSTsqX8amnnuQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.95.tgz",
+ "integrity": "sha512-L1JrVlsXU3LC0WwmVnMK9HrOT2uhHahAoPNMJnZQpc18a0paO9fqifPG8M/HjNRffMUXR199G/phJsf326UvVg==",
"cpu": [
"x64"
],
@@ -4086,9 +4669,9 @@
}
},
"node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.55.tgz",
- "integrity": "sha512-OhnmFstq2qRU2GI5I0G/8L+vc2rx8+w+IOA6EZBrY4FuMCbPIZKKzlnAIxYn2W+yD4gvBzYP3tgEcaDfQk6EkA==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.95.tgz",
+ "integrity": "sha512-YaP4x/aZbUyNdqCBpC2zL8b8n58MEpOUpmOIZK6G1SxGi+2ENht7gs7+iXpWPc0sy7X3YPKmSWMAuui0h8lgAA==",
"cpu": [
"arm64"
],
@@ -4102,9 +4685,9 @@
}
},
"node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.55.tgz",
- "integrity": "sha512-3VR5rHZ6uoL/Vo3djV30GgX2oyDwWWsk+Yp+nyvYyBaKYiH2zeHfxdYRLSQV3W7kSlCAH3oDYpSljrWZ0t5XEQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.95.tgz",
+ "integrity": "sha512-w0u3HI916zT4BC/57gOd+AwAEjXeUlQbGJ9H4p/gzs1zkSHtoDQghVUNy3n/ZKp9KFod/95cA8mbVF9t1+6epQ==",
"cpu": [
"ia32"
],
@@ -4118,9 +4701,9 @@
}
},
"node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.55.tgz",
- "integrity": "sha512-KBtMFtRwnbxBugYf6i2ePqEGdxsk715KcqGMjGhxNg7BTACnXnhj37irHu2e7A7wZffbkUVUYuj/JEgVkEjSxg==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.95.tgz",
+ "integrity": "sha512-5RGnMt0S6gg4Gc6QtPUJ3Qs9Un4sKqccEzgH/tj7V/DVTJwKdnBKxFZfgQ34OR2Zpz7zGOn889xwsFVXspVWNA==",
"cpu": [
"x64"
],
@@ -4133,21 +4716,25 @@
"node": ">=10"
}
},
+ "node_modules/@swc/counter": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz",
+ "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==",
+ "dev": true
+ },
"node_modules/@swc/helpers": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz",
"integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==",
"dev": true,
- "optional": true,
- "peer": true,
"dependencies": {
"tslib": "^2.4.0"
}
},
"node_modules/@swc/jest": {
- "version": "0.2.26",
- "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.26.tgz",
- "integrity": "sha512-7lAi7q7ShTO3E5Gt1Xqf3pIhRbERxR1DUxvtVa9WKzIB+HGQ7wZP5sYx86zqnaEoKKGhmOoZ7gyW0IRu8Br5+A==",
+ "version": "0.2.29",
+ "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.29.tgz",
+ "integrity": "sha512-8reh5RvHBsSikDC3WGCd5ZTd2BXKkyOdK7QwynrCH58jk2cQFhhHhFBg/jvnWZehUQe/EoOImLENc9/DwbBFow==",
"dev": true,
"dependencies": {
"@jest/create-cache-key-function": "^27.4.2",
@@ -4177,6 +4764,12 @@
"@swc/core": "^1.0.46"
}
},
+ "node_modules/@swc/types": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz",
+ "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==",
+ "dev": true
+ },
"node_modules/@szmarczak/http-timer": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
@@ -4272,9 +4865,9 @@
"peer": true
},
"node_modules/@types/babel__core": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz",
- "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz",
+ "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.20.7",
@@ -4285,18 +4878,18 @@
}
},
"node_modules/@types/babel__generator": {
- "version": "7.6.4",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
- "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
+ "version": "7.6.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz",
+ "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==",
"dev": true,
"dependencies": {
"@babel/types": "^7.0.0"
}
},
"node_modules/@types/babel__template": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
- "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
+ "version": "7.4.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz",
+ "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.1.0",
@@ -4304,12 +4897,12 @@
}
},
"node_modules/@types/babel__traverse": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz",
- "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz",
+ "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.3.0"
+ "@babel/types": "^7.20.7"
}
},
"node_modules/@types/cacheable-request": {
@@ -4351,9 +4944,9 @@
"dev": true
},
"node_modules/@types/graceful-fs": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
- "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz",
+ "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==",
"dev": true,
"dependencies": {
"@types/node": "*"
@@ -4402,9 +4995,13 @@
}
},
"node_modules/@types/node": {
- "version": "16.10.2",
+ "version": "20.9.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.4.tgz",
+ "integrity": "sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==",
"devOptional": true,
- "license": "MIT"
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
},
"node_modules/@types/parse-json": {
"version": "4.0.0",
@@ -4412,12 +5009,6 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
- "node_modules/@types/prettier": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz",
- "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==",
- "dev": true
- },
"node_modules/@types/responselike": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
@@ -4446,6 +5037,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
"node_modules/@webassemblyjs/ast": {
"version": "1.11.5",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz",
@@ -4759,9 +5356,9 @@
"dev": true
},
"node_modules/acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
"devOptional": true,
"bin": {
"acorn": "bin/acorn"
@@ -5072,49 +5669,16 @@
"node": ">= 4.5.0"
}
},
- "node_modules/autoprefixer": {
- "version": "10.4.14",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
- "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/autoprefixer"
- }
- ],
- "dependencies": {
- "browserslist": "^4.21.5",
- "caniuse-lite": "^1.0.30001464",
- "fraction.js": "^4.2.0",
- "normalize-range": "^0.1.2",
- "picocolors": "^1.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "bin": {
- "autoprefixer": "bin/autoprefixer"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
"node_modules/babel-jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz",
- "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
+ "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
"dev": true,
"dependencies": {
- "@jest/transform": "^29.5.0",
+ "@jest/transform": "^29.7.0",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.5.0",
+ "babel-preset-jest": "^29.6.3",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"slash": "^3.0.0"
@@ -5142,10 +5706,26 @@
"node": ">=8"
}
},
+ "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/babel-plugin-jest-hoist": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz",
- "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
+ "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
"dev": true,
"dependencies": {
"@babel/template": "^7.3.3",
@@ -5181,12 +5761,12 @@
}
},
"node_modules/babel-preset-jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz",
- "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
+ "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
"dev": true,
"dependencies": {
- "babel-plugin-jest-hoist": "^29.5.0",
+ "babel-plugin-jest-hoist": "^29.6.3",
"babel-preset-current-node-syntax": "^1.0.0"
},
"engines": {
@@ -5644,9 +6224,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.21.5",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
- "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
+ "version": "4.22.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
+ "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
"funding": [
{
"type": "opencollective",
@@ -5655,13 +6235,17 @@
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001449",
- "electron-to-chromium": "^1.4.284",
- "node-releases": "^2.0.8",
- "update-browserslist-db": "^1.0.10"
+ "caniuse-lite": "^1.0.30001541",
+ "electron-to-chromium": "^1.4.535",
+ "node-releases": "^2.0.13",
+ "update-browserslist-db": "^1.0.13"
},
"bin": {
"browserslist": "cli.js"
@@ -5851,9 +6435,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001468",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001468.tgz",
- "integrity": "sha512-zgAo8D5kbOyUcRAgSmgyuvBkjrGk5CGYG5TYgFdpQv+ywcyEpo1LOWoG8YmoflGnh+V+UsNuKYedsoYs0hzV5A==",
+ "version": "1.0.30001546",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz",
+ "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==",
"funding": [
{
"type": "opencollective",
@@ -5862,6 +6446,10 @@
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
}
]
},
@@ -6002,9 +6590,9 @@
}
},
"node_modules/cjs-module-lexer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
- "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
+ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
"dev": true
},
"node_modules/class-utils": {
@@ -6165,9 +6753,9 @@
}
},
"node_modules/collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
+ "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
"dev": true
},
"node_modules/collection-visit": {
@@ -6465,6 +7053,53 @@
"sha.js": "^2.4.8"
}
},
+ "node_modules/create-jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
+ "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "prompts": "^2.0.1"
+ },
+ "bin": {
+ "create-jest": "bin/create-jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/create-jest/node_modules/@jest/types": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.8",
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/create-jest/node_modules/@types/yargs": {
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
+ "dev": true,
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
"node_modules/create-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -6585,6 +7220,8 @@
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
"integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
"dev": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
"boolbase": "^1.0.0",
"css-what": "^6.1.0",
@@ -6601,6 +7238,8 @@
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dev": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.2",
@@ -6615,6 +7254,8 @@
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dev": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
"domelementtype": "^2.3.0"
},
@@ -6626,14 +7267,16 @@
}
},
"node_modules/css-select/node_modules/domutils": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz",
- "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
"dev": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
"dom-serializer": "^2.0.0",
"domelementtype": "^2.3.0",
- "domhandler": "^5.0.1"
+ "domhandler": "^5.0.3"
},
"funding": {
"url": "https://github.com/fb55/domutils?sponsor=1"
@@ -6644,6 +7287,8 @@
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
+ "optional": true,
+ "peer": true,
"engines": {
"node": ">=0.12"
},
@@ -6656,6 +7301,8 @@
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
"dev": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
"mdn-data": "2.0.30",
"source-map-js": "^1.0.1"
@@ -6686,86 +7333,13 @@
"node": ">=4"
}
},
- "node_modules/cssnano": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.0.tgz",
- "integrity": "sha512-RGlcbzGhzEBCHuQe3k+Udyj5M00z0pm9S+VurHXFEOXxH+y0sVrJH2sMzoyz2d8N1EScazg+DVvmgyx0lurwwA==",
- "dev": true,
- "dependencies": {
- "cssnano-preset-default": "^6.0.0",
- "lilconfig": "^2.1.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/cssnano"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/cssnano-preset-default": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.0.tgz",
- "integrity": "sha512-BDxlaFzObRDXUiCCBQUNQcI+f1/aX2mgoNtXGjV6PG64POcHoDUoX+LgMWw+Q4609QhxwkcSnS65YFs42RA6qQ==",
- "dev": true,
- "dependencies": {
- "css-declaration-sorter": "^6.3.1",
- "cssnano-utils": "^4.0.0",
- "postcss-calc": "^8.2.3",
- "postcss-colormin": "^6.0.0",
- "postcss-convert-values": "^6.0.0",
- "postcss-discard-comments": "^6.0.0",
- "postcss-discard-duplicates": "^6.0.0",
- "postcss-discard-empty": "^6.0.0",
- "postcss-discard-overridden": "^6.0.0",
- "postcss-merge-longhand": "^6.0.0",
- "postcss-merge-rules": "^6.0.0",
- "postcss-minify-font-values": "^6.0.0",
- "postcss-minify-gradients": "^6.0.0",
- "postcss-minify-params": "^6.0.0",
- "postcss-minify-selectors": "^6.0.0",
- "postcss-normalize-charset": "^6.0.0",
- "postcss-normalize-display-values": "^6.0.0",
- "postcss-normalize-positions": "^6.0.0",
- "postcss-normalize-repeat-style": "^6.0.0",
- "postcss-normalize-string": "^6.0.0",
- "postcss-normalize-timing-functions": "^6.0.0",
- "postcss-normalize-unicode": "^6.0.0",
- "postcss-normalize-url": "^6.0.0",
- "postcss-normalize-whitespace": "^6.0.0",
- "postcss-ordered-values": "^6.0.0",
- "postcss-reduce-initial": "^6.0.0",
- "postcss-reduce-transforms": "^6.0.0",
- "postcss-svgo": "^6.0.0",
- "postcss-unique-selectors": "^6.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/cssnano-utils": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
- "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
"node_modules/csso": {
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
"integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
"dev": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
"css-tree": "~2.2.0"
},
@@ -6779,6 +7353,8 @@
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
"integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
"dev": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
"mdn-data": "2.0.28",
"source-map-js": "^1.0.1"
@@ -6792,7 +7368,9 @@
"version": "2.0.28",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
- "dev": true
+ "dev": true,
+ "optional": true,
+ "peer": true
},
"node_modules/cyclist": {
"version": "1.0.1",
@@ -6865,20 +7443,29 @@
}
},
"node_modules/dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
- "dev": true
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
+ "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
+ "dev": true,
+ "peerDependencies": {
+ "babel-plugin-macros": "^3.1.0"
+ },
+ "peerDependenciesMeta": {
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
},
"node_modules/deep-is": {
- "version": "0.1.3",
- "dev": true,
- "license": "MIT"
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
},
"node_modules/deepmerge": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz",
- "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -6960,9 +7547,9 @@
}
},
"node_modules/diff-sequences": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz",
- "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
"dev": true,
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -7014,8 +7601,9 @@
},
"node_modules/dom-serializer": {
"version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
+ "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
"dev": true,
- "license": "MIT",
"dependencies": {
"domelementtype": "^2.0.1",
"domhandler": "^4.2.0",
@@ -7025,6 +7613,15 @@
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
+ "node_modules/dom-serializer/node_modules/entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
"node_modules/domain-browser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
@@ -7037,19 +7634,21 @@
},
"node_modules/domelementtype": {
"version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/fb55"
}
- ],
- "license": "BSD-2-Clause"
+ ]
},
"node_modules/domhandler": {
"version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
"dev": true,
- "license": "BSD-2-Clause",
"dependencies": {
"domelementtype": "^2.2.0"
},
@@ -7062,8 +7661,9 @@
},
"node_modules/domutils": {
"version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
"dev": true,
- "license": "BSD-2-Clause",
"dependencies": {
"dom-serializer": "^1.0.1",
"domelementtype": "^2.2.0",
@@ -7101,9 +7701,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.4.288",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.288.tgz",
- "integrity": "sha512-8s9aJf3YiokIrR+HOQzNOGmEHFXVUQzXM/JaViVvKdCkNUjS+lEa/uT7xw3nDVG/IgfxiIwUGkwJ6AR1pTpYsQ=="
+ "version": "1.4.544",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.544.tgz",
+ "integrity": "sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w=="
},
"node_modules/elliptic": {
"version": "6.5.4",
@@ -7175,9 +7775,13 @@
}
},
"node_modules/entities": {
- "version": "2.2.0",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
+ "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
"dev": true,
- "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
@@ -7221,9 +7825,9 @@
"dev": true
},
"node_modules/esbuild": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz",
- "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.7.tgz",
+ "integrity": "sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==",
"dev": true,
"hasInstallScript": true,
"bin": {
@@ -7233,28 +7837,28 @@
"node": ">=12"
},
"optionalDependencies": {
- "@esbuild/android-arm": "0.17.18",
- "@esbuild/android-arm64": "0.17.18",
- "@esbuild/android-x64": "0.17.18",
- "@esbuild/darwin-arm64": "0.17.18",
- "@esbuild/darwin-x64": "0.17.18",
- "@esbuild/freebsd-arm64": "0.17.18",
- "@esbuild/freebsd-x64": "0.17.18",
- "@esbuild/linux-arm": "0.17.18",
- "@esbuild/linux-arm64": "0.17.18",
- "@esbuild/linux-ia32": "0.17.18",
- "@esbuild/linux-loong64": "0.17.18",
- "@esbuild/linux-mips64el": "0.17.18",
- "@esbuild/linux-ppc64": "0.17.18",
- "@esbuild/linux-riscv64": "0.17.18",
- "@esbuild/linux-s390x": "0.17.18",
- "@esbuild/linux-x64": "0.17.18",
- "@esbuild/netbsd-x64": "0.17.18",
- "@esbuild/openbsd-x64": "0.17.18",
- "@esbuild/sunos-x64": "0.17.18",
- "@esbuild/win32-arm64": "0.17.18",
- "@esbuild/win32-ia32": "0.17.18",
- "@esbuild/win32-x64": "0.17.18"
+ "@esbuild/android-arm": "0.19.7",
+ "@esbuild/android-arm64": "0.19.7",
+ "@esbuild/android-x64": "0.19.7",
+ "@esbuild/darwin-arm64": "0.19.7",
+ "@esbuild/darwin-x64": "0.19.7",
+ "@esbuild/freebsd-arm64": "0.19.7",
+ "@esbuild/freebsd-x64": "0.19.7",
+ "@esbuild/linux-arm": "0.19.7",
+ "@esbuild/linux-arm64": "0.19.7",
+ "@esbuild/linux-ia32": "0.19.7",
+ "@esbuild/linux-loong64": "0.19.7",
+ "@esbuild/linux-mips64el": "0.19.7",
+ "@esbuild/linux-ppc64": "0.19.7",
+ "@esbuild/linux-riscv64": "0.19.7",
+ "@esbuild/linux-s390x": "0.19.7",
+ "@esbuild/linux-x64": "0.19.7",
+ "@esbuild/netbsd-x64": "0.19.7",
+ "@esbuild/openbsd-x64": "0.19.7",
+ "@esbuild/sunos-x64": "0.19.7",
+ "@esbuild/win32-arm64": "0.19.7",
+ "@esbuild/win32-ia32": "0.19.7",
+ "@esbuild/win32-x64": "0.19.7"
}
},
"node_modules/escalade": {
@@ -7276,27 +7880,28 @@
}
},
"node_modules/eslint": {
- "version": "8.39.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz",
- "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==",
+ "version": "8.53.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
+ "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.4.0",
- "@eslint/eslintrc": "^2.0.2",
- "@eslint/js": "8.39.0",
- "@humanwhocodes/config-array": "^0.11.8",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.3",
+ "@eslint/js": "8.53.0",
+ "@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.10.0",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"debug": "^4.3.2",
"doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.0",
- "eslint-visitor-keys": "^3.4.0",
- "espree": "^9.5.1",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
"esquery": "^1.4.2",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -7304,22 +7909,19 @@
"find-up": "^5.0.0",
"glob-parent": "^6.0.2",
"globals": "^13.19.0",
- "grapheme-splitter": "^1.0.4",
+ "graphemer": "^1.4.0",
"ignore": "^5.2.0",
- "import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"is-path-inside": "^3.0.3",
- "js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
+ "optionator": "^0.9.3",
"strip-ansi": "^6.0.1",
- "strip-json-comments": "^3.1.0",
"text-table": "^0.2.0"
},
"bin": {
@@ -7333,9 +7935,9 @@
}
},
"node_modules/eslint-config-prettier": {
- "version": "8.8.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
- "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
+ "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
"dev": true,
"bin": {
"eslint-config-prettier": "bin/cli.js"
@@ -7365,9 +7967,9 @@
}
},
"node_modules/eslint-scope": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
- "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
"dev": true,
"dependencies": {
"esrecurse": "^4.3.0",
@@ -7381,9 +7983,9 @@
}
},
"node_modules/eslint-visitor-keys": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
- "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -7466,14 +8068,14 @@
}
},
"node_modules/espree": {
- "version": "9.5.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz",
- "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==",
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
"dev": true,
"dependencies": {
- "acorn": "^8.8.0",
+ "acorn": "^8.9.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.0"
+ "eslint-visitor-keys": "^3.4.1"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -7747,16 +8349,16 @@
"dev": true
},
"node_modules/expect": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz",
- "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
"dev": true,
"dependencies": {
- "@jest/expect-utils": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0"
+ "@jest/expect-utils": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -7863,8 +8465,9 @@
"license": "Apache-2.0"
},
"node_modules/fast-glob": {
- "version": "3.2.12",
- "license": "MIT",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -7893,8 +8496,9 @@
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
},
"node_modules/fastest-levenshtein": {
"version": "1.0.16",
@@ -8251,18 +8855,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/fraction.js": {
- "version": "4.2.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- },
- "funding": {
- "type": "patreon",
- "url": "https://www.patreon.com/infusion"
- }
- },
"node_modules/fragment-cache": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
@@ -8315,8 +8907,10 @@
"license": "ISC"
},
"node_modules/fsevents": {
- "version": "2.3.2",
- "license": "MIT",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
"optional": true,
"os": [
"darwin"
@@ -8520,10 +9114,11 @@
"dev": true,
"license": "ISC"
},
- "node_modules/grapheme-splitter": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT"
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
},
"node_modules/has": {
"version": "1.0.3",
@@ -8659,9 +9254,9 @@
"dev": true
},
"node_modules/htmlnano": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.4.tgz",
- "integrity": "sha512-WGCkyGFwjKW1GeCBsPYacMvaMnZtFJ0zIRnC2NCddkA+IOEhTqskXrS7lep+3yYZw/nQ3dW1UAX4yA/GJyR8BA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.1.0.tgz",
+ "integrity": "sha512-jVGRE0Ep9byMBKEu0Vxgl8dhXYOUk0iNQ2pjsG+BcRB0u0oDF5A9p/iBGMg/PGKYUyMD0OAGu8dVT5Lzj8S58g==",
"dev": true,
"dependencies": {
"cosmiconfig": "^8.0.0",
@@ -8712,14 +9307,14 @@
"dev": true
},
"node_modules/htmlnano/node_modules/cosmiconfig": {
- "version": "8.1.3",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz",
- "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==",
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
"dev": true,
"dependencies": {
- "import-fresh": "^3.2.1",
+ "import-fresh": "^3.3.0",
"js-yaml": "^4.1.0",
- "parse-json": "^5.0.0",
+ "parse-json": "^5.2.0",
"path-type": "^4.0.0"
},
"engines": {
@@ -8727,6 +9322,14 @@
},
"funding": {
"url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
"node_modules/htmlnano/node_modules/js-yaml": {
@@ -8760,18 +9363,6 @@
"entities": "^3.0.1"
}
},
- "node_modules/htmlparser2/node_modules/entities": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
- "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
"node_modules/http-cache-semantics": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
@@ -8997,9 +9588,9 @@
"dev": true
},
"node_modules/is-core-module": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz",
- "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==",
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
"dependencies": {
"has": "^1.0.3"
},
@@ -9208,33 +9799,48 @@
}
},
"node_modules/istanbul-lib-instrument": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
- "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz",
+ "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==",
"dev": true,
"dependencies": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-coverage": "^3.2.0",
- "semver": "^6.3.0"
+ "semver": "^7.5.4"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
"dependencies": {
"istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
+ "make-dir": "^4.0.0",
"supports-color": "^7.1.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
}
},
"node_modules/istanbul-lib-source-maps": {
@@ -9252,9 +9858,9 @@
}
},
"node_modules/istanbul-reports": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
- "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
+ "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
"dev": true,
"dependencies": {
"html-escaper": "^2.0.0",
@@ -9294,15 +9900,15 @@
}
},
"node_modules/jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz",
- "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
+ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
"dev": true,
"dependencies": {
- "@jest/core": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/core": "^29.7.0",
+ "@jest/types": "^29.6.3",
"import-local": "^3.0.2",
- "jest-cli": "^29.5.0"
+ "jest-cli": "^29.7.0"
},
"bin": {
"jest": "bin/jest.js"
@@ -9320,12 +9926,13 @@
}
},
"node_modules/jest-changed-files": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz",
- "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
+ "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
"dev": true,
"dependencies": {
"execa": "^5.0.0",
+ "jest-util": "^29.7.0",
"p-limit": "^3.1.0"
},
"engines": {
@@ -9333,28 +9940,28 @@
}
},
"node_modules/jest-circus": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz",
- "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
+ "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
"dev": true,
"dependencies": {
- "@jest/environment": "^29.5.0",
- "@jest/expect": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
- "dedent": "^0.7.0",
+ "dedent": "^1.0.0",
"is-generator-fn": "^2.0.0",
- "jest-each": "^29.5.0",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
+ "jest-each": "^29.7.0",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
"p-limit": "^3.1.0",
- "pretty-format": "^29.5.0",
+ "pretty-format": "^29.7.0",
"pure-rand": "^6.0.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
@@ -9364,12 +9971,12 @@
}
},
"node_modules/jest-circus/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -9381,31 +9988,30 @@
}
},
"node_modules/jest-circus/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/jest-cli": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz",
- "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
+ "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
"dev": true,
"dependencies": {
- "@jest/core": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/core": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
"chalk": "^4.0.0",
+ "create-jest": "^29.7.0",
"exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
"import-local": "^3.0.2",
- "jest-config": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
- "prompts": "^2.0.1",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"yargs": "^17.3.1"
},
"bin": {
@@ -9424,12 +10030,12 @@
}
},
"node_modules/jest-cli/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -9441,40 +10047,40 @@
}
},
"node_modules/jest-cli/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/jest-config": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz",
- "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
+ "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
"dev": true,
"dependencies": {
"@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^29.5.0",
- "@jest/types": "^29.5.0",
- "babel-jest": "^29.5.0",
+ "@jest/test-sequencer": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-jest": "^29.7.0",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-circus": "^29.5.0",
- "jest-environment-node": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-runner": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
+ "jest-circus": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"micromatch": "^4.0.4",
"parse-json": "^5.2.0",
- "pretty-format": "^29.5.0",
+ "pretty-format": "^29.7.0",
"slash": "^3.0.0",
"strip-json-comments": "^3.1.1"
},
@@ -9495,12 +10101,12 @@
}
},
"node_modules/jest-config/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -9512,33 +10118,33 @@
}
},
"node_modules/jest-config/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/jest-diff": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
- "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
- "diff-sequences": "^29.4.3",
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
+ "diff-sequences": "^29.6.3",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-docblock": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz",
- "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
+ "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
"dev": true,
"dependencies": {
"detect-newline": "^3.0.0"
@@ -9548,28 +10154,28 @@
}
},
"node_modules/jest-each": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz",
- "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
+ "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"chalk": "^4.0.0",
- "jest-get-type": "^29.4.3",
- "jest-util": "^29.5.0",
- "pretty-format": "^29.5.0"
+ "jest-get-type": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "pretty-format": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-each/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -9581,38 +10187,38 @@
}
},
"node_modules/jest-each/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/jest-environment-node": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz",
- "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
+ "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
"dev": true,
"dependencies": {
- "@jest/environment": "^29.5.0",
- "@jest/fake-timers": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
- "jest-mock": "^29.5.0",
- "jest-util": "^29.5.0"
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-environment-node/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -9624,38 +10230,38 @@
}
},
"node_modules/jest-environment-node/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/jest-get-type": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz",
- "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
+ "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
"dev": true,
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-haste-map": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz",
- "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"graceful-fs": "^4.2.9",
- "jest-regex-util": "^29.4.3",
- "jest-util": "^29.5.0",
- "jest-worker": "^29.5.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
},
@@ -9667,12 +10273,12 @@
}
},
"node_modules/jest-haste-map/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -9684,55 +10290,55 @@
}
},
"node_modules/jest-haste-map/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/jest-leak-detector": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz",
- "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
+ "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
"dev": true,
"dependencies": {
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-matcher-utils": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz",
- "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
+ "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
- "jest-diff": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-message-util": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz",
- "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
- "pretty-format": "^29.5.0",
+ "pretty-format": "^29.7.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
@@ -9741,12 +10347,12 @@
}
},
"node_modules/jest-message-util/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -9758,35 +10364,35 @@
}
},
"node_modules/jest-message-util/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/jest-mock": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz",
- "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
+ "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
- "jest-util": "^29.5.0"
+ "jest-util": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-mock/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -9798,9 +10404,9 @@
}
},
"node_modules/jest-mock/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
@@ -9824,26 +10430,26 @@
}
},
"node_modules/jest-regex-util": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz",
- "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true,
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-resolve": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz",
- "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
+ "jest-haste-map": "^29.7.0",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"resolve": "^1.20.0",
"resolve.exports": "^2.0.0",
"slash": "^3.0.0"
@@ -9853,43 +10459,43 @@
}
},
"node_modules/jest-resolve-dependencies": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz",
- "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
+ "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
"dev": true,
"dependencies": {
- "jest-regex-util": "^29.4.3",
- "jest-snapshot": "^29.5.0"
+ "jest-regex-util": "^29.6.3",
+ "jest-snapshot": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runner": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz",
- "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
+ "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
"dev": true,
"dependencies": {
- "@jest/console": "^29.5.0",
- "@jest/environment": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/console": "^29.7.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"emittery": "^0.13.1",
"graceful-fs": "^4.2.9",
- "jest-docblock": "^29.4.3",
- "jest-environment-node": "^29.5.0",
- "jest-haste-map": "^29.5.0",
- "jest-leak-detector": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-resolve": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-watcher": "^29.5.0",
- "jest-worker": "^29.5.0",
+ "jest-docblock": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-leak-detector": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-resolve": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "jest-worker": "^29.7.0",
"p-limit": "^3.1.0",
"source-map-support": "0.5.13"
},
@@ -9898,12 +10504,12 @@
}
},
"node_modules/jest-runner/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -9915,9 +10521,9 @@
}
},
"node_modules/jest-runner/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
@@ -9934,31 +10540,31 @@
}
},
"node_modules/jest-runtime": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz",
- "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
+ "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
"dev": true,
"dependencies": {
- "@jest/environment": "^29.5.0",
- "@jest/fake-timers": "^29.5.0",
- "@jest/globals": "^29.5.0",
- "@jest/source-map": "^29.4.3",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/globals": "^29.7.0",
+ "@jest/source-map": "^29.6.3",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"cjs-module-lexer": "^1.0.0",
"collect-v8-coverage": "^1.0.0",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-mock": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
"slash": "^3.0.0",
"strip-bom": "^4.0.0"
},
@@ -9967,12 +10573,12 @@
}
},
"node_modules/jest-runtime/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -9984,55 +10590,52 @@
}
},
"node_modules/jest-runtime/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/jest-snapshot": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz",
- "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
+ "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
"dev": true,
"dependencies": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
"@babel/plugin-syntax-jsx": "^7.7.2",
"@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/traverse": "^7.7.2",
"@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/babel__traverse": "^7.0.6",
- "@types/prettier": "^2.1.5",
+ "@jest/expect-utils": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^29.5.0",
+ "expect": "^29.7.0",
"graceful-fs": "^4.2.9",
- "jest-diff": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
"natural-compare": "^1.4.0",
- "pretty-format": "^29.5.0",
- "semver": "^7.3.5"
+ "pretty-format": "^29.7.0",
+ "semver": "^7.5.3"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-snapshot/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -10044,18 +10647,18 @@
}
},
"node_modules/jest-snapshot/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/jest-snapshot/node_modules/semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -10068,12 +10671,12 @@
}
},
"node_modules/jest-util": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz",
- "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -10085,12 +10688,12 @@
}
},
"node_modules/jest-util/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -10102,38 +10705,38 @@
}
},
"node_modules/jest-util/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/jest-validate": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz",
- "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^29.4.3",
+ "jest-get-type": "^29.6.3",
"leven": "^3.1.0",
- "pretty-format": "^29.5.0"
+ "pretty-format": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-validate/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -10145,9 +10748,9 @@
}
},
"node_modules/jest-validate/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
@@ -10166,18 +10769,18 @@
}
},
"node_modules/jest-watcher": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz",
- "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
+ "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
"dev": true,
"dependencies": {
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"emittery": "^0.13.1",
- "jest-util": "^29.5.0",
+ "jest-util": "^29.7.0",
"string-length": "^4.0.1"
},
"engines": {
@@ -10185,12 +10788,12 @@
}
},
"node_modules/jest-watcher/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -10202,22 +10805,22 @@
}
},
"node_modules/jest-watcher/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/jest-worker": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz",
- "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
"dependencies": {
"@types/node": "*",
- "jest-util": "^29.5.0",
+ "jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
@@ -10241,12 +10844,12 @@
}
},
"node_modules/jest/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -10258,31 +10861,27 @@
}
},
"node_modules/jest/node_modules/@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/jiti": {
- "version": "1.18.2",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz",
- "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==",
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
+ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
"bin": {
"jiti": "bin/jiti.js"
}
},
- "node_modules/js-sdsl": {
- "version": "4.1.4",
- "dev": true,
- "license": "MIT"
- },
"node_modules/js-tokens": {
"version": "4.0.0",
- "dev": true,
- "license": "MIT"
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
},
"node_modules/js-yaml": {
"version": "3.14.1",
@@ -10412,8 +11011,9 @@
},
"node_modules/levn": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
- "license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
@@ -10422,29 +11022,10 @@
"node": ">= 0.8.0"
}
},
- "node_modules/levn/node_modules/prelude-ls": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/levn/node_modules/type-check": {
- "version": "0.4.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
"node_modules/lightningcss": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.18.0.tgz",
- "integrity": "sha512-uk10tNxi5fhZqU93vtYiQgx/8a9f0Kvtj5AXIm+VlOXY+t/DWDmCZWJEkZJmmALgvbS6aAW8or+Kq85eJ6TDTw==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.22.1.tgz",
+ "integrity": "sha512-Fy45PhibiNXkm0cK5FJCbfO8Y6jUpD/YcHf/BtuI+jvYYqSXKF4muk61jjE8YxCR9y+hDYIWSzHTc+bwhDE6rQ==",
"dependencies": {
"detect-libc": "^1.0.3"
},
@@ -10456,20 +11037,21 @@
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
- "lightningcss-darwin-arm64": "1.18.0",
- "lightningcss-darwin-x64": "1.18.0",
- "lightningcss-linux-arm-gnueabihf": "1.18.0",
- "lightningcss-linux-arm64-gnu": "1.18.0",
- "lightningcss-linux-arm64-musl": "1.18.0",
- "lightningcss-linux-x64-gnu": "1.18.0",
- "lightningcss-linux-x64-musl": "1.18.0",
- "lightningcss-win32-x64-msvc": "1.18.0"
+ "lightningcss-darwin-arm64": "1.22.1",
+ "lightningcss-darwin-x64": "1.22.1",
+ "lightningcss-freebsd-x64": "1.22.1",
+ "lightningcss-linux-arm-gnueabihf": "1.22.1",
+ "lightningcss-linux-arm64-gnu": "1.22.1",
+ "lightningcss-linux-arm64-musl": "1.22.1",
+ "lightningcss-linux-x64-gnu": "1.22.1",
+ "lightningcss-linux-x64-musl": "1.22.1",
+ "lightningcss-win32-x64-msvc": "1.22.1"
}
},
"node_modules/lightningcss-darwin-arm64": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.18.0.tgz",
- "integrity": "sha512-OqjydwtiNPgdH1ByIjA1YzqvDG/OMR6L3LPN6wRl1729LB0y4Mik7L06kmZaTb+pvUHr+NmDd2KCwnlrQ4zO3w==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.22.1.tgz",
+ "integrity": "sha512-ldvElu+R0QimNTjsKpaZkUv3zf+uefzLy/R1R19jtgOfSRM+zjUCUgDhfEDRmVqJtMwYsdhMI2aJtJChPC6Osg==",
"cpu": [
"arm64"
],
@@ -10486,9 +11068,9 @@
}
},
"node_modules/lightningcss-darwin-x64": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.18.0.tgz",
- "integrity": "sha512-mNiuPHj89/JHZmJMp+5H8EZSt6EL5DZRWJ31O6k3DrLLnRIQjXuXdDdN8kP7LoIkeWI5xvyD60CsReJm+YWYAw==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.22.1.tgz",
+ "integrity": "sha512-5p2rnlVTv6Gpw4PlTLq925nTVh+HFh4MpegX8dPDYJae+NFVjQ67gY7O6iHIzQjLipDiYejFF0yHrhjU3XgLBQ==",
"cpu": [
"x64"
],
@@ -10504,10 +11086,29 @@
"url": "https://opencollective.com/parcel"
}
},
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.22.1.tgz",
+ "integrity": "sha512-1FaBtcFrZqB2hkFbAxY//Pnp8koThvyB6AhjbdVqKD4/pu13Rl91fKt2N9qyeQPUt3xy7ORUvSO+dPk3J6EjXg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
"node_modules/lightningcss-linux-arm-gnueabihf": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.18.0.tgz",
- "integrity": "sha512-S+25JjI6601HiAVoTDXW6SqH+E94a+FHA7WQqseyNHunOgVWKcAkNEc2LJvVxgwTq6z41sDIb9/M3Z9wa9lk4A==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.22.1.tgz",
+ "integrity": "sha512-6rub98tYGfE5I5j0BP8t/2d4BZyu1S7Iz9vUkm0H26snAFHYxLfj3RbQn0xHHIePSetjLnhcg3QlfwUAkD/FYg==",
"cpu": [
"arm"
],
@@ -10524,9 +11125,9 @@
}
},
"node_modules/lightningcss-linux-arm64-gnu": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.18.0.tgz",
- "integrity": "sha512-JSqh4+21dCgBecIQUet35dtE4PhhSEMyqe3y0ZNQrAJQ5kyUPSQHiw81WXnPJcOSTTpG0TyMLiC8K//+BsFGQA==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.22.1.tgz",
+ "integrity": "sha512-nYO5qGtb/1kkTZu3FeTiM+2B2TAb7m2DkLCTgQIs2bk2o9aEs7I96fwySKcoHWQAiQDGR9sMux9vkV4KQXqPaQ==",
"cpu": [
"arm64"
],
@@ -10543,9 +11144,9 @@
}
},
"node_modules/lightningcss-linux-arm64-musl": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.18.0.tgz",
- "integrity": "sha512-2FWHa8iUhShnZnqhn2wfIcK5adJat9hAAaX7etNsoXJymlliDIOFuBQEsba2KBAZSM4QqfQtvRdR7m8i0I7ybQ==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.22.1.tgz",
+ "integrity": "sha512-MCV6RuRpzXbunvzwY644iz8cw4oQxvW7oer9xPkdadYqlEyiJJ6wl7FyJOH7Q6ZYH4yjGAUCvxDBxPbnDu9ZVg==",
"cpu": [
"arm64"
],
@@ -10562,9 +11163,9 @@
}
},
"node_modules/lightningcss-linux-x64-gnu": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.18.0.tgz",
- "integrity": "sha512-plCPGQJtDZHcLVKVRLnQVF2XRsIC32WvuJhQ7fJ7F6BV98b/VZX0OlX05qUaOESD9dCDHjYSfxsgcvOKgCWh7A==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.22.1.tgz",
+ "integrity": "sha512-RjNgpdM20VUXgV7us/VmlO3Vn2ZRiDnc3/bUxCVvySZWPiVPprpqW/QDWuzkGa+NCUf6saAM5CLsZLSxncXJwg==",
"cpu": [
"x64"
],
@@ -10581,9 +11182,9 @@
}
},
"node_modules/lightningcss-linux-x64-musl": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.18.0.tgz",
- "integrity": "sha512-na+BGtVU6fpZvOHKhnlA0XHeibkT3/46nj6vLluG3kzdJYoBKU6dIl7DSOk++8jv4ybZyFJ0aOFMMSc8g2h58A==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.22.1.tgz",
+ "integrity": "sha512-ZgO4C7Rd6Hv/5MnyY2KxOYmIlzk4rplVolDt3NbkNR8DndnyX0Q5IR4acJWNTBICQ21j3zySzKbcJaiJpk/4YA==",
"cpu": [
"x64"
],
@@ -10600,9 +11201,9 @@
}
},
"node_modules/lightningcss-win32-x64-msvc": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.18.0.tgz",
- "integrity": "sha512-5qeAH4RMNy2yMNEl7e5TI6upt/7xD2ZpHWH4RkT8iJ7/6POS5mjHbXWUO9Q1hhDhqkdzGa76uAdMzEouIeCyNw==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.22.1.tgz",
+ "integrity": "sha512-4pozV4eyD0MDET41ZLHAeBo+H04Nm2UEYIk5w/ts40231dRFV7E0cjwbnZvSoc1DXFgecAhiC0L16ruv/ZDCpg==",
"cpu": [
"x64"
],
@@ -10619,11 +11220,11 @@
}
},
"node_modules/lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
+ "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==",
"engines": {
- "node": ">=10"
+ "node": ">=14"
}
},
"node_modules/lines-and-columns": {
@@ -10631,31 +11232,34 @@
"license": "MIT"
},
"node_modules/lmdb": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.5.2.tgz",
- "integrity": "sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.8.5.tgz",
+ "integrity": "sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
- "msgpackr": "^1.5.4",
- "node-addon-api": "^4.3.0",
- "node-gyp-build-optional-packages": "5.0.3",
- "ordered-binary": "^1.2.4",
+ "msgpackr": "^1.9.5",
+ "node-addon-api": "^6.1.0",
+ "node-gyp-build-optional-packages": "5.1.1",
+ "ordered-binary": "^1.4.1",
"weak-lru-cache": "^1.2.2"
},
+ "bin": {
+ "download-lmdb-prebuilds": "bin/download-prebuilds.js"
+ },
"optionalDependencies": {
- "@lmdb/lmdb-darwin-arm64": "2.5.2",
- "@lmdb/lmdb-darwin-x64": "2.5.2",
- "@lmdb/lmdb-linux-arm": "2.5.2",
- "@lmdb/lmdb-linux-arm64": "2.5.2",
- "@lmdb/lmdb-linux-x64": "2.5.2",
- "@lmdb/lmdb-win32-x64": "2.5.2"
+ "@lmdb/lmdb-darwin-arm64": "2.8.5",
+ "@lmdb/lmdb-darwin-x64": "2.8.5",
+ "@lmdb/lmdb-linux-arm": "2.8.5",
+ "@lmdb/lmdb-linux-arm64": "2.8.5",
+ "@lmdb/lmdb-linux-x64": "2.8.5",
+ "@lmdb/lmdb-win32-x64": "2.8.5"
}
},
"node_modules/lmdb/node_modules/node-addon-api": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
- "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
+ "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==",
"dev": true
},
"node_modules/loader-runner": {
@@ -10746,20 +11350,35 @@
}
},
"node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
"dependencies": {
- "semver": "^6.0.0"
+ "semver": "^7.5.3"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
@@ -10812,7 +11431,9 @@
"version": "2.0.30",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
- "dev": true
+ "dev": true,
+ "optional": true,
+ "peer": true
},
"node_modules/memory-fs": {
"version": "0.4.1",
@@ -11104,34 +11725,46 @@
"license": "MIT"
},
"node_modules/msgpackr": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.2.tgz",
- "integrity": "sha512-eLuPeok0DMwsGN23AvuVg32mYpx55tsQnxI87d8V1yZsdT8U5jrWhmCa1INO/joGAFQFfo/eTlM/BxVwLKbBOQ==",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.10.0.tgz",
+ "integrity": "sha512-rVQ5YAQDoZKZLX+h8tNq7FiHrPJoeGHViz3U4wIcykhAEpwF/nH2Vbk8dQxmpX5JavkI8C7pt4bnkJ02ZmRoUw==",
"dev": true,
"optionalDependencies": {
- "msgpackr-extract": "^2.2.0"
+ "msgpackr-extract": "^3.0.2"
}
},
"node_modules/msgpackr-extract": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-2.2.0.tgz",
- "integrity": "sha512-0YcvWSv7ZOGl9Od6Y5iJ3XnPww8O7WLcpYMDwX+PAA/uXLDtyw94PJv9GLQV/nnp3cWlDhMoyKZIQLrx33sWog==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz",
+ "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"dependencies": {
- "node-gyp-build-optional-packages": "5.0.3"
+ "node-gyp-build-optional-packages": "5.0.7"
},
"bin": {
"download-msgpackr-prebuilds": "bin/download-prebuilds.js"
},
"optionalDependencies": {
- "@msgpackr-extract/msgpackr-extract-darwin-arm64": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-darwin-x64": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-linux-arm": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-linux-arm64": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-linux-x64": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-win32-x64": "2.2.0"
+ "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2"
+ }
+ },
+ "node_modules/msgpackr-extract/node_modules/node-gyp-build-optional-packages": {
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz",
+ "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "node-gyp-build-optional-packages": "bin.js",
+ "node-gyp-build-optional-packages-optional": "optional.js",
+ "node-gyp-build-optional-packages-test": "build-test.js"
}
},
"node_modules/mz": {
@@ -11202,9 +11835,9 @@
"dev": true
},
"node_modules/node-addon-api": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
- "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz",
+ "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==",
"dev": true
},
"node_modules/node-fetch": {
@@ -11227,28 +11860,29 @@
}
}
},
- "node_modules/node-gyp-build": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
- "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
- "dev": true,
- "bin": {
- "node-gyp-build": "bin.js",
- "node-gyp-build-optional": "optional.js",
- "node-gyp-build-test": "build-test.js"
- }
- },
"node_modules/node-gyp-build-optional-packages": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz",
- "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz",
+ "integrity": "sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==",
"dev": true,
+ "dependencies": {
+ "detect-libc": "^2.0.1"
+ },
"bin": {
"node-gyp-build-optional-packages": "bin.js",
"node-gyp-build-optional-packages-optional": "optional.js",
"node-gyp-build-optional-packages-test": "build-test.js"
}
},
+ "node_modules/node-gyp-build-optional-packages/node_modules/detect-libc": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
+ "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
@@ -11304,9 +11938,9 @@
"dev": true
},
"node_modules/node-releases": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
- "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w=="
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ=="
},
"node_modules/normalize-path": {
"version": "3.0.0",
@@ -11315,14 +11949,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/normalize-range": {
- "version": "0.1.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/normalize-url": {
"version": "6.1.0",
"dev": true,
@@ -11510,44 +12136,26 @@
}
},
"node_modules/optionator": {
- "version": "0.9.1",
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
"dev": true,
- "license": "MIT",
"dependencies": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/optionator/node_modules/prelude-ls": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/optionator/node_modules/type-check": {
- "version": "0.4.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1"
+ "type-check": "^0.4.0"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/ordered-binary": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.0.tgz",
- "integrity": "sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz",
+ "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==",
"dev": true
},
"node_modules/os-browserify": {
@@ -11678,25 +12286,25 @@
}
},
"node_modules/parcel": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.8.3.tgz",
- "integrity": "sha512-5rMBpbNE72g6jZvkdR5gS2nyhwIXaJy8i65osOqs/+5b7zgf3eMKgjSsDrv6bhz3gzifsba6MBJiZdBckl+vnA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.10.3.tgz",
+ "integrity": "sha512-Ocx33N4ZVnotJTALhMZ0AqPIE9UN5uP6jjA+lYJ4FlEYuYYZsvOQXZQgeMa62pFj6jrOHWh7ho8uJhRdTNwVyg==",
"dev": true,
"dependencies": {
- "@parcel/config-default": "2.8.3",
- "@parcel/core": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/events": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/package-manager": "2.8.3",
- "@parcel/reporter-cli": "2.8.3",
- "@parcel/reporter-dev-server": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/config-default": "2.10.3",
+ "@parcel/core": "2.10.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/events": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/package-manager": "2.10.3",
+ "@parcel/reporter-cli": "2.10.3",
+ "@parcel/reporter-dev-server": "2.10.3",
+ "@parcel/reporter-tracer": "2.10.3",
+ "@parcel/utils": "2.10.3",
"chalk": "^4.1.0",
"commander": "^7.0.0",
- "get-port": "^4.2.0",
- "v8-compile-cache": "^2.0.0"
+ "get-port": "^4.2.0"
},
"bin": {
"parcel": "lib/bin.js"
@@ -11912,9 +12520,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz",
- "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==",
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
"funding": [
{
"type": "opencollective",
@@ -11992,88 +12600,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/postcss-colormin": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz",
- "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "colord": "^2.9.1",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-convert-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz",
- "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-comments": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz",
- "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-duplicates": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz",
- "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-empty": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz",
- "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-overridden": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz",
- "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
"node_modules/postcss-import": {
"version": "15.1.0",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
@@ -12109,20 +12635,26 @@
}
},
"node_modules/postcss-load-config": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
- "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
"dependencies": {
- "lilconfig": "^2.0.5",
- "yaml": "^2.1.1"
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
},
"engines": {
"node": ">= 14"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
"peerDependencies": {
"postcss": ">=8.0.9",
"ts-node": ">=9.0.0"
@@ -12137,9 +12669,9 @@
}
},
"node_modules/postcss-load-config/node_modules/yaml": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
- "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
+ "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
"engines": {
"node": ">= 14"
}
@@ -12201,104 +12733,6 @@
"node": ">=10"
}
},
- "node_modules/postcss-merge-longhand": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz",
- "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0",
- "stylehacks": "^6.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-merge-rules": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.0.tgz",
- "integrity": "sha512-rCXkklftzEkniyv3f4mRCQzxD6oE4Quyh61uyWTUbCJ26Pv2hoz+fivJSsSBWxDBeScR4fKCfF3HHTcD7Ybqnw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "cssnano-utils": "^4.0.0",
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-font-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz",
- "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-gradients": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz",
- "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==",
- "dev": true,
- "dependencies": {
- "colord": "^2.9.1",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-params": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz",
- "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz",
- "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==",
- "dev": true,
- "dependencies": {
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
"node_modules/postcss-modules": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz",
@@ -12395,186 +12829,6 @@
"postcss": "^8.2.14"
}
},
- "node_modules/postcss-normalize-charset": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz",
- "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-display-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz",
- "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-positions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz",
- "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-repeat-style": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz",
- "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-string": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz",
- "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-timing-functions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz",
- "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-unicode": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz",
- "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-url": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz",
- "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-whitespace": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz",
- "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-ordered-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz",
- "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==",
- "dev": true,
- "dependencies": {
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-reduce-initial": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz",
- "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-reduce-transforms": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz",
- "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
"node_modules/postcss-reporter": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz",
@@ -12596,8 +12850,9 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.11",
- "license": "MIT",
+ "version": "6.0.12",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz",
+ "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -12606,37 +12861,6 @@
"node": ">=4"
}
},
- "node_modules/postcss-svgo": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz",
- "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0",
- "svgo": "^3.0.2"
- },
- "engines": {
- "node": "^14 || ^16 || >= 18"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-unique-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz",
- "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==",
- "dev": true,
- "dependencies": {
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
"node_modules/postcss-value-parser": {
"version": "4.2.0",
"license": "MIT"
@@ -12690,6 +12914,15 @@
"node": ">=12"
}
},
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/prettier": {
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
@@ -12717,12 +12950,12 @@
}
},
"node_modules/pretty-format": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
- "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
@@ -12864,9 +13097,9 @@
}
},
"node_modules/pure-rand": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.1.tgz",
- "integrity": "sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz",
+ "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==",
"dev": true,
"funding": [
{
@@ -13102,11 +13335,11 @@
}
},
"node_modules/resolve": {
- "version": "1.22.2",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
- "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"dependencies": {
- "is-core-module": "^2.11.0",
+ "is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
@@ -13150,9 +13383,9 @@
"dev": true
},
"node_modules/resolve.exports": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.1.tgz",
- "integrity": "sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
"dev": true,
"engines": {
"node": ">=10"
@@ -13262,18 +13495,30 @@
}
},
"node_modules/rollup": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.0.tgz",
- "integrity": "sha512-ANPhVcyeHvYdQMUyCbczy33nbLzI7RzrBje4uvNiTDJGIMtlKoOStmympwr9OtS1LZxiDmE2wvxHyVhoLtf1KQ==",
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.5.1.tgz",
+ "integrity": "sha512-0EQribZoPKpb5z1NW/QYm3XSR//Xr8BeEXU49Lc/mQmpmVVG5jPUVrpc2iptup/0WMrY9mzas0fxH+TjYvG2CA==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
- "node": ">=14.18.0",
+ "node": ">=18.0.0",
"npm": ">=8.0.0"
},
"optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.5.1",
+ "@rollup/rollup-android-arm64": "4.5.1",
+ "@rollup/rollup-darwin-arm64": "4.5.1",
+ "@rollup/rollup-darwin-x64": "4.5.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.5.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.5.1",
+ "@rollup/rollup-linux-arm64-musl": "4.5.1",
+ "@rollup/rollup-linux-x64-gnu": "4.5.1",
+ "@rollup/rollup-linux-x64-musl": "4.5.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.5.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.5.1",
+ "@rollup/rollup-win32-x64-msvc": "4.5.1",
"fsevents": "~2.3.2"
}
},
@@ -13421,6 +13666,15 @@
"node": ">=8.0.0"
}
},
+ "node_modules/rollup-plugin-postcss/node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/rollup-plugin-postcss/node_modules/mdn-data": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
@@ -13972,9 +14226,9 @@
"dev": true
},
"node_modules/sass": {
- "version": "1.62.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.0.tgz",
- "integrity": "sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg==",
+ "version": "1.69.5",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz",
+ "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==",
"dev": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
@@ -14763,26 +15017,10 @@
"integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==",
"dev": true
},
- "node_modules/stylehacks": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz",
- "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-selector-parser": "^6.0.4"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
"node_modules/sucrase": {
- "version": "3.32.0",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz",
- "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==",
+ "version": "3.34.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz",
+ "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.2",
"commander": "^4.0.0",
@@ -14800,19 +15038,6 @@
"node": ">=8"
}
},
- "node_modules/sucrase/node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
- "dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/sucrase/node_modules/commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
@@ -14843,16 +15068,19 @@
}
},
"node_modules/svgo": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
- "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.4.tgz",
+ "integrity": "sha512-T+Xul3JwuJ6VGXKo/p2ndqx1ibxNKnLTvRc1ZTWKCfyKS/GgNjRZcYsK84fxTsy/izr91g/Rwx6fGnVgaFSI5g==",
"dev": true,
+ "optional": true,
+ "peer": true,
"dependencies": {
"@trysound/sax": "0.2.0",
"commander": "^7.2.0",
"css-select": "^5.1.0",
"css-tree": "^2.2.1",
- "csso": "^5.0.5",
+ "css-what": "^6.1.0",
+ "csso": "5.0.5",
"picocolors": "^1.0.0"
},
"bin": {
@@ -15248,27 +15476,26 @@
"dev": true
},
"node_modules/turbo": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.9.3.tgz",
- "integrity": "sha512-ID7mxmaLUPKG/hVkp+h0VuucB1U99RPCJD9cEuSEOdIPoSIuomcIClEJtKamUsdPLhLCud+BvapBNnhgh58Nzw==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.10.16.tgz",
+ "integrity": "sha512-2CEaK4FIuSZiP83iFa9GqMTQhroW2QryckVqUydmg4tx78baftTOS0O+oDAhvo9r9Nit4xUEtC1RAHoqs6ZEtg==",
"dev": true,
- "hasInstallScript": true,
"bin": {
"turbo": "bin/turbo"
},
"optionalDependencies": {
- "turbo-darwin-64": "1.9.3",
- "turbo-darwin-arm64": "1.9.3",
- "turbo-linux-64": "1.9.3",
- "turbo-linux-arm64": "1.9.3",
- "turbo-windows-64": "1.9.3",
- "turbo-windows-arm64": "1.9.3"
+ "turbo-darwin-64": "1.10.16",
+ "turbo-darwin-arm64": "1.10.16",
+ "turbo-linux-64": "1.10.16",
+ "turbo-linux-arm64": "1.10.16",
+ "turbo-windows-64": "1.10.16",
+ "turbo-windows-arm64": "1.10.16"
}
},
"node_modules/turbo-darwin-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.9.3.tgz",
- "integrity": "sha512-0dFc2cWXl82kRE4Z+QqPHhbEFEpUZho1msHXHWbz5+PqLxn8FY0lEVOHkq5tgKNNEd5KnGyj33gC/bHhpZOk5g==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.10.16.tgz",
+ "integrity": "sha512-+Jk91FNcp9e9NCLYlvDDlp2HwEDp14F9N42IoW3dmHI5ZkGSXzalbhVcrx3DOox3QfiNUHxzWg4d7CnVNCuuMg==",
"cpu": [
"x64"
],
@@ -15279,9 +15506,9 @@
]
},
"node_modules/turbo-darwin-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.9.3.tgz",
- "integrity": "sha512-1cYbjqLBA2zYE1nbf/qVnEkrHa4PkJJbLo7hnuMuGM0bPzh4+AnTNe98gELhqI1mkTWBu/XAEeF5u6dgz0jLNA==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.10.16.tgz",
+ "integrity": "sha512-jqGpFZipIivkRp/i+jnL8npX0VssE6IAVNKtu573LXtssZdV/S+fRGYA16tI46xJGxSAivrZ/IcgZrV6Jk80bw==",
"cpu": [
"arm64"
],
@@ -15292,9 +15519,9 @@
]
},
"node_modules/turbo-linux-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.9.3.tgz",
- "integrity": "sha512-UuBPFefawEwpuxh5pM9Jqq3q4C8M0vYxVYlB3qea/nHQ80pxYq7ZcaLGEpb10SGnr3oMUUs1zZvkXWDNKCJb8Q==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.10.16.tgz",
+ "integrity": "sha512-PpqEZHwLoizQ6sTUvmImcRmACyRk9EWLXGlqceogPZsJ1jTRK3sfcF9fC2W56zkSIzuLEP07k5kl+ZxJd8JMcg==",
"cpu": [
"x64"
],
@@ -15305,9 +15532,9 @@
]
},
"node_modules/turbo-linux-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.9.3.tgz",
- "integrity": "sha512-vUrNGa3hyDtRh9W0MkO+l1dzP8Co2gKnOVmlJQW0hdpOlWlIh22nHNGGlICg+xFa2f9j4PbQlWTsc22c019s8Q==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.10.16.tgz",
+ "integrity": "sha512-TMjFYz8to1QE0fKVXCIvG/4giyfnmqcQIwjdNfJvKjBxn22PpbjeuFuQ5kNXshUTRaTJihFbuuCcb5OYFNx4uw==",
"cpu": [
"arm64"
],
@@ -15318,9 +15545,9 @@
]
},
"node_modules/turbo-windows-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.9.3.tgz",
- "integrity": "sha512-0BZ7YaHs6r+K4ksqWus1GKK3W45DuDqlmfjm/yuUbTEVc8szmMCs12vugU2Zi5GdrdJSYfoKfEJ/PeegSLIQGQ==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.10.16.tgz",
+ "integrity": "sha512-+jsf68krs0N66FfC4/zZvioUap/Tq3sPFumnMV+EBo8jFdqs4yehd6+MxIwYTjSQLIcpH8KoNMB0gQYhJRLZzw==",
"cpu": [
"x64"
],
@@ -15331,9 +15558,9 @@
]
},
"node_modules/turbo-windows-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.9.3.tgz",
- "integrity": "sha512-QJUYLSsxdXOsR1TquiOmLdAgtYcQ/RuSRpScGvnZb1hY0oLc7JWU0llkYB81wVtWs469y8H9O0cxbKwCZGR4RQ==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.10.16.tgz",
+ "integrity": "sha512-sKm3hcMM1bl0B3PLG4ifidicOGfoJmOEacM5JtgBkYM48ncMHjkHfFY7HrJHZHUnXM4l05RQTpLFoOl/uIo2HQ==",
"cpu": [
"arm64"
],
@@ -15343,6 +15570,18 @@
"win32"
]
},
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
@@ -15383,6 +15622,12 @@
"node": ">=12.20"
}
},
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "devOptional": true
+ },
"node_modules/union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -15494,7 +15739,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.0.10",
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+ "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
"funding": [
{
"type": "opencollective",
@@ -15503,15 +15750,18 @@
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
}
],
- "license": "MIT",
"dependencies": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
},
"bin": {
- "browserslist-lint": "cli.js"
+ "update-browserslist-db": "cli.js"
},
"peerDependencies": {
"browserslist": ">= 4.21.0"
@@ -15585,12 +15835,6 @@
"node": ">= 4"
}
},
- "node_modules/v8-compile-cache": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
- "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
- "dev": true
- },
"node_modules/v8-compile-cache-lib": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
@@ -15619,27 +15863,31 @@
"dev": true
},
"node_modules/vite": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.2.tgz",
- "integrity": "sha512-9R53Mf+TBoXCYejcL+qFbZde+eZveQLDYd9XgULILLC1a5ZwPaqgmdVpL8/uvw2BM/1TzetWjglwm+3RO+xTyw==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.2.tgz",
+ "integrity": "sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==",
"dev": true,
"dependencies": {
- "esbuild": "^0.17.5",
- "postcss": "^8.4.21",
- "rollup": "^3.21.0"
+ "esbuild": "^0.19.3",
+ "postcss": "^8.4.31",
+ "rollup": "^4.2.0"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
- "node": "^14.18.0 || >=16.0.0"
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
},
"optionalDependencies": {
- "fsevents": "~2.3.2"
+ "fsevents": "~2.3.3"
},
"peerDependencies": {
- "@types/node": ">= 14",
+ "@types/node": "^18.0.0 || >=20.0.0",
"less": "*",
+ "lightningcss": "^1.21.0",
"sass": "*",
"stylus": "*",
"sugarss": "*",
@@ -15652,6 +15900,9 @@
"less": {
"optional": true
},
+ "lightningcss": {
+ "optional": true
+ },
"sass": {
"optional": true
},
@@ -16308,14 +16559,6 @@
"integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
"dev": true
},
- "node_modules/word-wrap": {
- "version": "1.2.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/worker-farm": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
@@ -16367,12 +16610,6 @@
"node": ">=0.4"
}
},
- "node_modules/xxhash-wasm": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz",
- "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==",
- "dev": true
- },
"node_modules/y18n": {
"version": "5.0.8",
"dev": true,
@@ -16455,7 +16692,7 @@
"version": "0.0.0",
"license": "MIT",
"devDependencies": {
- "@napi-rs/cli": "^2.15.2"
+ "@napi-rs/cli": "^2.16.5"
},
"engines": {
"node": ">= 10"
@@ -16474,55 +16711,122 @@
}
},
"dependencies": {
+ "@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true
+ },
"@alloc/quick-lru": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="
},
"@ampproject/remapping": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
- "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
"dev": true,
"requires": {
- "@jridgewell/gen-mapping": "^0.1.0",
+ "@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"@babel/code-frame": {
- "version": "7.18.6",
+ "version": "7.22.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
+ "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.18.6"
+ "@babel/highlight": "^7.22.13",
+ "chalk": "^2.4.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
}
},
"@babel/compat-data": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz",
- "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz",
+ "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==",
"dev": true
},
"@babel/core": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz",
- "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz",
+ "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==",
"dev": true,
"requires": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.21.3",
- "@babel/helper-compilation-targets": "^7.20.7",
- "@babel/helper-module-transforms": "^7.21.2",
- "@babel/helpers": "^7.21.0",
- "@babel/parser": "^7.21.3",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.3",
- "@babel/types": "^7.21.3",
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.22.15",
+ "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/helper-module-transforms": "^7.22.20",
+ "@babel/helpers": "^7.22.15",
+ "@babel/parser": "^7.22.16",
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.22.20",
+ "@babel/types": "^7.22.19",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
- "json5": "^2.2.2",
- "semver": "^6.3.0"
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
},
"dependencies": {
"convert-source-map": {
@@ -16530,45 +16834,38 @@
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
"dev": true
+ },
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
}
}
},
"@babel/generator": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz",
- "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz",
+ "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==",
"dev": true,
"requires": {
- "@babel/types": "^7.21.3",
+ "@babel/types": "^7.22.15",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
- },
- "dependencies": {
- "@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "dev": true,
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- }
}
},
"@babel/helper-compilation-targets": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz",
- "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
+ "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.20.5",
- "@babel/helper-validator-option": "^7.18.6",
- "browserslist": "^4.21.3",
+ "@babel/compat-data": "^7.22.9",
+ "@babel/helper-validator-option": "^7.22.15",
+ "browserslist": "^4.21.9",
"lru-cache": "^5.1.1",
- "semver": "^6.3.0"
+ "semver": "^6.3.1"
},
"dependencies": {
"lru-cache": {
@@ -16580,6 +16877,12 @@
"yallist": "^3.0.2"
}
},
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ },
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -16589,119 +16892,120 @@
}
},
"@babel/helper-environment-visitor": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
- "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true
},
"@babel/helper-function-name": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz",
- "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
+ "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
"dev": true,
"requires": {
- "@babel/template": "^7.20.7",
- "@babel/types": "^7.21.0"
+ "@babel/template": "^7.22.5",
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-hoist-variables": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
- "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
"requires": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-module-imports": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
- "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+ "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"dev": true,
"requires": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.22.15"
}
},
"@babel/helper-module-transforms": {
- "version": "7.21.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz",
- "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz",
+ "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==",
"dev": true,
"requires": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.20.2",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.19.1",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.2",
- "@babel/types": "^7.21.2"
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-module-imports": "^7.22.15",
+ "@babel/helper-simple-access": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-validator-identifier": "^7.22.20"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
- "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
+ "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
"dev": true
},
"@babel/helper-simple-access": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
- "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+ "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
"dev": true,
"requires": {
- "@babel/types": "^7.20.2"
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
- "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
"requires": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-string-parser": {
- "version": "7.19.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
- "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
+ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
"dev": true
},
"@babel/helper-validator-identifier": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
- "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true
},
"@babel/helper-validator-option": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
- "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
+ "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==",
"dev": true
},
"@babel/helpers": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz",
- "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz",
+ "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==",
"dev": true,
"requires": {
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.0",
- "@babel/types": "^7.21.0"
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.22.15",
+ "@babel/types": "^7.22.15"
}
},
"@babel/highlight": {
- "version": "7.18.6",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
+ "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
"js-tokens": "^4.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
@@ -16709,6 +17013,8 @@
},
"chalk": {
"version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
@@ -16718,6 +17024,8 @@
},
"color-convert": {
"version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
"color-name": "1.1.3"
@@ -16725,18 +17033,26 @@
},
"color-name": {
"version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"dev": true
},
"escape-string-regexp": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true
},
"has-flag": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"supports-color": {
"version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
@@ -16745,9 +17061,9 @@
}
},
"@babel/parser": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz",
- "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==",
+ "version": "7.22.16",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz",
+ "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==",
"dev": true
},
"@babel/plugin-syntax-async-generators": {
@@ -16796,12 +17112,12 @@
}
},
"@babel/plugin-syntax-jsx": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
- "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz",
+ "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-syntax-logical-assignment-operators": {
@@ -16868,51 +17184,51 @@
}
},
"@babel/plugin-syntax-typescript": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz",
- "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz",
+ "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.19.0"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/template": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
- "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.18.6",
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7"
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
}
},
"@babel/traverse": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz",
- "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz",
+ "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.21.3",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.21.0",
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.21.3",
- "@babel/types": "^7.21.3",
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.22.15",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.22.16",
+ "@babel/types": "^7.22.19",
"debug": "^4.1.0",
"globals": "^11.1.0"
}
},
"@babel/types": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz",
- "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==",
+ "version": "7.22.19",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz",
+ "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==",
"dev": true,
"requires": {
- "@babel/helper-string-parser": "^7.19.4",
- "@babel/helper-validator-identifier": "^7.19.1",
+ "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.19",
"to-fast-properties": "^2.0.0"
}
},
@@ -16952,156 +17268,156 @@
"dev": true
},
"@esbuild/android-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz",
- "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.7.tgz",
+ "integrity": "sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==",
"dev": true,
"optional": true
},
"@esbuild/android-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz",
- "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.7.tgz",
+ "integrity": "sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==",
"dev": true,
"optional": true
},
"@esbuild/android-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz",
- "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.7.tgz",
+ "integrity": "sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==",
"dev": true,
"optional": true
},
"@esbuild/darwin-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz",
- "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.7.tgz",
+ "integrity": "sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==",
"dev": true,
"optional": true
},
"@esbuild/darwin-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz",
- "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.7.tgz",
+ "integrity": "sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==",
"dev": true,
"optional": true
},
"@esbuild/freebsd-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz",
- "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.7.tgz",
+ "integrity": "sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==",
"dev": true,
"optional": true
},
"@esbuild/freebsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz",
- "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.7.tgz",
+ "integrity": "sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==",
"dev": true,
"optional": true
},
"@esbuild/linux-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz",
- "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.7.tgz",
+ "integrity": "sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==",
"dev": true,
"optional": true
},
"@esbuild/linux-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz",
- "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.7.tgz",
+ "integrity": "sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==",
"dev": true,
"optional": true
},
"@esbuild/linux-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz",
- "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.7.tgz",
+ "integrity": "sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==",
"dev": true,
"optional": true
},
"@esbuild/linux-loong64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz",
- "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.7.tgz",
+ "integrity": "sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==",
"dev": true,
"optional": true
},
"@esbuild/linux-mips64el": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz",
- "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.7.tgz",
+ "integrity": "sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==",
"dev": true,
"optional": true
},
"@esbuild/linux-ppc64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz",
- "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.7.tgz",
+ "integrity": "sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==",
"dev": true,
"optional": true
},
"@esbuild/linux-riscv64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz",
- "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.7.tgz",
+ "integrity": "sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==",
"dev": true,
"optional": true
},
"@esbuild/linux-s390x": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz",
- "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.7.tgz",
+ "integrity": "sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==",
"dev": true,
"optional": true
},
"@esbuild/linux-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz",
- "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.7.tgz",
+ "integrity": "sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==",
"dev": true,
"optional": true
},
"@esbuild/netbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz",
- "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.7.tgz",
+ "integrity": "sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==",
"dev": true,
"optional": true
},
"@esbuild/openbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz",
- "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.7.tgz",
+ "integrity": "sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==",
"dev": true,
"optional": true
},
"@esbuild/sunos-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz",
- "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.7.tgz",
+ "integrity": "sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==",
"dev": true,
"optional": true
},
"@esbuild/win32-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz",
- "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.7.tgz",
+ "integrity": "sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==",
"dev": true,
"optional": true
},
"@esbuild/win32-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz",
- "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.7.tgz",
+ "integrity": "sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==",
"dev": true,
"optional": true
},
"@esbuild/win32-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz",
- "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.7.tgz",
+ "integrity": "sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==",
"dev": true,
"optional": true
},
@@ -17115,20 +17431,20 @@
}
},
"@eslint-community/regexpp": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz",
- "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==",
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz",
+ "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==",
"dev": true
},
"@eslint/eslintrc": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz",
- "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
+ "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.5.1",
+ "espree": "^9.6.0",
"globals": "^13.19.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
@@ -17144,9 +17460,9 @@
"dev": true
},
"globals": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "version": "13.23.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
@@ -17164,16 +17480,18 @@
}
},
"@eslint/js": {
- "version": "8.39.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz",
- "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==",
+ "version": "8.53.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
+ "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
"dev": true
},
"@humanwhocodes/config-array": {
- "version": "0.11.8",
+ "version": "0.11.13",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
+ "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
"dev": true,
"requires": {
- "@humanwhocodes/object-schema": "^1.2.1",
+ "@humanwhocodes/object-schema": "^2.0.1",
"debug": "^4.1.1",
"minimatch": "^3.0.5"
}
@@ -17183,7 +17501,9 @@
"dev": true
},
"@humanwhocodes/object-schema": {
- "version": "1.2.1",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
+ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
"dev": true
},
"@istanbuljs/load-nyc-config": {
@@ -17206,26 +17526,26 @@
"dev": true
},
"@jest/console": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz",
- "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
+ "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
"dev": true,
"requires": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
"slash": "^3.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -17234,9 +17554,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -17245,48 +17565,48 @@
}
},
"@jest/core": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz",
- "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
+ "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
"dev": true,
"requires": {
- "@jest/console": "^29.5.0",
- "@jest/reporters": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/console": "^29.7.0",
+ "@jest/reporters": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
- "jest-changed-files": "^29.5.0",
- "jest-config": "^29.5.0",
- "jest-haste-map": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-resolve-dependencies": "^29.5.0",
- "jest-runner": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
- "jest-watcher": "^29.5.0",
+ "jest-changed-files": "^29.7.0",
+ "jest-config": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-resolve-dependencies": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "jest-watcher": "^29.7.0",
"micromatch": "^4.0.4",
- "pretty-format": "^29.5.0",
+ "pretty-format": "^29.7.0",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -17295,9 +17615,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -17313,24 +17633,24 @@
}
},
"@jest/environment": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz",
- "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
+ "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
"dev": true,
"requires": {
- "@jest/fake-timers": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
- "jest-mock": "^29.5.0"
+ "jest-mock": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -17339,9 +17659,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -17350,45 +17670,45 @@
}
},
"@jest/expect": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz",
- "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
"dev": true,
"requires": {
- "expect": "^29.5.0",
- "jest-snapshot": "^29.5.0"
+ "expect": "^29.7.0",
+ "jest-snapshot": "^29.7.0"
}
},
"@jest/expect-utils": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz",
- "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
+ "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
"dev": true,
"requires": {
- "jest-get-type": "^29.4.3"
+ "jest-get-type": "^29.6.3"
}
},
"@jest/fake-timers": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz",
- "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
+ "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
"dev": true,
"requires": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@sinonjs/fake-timers": "^10.0.2",
"@types/node": "*",
- "jest-message-util": "^29.5.0",
- "jest-mock": "^29.5.0",
- "jest-util": "^29.5.0"
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -17397,9 +17717,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -17408,24 +17728,24 @@
}
},
"@jest/globals": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz",
- "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
+ "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
"dev": true,
"requires": {
- "@jest/environment": "^29.5.0",
- "@jest/expect": "^29.5.0",
- "@jest/types": "^29.5.0",
- "jest-mock": "^29.5.0"
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "jest-mock": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -17434,9 +17754,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -17445,17 +17765,17 @@
}
},
"@jest/reporters": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz",
- "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
+ "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@jridgewell/trace-mapping": "^0.3.15",
+ "@jest/console": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
"@types/node": "*",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
@@ -17463,13 +17783,13 @@
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
"istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^5.1.0",
+ "istanbul-lib-instrument": "^6.0.0",
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.1.3",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-worker": "^29.5.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
"slash": "^3.0.0",
"string-length": "^4.0.1",
"strip-ansi": "^6.0.0",
@@ -17477,12 +17797,12 @@
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -17491,9 +17811,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -17502,44 +17822,44 @@
}
},
"@jest/schemas": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz",
- "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
"dev": true,
"requires": {
- "@sinclair/typebox": "^0.25.16"
+ "@sinclair/typebox": "^0.27.8"
}
},
"@jest/source-map": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz",
- "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
+ "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
"dev": true,
"requires": {
- "@jridgewell/trace-mapping": "^0.3.15",
+ "@jridgewell/trace-mapping": "^0.3.18",
"callsites": "^3.0.0",
"graceful-fs": "^4.2.9"
}
},
"@jest/test-result": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz",
- "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
+ "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
"dev": true,
"requires": {
- "@jest/console": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/console": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -17548,9 +17868,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -17559,34 +17879,34 @@
}
},
"@jest/test-sequencer": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz",
- "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
+ "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
"dev": true,
"requires": {
- "@jest/test-result": "^29.5.0",
+ "@jest/test-result": "^29.7.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
+ "jest-haste-map": "^29.7.0",
"slash": "^3.0.0"
}
},
"@jest/transform": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz",
- "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
+ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
"dev": true,
"requires": {
"@babel/core": "^7.11.6",
- "@jest/types": "^29.5.0",
- "@jridgewell/trace-mapping": "^0.3.15",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
"babel-plugin-istanbul": "^6.1.1",
"chalk": "^4.0.0",
"convert-source-map": "^2.0.0",
"fast-json-stable-stringify": "^2.1.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-util": "^29.5.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
"micromatch": "^4.0.4",
"pirates": "^4.0.4",
"slash": "^3.0.0",
@@ -17594,12 +17914,12 @@
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -17608,9 +17928,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -17630,13 +17950,13 @@
}
},
"@jridgewell/gen-mapping": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
- "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
- "dev": true,
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"requires": {
- "@jridgewell/set-array": "^1.0.0",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
}
},
"@jridgewell/resolve-uri": {
@@ -17653,98 +17973,85 @@
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
- },
- "dependencies": {
- "@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "dev": true,
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- }
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.14"
},
"@jridgewell/trace-mapping": {
- "version": "0.3.17",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
- "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
+ "version": "0.3.18",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
+ "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
"requires": {
"@jridgewell/resolve-uri": "3.1.0",
"@jridgewell/sourcemap-codec": "1.4.14"
}
},
"@lezer/common": {
- "version": "0.15.12",
- "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz",
- "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.1.1.tgz",
+ "integrity": "sha512-aAPB9YbvZHqAW+bIwiuuTDGB4DG0sYNRObGLxud8cW7osw1ZQxfDuTZ8KQiqfZ0QJGcR34CvpTMDXEyo/+Htgg==",
"dev": true
},
"@lezer/lr": {
- "version": "0.15.8",
- "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz",
- "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==",
+ "version": "1.3.14",
+ "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.14.tgz",
+ "integrity": "sha512-z5mY4LStlA3yL7aHT/rqgG614cfcvklS+8oFRFBYrs4YaWLJyKKM4+nN6KopToX0o9Hj6zmH6M5kinOYuy06ug==",
"dev": true,
"requires": {
- "@lezer/common": "^0.15.0"
+ "@lezer/common": "^1.0.0"
}
},
"@lmdb/lmdb-darwin-arm64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz",
- "integrity": "sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.8.5.tgz",
+ "integrity": "sha512-KPDeVScZgA1oq0CiPBcOa3kHIqU+pTOwRFDIhxvmf8CTNvqdZQYp5cCKW0bUk69VygB2PuTiINFWbY78aR2pQw==",
"dev": true,
"optional": true
},
"@lmdb/lmdb-darwin-x64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz",
- "integrity": "sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.8.5.tgz",
+ "integrity": "sha512-w/sLhN4T7MW1nB3R/U8WK5BgQLz904wh+/SmA2jD8NnF7BLLoUgflCNxOeSPOWp8geP6nP/+VjWzZVip7rZ1ug==",
"dev": true,
"optional": true
},
"@lmdb/lmdb-linux-arm": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz",
- "integrity": "sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.8.5.tgz",
+ "integrity": "sha512-c0TGMbm2M55pwTDIfkDLB6BpIsgxV4PjYck2HiOX+cy/JWiBXz32lYbarPqejKs9Flm7YVAKSILUducU9g2RVg==",
"dev": true,
"optional": true
},
"@lmdb/lmdb-linux-arm64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz",
- "integrity": "sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.8.5.tgz",
+ "integrity": "sha512-vtbZRHH5UDlL01TT5jB576Zox3+hdyogvpcbvVJlmU5PdL3c5V7cj1EODdh1CHPksRl+cws/58ugEHi8bcj4Ww==",
"dev": true,
"optional": true
},
"@lmdb/lmdb-linux-x64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz",
- "integrity": "sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.8.5.tgz",
+ "integrity": "sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ==",
"dev": true,
"optional": true
},
"@lmdb/lmdb-win32-x64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz",
- "integrity": "sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.8.5.tgz",
+ "integrity": "sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ==",
"dev": true,
"optional": true
},
"@mischnic/json-sourcemap": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz",
- "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==",
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.1.tgz",
+ "integrity": "sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==",
"dev": true,
"requires": {
- "@lezer/common": "^0.15.7",
- "@lezer/lr": "^0.15.4",
+ "@lezer/common": "^1.0.0",
+ "@lezer/lr": "^1.0.0",
"json5": "^2.2.1"
}
},
@@ -17765,51 +18072,51 @@
}
},
"@msgpackr-extract/msgpackr-extract-darwin-arm64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-2.2.0.tgz",
- "integrity": "sha512-Z9LFPzfoJi4mflGWV+rv7o7ZbMU5oAU9VmzCgL240KnqDW65Y2HFCT3MW06/ITJSnbVLacmcEJA8phywK7JinQ==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz",
+ "integrity": "sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==",
"dev": true,
"optional": true
},
"@msgpackr-extract/msgpackr-extract-darwin-x64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-2.2.0.tgz",
- "integrity": "sha512-vq0tT8sjZsy4JdSqmadWVw6f66UXqUCabLmUVHZwUFzMgtgoIIQjT4VVRHKvlof3P/dMCkbMJ5hB1oJ9OWHaaw==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz",
+ "integrity": "sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==",
"dev": true,
"optional": true
},
"@msgpackr-extract/msgpackr-extract-linux-arm": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-2.2.0.tgz",
- "integrity": "sha512-SaJ3Qq4lX9Syd2xEo9u3qPxi/OB+5JO/ngJKK97XDpa1C587H9EWYO6KD8995DAjSinWvdHKRrCOXVUC5fvGOg==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz",
+ "integrity": "sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==",
"dev": true,
"optional": true
},
"@msgpackr-extract/msgpackr-extract-linux-arm64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-2.2.0.tgz",
- "integrity": "sha512-hlxxLdRmPyq16QCutUtP8Tm6RDWcyaLsRssaHROatgnkOxdleMTgetf9JsdncL8vLh7FVy/RN9i3XR5dnb9cRA==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz",
+ "integrity": "sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==",
"dev": true,
"optional": true
},
"@msgpackr-extract/msgpackr-extract-linux-x64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-2.2.0.tgz",
- "integrity": "sha512-94y5PJrSOqUNcFKmOl7z319FelCLAE0rz/jPCWS+UtdMZvpa4jrQd+cJPQCLp2Fes1yAW/YUQj/Di6YVT3c3Iw==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz",
+ "integrity": "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==",
"dev": true,
"optional": true
},
"@msgpackr-extract/msgpackr-extract-win32-x64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-2.2.0.tgz",
- "integrity": "sha512-XrC0JzsqQSvOyM3t04FMLO6z5gCuhPE6k4FXuLK5xf52ZbdvcFe1yBmo7meCew9B8G2f0T9iu9t3kfTYRYROgA==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz",
+ "integrity": "sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==",
"dev": true,
"optional": true
},
"@napi-rs/cli": {
- "version": "2.15.2",
- "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-2.15.2.tgz",
- "integrity": "sha512-80tBCtCnEhAmFtB9oPM0FL74uW7fAmtpeqjvERH7Q1z/aZzCAs/iNfE7U3ehpwg9Q07Ob2Eh/+1guyCdX/p24w==",
+ "version": "2.16.5",
+ "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-2.16.5.tgz",
+ "integrity": "sha512-mFEzwrg4IOLngGd2/P6yeqIWgwQNn59Z08n1rndu6kLDq1gg954NH9cM1O9Da0RJuybt46p43lqgSsnAY2mxqA==",
"dev": true
},
"@nodelib/fs.scandir": {
@@ -17830,107 +18137,109 @@
}
},
"@parcel/bundler-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.8.3.tgz",
- "integrity": "sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.10.3.tgz",
+ "integrity": "sha512-a+yq8zH8mrg6FBgUjrC+r3z6cfK7dQVMNzduEU/LF52Z4FVAmTR8gefl/YGmAbquJL3PFAHdhICrljYnQ1WQkg==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/graph": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/graph": "3.0.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
}
},
"@parcel/cache": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.8.3.tgz",
- "integrity": "sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.10.3.tgz",
+ "integrity": "sha512-fNNOFOl4dwOlzP8iAa+evZ+3BakX0sV+3+PiYA0zaps7EmPmkTSGDhCWzaYRSO8fhmNDlrUX9Xh7b/X738LFqA==",
"dev": true,
"requires": {
- "@parcel/fs": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/utils": "2.8.3",
- "lmdb": "2.5.2"
+ "@parcel/fs": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "lmdb": "2.8.5"
}
},
"@parcel/codeframe": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.8.3.tgz",
- "integrity": "sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.10.3.tgz",
+ "integrity": "sha512-70ovUzeXBowDMjK+1xaLT4hm3jZUK7EbaCS6tN1cmmr0S1TDhU7g37jnpni+u9de9Lc/lErwTaDVXUf9WSQzQw==",
"dev": true,
"requires": {
"chalk": "^4.1.0"
}
},
"@parcel/compressor-raw": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.8.3.tgz",
- "integrity": "sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.10.3.tgz",
+ "integrity": "sha512-5SUZ80uwu7o0D+0RjhjBnSUXJRgaayfqVQtBRP3U7/W/Bb1Ixm1yDGXtDlyCbzimWqWVMMJ4/eVCEW7I8Ln4Bw==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3"
+ "@parcel/plugin": "2.10.3"
}
},
"@parcel/config-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.8.3.tgz",
- "integrity": "sha512-o/A/mbrO6X/BfGS65Sib8d6SSG45NYrNooNBkH/o7zbOBSRQxwyTlysleK1/3Wa35YpvFyLOwgfakqCtbGy4fw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.10.3.tgz",
+ "integrity": "sha512-gHVw5cKZVA9h/J4E33qQLg3QG3cYMyWVruyVzF8dFy/Rar5ebXMof1f38IhR2BIavpoThbnCnxgD4SVK8xOPag==",
"dev": true,
"requires": {
- "@parcel/bundler-default": "2.8.3",
- "@parcel/compressor-raw": "2.8.3",
- "@parcel/namer-default": "2.8.3",
- "@parcel/optimizer-css": "2.8.3",
- "@parcel/optimizer-htmlnano": "2.8.3",
- "@parcel/optimizer-image": "2.8.3",
- "@parcel/optimizer-svgo": "2.8.3",
- "@parcel/optimizer-terser": "2.8.3",
- "@parcel/packager-css": "2.8.3",
- "@parcel/packager-html": "2.8.3",
- "@parcel/packager-js": "2.8.3",
- "@parcel/packager-raw": "2.8.3",
- "@parcel/packager-svg": "2.8.3",
- "@parcel/reporter-dev-server": "2.8.3",
- "@parcel/resolver-default": "2.8.3",
- "@parcel/runtime-browser-hmr": "2.8.3",
- "@parcel/runtime-js": "2.8.3",
- "@parcel/runtime-react-refresh": "2.8.3",
- "@parcel/runtime-service-worker": "2.8.3",
- "@parcel/transformer-babel": "2.8.3",
- "@parcel/transformer-css": "2.8.3",
- "@parcel/transformer-html": "2.8.3",
- "@parcel/transformer-image": "2.8.3",
- "@parcel/transformer-js": "2.8.3",
- "@parcel/transformer-json": "2.8.3",
- "@parcel/transformer-postcss": "2.8.3",
- "@parcel/transformer-posthtml": "2.8.3",
- "@parcel/transformer-raw": "2.8.3",
- "@parcel/transformer-react-refresh-wrap": "2.8.3",
- "@parcel/transformer-svg": "2.8.3"
+ "@parcel/bundler-default": "2.10.3",
+ "@parcel/compressor-raw": "2.10.3",
+ "@parcel/namer-default": "2.10.3",
+ "@parcel/optimizer-css": "2.10.3",
+ "@parcel/optimizer-htmlnano": "2.10.3",
+ "@parcel/optimizer-image": "2.10.3",
+ "@parcel/optimizer-svgo": "2.10.3",
+ "@parcel/optimizer-swc": "2.10.3",
+ "@parcel/packager-css": "2.10.3",
+ "@parcel/packager-html": "2.10.3",
+ "@parcel/packager-js": "2.10.3",
+ "@parcel/packager-raw": "2.10.3",
+ "@parcel/packager-svg": "2.10.3",
+ "@parcel/packager-wasm": "2.10.3",
+ "@parcel/reporter-dev-server": "2.10.3",
+ "@parcel/resolver-default": "2.10.3",
+ "@parcel/runtime-browser-hmr": "2.10.3",
+ "@parcel/runtime-js": "2.10.3",
+ "@parcel/runtime-react-refresh": "2.10.3",
+ "@parcel/runtime-service-worker": "2.10.3",
+ "@parcel/transformer-babel": "2.10.3",
+ "@parcel/transformer-css": "2.10.3",
+ "@parcel/transformer-html": "2.10.3",
+ "@parcel/transformer-image": "2.10.3",
+ "@parcel/transformer-js": "2.10.3",
+ "@parcel/transformer-json": "2.10.3",
+ "@parcel/transformer-postcss": "2.10.3",
+ "@parcel/transformer-posthtml": "2.10.3",
+ "@parcel/transformer-raw": "2.10.3",
+ "@parcel/transformer-react-refresh-wrap": "2.10.3",
+ "@parcel/transformer-svg": "2.10.3"
}
},
"@parcel/core": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.8.3.tgz",
- "integrity": "sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.10.3.tgz",
+ "integrity": "sha512-b64FdqJi4CX6iWeLZNfmwdTrC1VLPXHMuFusf1sTZTuRBFw2oRpgJvuiqsrInaZ82o3lbLMo4a9/5LtNaZKa+Q==",
"dev": true,
"requires": {
"@mischnic/json-sourcemap": "^0.1.0",
- "@parcel/cache": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/events": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/graph": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/package-manager": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/cache": "2.10.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/events": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/graph": "3.0.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/package-manager": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/profiler": "2.10.3",
+ "@parcel/rust": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3",
"abortcontroller-polyfill": "^1.1.9",
"base-x": "^3.0.8",
"browserslist": "^4.6.6",
@@ -17938,23 +18247,26 @@
"dotenv": "^7.0.0",
"dotenv-expand": "^5.1.0",
"json5": "^2.2.0",
- "msgpackr": "^1.5.4",
+ "msgpackr": "^1.9.9",
"nullthrows": "^1.1.1",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/diagnostic": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.8.3.tgz",
- "integrity": "sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.10.3.tgz",
+ "integrity": "sha512-Hf3xG9UVkDABDXWi89TjEP5U1CLUUj81kx/QFeupBXnzt5GEQZBhkxdBq6+4w17Mmuvk7H5uumNsSptkWq9PCA==",
"dev": true,
"requires": {
"@mischnic/json-sourcemap": "^0.1.0",
@@ -17962,124 +18274,111 @@
}
},
"@parcel/events": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.8.3.tgz",
- "integrity": "sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.10.3.tgz",
+ "integrity": "sha512-I3FsZYmKzgvo1f6frUWdF7hWwpeWTshPrFqpn9ICDXs/1Hjlf32jNXLBqon9b9XUDfMw4nSRMFMzMLJpbdheGA==",
"dev": true
},
"@parcel/fs": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.8.3.tgz",
- "integrity": "sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.10.3.tgz",
+ "integrity": "sha512-0w4+Lc7B5VpwqX4GQfjnI5qN7tc9qbGPSPsf/6U2YPWU4dkGsMfPEmLBx7dZvJy3UiGxpsjMMuRHa14+jJ5QrQ==",
"dev": true,
"requires": {
- "@parcel/fs-search": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"@parcel/watcher": "^2.0.7",
- "@parcel/workers": "2.8.3"
- }
- },
- "@parcel/fs-search": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.8.3.tgz",
- "integrity": "sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==",
- "dev": true,
- "requires": {
- "detect-libc": "^1.0.3"
+ "@parcel/workers": "2.10.3"
}
},
"@parcel/graph": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.8.3.tgz",
- "integrity": "sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-3.0.3.tgz",
+ "integrity": "sha512-zUA8KsjR2+v2Q2bFBF7zBk33ejriDiRA/+LK5QE8LrFpkaDa+gjkx76h2x7JqGXIDHNos446KX4nz2OUCVwrNQ==",
"dev": true,
"requires": {
"nullthrows": "^1.1.1"
}
},
- "@parcel/hash": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.8.3.tgz",
- "integrity": "sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==",
- "dev": true,
- "requires": {
- "detect-libc": "^1.0.3",
- "xxhash-wasm": "^0.4.2"
- }
- },
"@parcel/logger": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.8.3.tgz",
- "integrity": "sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.10.3.tgz",
+ "integrity": "sha512-mAVTA0NgbbwEUzkzjBqjqyBBax+8bscRaZIAsEqMiSFWGcUmRgwVlH/jy3QDkFc7OHzwvdPK+XlMLV7s/3DJNw==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/events": "2.8.3"
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/events": "2.10.3"
}
},
"@parcel/markdown-ansi": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.8.3.tgz",
- "integrity": "sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.10.3.tgz",
+ "integrity": "sha512-uzN1AJmp1oYh/ZLdD9WA7xP5u/L3Bs/6AFZz5s695zus74RCx9OtQcF0Yyl1hbKVJDfuw9WFuzMfPL/9p/C5DQ==",
"dev": true,
"requires": {
"chalk": "^4.1.0"
}
},
"@parcel/namer-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.8.3.tgz",
- "integrity": "sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.10.3.tgz",
+ "integrity": "sha512-s7kgB/x7TISIHhen9IK4+CBXgmRJYahVS+oiAbMm18vcUVuXeZDBeTedOco6zUQIKuB71vx/4DBIuiIp6Q9hpg==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"nullthrows": "^1.1.1"
}
},
"@parcel/node-resolver-core": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.8.3.tgz",
- "integrity": "sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-3.1.3.tgz",
+ "integrity": "sha512-o7XK1KiK3ymO39bhc5qfDQiZpKA1xQmKg0TEPDNiLIXHKLEBheqarhw3Nwwt9MOFibfwsisQtDTIS+2v9A640A==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@mischnic/json-sourcemap": "^0.1.0",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/optimizer-css": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.8.3.tgz",
- "integrity": "sha512-JotGAWo8JhuXsQDK0UkzeQB0UR5hDAKvAviXrjqB4KM9wZNLhLleeEAW4Hk8R9smCeQFP6Xg/N/NkLDpqMwT3g==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.10.3.tgz",
+ "integrity": "sha512-Pc8jwV3U9w5DJDNcRQML5FlKdpPGnuCTtk1P+9FfyEUjdxoVxC+YeMIQcE961clAgl47qh7eNObXtsX/lb04Dg==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/utils": "2.10.3",
"browserslist": "^4.6.6",
"lightningcss": "^1.16.1",
"nullthrows": "^1.1.1"
}
},
"@parcel/optimizer-htmlnano": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.8.3.tgz",
- "integrity": "sha512-L8/fHbEy8Id2a2E0fwR5eKGlv9VYDjrH9PwdJE9Za9v1O/vEsfl/0T/79/x129l5O0yB6EFQkFa20MiK3b+vOg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.10.3.tgz",
+ "integrity": "sha512-KTIZOy19tYeG0j3JRv435A6jnTh3O1LPhsUfo6Xlea7Cz1yUUxAANl9MG8lHZKYbZCFFKbfk2I9QBycmcYxAAw==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
+ "@parcel/plugin": "2.10.3",
"htmlnano": "^2.0.0",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5",
@@ -18142,27 +18441,27 @@
}
},
"@parcel/optimizer-image": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.8.3.tgz",
- "integrity": "sha512-SD71sSH27SkCDNUNx9A3jizqB/WIJr3dsfp+JZGZC42tpD/Siim6Rqy9M4To/BpMMQIIiEXa5ofwS+DgTEiEHQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.10.3.tgz",
+ "integrity": "sha512-hbeI6+GoddJxib8MlK5iafbCm1oy3p0UL9bb8s5mjTZiHtj1PORlH8gP7mT1WlYOCgoy45QdHelcrmL9fJ8kBA==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
- "detect-libc": "^1.0.3"
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3"
}
},
"@parcel/optimizer-svgo": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.8.3.tgz",
- "integrity": "sha512-9KQed99NZnQw3/W4qBYVQ7212rzA9EqrQG019TIWJzkA9tjGBMIm2c/nXpK1tc3hQ3e7KkXkFCQ3C+ibVUnHNA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.10.3.tgz",
+ "integrity": "sha512-STN7sdjz6wGnQnvy22SkQaLi5C1E+j7J0xy96T0/mCP9KoIsBDE7panCtf53p4sWCNRsXNVrXt5KrpCC+u0LHg==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"svgo": "^2.4.0"
},
"dependencies": {
@@ -18221,87 +18520,93 @@
}
}
},
- "@parcel/optimizer-terser": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.8.3.tgz",
- "integrity": "sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA==",
+ "@parcel/optimizer-swc": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-swc/-/optimizer-swc-2.10.3.tgz",
+ "integrity": "sha512-Cxy05CysiKbv/PtX++ETje4cbhCJySmN6EmFyQBs0jvzsUdWwqnsttavYRoMviUUK9mjm/i5q+cyewBO/8Oc5g==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
- "nullthrows": "^1.1.1",
- "terser": "^5.2.0"
+ "@parcel/utils": "2.10.3",
+ "@swc/core": "^1.3.36",
+ "nullthrows": "^1.1.1"
}
},
"@parcel/package-manager": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.8.3.tgz",
- "integrity": "sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.10.3.tgz",
+ "integrity": "sha512-KqOW5oUmElrcb7d+hOC68ja1PI2qbPZTwdduduRvB90DAweMt7r1046+W2Df5bd+p9iv72DxGEn9xomX+qz9MA==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
- "semver": "^5.7.1"
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/node-resolver-core": "3.1.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3",
+ "semver": "^7.5.2"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/packager-css": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.8.3.tgz",
- "integrity": "sha512-WyvkMmsurlHG8d8oUVm7S+D+cC/T3qGeqogb7sTI52gB6uiywU7lRCizLNqGFyFGIxcVTVHWnSHqItBcLN76lA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.10.3.tgz",
+ "integrity": "sha512-Jk165fFU2XyWjN7agKy+YvvRoOJbWIb57VlVDgBHanB5ptS7aCildambrljGNTivatr+zFrchE5ZDNUFXZhYnw==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
}
},
"@parcel/packager-html": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.8.3.tgz",
- "integrity": "sha512-OhPu1Hx1RRKJodpiu86ZqL8el2Aa4uhBHF6RAL1Pcrh2EhRRlPf70Sk0tC22zUpYL7es+iNKZ/n0Rl+OWSHWEw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.10.3.tgz",
+ "integrity": "sha512-bEI6FhBvERuoqyi/h681qGImTRBUnqNW4sKoFO67q/bxWLevXtEGMFOeqridiVOjYQH9s1kKwM/ln/UwKVazZw==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5"
}
},
"@parcel/packager-js": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.8.3.tgz",
- "integrity": "sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.10.3.tgz",
+ "integrity": "sha512-SjLSDw0juC7bEk/0geUtSVXaZqm2SgHL2IZaPnkoBQxVqzh2MdvAxJCrS2LxiR/cuQRfvQ5bnoJA7Kk1w2VNAg==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"globals": "^13.2.0",
"nullthrows": "^1.1.1"
},
"dependencies": {
"globals": {
- "version": "13.19.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
- "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
+ "version": "13.23.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
@@ -18310,112 +18615,151 @@
}
},
"@parcel/packager-raw": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.8.3.tgz",
- "integrity": "sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.10.3.tgz",
+ "integrity": "sha512-d236tnP2ViOnUJR0+qG6EHw7MUWSA14fLKnYYzL5SRQ4BVo5XC+CM9HKN5O4YCCVu3+9Su2X1+RESo5sxbFq7w==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3"
+ "@parcel/plugin": "2.10.3"
}
},
"@parcel/packager-svg": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.8.3.tgz",
- "integrity": "sha512-mvIoHpmv5yzl36OjrklTDFShLUfPFTwrmp1eIwiszGdEBuQaX7JVI3Oo2jbVQgcN4W7J6SENzGQ3Q5hPTW3pMw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.10.3.tgz",
+ "integrity": "sha512-Rk/GokkNs9uLwiy6Ux/xXpD8nMVhA9LN9eIbVqi8+eR42xUmICmEoUoSm+CnekkXxY2a5e3mKpL7JZbT9vOEhA==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"posthtml": "^0.16.4"
}
},
- "@parcel/plugin": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.8.3.tgz",
- "integrity": "sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==",
+ "@parcel/packager-wasm": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-wasm/-/packager-wasm-2.10.3.tgz",
+ "integrity": "sha512-j6VmU84LKy+XRHgZQFoASG98P50a9tkeT3LYRrol3RGGQrvx7PT3/D6rOqbnQjR2iGnaHzYoAlgg9jIMmWXYiA==",
"dev": true,
"requires": {
- "@parcel/types": "2.8.3"
+ "@parcel/plugin": "2.10.3"
+ }
+ },
+ "@parcel/plugin": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.10.3.tgz",
+ "integrity": "sha512-FgsfGKSdtSV1EcO2NWFCZaY14W0PnEEF8vZaRCTML3vKfUbilYs/biaqf5geFOu4DwRuCC8unOTqFy7dLwcK/A==",
+ "dev": true,
+ "requires": {
+ "@parcel/types": "2.10.3"
+ }
+ },
+ "@parcel/profiler": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/profiler/-/profiler-2.10.3.tgz",
+ "integrity": "sha512-yikaM6/vsvjDCcBHAXTKmDsWUF3UvC0lMG8RpnuVSN+R40MGH1vyrR4vNnqhkiCcs0RkVXm7bpuz3cDJLNLYSQ==",
+ "dev": true,
+ "requires": {
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/events": "2.10.3",
+ "chrome-trace-event": "^1.0.2"
}
},
"@parcel/reporter-cli": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.8.3.tgz",
- "integrity": "sha512-3sJkS6tFFzgIOz3u3IpD/RsmRxvOKKiQHOTkiiqRt1l44mMDGKS7zANRnJYsQzdCsgwc9SOP30XFgJwtoVlMbw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.10.3.tgz",
+ "integrity": "sha512-p5xQTPRuB1K3eI3Ro90vcdxpdt0VqIgrUP/VJKtSI8I3fLLGgPBNmSZejqqLup3jFRzUttQPHYkWl/R14LHjAQ==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"chalk": "^4.1.0",
"term-size": "^2.2.1"
}
},
"@parcel/reporter-dev-server": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.8.3.tgz",
- "integrity": "sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.10.3.tgz",
+ "integrity": "sha512-1Kzb2TrlnOYhGwFXZYCeoO18hpVhI3pRXnN22li9ZmdpeugZ0zZJamfPV8Duj4sBvBoSajbZhiPAe/6tQgWDSA==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3"
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3"
+ }
+ },
+ "@parcel/reporter-tracer": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/reporter-tracer/-/reporter-tracer-2.10.3.tgz",
+ "integrity": "sha512-53T9VPJvCi4Co0iTmNN+nqFD+Fkt3QFW8CPXBVlmlQzOtufVjDb01VsE1NPD8/J7O0jd548HJX/s5uqT0380jg==",
+ "dev": true,
+ "requires": {
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "chrome-trace-event": "^1.0.3",
+ "nullthrows": "^1.1.1"
}
},
"@parcel/resolver-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.8.3.tgz",
- "integrity": "sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.10.3.tgz",
+ "integrity": "sha512-TQc1LwpvEKyF3CnU9ifHOKV2usFLVYmMAVAkxyKKGTbnJGEqBDQ0ITqTapA6bJLvZ6d2eUT7guqd4nrBEjeZpw==",
"dev": true,
"requires": {
- "@parcel/node-resolver-core": "2.8.3",
- "@parcel/plugin": "2.8.3"
+ "@parcel/node-resolver-core": "3.1.3",
+ "@parcel/plugin": "2.10.3"
}
},
"@parcel/runtime-browser-hmr": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.8.3.tgz",
- "integrity": "sha512-2O1PYi2j/Q0lTyGNV3JdBYwg4rKo6TEVFlYGdd5wCYU9ZIN9RRuoCnWWH2qCPj3pjIVtBeppYxzfVjPEHINWVg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.10.3.tgz",
+ "integrity": "sha512-+6+mlJiLL3aNVIEyXMUPbPSgljYgnbl9JNMbEXikDQpGGiXTZ7gNNKsqwYeYzgQBYwgqRfR2ir6Bznc2R7dvxg==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3"
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3"
}
},
"@parcel/runtime-js": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.8.3.tgz",
- "integrity": "sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.10.3.tgz",
+ "integrity": "sha512-EMLgZzBGf5ylOT5U/N2rBK5ZZxnmEM4aJsissEAxcE/2cgE8TyhSng6p3A88vVJlO/unHcwRuFGlxKCueugGsQ==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
}
},
"@parcel/runtime-react-refresh": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.8.3.tgz",
- "integrity": "sha512-2v/qFKp00MfG0234OdOgQNAo6TLENpFYZMbVbAsPMY9ITiqG73MrEsrGXVoGbYiGTMB/Toer/lSWlJxtacOCuA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.10.3.tgz",
+ "integrity": "sha512-l03mni8XJq3fmeAV8UYlKJ/+u0LYRuk6ZVP0VLYLwgK4O0mlRuxwaZWYUeB8r/kTsEjB3gF/9AAtUZdAC7Swow==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"react-error-overlay": "6.0.9",
"react-refresh": "^0.9.0"
}
},
"@parcel/runtime-service-worker": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.8.3.tgz",
- "integrity": "sha512-/Skkw+EeRiwzOJso5fQtK8c9b452uWLNhQH1ISTodbmlcyB4YalAiSsyHCtMYD0c3/t5Sx4ZS7vxBAtQd0RvOw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.10.3.tgz",
+ "integrity": "sha512-NjhS80t+O5iBgKXIQ+i07ZEh/VW8XHzanwTHmznJXEoIjLoBpELZ9r6bV/eUD3mYgM1vmW9Aijdu5xtsd0JW6A==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
}
},
+ "@parcel/rust": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/rust/-/rust-2.10.3.tgz",
+ "integrity": "sha512-s1dD1QI/6JkWLICsFh8/iUvO7W1aj/avx+2mCSzuwEIsMywexpBf56qhVYMa3D9D50hS1h5FMk9RrSnSiPf8WA==",
+ "dev": true
+ },
"@parcel/source-map": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz",
@@ -18426,271 +18770,377 @@
}
},
"@parcel/transformer-babel": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.8.3.tgz",
- "integrity": "sha512-L6lExfpvvC7T/g3pxf3CIJRouQl+sgrSzuWQ0fD4PemUDHvHchSP4SNUVnd6gOytF3Y1KpnEZIunQGi5xVqQCQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.10.3.tgz",
+ "integrity": "sha512-SDTyDZX3WTkX7WS5Dg5cBLjWtIkUeeHezIjeOI4cw40tBjj5bXRR2TBfPsqwOnpTHr5jhNSicD6DN+XfTI2MMw==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/utils": "2.10.3",
"browserslist": "^4.6.6",
"json5": "^2.2.0",
"nullthrows": "^1.1.1",
- "semver": "^5.7.0"
+ "semver": "^7.5.2"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/transformer-css": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.8.3.tgz",
- "integrity": "sha512-xTqFwlSXtnaYen9ivAgz+xPW7yRl/u4QxtnDyDpz5dr8gSeOpQYRcjkd4RsYzKsWzZcGtB5EofEk8ayUbWKEUg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.10.3.tgz",
+ "integrity": "sha512-qlPYcwVgbqFHrec6CKcTQ4hY7EkjvH40Wyqf0xjAyIoIuOPmrpSUOp+VKjeRdbyFwH/4GBjrDZMBvCUsgeM2GA==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/utils": "2.10.3",
"browserslist": "^4.6.6",
"lightningcss": "^1.16.1",
"nullthrows": "^1.1.1"
}
},
"@parcel/transformer-html": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.8.3.tgz",
- "integrity": "sha512-kIZO3qsMYTbSnSpl9cnZog+SwL517ffWH54JeB410OSAYF1ouf4n5v9qBnALZbuCCmPwJRGs4jUtE452hxwN4g==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.10.3.tgz",
+ "integrity": "sha512-u0uklWpliEcPADtBlboxhxBvlGrP0yPRZk/A2iL0VhfAi9ONFEuJkEoesispNhAg3KiojEh0Ddzu7bYp9U0yww==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5",
"posthtml-parser": "^0.10.1",
"posthtml-render": "^3.0.0",
- "semver": "^5.7.1",
+ "semver": "^7.5.2",
"srcset": "4"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/transformer-image": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.8.3.tgz",
- "integrity": "sha512-cO4uptcCGTi5H6bvTrAWEFUsTNhA4kCo8BSvRSCHA2sf/4C5tGQPHt3JhdO0GQLPwZRCh/R41EkJs5HZ8A8DAg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.10.3.tgz",
+ "integrity": "sha512-At7D7eMauE+/EnlXiDfNSap2te11L0TIW55SC9iTRTI/CqesWfT96ZB/LcH3HXckYy/GJi0xyTjYxC/YjUqDog==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3",
"nullthrows": "^1.1.1"
}
},
"@parcel/transformer-js": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.8.3.tgz",
- "integrity": "sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.10.3.tgz",
+ "integrity": "sha512-9pGqrCSLlipXvL7hOrLsaW5Pq4bjFBOTiZ5k5kizk1qeuHKMIHxySGdy0E35eSsJ6JzXP0lTXPywMPysSI6owQ==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
- "@swc/helpers": "^0.4.12",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3",
+ "@swc/helpers": "^0.5.0",
"browserslist": "^4.6.6",
- "detect-libc": "^1.0.3",
"nullthrows": "^1.1.1",
"regenerator-runtime": "^0.13.7",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"dependencies": {
- "@swc/helpers": {
- "version": "0.4.14",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
- "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"requires": {
- "tslib": "^2.4.0"
+ "lru-cache": "^6.0.0"
}
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
}
}
},
"@parcel/transformer-json": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.8.3.tgz",
- "integrity": "sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.10.3.tgz",
+ "integrity": "sha512-cPhiQNgrX92VEATuxf3GCPQnlfnZW1iCsOHMT1CzgmofE7tVlW1hOOokWw21/8spG44Zax0SrRW0udi9TdmpQA==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
+ "@parcel/plugin": "2.10.3",
"json5": "^2.2.0"
}
},
"@parcel/transformer-postcss": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.8.3.tgz",
- "integrity": "sha512-e8luB/poIlz6jBsD1Izms+6ElbyzuoFVa4lFVLZnTAChI3UxPdt9p/uTsIO46HyBps/Bk8ocvt3J4YF84jzmvg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.10.3.tgz",
+ "integrity": "sha512-SpTZQdGQ3aVvl6+3tLlw/txUyzZSsv8t+hcfc9PM0n1rd4mfjWxVKmgNC1Y3nFoSubLMp+03GbMq16ym8t89WQ==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/utils": "2.10.3",
"clone": "^2.1.1",
"nullthrows": "^1.1.1",
"postcss-value-parser": "^4.2.0",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/transformer-posthtml": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.8.3.tgz",
- "integrity": "sha512-pkzf9Smyeaw4uaRLsT41RGrPLT5Aip8ZPcntawAfIo+KivBQUV0erY1IvHYjyfFzq1ld/Fo2Ith9He6mxpPifA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.10.3.tgz",
+ "integrity": "sha512-k6pz0H/W1k+i9uDNXjum7XkaFYKvSSrgEsmhoh7OriXPrLunboIzMBXFQcQSCyxCpw/kLuKFBLP38mQnYC5BbQ==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5",
"posthtml-parser": "^0.10.1",
"posthtml-render": "^3.0.0",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/transformer-raw": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.8.3.tgz",
- "integrity": "sha512-G+5cXnd2/1O3nV/pgRxVKZY/HcGSseuhAe71gQdSQftb8uJEURyUHoQ9Eh0JUD3MgWh9V+nIKoyFEZdf9T0sUQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.10.3.tgz",
+ "integrity": "sha512-r//P2Hg14m/vJK/XJyq0cmcS4RTRy4bPSL4c0FxbEdDRrSm0Hcd1gdfgl0HeqSQQfcz0Xu4nCM5zAhg6FUpiXQ==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3"
+ "@parcel/plugin": "2.10.3"
}
},
"@parcel/transformer-react-refresh-wrap": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.8.3.tgz",
- "integrity": "sha512-q8AAoEvBnCf/nPvgOwFwKZfEl/thwq7c2duxXkhl+tTLDRN2vGmyz4355IxCkavSX+pLWSQ5MexklSEeMkgthg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.10.3.tgz",
+ "integrity": "sha512-Sc6ExGQy/YhNYFxRgEyi4SikYmV3wbATYo/VzqUjvZ4vE9YXM0sC5CyJhcoWVHmMPhm5eowOwFA6UrTsgHd2+g==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"react-refresh": "^0.9.0"
}
},
"@parcel/transformer-svg": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.8.3.tgz",
- "integrity": "sha512-3Zr/gBzxi1ZH1fftH/+KsZU7w5GqkmxlB0ZM8ovS5E/Pl1lq1t0xvGJue9m2VuQqP8Mxfpl5qLFmsKlhaZdMIQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.10.3.tgz",
+ "integrity": "sha512-fjkTdPB8y467I/yHPEaNxNxoGtRIgEqNjVkBhtE/ibhF/YfqIEpDlJyI7G5G71pt2peLMLXZnJowzHqeoEUHOQ==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5",
"posthtml-parser": "^0.10.1",
"posthtml-render": "^3.0.0",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/types": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.8.3.tgz",
- "integrity": "sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.10.3.tgz",
+ "integrity": "sha512-4ISgDKcbJsR7NKj2jquPUPQWc/b2x6zHb/jZVdHVzMQxJp98DX+cvQR137iOTXUAFtwkKVjFcHWfejwGdGf9bw==",
"dev": true,
"requires": {
- "@parcel/cache": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/package-manager": "2.8.3",
+ "@parcel/cache": "2.10.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/package-manager": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/workers": "2.8.3",
+ "@parcel/workers": "2.10.3",
"utility-types": "^3.10.0"
}
},
"@parcel/utils": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.8.3.tgz",
- "integrity": "sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.10.3.tgz",
+ "integrity": "sha512-l9pEQgq+D57t42m2sJkdU08Dpp0HVzDEwVrp/by/l37ZkYPJ2Me3oXtsJhvA+hej2kO8+FuKPm64FaUVaA2g+w==",
"dev": true,
"requires": {
- "@parcel/codeframe": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/markdown-ansi": "2.8.3",
+ "@parcel/codeframe": "2.10.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/markdown-ansi": "2.10.3",
+ "@parcel/rust": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "chalk": "^4.1.0"
+ "chalk": "^4.1.0",
+ "nullthrows": "^1.1.1"
}
},
"@parcel/watcher": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz",
- "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.3.0.tgz",
+ "integrity": "sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ==",
"dev": true,
"requires": {
+ "@parcel/watcher-android-arm64": "2.3.0",
+ "@parcel/watcher-darwin-arm64": "2.3.0",
+ "@parcel/watcher-darwin-x64": "2.3.0",
+ "@parcel/watcher-freebsd-x64": "2.3.0",
+ "@parcel/watcher-linux-arm-glibc": "2.3.0",
+ "@parcel/watcher-linux-arm64-glibc": "2.3.0",
+ "@parcel/watcher-linux-arm64-musl": "2.3.0",
+ "@parcel/watcher-linux-x64-glibc": "2.3.0",
+ "@parcel/watcher-linux-x64-musl": "2.3.0",
+ "@parcel/watcher-win32-arm64": "2.3.0",
+ "@parcel/watcher-win32-ia32": "2.3.0",
+ "@parcel/watcher-win32-x64": "2.3.0",
+ "detect-libc": "^1.0.3",
"is-glob": "^4.0.3",
"micromatch": "^4.0.5",
- "node-addon-api": "^3.2.1",
- "node-gyp-build": "^4.3.0"
+ "node-addon-api": "^7.0.0"
}
},
+ "@parcel/watcher-android-arm64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.3.0.tgz",
+ "integrity": "sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-darwin-arm64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.3.0.tgz",
+ "integrity": "sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-darwin-x64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.3.0.tgz",
+ "integrity": "sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-freebsd-x64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.3.0.tgz",
+ "integrity": "sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-arm-glibc": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.3.0.tgz",
+ "integrity": "sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-arm64-glibc": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.3.0.tgz",
+ "integrity": "sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-arm64-musl": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.3.0.tgz",
+ "integrity": "sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-x64-glibc": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.3.0.tgz",
+ "integrity": "sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-x64-musl": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.3.0.tgz",
+ "integrity": "sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-win32-arm64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.3.0.tgz",
+ "integrity": "sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-win32-ia32": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.3.0.tgz",
+ "integrity": "sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-win32-x64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.3.0.tgz",
+ "integrity": "sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA==",
+ "dev": true,
+ "optional": true
+ },
"@parcel/workers": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.8.3.tgz",
- "integrity": "sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.10.3.tgz",
+ "integrity": "sha512-qlN8G3VybPHVIbD6fsZr2gmrXG2UlROUQIPW/kkAvjQ29uRfFn7YEC8CHTICt8M1HhCNkr0cMXkuXQBi0l3kAg==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "chrome-trace-event": "^1.0.2",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/profiler": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
}
},
@@ -18701,10 +19151,94 @@
"dev": true,
"optional": true
},
+ "@rollup/rollup-android-arm-eabi": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.1.tgz",
+ "integrity": "sha512-YaN43wTyEBaMqLDYeze+gQ4ZrW5RbTEGtT5o1GVDkhpdNcsLTnLRcLccvwy3E9wiDKWg9RIhuoy3JQKDRBfaZA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-android-arm64": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.1.tgz",
+ "integrity": "sha512-n1bX+LCGlQVuPlCofO0zOKe1b2XkFozAVRoczT+yxWZPGnkEAKTTYVOGZz8N4sKuBnKMxDbfhUsB1uwYdup/sw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-arm64": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.1.tgz",
+ "integrity": "sha512-QqJBumdvfBqBBmyGHlKxje+iowZwrHna7pokj/Go3dV1PJekSKfmjKrjKQ/e6ESTGhkfPNLq3VXdYLAc+UtAQw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-x64": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.1.tgz",
+ "integrity": "sha512-RrkDNkR/P5AEQSPkxQPmd2ri8WTjSl0RYmuFOiEABkEY/FSg0a4riihWQGKDJ4LnV9gigWZlTMx2DtFGzUrYQw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.1.tgz",
+ "integrity": "sha512-ZFPxvUZmE+fkB/8D9y/SWl/XaDzNSaxd1TJUSE27XAKlRpQ2VNce/86bGd9mEUgL3qrvjJ9XTGwoX0BrJkYK/A==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.1.tgz",
+ "integrity": "sha512-FEuAjzVIld5WVhu+M2OewLmjmbXWd3q7Zcx+Rwy4QObQCqfblriDMMS7p7+pwgjZoo9BLkP3wa9uglQXzsB9ww==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-musl": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.1.tgz",
+ "integrity": "sha512-f5Gs8WQixqGRtI0Iq/cMqvFYmgFzMinuJO24KRfnv7Ohi/HQclwrBCYkzQu1XfLEEt3DZyvveq9HWo4bLJf1Lw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-gnu": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.1.tgz",
+ "integrity": "sha512-CWPkPGrFfN2vj3mw+S7A/4ZaU3rTV7AkXUr08W9lNP+UzOvKLVf34tWCqrKrfwQ0NTk5GFqUr2XGpeR2p6R4gw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-musl": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.1.tgz",
+ "integrity": "sha512-ZRETMFA0uVukUC9u31Ed1nx++29073goCxZtmZARwk5aF/ltuENaeTtRVsSQzFlzdd4J6L3qUm+EW8cbGt0CKQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.1.tgz",
+ "integrity": "sha512-ihqfNJNb2XtoZMSCPeoo0cYMgU04ksyFIoOw5S0JUVbOhafLot+KD82vpKXOurE2+9o/awrqIxku9MRR9hozHQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.1.tgz",
+ "integrity": "sha512-zK9MRpC8946lQ9ypFn4gLpdwr5a01aQ/odiIJeL9EbgZDMgbZjjT/XzTqJvDfTmnE1kHdbG20sAeNlpc91/wbg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-x64-msvc": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.1.tgz",
+ "integrity": "sha512-5I3Nz4Sb9TYOtkRwlH0ow+BhMH2vnh38tZ4J4mggE48M/YyJyp/0sPSxhw1UeS1+oBgQ8q7maFtSeKpeRJu41Q==",
+ "dev": true,
+ "optional": true
+ },
"@sinclair/typebox": {
- "version": "0.25.24",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz",
- "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==",
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
"dev": true
},
"@sindresorhus/is": {
@@ -18714,27 +19248,27 @@
"dev": true
},
"@sinonjs/commons": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
- "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
+ "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
"dev": true,
"requires": {
"type-detect": "4.0.8"
}
},
"@sinonjs/fake-timers": {
- "version": "10.0.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz",
- "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==",
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
+ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
"dev": true,
"requires": {
- "@sinonjs/commons": "^2.0.0"
+ "@sinonjs/commons": "^3.0.0"
}
},
"@swc/cli": {
- "version": "0.1.62",
- "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.62.tgz",
- "integrity": "sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==",
+ "version": "0.1.63",
+ "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.63.tgz",
+ "integrity": "sha512-EM9oxxHzmmsprYRbGqsS2M4M/Gr5Gkcl0ROYYIdlUyTkhOiX822EQiRCpPCwdutdnzH2GyaTN7wc6i0Y+CKd3A==",
"dev": true,
"requires": {
"@mole-inc/bin-wrapper": "^8.0.1",
@@ -18759,108 +19293,114 @@
}
},
"@swc/core": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.55.tgz",
- "integrity": "sha512-w/lN3OuJsuy868yJZKop+voZLVzI5pVSoopQVtgDNkEzejnPuRp9XaeAValvuMaWqKoTMtOjLzEPyv/xiAGYQQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.95.tgz",
+ "integrity": "sha512-PMrNeuqIusq9DPDooV3FfNEbZuTu5jKAc04N3Hm6Uk2Fl49cqElLFQ4xvl4qDmVDz97n3n/C1RE0/f6WyGPEiA==",
"dev": true,
"requires": {
- "@swc/core-darwin-arm64": "1.3.55",
- "@swc/core-darwin-x64": "1.3.55",
- "@swc/core-linux-arm-gnueabihf": "1.3.55",
- "@swc/core-linux-arm64-gnu": "1.3.55",
- "@swc/core-linux-arm64-musl": "1.3.55",
- "@swc/core-linux-x64-gnu": "1.3.55",
- "@swc/core-linux-x64-musl": "1.3.55",
- "@swc/core-win32-arm64-msvc": "1.3.55",
- "@swc/core-win32-ia32-msvc": "1.3.55",
- "@swc/core-win32-x64-msvc": "1.3.55"
+ "@swc/core-darwin-arm64": "1.3.95",
+ "@swc/core-darwin-x64": "1.3.95",
+ "@swc/core-linux-arm-gnueabihf": "1.3.95",
+ "@swc/core-linux-arm64-gnu": "1.3.95",
+ "@swc/core-linux-arm64-musl": "1.3.95",
+ "@swc/core-linux-x64-gnu": "1.3.95",
+ "@swc/core-linux-x64-musl": "1.3.95",
+ "@swc/core-win32-arm64-msvc": "1.3.95",
+ "@swc/core-win32-ia32-msvc": "1.3.95",
+ "@swc/core-win32-x64-msvc": "1.3.95",
+ "@swc/counter": "^0.1.1",
+ "@swc/types": "^0.1.5"
}
},
"@swc/core-darwin-arm64": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.55.tgz",
- "integrity": "sha512-UnHC8aPg/JvHhgXxTU6EhTtfnYNS7nhq8EKB8laNPxlHbwEyMBVQ2QuJHlNCtFtvSfX/uH5l04Ld1iGXnBTfdQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.95.tgz",
+ "integrity": "sha512-VAuBAP3MNetO/yBIBzvorUXq7lUBwhfpJxYViSxyluMwtoQDhE/XWN598TWMwMl1ZuImb56d7eUsuFdjgY7pJw==",
"dev": true,
"optional": true
},
"@swc/core-darwin-x64": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.55.tgz",
- "integrity": "sha512-VNJkFVARrktIqtaLrD1NFA54gqekH7eAUcUY2U2SdHwO67HYjfMXMxlugLP5PDasSKpTkrVooUdhkffoA5W50g==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.95.tgz",
+ "integrity": "sha512-20vF2rvUsN98zGLZc+dsEdHvLoCuiYq/1B+TDeE4oolgTFDmI1jKO+m44PzWjYtKGU9QR95sZ6r/uec0QC5O4Q==",
"dev": true,
"optional": true
},
"@swc/core-linux-arm-gnueabihf": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.55.tgz",
- "integrity": "sha512-6OcohhIFKKNW/TpJt26Tpul8zyL7dmp1Lnyj2BX9ycsZZ5UnsNiGqn37mrqJgVTx/ansEmbyOmKu2mzm/Ct6cQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.95.tgz",
+ "integrity": "sha512-oEudEM8PST1MRNGs+zu0cx5i9uP8TsLE4/L9HHrS07Ck0RJ3DCj3O2fU832nmLe2QxnAGPwBpSO9FntLfOiWEQ==",
"dev": true,
"optional": true
},
"@swc/core-linux-arm64-gnu": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.55.tgz",
- "integrity": "sha512-MfZtXGBv21XWwvrSMP0CMxScDolT/iv5PRl9UBprYUehwWr7BNjA3V9W7QQ+kKoPyORWk7LX7OpJZF3FnO618Q==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.95.tgz",
+ "integrity": "sha512-pIhFI+cuC1aYg+0NAPxwT/VRb32f2ia8oGxUjQR6aJg65gLkUYQzdwuUmpMtFR2WVf7WVFYxUnjo4UyMuyh3ng==",
"dev": true,
"optional": true
},
"@swc/core-linux-arm64-musl": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.55.tgz",
- "integrity": "sha512-iZJo+7L5lv10W0f0C6SlyteAyMJt5Tp+aH3+nlAwKdtc+VjyL1sGhR8DJMXp2/buBRZJ9tjEtpXKDaWUdSdF7Q==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.95.tgz",
+ "integrity": "sha512-ZpbTr+QZDT4OPJfjPAmScqdKKaT+wGurvMU5AhxLaf85DuL8HwUwwlL0n1oLieLc47DwIJEMuKQkYhXMqmJHlg==",
"dev": true,
"optional": true
},
"@swc/core-linux-x64-gnu": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.55.tgz",
- "integrity": "sha512-Rmc8ny/mslzzz0+wNK9/mLdyAWVbMZHRSvljhpzASmq48NBkmZ5vk9/WID6MnUz2e9cQ0JxJQs8t39KlFJtW3g==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.95.tgz",
+ "integrity": "sha512-n9SuHEFtdfSJ+sHdNXNRuIOVprB8nbsz+08apKfdo4lEKq6IIPBBAk5kVhPhkjmg2dFVHVo4Tr/OHXM1tzWCCw==",
"dev": true,
"optional": true
},
"@swc/core-linux-x64-musl": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.55.tgz",
- "integrity": "sha512-Ymoc4xxINzS93ZjVd2UZfLZk1jF6wHjdCbC1JF+0zK3IrNrxCIDoWoaAj0+Bbvyo3hD1Xg/cneSTsqX8amnnuQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.95.tgz",
+ "integrity": "sha512-L1JrVlsXU3LC0WwmVnMK9HrOT2uhHahAoPNMJnZQpc18a0paO9fqifPG8M/HjNRffMUXR199G/phJsf326UvVg==",
"dev": true,
"optional": true
},
"@swc/core-win32-arm64-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.55.tgz",
- "integrity": "sha512-OhnmFstq2qRU2GI5I0G/8L+vc2rx8+w+IOA6EZBrY4FuMCbPIZKKzlnAIxYn2W+yD4gvBzYP3tgEcaDfQk6EkA==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.95.tgz",
+ "integrity": "sha512-YaP4x/aZbUyNdqCBpC2zL8b8n58MEpOUpmOIZK6G1SxGi+2ENht7gs7+iXpWPc0sy7X3YPKmSWMAuui0h8lgAA==",
"dev": true,
"optional": true
},
"@swc/core-win32-ia32-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.55.tgz",
- "integrity": "sha512-3VR5rHZ6uoL/Vo3djV30GgX2oyDwWWsk+Yp+nyvYyBaKYiH2zeHfxdYRLSQV3W7kSlCAH3oDYpSljrWZ0t5XEQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.95.tgz",
+ "integrity": "sha512-w0u3HI916zT4BC/57gOd+AwAEjXeUlQbGJ9H4p/gzs1zkSHtoDQghVUNy3n/ZKp9KFod/95cA8mbVF9t1+6epQ==",
"dev": true,
"optional": true
},
"@swc/core-win32-x64-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.55.tgz",
- "integrity": "sha512-KBtMFtRwnbxBugYf6i2ePqEGdxsk715KcqGMjGhxNg7BTACnXnhj37irHu2e7A7wZffbkUVUYuj/JEgVkEjSxg==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.95.tgz",
+ "integrity": "sha512-5RGnMt0S6gg4Gc6QtPUJ3Qs9Un4sKqccEzgH/tj7V/DVTJwKdnBKxFZfgQ34OR2Zpz7zGOn889xwsFVXspVWNA==",
"dev": true,
"optional": true
},
+ "@swc/counter": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz",
+ "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==",
+ "dev": true
+ },
"@swc/helpers": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz",
"integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==",
"dev": true,
- "optional": true,
- "peer": true,
"requires": {
"tslib": "^2.4.0"
}
},
"@swc/jest": {
- "version": "0.2.26",
- "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.26.tgz",
- "integrity": "sha512-7lAi7q7ShTO3E5Gt1Xqf3pIhRbERxR1DUxvtVa9WKzIB+HGQ7wZP5sYx86zqnaEoKKGhmOoZ7gyW0IRu8Br5+A==",
+ "version": "0.2.29",
+ "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.29.tgz",
+ "integrity": "sha512-8reh5RvHBsSikDC3WGCd5ZTd2BXKkyOdK7QwynrCH58jk2cQFhhHhFBg/jvnWZehUQe/EoOImLENc9/DwbBFow==",
"dev": true,
"requires": {
"@jest/create-cache-key-function": "^27.4.2",
@@ -18878,6 +19418,12 @@
"source-map-support": "^0.5.13"
}
},
+ "@swc/types": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz",
+ "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==",
+ "dev": true
+ },
"@szmarczak/http-timer": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
@@ -18890,36 +19436,36 @@
"@tailwindcss/integrations-content-resolution": {
"version": "file:integrations/content-resolution",
"requires": {
- "postcss": "^8.4.23",
+ "postcss": "^8.4.31",
"postcss-cli": "^10.1.0"
}
},
"@tailwindcss/integrations-parcel": {
"version": "file:integrations/parcel",
"requires": {
- "parcel": "^2.8.3"
+ "parcel": "2.10.3"
}
},
"@tailwindcss/integrations-postcss-cli": {
"version": "file:integrations/postcss-cli",
"requires": {
- "postcss": "^8.4.23",
+ "postcss": "^8.4.31",
"postcss-cli": "^10.1.0"
}
},
"@tailwindcss/integrations-rollup": {
"version": "file:integrations/rollup",
"requires": {
- "rollup": "^3.21.0",
+ "rollup": "^4.5.0",
"rollup-plugin-postcss": "^4.0.2"
}
},
"@tailwindcss/integrations-rollup-sass": {
"version": "file:integrations/rollup-sass",
"requires": {
- "rollup": "^3.21.0",
+ "rollup": "^4.5.0",
"rollup-plugin-postcss": "^4.0.2",
- "sass": "^1.62.0"
+ "sass": "^1.69.5"
}
},
"@tailwindcss/integrations-tailwindcss-cli": {
@@ -18932,7 +19478,7 @@
"version": "file:integrations/vite",
"requires": {
"isomorphic-fetch": "^3.0.0",
- "vite": "^4.3.2"
+ "vite": "^5.0.2"
}
},
"@tailwindcss/integrations-webpack-4": {
@@ -19236,7 +19782,7 @@
"@tailwindcss/oxide": {
"version": "file:oxide/crates/node",
"requires": {
- "@napi-rs/cli": "^2.15.2",
+ "@napi-rs/cli": "^2.16.5",
"@tailwindcss/oxide-darwin-arm64": "0.0.0",
"@tailwindcss/oxide-darwin-x64": "0.0.0",
"@tailwindcss/oxide-freebsd-x64": "0.0.0",
@@ -19287,9 +19833,9 @@
"peer": true
},
"@types/babel__core": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz",
- "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz",
+ "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==",
"dev": true,
"requires": {
"@babel/parser": "^7.20.7",
@@ -19300,18 +19846,18 @@
}
},
"@types/babel__generator": {
- "version": "7.6.4",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
- "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
+ "version": "7.6.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz",
+ "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==",
"dev": true,
"requires": {
"@babel/types": "^7.0.0"
}
},
"@types/babel__template": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
- "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
+ "version": "7.4.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz",
+ "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==",
"dev": true,
"requires": {
"@babel/parser": "^7.1.0",
@@ -19319,12 +19865,12 @@
}
},
"@types/babel__traverse": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz",
- "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz",
+ "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==",
"dev": true,
"requires": {
- "@babel/types": "^7.3.0"
+ "@babel/types": "^7.20.7"
}
},
"@types/cacheable-request": {
@@ -19366,9 +19912,9 @@
"dev": true
},
"@types/graceful-fs": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
- "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz",
+ "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==",
"dev": true,
"requires": {
"@types/node": "*"
@@ -19414,8 +19960,13 @@
}
},
"@types/node": {
- "version": "16.10.2",
- "devOptional": true
+ "version": "20.9.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.4.tgz",
+ "integrity": "sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==",
+ "devOptional": true,
+ "requires": {
+ "undici-types": "~5.26.4"
+ }
},
"@types/parse-json": {
"version": "4.0.0",
@@ -19423,12 +19974,6 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
- "@types/prettier": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz",
- "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==",
- "dev": true
- },
"@types/responselike": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
@@ -19455,6 +20000,12 @@
"version": "20.2.1",
"dev": true
},
+ "@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
"@webassemblyjs/ast": {
"version": "1.11.5",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz",
@@ -19761,9 +20312,9 @@
"dev": true
},
"acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
"devOptional": true
},
"acorn-jsx": {
@@ -19987,30 +20538,16 @@
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true
},
- "autoprefixer": {
- "version": "10.4.14",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
- "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.5",
- "caniuse-lite": "^1.0.30001464",
- "fraction.js": "^4.2.0",
- "normalize-range": "^0.1.2",
- "picocolors": "^1.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
"babel-jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz",
- "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
+ "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
"dev": true,
"requires": {
- "@jest/transform": "^29.5.0",
+ "@jest/transform": "^29.7.0",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.5.0",
+ "babel-preset-jest": "^29.6.3",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"slash": "^3.0.0"
@@ -20027,12 +20564,27 @@
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-instrument": "^5.0.4",
"test-exclude": "^6.0.0"
+ },
+ "dependencies": {
+ "istanbul-lib-instrument": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
+ }
+ }
}
},
"babel-plugin-jest-hoist": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz",
- "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
+ "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
"dev": true,
"requires": {
"@babel/template": "^7.3.3",
@@ -20062,12 +20614,12 @@
}
},
"babel-preset-jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz",
- "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
+ "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
"dev": true,
"requires": {
- "babel-plugin-jest-hoist": "^29.5.0",
+ "babel-plugin-jest-hoist": "^29.6.3",
"babel-preset-current-node-syntax": "^1.0.0"
}
},
@@ -20428,14 +20980,14 @@
}
},
"browserslist": {
- "version": "4.21.5",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
- "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
+ "version": "4.22.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
+ "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
"requires": {
- "caniuse-lite": "^1.0.30001449",
- "electron-to-chromium": "^1.4.284",
- "node-releases": "^2.0.8",
- "update-browserslist-db": "^1.0.10"
+ "caniuse-lite": "^1.0.30001541",
+ "electron-to-chromium": "^1.4.535",
+ "node-releases": "^2.0.13",
+ "update-browserslist-db": "^1.0.13"
}
},
"bser": {
@@ -20593,9 +21145,9 @@
}
},
"caniuse-lite": {
- "version": "1.0.30001468",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001468.tgz",
- "integrity": "sha512-zgAo8D5kbOyUcRAgSmgyuvBkjrGk5CGYG5TYgFdpQv+ywcyEpo1LOWoG8YmoflGnh+V+UsNuKYedsoYs0hzV5A=="
+ "version": "1.0.30001546",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz",
+ "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw=="
},
"chalk": {
"version": "4.1.2",
@@ -20682,9 +21234,9 @@
}
},
"cjs-module-lexer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
- "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
+ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
"dev": true
},
"class-utils": {
@@ -20811,9 +21363,9 @@
"dev": true
},
"collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
+ "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
"dev": true
},
"collection-visit": {
@@ -21050,6 +21602,46 @@
"sha.js": "^2.4.8"
}
},
+ "create-jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
+ "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "prompts": "^2.0.1"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.8",
+ "chalk": "^4.0.0"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ }
+ }
+ },
"create-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -21137,6 +21729,8 @@
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
"integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"boolbase": "^1.0.0",
"css-what": "^6.1.0",
@@ -21150,6 +21744,8 @@
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.2",
@@ -21161,26 +21757,32 @@
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"domelementtype": "^2.3.0"
}
},
"domutils": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz",
- "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"dom-serializer": "^2.0.0",
"domelementtype": "^2.3.0",
- "domhandler": "^5.0.1"
+ "domhandler": "^5.0.3"
}
},
"entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true
+ "dev": true,
+ "optional": true,
+ "peer": true
}
}
},
@@ -21189,6 +21791,8 @@
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"mdn-data": "2.0.30",
"source-map-js": "^1.0.1"
@@ -21203,65 +21807,13 @@
"cssesc": {
"version": "3.0.0"
},
- "cssnano": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.0.tgz",
- "integrity": "sha512-RGlcbzGhzEBCHuQe3k+Udyj5M00z0pm9S+VurHXFEOXxH+y0sVrJH2sMzoyz2d8N1EScazg+DVvmgyx0lurwwA==",
- "dev": true,
- "requires": {
- "cssnano-preset-default": "^6.0.0",
- "lilconfig": "^2.1.0"
- }
- },
- "cssnano-preset-default": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.0.tgz",
- "integrity": "sha512-BDxlaFzObRDXUiCCBQUNQcI+f1/aX2mgoNtXGjV6PG64POcHoDUoX+LgMWw+Q4609QhxwkcSnS65YFs42RA6qQ==",
- "dev": true,
- "requires": {
- "css-declaration-sorter": "^6.3.1",
- "cssnano-utils": "^4.0.0",
- "postcss-calc": "^8.2.3",
- "postcss-colormin": "^6.0.0",
- "postcss-convert-values": "^6.0.0",
- "postcss-discard-comments": "^6.0.0",
- "postcss-discard-duplicates": "^6.0.0",
- "postcss-discard-empty": "^6.0.0",
- "postcss-discard-overridden": "^6.0.0",
- "postcss-merge-longhand": "^6.0.0",
- "postcss-merge-rules": "^6.0.0",
- "postcss-minify-font-values": "^6.0.0",
- "postcss-minify-gradients": "^6.0.0",
- "postcss-minify-params": "^6.0.0",
- "postcss-minify-selectors": "^6.0.0",
- "postcss-normalize-charset": "^6.0.0",
- "postcss-normalize-display-values": "^6.0.0",
- "postcss-normalize-positions": "^6.0.0",
- "postcss-normalize-repeat-style": "^6.0.0",
- "postcss-normalize-string": "^6.0.0",
- "postcss-normalize-timing-functions": "^6.0.0",
- "postcss-normalize-unicode": "^6.0.0",
- "postcss-normalize-url": "^6.0.0",
- "postcss-normalize-whitespace": "^6.0.0",
- "postcss-ordered-values": "^6.0.0",
- "postcss-reduce-initial": "^6.0.0",
- "postcss-reduce-transforms": "^6.0.0",
- "postcss-svgo": "^6.0.0",
- "postcss-unique-selectors": "^6.0.0"
- }
- },
- "cssnano-utils": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
- "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
- "dev": true,
- "requires": {}
- },
"csso": {
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
"integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"css-tree": "~2.2.0"
},
@@ -21271,6 +21823,8 @@
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
"integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"mdn-data": "2.0.28",
"source-map-js": "^1.0.1"
@@ -21280,7 +21834,9 @@
"version": "2.0.28",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
- "dev": true
+ "dev": true,
+ "optional": true,
+ "peer": true
}
}
},
@@ -21325,19 +21881,22 @@
}
},
"dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
- "dev": true
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
+ "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
+ "dev": true,
+ "requires": {}
},
"deep-is": {
- "version": "0.1.3",
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
"deepmerge": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz",
- "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"dev": true
},
"defer-to-connect": {
@@ -21394,9 +21953,9 @@
"peer": true
},
"diff-sequences": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz",
- "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
"dev": true
},
"diffie-hellman": {
@@ -21439,11 +21998,21 @@
},
"dom-serializer": {
"version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
+ "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
"dev": true,
"requires": {
"domelementtype": "^2.0.1",
"domhandler": "^4.2.0",
"entities": "^2.0.0"
+ },
+ "dependencies": {
+ "entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true
+ }
}
},
"domain-browser": {
@@ -21454,10 +22023,14 @@
},
"domelementtype": {
"version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
"dev": true
},
"domhandler": {
"version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
"dev": true,
"requires": {
"domelementtype": "^2.2.0"
@@ -21465,6 +22038,8 @@
},
"domutils": {
"version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
"dev": true,
"requires": {
"dom-serializer": "^1.0.1",
@@ -21497,9 +22072,9 @@
}
},
"electron-to-chromium": {
- "version": "1.4.288",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.288.tgz",
- "integrity": "sha512-8s9aJf3YiokIrR+HOQzNOGmEHFXVUQzXM/JaViVvKdCkNUjS+lEa/uT7xw3nDVG/IgfxiIwUGkwJ6AR1pTpYsQ=="
+ "version": "1.4.544",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.544.tgz",
+ "integrity": "sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w=="
},
"elliptic": {
"version": "6.5.4",
@@ -21560,7 +22135,9 @@
}
},
"entities": {
- "version": "2.2.0",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
+ "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
"dev": true
},
"envinfo": {
@@ -21592,33 +22169,33 @@
"dev": true
},
"esbuild": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz",
- "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.7.tgz",
+ "integrity": "sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==",
"dev": true,
"requires": {
- "@esbuild/android-arm": "0.17.18",
- "@esbuild/android-arm64": "0.17.18",
- "@esbuild/android-x64": "0.17.18",
- "@esbuild/darwin-arm64": "0.17.18",
- "@esbuild/darwin-x64": "0.17.18",
- "@esbuild/freebsd-arm64": "0.17.18",
- "@esbuild/freebsd-x64": "0.17.18",
- "@esbuild/linux-arm": "0.17.18",
- "@esbuild/linux-arm64": "0.17.18",
- "@esbuild/linux-ia32": "0.17.18",
- "@esbuild/linux-loong64": "0.17.18",
- "@esbuild/linux-mips64el": "0.17.18",
- "@esbuild/linux-ppc64": "0.17.18",
- "@esbuild/linux-riscv64": "0.17.18",
- "@esbuild/linux-s390x": "0.17.18",
- "@esbuild/linux-x64": "0.17.18",
- "@esbuild/netbsd-x64": "0.17.18",
- "@esbuild/openbsd-x64": "0.17.18",
- "@esbuild/sunos-x64": "0.17.18",
- "@esbuild/win32-arm64": "0.17.18",
- "@esbuild/win32-ia32": "0.17.18",
- "@esbuild/win32-x64": "0.17.18"
+ "@esbuild/android-arm": "0.19.7",
+ "@esbuild/android-arm64": "0.19.7",
+ "@esbuild/android-x64": "0.19.7",
+ "@esbuild/darwin-arm64": "0.19.7",
+ "@esbuild/darwin-x64": "0.19.7",
+ "@esbuild/freebsd-arm64": "0.19.7",
+ "@esbuild/freebsd-x64": "0.19.7",
+ "@esbuild/linux-arm": "0.19.7",
+ "@esbuild/linux-arm64": "0.19.7",
+ "@esbuild/linux-ia32": "0.19.7",
+ "@esbuild/linux-loong64": "0.19.7",
+ "@esbuild/linux-mips64el": "0.19.7",
+ "@esbuild/linux-ppc64": "0.19.7",
+ "@esbuild/linux-riscv64": "0.19.7",
+ "@esbuild/linux-s390x": "0.19.7",
+ "@esbuild/linux-x64": "0.19.7",
+ "@esbuild/netbsd-x64": "0.19.7",
+ "@esbuild/openbsd-x64": "0.19.7",
+ "@esbuild/sunos-x64": "0.19.7",
+ "@esbuild/win32-arm64": "0.19.7",
+ "@esbuild/win32-ia32": "0.19.7",
+ "@esbuild/win32-x64": "0.19.7"
}
},
"escalade": {
@@ -21629,27 +22206,28 @@
"dev": true
},
"eslint": {
- "version": "8.39.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz",
- "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==",
+ "version": "8.53.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
+ "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
"dev": true,
"requires": {
"@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.4.0",
- "@eslint/eslintrc": "^2.0.2",
- "@eslint/js": "8.39.0",
- "@humanwhocodes/config-array": "^0.11.8",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.3",
+ "@eslint/js": "8.53.0",
+ "@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.10.0",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"debug": "^4.3.2",
"doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.0",
- "eslint-visitor-keys": "^3.4.0",
- "espree": "^9.5.1",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
"esquery": "^1.4.2",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -21657,22 +22235,19 @@
"find-up": "^5.0.0",
"glob-parent": "^6.0.2",
"globals": "^13.19.0",
- "grapheme-splitter": "^1.0.4",
+ "graphemer": "^1.4.0",
"ignore": "^5.2.0",
- "import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"is-path-inside": "^3.0.3",
- "js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
+ "optionator": "^0.9.3",
"strip-ansi": "^6.0.1",
- "strip-json-comments": "^3.1.0",
"text-table": "^0.2.0"
},
"dependencies": {
@@ -21719,9 +22294,9 @@
}
},
"eslint-config-prettier": {
- "version": "8.8.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
- "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
+ "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
"dev": true,
"requires": {}
},
@@ -21733,9 +22308,9 @@
}
},
"eslint-scope": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
- "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
"dev": true,
"requires": {
"esrecurse": "^4.3.0",
@@ -21743,20 +22318,20 @@
}
},
"eslint-visitor-keys": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
- "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true
},
"espree": {
- "version": "9.5.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz",
- "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==",
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
"dev": true,
"requires": {
- "acorn": "^8.8.0",
+ "acorn": "^8.9.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.0"
+ "eslint-visitor-keys": "^3.4.1"
}
},
"esprima": {
@@ -21963,16 +22538,16 @@
}
},
"expect": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz",
- "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
"dev": true,
"requires": {
- "@jest/expect-utils": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0"
+ "@jest/expect-utils": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0"
}
},
"ext-list": {
@@ -22055,7 +22630,9 @@
"dev": true
},
"fast-glob": {
- "version": "3.2.12",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"requires": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -22078,6 +22655,8 @@
},
"fast-levenshtein": {
"version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
"fastest-levenshtein": {
@@ -22339,10 +22918,6 @@
}
}
},
- "fraction.js": {
- "version": "4.2.0",
- "dev": true
- },
"fragment-cache": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
@@ -22387,7 +22962,9 @@
"version": "1.0.0"
},
"fsevents": {
- "version": "2.3.2",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"optional": true
},
"function-bind": {
@@ -22525,8 +23102,10 @@
"version": "4.2.10",
"dev": true
},
- "grapheme-splitter": {
- "version": "1.0.4",
+ "graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true
},
"has": {
@@ -22631,9 +23210,9 @@
"dev": true
},
"htmlnano": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.4.tgz",
- "integrity": "sha512-WGCkyGFwjKW1GeCBsPYacMvaMnZtFJ0zIRnC2NCddkA+IOEhTqskXrS7lep+3yYZw/nQ3dW1UAX4yA/GJyR8BA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.1.0.tgz",
+ "integrity": "sha512-jVGRE0Ep9byMBKEu0Vxgl8dhXYOUk0iNQ2pjsG+BcRB0u0oDF5A9p/iBGMg/PGKYUyMD0OAGu8dVT5Lzj8S58g==",
"dev": true,
"requires": {
"cosmiconfig": "^8.0.0",
@@ -22648,14 +23227,14 @@
"dev": true
},
"cosmiconfig": {
- "version": "8.1.3",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz",
- "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==",
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
"dev": true,
"requires": {
- "import-fresh": "^3.2.1",
+ "import-fresh": "^3.3.0",
"js-yaml": "^4.1.0",
- "parse-json": "^5.0.0",
+ "parse-json": "^5.2.0",
"path-type": "^4.0.0"
}
},
@@ -22680,14 +23259,6 @@
"domhandler": "^4.2.2",
"domutils": "^2.8.0",
"entities": "^3.0.1"
- },
- "dependencies": {
- "entities": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
- "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
- "dev": true
- }
}
},
"http-cache-semantics": {
@@ -22843,9 +23414,9 @@
"dev": true
},
"is-core-module": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz",
- "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==",
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
"requires": {
"has": "^1.0.3"
}
@@ -22994,26 +23565,37 @@
"dev": true
},
"istanbul-lib-instrument": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
- "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz",
+ "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==",
"dev": true,
"requires": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-coverage": "^3.2.0",
- "semver": "^6.3.0"
+ "semver": "^7.5.4"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
}
},
"istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
"requires": {
"istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
+ "make-dir": "^4.0.0",
"supports-color": "^7.1.0"
}
},
@@ -23029,9 +23611,9 @@
}
},
"istanbul-reports": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
- "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
+ "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
"dev": true,
"requires": {
"html-escaper": "^2.0.0",
@@ -23062,24 +23644,24 @@
}
},
"jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz",
- "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
+ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
"dev": true,
"requires": {
- "@jest/core": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/core": "^29.7.0",
+ "@jest/types": "^29.6.3",
"import-local": "^3.0.2",
- "jest-cli": "^29.5.0"
+ "jest-cli": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23088,9 +23670,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -23099,50 +23681,51 @@
}
},
"jest-changed-files": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz",
- "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
+ "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
"dev": true,
"requires": {
"execa": "^5.0.0",
+ "jest-util": "^29.7.0",
"p-limit": "^3.1.0"
}
},
"jest-circus": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz",
- "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
+ "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
"dev": true,
"requires": {
- "@jest/environment": "^29.5.0",
- "@jest/expect": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
- "dedent": "^0.7.0",
+ "dedent": "^1.0.0",
"is-generator-fn": "^2.0.0",
- "jest-each": "^29.5.0",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
+ "jest-each": "^29.7.0",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
"p-limit": "^3.1.0",
- "pretty-format": "^29.5.0",
+ "pretty-format": "^29.7.0",
"pure-rand": "^6.0.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23151,9 +23734,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -23162,32 +23745,31 @@
}
},
"jest-cli": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz",
- "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
+ "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
"dev": true,
"requires": {
- "@jest/core": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/core": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
"chalk": "^4.0.0",
+ "create-jest": "^29.7.0",
"exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
"import-local": "^3.0.2",
- "jest-config": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
- "prompts": "^2.0.1",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"yargs": "^17.3.1"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23196,9 +23778,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -23207,42 +23789,42 @@
}
},
"jest-config": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz",
- "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
+ "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
"dev": true,
"requires": {
"@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^29.5.0",
- "@jest/types": "^29.5.0",
- "babel-jest": "^29.5.0",
+ "@jest/test-sequencer": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-jest": "^29.7.0",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-circus": "^29.5.0",
- "jest-environment-node": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-runner": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
+ "jest-circus": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"micromatch": "^4.0.4",
"parse-json": "^5.2.0",
- "pretty-format": "^29.5.0",
+ "pretty-format": "^29.7.0",
"slash": "^3.0.0",
"strip-json-comments": "^3.1.1"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23251,9 +23833,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -23262,46 +23844,46 @@
}
},
"jest-diff": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
- "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
- "diff-sequences": "^29.4.3",
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
+ "diff-sequences": "^29.6.3",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
}
},
"jest-docblock": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz",
- "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
+ "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
"dev": true,
"requires": {
"detect-newline": "^3.0.0"
}
},
"jest-each": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz",
- "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
+ "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
"dev": true,
"requires": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"chalk": "^4.0.0",
- "jest-get-type": "^29.4.3",
- "jest-util": "^29.5.0",
- "pretty-format": "^29.5.0"
+ "jest-get-type": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "pretty-format": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23310,9 +23892,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -23321,26 +23903,26 @@
}
},
"jest-environment-node": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz",
- "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
+ "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
"dev": true,
"requires": {
- "@jest/environment": "^29.5.0",
- "@jest/fake-timers": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
- "jest-mock": "^29.5.0",
- "jest-util": "^29.5.0"
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23349,9 +23931,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -23360,38 +23942,38 @@
}
},
"jest-get-type": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz",
- "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
+ "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
"dev": true
},
"jest-haste-map": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz",
- "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
"requires": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"fsevents": "^2.3.2",
"graceful-fs": "^4.2.9",
- "jest-regex-util": "^29.4.3",
- "jest-util": "^29.5.0",
- "jest-worker": "^29.5.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23400,9 +23982,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -23411,51 +23993,51 @@
}
},
"jest-leak-detector": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz",
- "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
+ "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
"dev": true,
"requires": {
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
}
},
"jest-matcher-utils": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz",
- "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
+ "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
- "jest-diff": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
}
},
"jest-message-util": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz",
- "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
- "pretty-format": "^29.5.0",
+ "pretty-format": "^29.7.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23464,9 +24046,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -23475,23 +24057,23 @@
}
},
"jest-mock": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz",
- "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
+ "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
"dev": true,
"requires": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
- "jest-util": "^29.5.0"
+ "jest-util": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23500,9 +24082,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -23518,74 +24100,74 @@
"requires": {}
},
"jest-regex-util": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz",
- "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true
},
"jest-resolve": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz",
- "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
+ "jest-haste-map": "^29.7.0",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"resolve": "^1.20.0",
"resolve.exports": "^2.0.0",
"slash": "^3.0.0"
}
},
"jest-resolve-dependencies": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz",
- "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
+ "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
"dev": true,
"requires": {
- "jest-regex-util": "^29.4.3",
- "jest-snapshot": "^29.5.0"
+ "jest-regex-util": "^29.6.3",
+ "jest-snapshot": "^29.7.0"
}
},
"jest-runner": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz",
- "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
+ "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
"dev": true,
"requires": {
- "@jest/console": "^29.5.0",
- "@jest/environment": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/console": "^29.7.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"emittery": "^0.13.1",
"graceful-fs": "^4.2.9",
- "jest-docblock": "^29.4.3",
- "jest-environment-node": "^29.5.0",
- "jest-haste-map": "^29.5.0",
- "jest-leak-detector": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-resolve": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-watcher": "^29.5.0",
- "jest-worker": "^29.5.0",
+ "jest-docblock": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-leak-detector": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-resolve": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "jest-worker": "^29.7.0",
"p-limit": "^3.1.0",
"source-map-support": "0.5.13"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23594,9 +24176,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -23615,42 +24197,42 @@
}
},
"jest-runtime": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz",
- "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
+ "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
"dev": true,
"requires": {
- "@jest/environment": "^29.5.0",
- "@jest/fake-timers": "^29.5.0",
- "@jest/globals": "^29.5.0",
- "@jest/source-map": "^29.4.3",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/globals": "^29.7.0",
+ "@jest/source-map": "^29.6.3",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"cjs-module-lexer": "^1.0.0",
"collect-v8-coverage": "^1.0.0",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-mock": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
"slash": "^3.0.0",
"strip-bom": "^4.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23659,9 +24241,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -23670,43 +24252,40 @@
}
},
"jest-snapshot": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz",
- "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
+ "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
"dev": true,
"requires": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
"@babel/plugin-syntax-jsx": "^7.7.2",
"@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/traverse": "^7.7.2",
"@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/babel__traverse": "^7.0.6",
- "@types/prettier": "^2.1.5",
+ "@jest/expect-utils": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^29.5.0",
+ "expect": "^29.7.0",
"graceful-fs": "^4.2.9",
- "jest-diff": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
"natural-compare": "^1.4.0",
- "pretty-format": "^29.5.0",
- "semver": "^7.3.5"
+ "pretty-format": "^29.7.0",
+ "semver": "^7.5.3"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23715,18 +24294,18 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
}
},
"semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
@@ -23735,12 +24314,12 @@
}
},
"jest-util": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz",
- "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"requires": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -23749,12 +24328,12 @@
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23763,9 +24342,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -23774,26 +24353,26 @@
}
},
"jest-validate": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz",
- "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
"requires": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^29.4.3",
+ "jest-get-type": "^29.6.3",
"leven": "^3.1.0",
- "pretty-format": "^29.5.0"
+ "pretty-format": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23802,9 +24381,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -23819,28 +24398,28 @@
}
},
"jest-watcher": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz",
- "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
+ "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
"dev": true,
"requires": {
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"emittery": "^0.13.1",
- "jest-util": "^29.5.0",
+ "jest-util": "^29.7.0",
"string-length": "^4.0.1"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -23849,9 +24428,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -23860,13 +24439,13 @@
}
},
"jest-worker": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz",
- "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
"requires": {
"@types/node": "*",
- "jest-util": "^29.5.0",
+ "jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
@@ -23883,16 +24462,14 @@
}
},
"jiti": {
- "version": "1.18.2",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz",
- "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg=="
- },
- "js-sdsl": {
- "version": "4.1.4",
- "dev": true
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
+ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q=="
},
"js-tokens": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
"js-yaml": {
@@ -23990,120 +24567,116 @@
},
"levn": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
"requires": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
- },
- "dependencies": {
- "prelude-ls": {
- "version": "1.2.1",
- "dev": true
- },
- "type-check": {
- "version": "0.4.0",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- }
}
},
"lightningcss": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.18.0.tgz",
- "integrity": "sha512-uk10tNxi5fhZqU93vtYiQgx/8a9f0Kvtj5AXIm+VlOXY+t/DWDmCZWJEkZJmmALgvbS6aAW8or+Kq85eJ6TDTw==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.22.1.tgz",
+ "integrity": "sha512-Fy45PhibiNXkm0cK5FJCbfO8Y6jUpD/YcHf/BtuI+jvYYqSXKF4muk61jjE8YxCR9y+hDYIWSzHTc+bwhDE6rQ==",
"requires": {
"detect-libc": "^1.0.3",
- "lightningcss-darwin-arm64": "1.18.0",
- "lightningcss-darwin-x64": "1.18.0",
- "lightningcss-linux-arm-gnueabihf": "1.18.0",
- "lightningcss-linux-arm64-gnu": "1.18.0",
- "lightningcss-linux-arm64-musl": "1.18.0",
- "lightningcss-linux-x64-gnu": "1.18.0",
- "lightningcss-linux-x64-musl": "1.18.0",
- "lightningcss-win32-x64-msvc": "1.18.0"
+ "lightningcss-darwin-arm64": "1.22.1",
+ "lightningcss-darwin-x64": "1.22.1",
+ "lightningcss-freebsd-x64": "1.22.1",
+ "lightningcss-linux-arm-gnueabihf": "1.22.1",
+ "lightningcss-linux-arm64-gnu": "1.22.1",
+ "lightningcss-linux-arm64-musl": "1.22.1",
+ "lightningcss-linux-x64-gnu": "1.22.1",
+ "lightningcss-linux-x64-musl": "1.22.1",
+ "lightningcss-win32-x64-msvc": "1.22.1"
}
},
"lightningcss-darwin-arm64": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.18.0.tgz",
- "integrity": "sha512-OqjydwtiNPgdH1ByIjA1YzqvDG/OMR6L3LPN6wRl1729LB0y4Mik7L06kmZaTb+pvUHr+NmDd2KCwnlrQ4zO3w==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.22.1.tgz",
+ "integrity": "sha512-ldvElu+R0QimNTjsKpaZkUv3zf+uefzLy/R1R19jtgOfSRM+zjUCUgDhfEDRmVqJtMwYsdhMI2aJtJChPC6Osg==",
"optional": true
},
"lightningcss-darwin-x64": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.18.0.tgz",
- "integrity": "sha512-mNiuPHj89/JHZmJMp+5H8EZSt6EL5DZRWJ31O6k3DrLLnRIQjXuXdDdN8kP7LoIkeWI5xvyD60CsReJm+YWYAw==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.22.1.tgz",
+ "integrity": "sha512-5p2rnlVTv6Gpw4PlTLq925nTVh+HFh4MpegX8dPDYJae+NFVjQ67gY7O6iHIzQjLipDiYejFF0yHrhjU3XgLBQ==",
+ "optional": true
+ },
+ "lightningcss-freebsd-x64": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.22.1.tgz",
+ "integrity": "sha512-1FaBtcFrZqB2hkFbAxY//Pnp8koThvyB6AhjbdVqKD4/pu13Rl91fKt2N9qyeQPUt3xy7ORUvSO+dPk3J6EjXg==",
"optional": true
},
"lightningcss-linux-arm-gnueabihf": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.18.0.tgz",
- "integrity": "sha512-S+25JjI6601HiAVoTDXW6SqH+E94a+FHA7WQqseyNHunOgVWKcAkNEc2LJvVxgwTq6z41sDIb9/M3Z9wa9lk4A==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.22.1.tgz",
+ "integrity": "sha512-6rub98tYGfE5I5j0BP8t/2d4BZyu1S7Iz9vUkm0H26snAFHYxLfj3RbQn0xHHIePSetjLnhcg3QlfwUAkD/FYg==",
"optional": true
},
"lightningcss-linux-arm64-gnu": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.18.0.tgz",
- "integrity": "sha512-JSqh4+21dCgBecIQUet35dtE4PhhSEMyqe3y0ZNQrAJQ5kyUPSQHiw81WXnPJcOSTTpG0TyMLiC8K//+BsFGQA==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.22.1.tgz",
+ "integrity": "sha512-nYO5qGtb/1kkTZu3FeTiM+2B2TAb7m2DkLCTgQIs2bk2o9aEs7I96fwySKcoHWQAiQDGR9sMux9vkV4KQXqPaQ==",
"optional": true
},
"lightningcss-linux-arm64-musl": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.18.0.tgz",
- "integrity": "sha512-2FWHa8iUhShnZnqhn2wfIcK5adJat9hAAaX7etNsoXJymlliDIOFuBQEsba2KBAZSM4QqfQtvRdR7m8i0I7ybQ==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.22.1.tgz",
+ "integrity": "sha512-MCV6RuRpzXbunvzwY644iz8cw4oQxvW7oer9xPkdadYqlEyiJJ6wl7FyJOH7Q6ZYH4yjGAUCvxDBxPbnDu9ZVg==",
"optional": true
},
"lightningcss-linux-x64-gnu": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.18.0.tgz",
- "integrity": "sha512-plCPGQJtDZHcLVKVRLnQVF2XRsIC32WvuJhQ7fJ7F6BV98b/VZX0OlX05qUaOESD9dCDHjYSfxsgcvOKgCWh7A==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.22.1.tgz",
+ "integrity": "sha512-RjNgpdM20VUXgV7us/VmlO3Vn2ZRiDnc3/bUxCVvySZWPiVPprpqW/QDWuzkGa+NCUf6saAM5CLsZLSxncXJwg==",
"optional": true
},
"lightningcss-linux-x64-musl": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.18.0.tgz",
- "integrity": "sha512-na+BGtVU6fpZvOHKhnlA0XHeibkT3/46nj6vLluG3kzdJYoBKU6dIl7DSOk++8jv4ybZyFJ0aOFMMSc8g2h58A==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.22.1.tgz",
+ "integrity": "sha512-ZgO4C7Rd6Hv/5MnyY2KxOYmIlzk4rplVolDt3NbkNR8DndnyX0Q5IR4acJWNTBICQ21j3zySzKbcJaiJpk/4YA==",
"optional": true
},
"lightningcss-win32-x64-msvc": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.18.0.tgz",
- "integrity": "sha512-5qeAH4RMNy2yMNEl7e5TI6upt/7xD2ZpHWH4RkT8iJ7/6POS5mjHbXWUO9Q1hhDhqkdzGa76uAdMzEouIeCyNw==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.22.1.tgz",
+ "integrity": "sha512-4pozV4eyD0MDET41ZLHAeBo+H04Nm2UEYIk5w/ts40231dRFV7E0cjwbnZvSoc1DXFgecAhiC0L16ruv/ZDCpg==",
"optional": true
},
"lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
+ "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g=="
},
"lines-and-columns": {
"version": "1.2.4"
},
"lmdb": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.5.2.tgz",
- "integrity": "sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.8.5.tgz",
+ "integrity": "sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==",
"dev": true,
"requires": {
- "@lmdb/lmdb-darwin-arm64": "2.5.2",
- "@lmdb/lmdb-darwin-x64": "2.5.2",
- "@lmdb/lmdb-linux-arm": "2.5.2",
- "@lmdb/lmdb-linux-arm64": "2.5.2",
- "@lmdb/lmdb-linux-x64": "2.5.2",
- "@lmdb/lmdb-win32-x64": "2.5.2",
- "msgpackr": "^1.5.4",
- "node-addon-api": "^4.3.0",
- "node-gyp-build-optional-packages": "5.0.3",
- "ordered-binary": "^1.2.4",
+ "@lmdb/lmdb-darwin-arm64": "2.8.5",
+ "@lmdb/lmdb-darwin-x64": "2.8.5",
+ "@lmdb/lmdb-linux-arm": "2.8.5",
+ "@lmdb/lmdb-linux-arm64": "2.8.5",
+ "@lmdb/lmdb-linux-x64": "2.8.5",
+ "@lmdb/lmdb-win32-x64": "2.8.5",
+ "msgpackr": "^1.9.5",
+ "node-addon-api": "^6.1.0",
+ "node-gyp-build-optional-packages": "5.1.1",
+ "ordered-binary": "^1.4.1",
"weak-lru-cache": "^1.2.2"
},
"dependencies": {
"node-addon-api": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
- "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
+ "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==",
"dev": true
}
}
@@ -24176,12 +24749,23 @@
}
},
"make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
"requires": {
- "semver": "^6.0.0"
+ "semver": "^7.5.3"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
}
},
"make-error": {
@@ -24230,7 +24814,9 @@
"version": "2.0.30",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
- "dev": true
+ "dev": true,
+ "optional": true,
+ "peer": true
},
"memory-fs": {
"version": "0.4.1",
@@ -24451,28 +25037,37 @@
"dev": true
},
"msgpackr": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.2.tgz",
- "integrity": "sha512-eLuPeok0DMwsGN23AvuVg32mYpx55tsQnxI87d8V1yZsdT8U5jrWhmCa1INO/joGAFQFfo/eTlM/BxVwLKbBOQ==",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.10.0.tgz",
+ "integrity": "sha512-rVQ5YAQDoZKZLX+h8tNq7FiHrPJoeGHViz3U4wIcykhAEpwF/nH2Vbk8dQxmpX5JavkI8C7pt4bnkJ02ZmRoUw==",
"dev": true,
"requires": {
- "msgpackr-extract": "^2.2.0"
+ "msgpackr-extract": "^3.0.2"
}
},
"msgpackr-extract": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-2.2.0.tgz",
- "integrity": "sha512-0YcvWSv7ZOGl9Od6Y5iJ3XnPww8O7WLcpYMDwX+PAA/uXLDtyw94PJv9GLQV/nnp3cWlDhMoyKZIQLrx33sWog==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz",
+ "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==",
"dev": true,
"optional": true,
"requires": {
- "@msgpackr-extract/msgpackr-extract-darwin-arm64": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-darwin-x64": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-linux-arm": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-linux-arm64": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-linux-x64": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-win32-x64": "2.2.0",
- "node-gyp-build-optional-packages": "5.0.3"
+ "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2",
+ "node-gyp-build-optional-packages": "5.0.7"
+ },
+ "dependencies": {
+ "node-gyp-build-optional-packages": {
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz",
+ "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==",
+ "dev": true,
+ "optional": true
+ }
}
},
"mz": {
@@ -24527,9 +25122,9 @@
"dev": true
},
"node-addon-api": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
- "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz",
+ "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==",
"dev": true
},
"node-fetch": {
@@ -24541,17 +25136,22 @@
"whatwg-url": "^5.0.0"
}
},
- "node-gyp-build": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
- "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
- "dev": true
- },
"node-gyp-build-optional-packages": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz",
- "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==",
- "dev": true
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz",
+ "integrity": "sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==",
+ "dev": true,
+ "requires": {
+ "detect-libc": "^2.0.1"
+ },
+ "dependencies": {
+ "detect-libc": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
+ "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
+ "dev": true
+ }
+ }
},
"node-int64": {
"version": "0.4.0",
@@ -24610,17 +25210,13 @@
}
},
"node-releases": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
- "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w=="
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ=="
},
"normalize-path": {
"version": "3.0.0"
},
- "normalize-range": {
- "version": "0.1.2",
- "dev": true
- },
"normalize-url": {
"version": "6.1.0",
"dev": true
@@ -24757,34 +25353,23 @@
}
},
"optionator": {
- "version": "0.9.1",
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
"dev": true,
"requires": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
- },
- "dependencies": {
- "prelude-ls": {
- "version": "1.2.1",
- "dev": true
- },
- "type-check": {
- "version": "0.4.0",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- }
+ "type-check": "^0.4.0"
}
},
"ordered-binary": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.0.tgz",
- "integrity": "sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz",
+ "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==",
"dev": true
},
"os-browserify": {
@@ -24878,25 +25463,25 @@
}
},
"parcel": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.8.3.tgz",
- "integrity": "sha512-5rMBpbNE72g6jZvkdR5gS2nyhwIXaJy8i65osOqs/+5b7zgf3eMKgjSsDrv6bhz3gzifsba6MBJiZdBckl+vnA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.10.3.tgz",
+ "integrity": "sha512-Ocx33N4ZVnotJTALhMZ0AqPIE9UN5uP6jjA+lYJ4FlEYuYYZsvOQXZQgeMa62pFj6jrOHWh7ho8uJhRdTNwVyg==",
"dev": true,
"requires": {
- "@parcel/config-default": "2.8.3",
- "@parcel/core": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/events": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/package-manager": "2.8.3",
- "@parcel/reporter-cli": "2.8.3",
- "@parcel/reporter-dev-server": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/config-default": "2.10.3",
+ "@parcel/core": "2.10.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/events": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/package-manager": "2.10.3",
+ "@parcel/reporter-cli": "2.10.3",
+ "@parcel/reporter-dev-server": "2.10.3",
+ "@parcel/reporter-tracer": "2.10.3",
+ "@parcel/utils": "2.10.3",
"chalk": "^4.1.0",
"commander": "^7.0.0",
- "get-port": "^4.2.0",
- "v8-compile-cache": "^2.0.0"
+ "get-port": "^4.2.0"
}
},
"parent-module": {
@@ -25033,9 +25618,9 @@
"dev": true
},
"postcss": {
- "version": "8.4.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz",
- "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==",
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
"requires": {
"nanoid": "^3.3.6",
"picocolors": "^1.0.0",
@@ -25080,56 +25665,6 @@
}
}
},
- "postcss-colormin": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz",
- "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "colord": "^2.9.1",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-convert-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz",
- "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-discard-comments": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz",
- "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==",
- "dev": true,
- "requires": {}
- },
- "postcss-discard-duplicates": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz",
- "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==",
- "dev": true,
- "requires": {}
- },
- "postcss-discard-empty": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz",
- "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==",
- "dev": true,
- "requires": {}
- },
- "postcss-discard-overridden": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz",
- "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==",
- "dev": true,
- "requires": {}
- },
"postcss-import": {
"version": "15.1.0",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
@@ -25149,18 +25684,18 @@
}
},
"postcss-load-config": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
- "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
"requires": {
- "lilconfig": "^2.0.5",
- "yaml": "^2.1.1"
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
},
"dependencies": {
"yaml": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
- "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA=="
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
+ "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA=="
}
}
},
@@ -25199,68 +25734,6 @@
}
}
},
- "postcss-merge-longhand": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz",
- "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0",
- "stylehacks": "^6.0.0"
- }
- },
- "postcss-merge-rules": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.0.tgz",
- "integrity": "sha512-rCXkklftzEkniyv3f4mRCQzxD6oE4Quyh61uyWTUbCJ26Pv2hoz+fivJSsSBWxDBeScR4fKCfF3HHTcD7Ybqnw==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "cssnano-utils": "^4.0.0",
- "postcss-selector-parser": "^6.0.5"
- }
- },
- "postcss-minify-font-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz",
- "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-minify-gradients": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz",
- "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==",
- "dev": true,
- "requires": {
- "colord": "^2.9.1",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-minify-params": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz",
- "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-minify-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz",
- "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==",
- "dev": true,
- "requires": {
- "postcss-selector-parser": "^6.0.5"
- }
- },
"postcss-modules": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz",
@@ -25321,115 +25794,6 @@
"postcss-selector-parser": "^6.0.11"
}
},
- "postcss-normalize-charset": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz",
- "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==",
- "dev": true,
- "requires": {}
- },
- "postcss-normalize-display-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz",
- "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-positions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz",
- "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-repeat-style": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz",
- "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-string": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz",
- "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-timing-functions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz",
- "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-unicode": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz",
- "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-url": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz",
- "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-whitespace": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz",
- "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-ordered-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz",
- "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==",
- "dev": true,
- "requires": {
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-reduce-initial": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz",
- "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0"
- }
- },
- "postcss-reduce-transforms": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz",
- "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
"postcss-reporter": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz",
@@ -25441,31 +25805,14 @@
}
},
"postcss-selector-parser": {
- "version": "6.0.11",
+ "version": "6.0.12",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz",
+ "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==",
"requires": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
}
},
- "postcss-svgo": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz",
- "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0",
- "svgo": "^3.0.2"
- }
- },
- "postcss-unique-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz",
- "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==",
- "dev": true,
- "requires": {
- "postcss-selector-parser": "^6.0.5"
- }
- },
"postcss-value-parser": {
"version": "4.2.0"
},
@@ -25508,6 +25855,12 @@
"is-json": "^2.0.1"
}
},
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
"prettier": {
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
@@ -25522,12 +25875,12 @@
}
},
"pretty-format": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
- "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
@@ -25648,9 +26001,9 @@
"dev": true
},
"pure-rand": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.1.tgz",
- "integrity": "sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz",
+ "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==",
"dev": true
},
"querystring": {
@@ -25811,11 +26164,11 @@
"dev": true
},
"resolve": {
- "version": "1.22.2",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
- "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"requires": {
- "is-core-module": "^2.11.0",
+ "is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
}
@@ -25844,9 +26197,9 @@
"dev": true
},
"resolve.exports": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.1.tgz",
- "integrity": "sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
"dev": true
},
"responselike": {
@@ -25920,11 +26273,23 @@
}
},
"rollup": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.0.tgz",
- "integrity": "sha512-ANPhVcyeHvYdQMUyCbczy33nbLzI7RzrBje4uvNiTDJGIMtlKoOStmympwr9OtS1LZxiDmE2wvxHyVhoLtf1KQ==",
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.5.1.tgz",
+ "integrity": "sha512-0EQribZoPKpb5z1NW/QYm3XSR//Xr8BeEXU49Lc/mQmpmVVG5jPUVrpc2iptup/0WMrY9mzas0fxH+TjYvG2CA==",
"dev": true,
"requires": {
+ "@rollup/rollup-android-arm-eabi": "4.5.1",
+ "@rollup/rollup-android-arm64": "4.5.1",
+ "@rollup/rollup-darwin-arm64": "4.5.1",
+ "@rollup/rollup-darwin-x64": "4.5.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.5.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.5.1",
+ "@rollup/rollup-linux-arm64-musl": "4.5.1",
+ "@rollup/rollup-linux-x64-gnu": "4.5.1",
+ "@rollup/rollup-linux-x64-musl": "4.5.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.5.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.5.1",
+ "@rollup/rollup-win32-x64-msvc": "4.5.1",
"fsevents": "~2.3.2"
}
},
@@ -26036,6 +26401,12 @@
"css-tree": "^1.1.2"
}
},
+ "lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "dev": true
+ },
"mdn-data": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
@@ -26385,9 +26756,9 @@
"dev": true
},
"sass": {
- "version": "1.62.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.0.tgz",
- "integrity": "sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg==",
+ "version": "1.69.5",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz",
+ "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==",
"dev": true,
"requires": {
"chokidar": ">=3.0.0 <4.0.0",
@@ -27002,20 +27373,10 @@
"integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==",
"dev": true
},
- "stylehacks": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz",
- "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "postcss-selector-parser": "^6.0.4"
- }
- },
"sucrase": {
- "version": "3.32.0",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz",
- "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==",
+ "version": "3.34.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz",
+ "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==",
"requires": {
"@jridgewell/gen-mapping": "^0.3.2",
"commander": "^4.0.0",
@@ -27026,16 +27387,6 @@
"ts-interface-checker": "^0.1.9"
},
"dependencies": {
- "@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
"commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
@@ -27054,16 +27405,19 @@
"version": "1.0.0"
},
"svgo": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
- "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.4.tgz",
+ "integrity": "sha512-T+Xul3JwuJ6VGXKo/p2ndqx1ibxNKnLTvRc1ZTWKCfyKS/GgNjRZcYsK84fxTsy/izr91g/Rwx6fGnVgaFSI5g==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"@trysound/sax": "0.2.0",
"commander": "^7.2.0",
"css-select": "^5.1.0",
"css-tree": "^2.2.1",
- "csso": "^5.0.5",
+ "css-what": "^6.1.0",
+ "csso": "5.0.5",
"picocolors": "^1.0.0"
}
},
@@ -27071,9 +27425,9 @@
"version": "file:",
"requires": {
"@alloc/quick-lru": "^5.2.0",
- "@swc/cli": "^0.1.62",
- "@swc/core": "^1.3.55",
- "@swc/jest": "^0.2.26",
+ "@swc/cli": "^0.1.63",
+ "@swc/core": "^1.3.95",
+ "@swc/jest": "^0.2.29",
"@swc/register": "^0.1.10",
"@tailwindcss/integrations-content-resolution": "file:integrations/content-resolution",
"@tailwindcss/integrations-parcel": "file:integrations/parcel",
@@ -27086,93 +27440,157 @@
"@tailwindcss/integrations-webpack-5": "file:integrations/webpack-5",
"@tailwindcss/oxide": "file:oxide/crates/node",
"arg": "^5.0.2",
- "autoprefixer": "^10.4.14",
- "browserslist": "^4.21.5",
+ "browserslist": "^4.22.1",
"chokidar": "^3.5.3",
"concurrently": "^8.0.1",
- "cssnano": "^6.0.0",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
- "esbuild": "^0.17.18",
- "eslint": "^8.39.0",
- "eslint-config-prettier": "^8.8.0",
+ "eslint": "^8.52.0",
+ "eslint-config-prettier": "^9.0.0",
"eslint-plugin-prettier": "^4.2.1",
- "fast-glob": "^3.2.12",
+ "fast-glob": "^3.3.2",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
- "jest": "^29.5.0",
- "jest-diff": "^29.5.0",
- "jiti": "^1.18.2",
- "lightningcss": "^1.18.0",
- "lilconfig": "^2.1.0",
+ "jest": "^29.7.0",
+ "jest-diff": "^29.7.0",
+ "jiti": "^1.21.0",
+ "lightningcss": "^1.22.1",
+ "lilconfig": "^3.0.0",
"micromatch": "^4.0.5",
"normalize-path": "^3.0.0",
"object-hash": "^3.0.0",
"picocolors": "^1.0.0",
- "postcss": "^8.4.23",
+ "postcss": "^8.4.31",
"postcss-import": "^15.1.0",
"postcss-js": "^4.0.1",
- "postcss-load-config": "^4.0.1",
+ "postcss-load-config": "^4.0.2",
"postcss-nested": "^6.0.1",
- "postcss-selector-parser": "^6.0.11",
+ "postcss-selector-parser": "^6.0.12",
"postcss-value-parser": "^4.2.0",
"prettier": "^2.8.8",
- "resolve": "^1.22.2",
+ "resolve": "^1.22.8",
"rimraf": "^5.0.0",
"source-map-js": "^1.0.2",
- "sucrase": "^3.32.0",
- "turbo": "^1.9.3"
+ "sucrase": "^3.34.0",
+ "turbo": "^1.10.16"
},
"dependencies": {
+ "@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true
+ },
"@alloc/quick-lru": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="
},
"@ampproject/remapping": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
- "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
"dev": true,
"requires": {
- "@jridgewell/gen-mapping": "^0.1.0",
+ "@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"@babel/code-frame": {
- "version": "7.18.6",
+ "version": "7.22.13",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
+ "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.18.6"
+ "@babel/highlight": "^7.22.13",
+ "chalk": "^2.4.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
}
},
"@babel/compat-data": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz",
- "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz",
+ "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==",
"dev": true
},
"@babel/core": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz",
- "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz",
+ "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==",
"dev": true,
"requires": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.21.3",
- "@babel/helper-compilation-targets": "^7.20.7",
- "@babel/helper-module-transforms": "^7.21.2",
- "@babel/helpers": "^7.21.0",
- "@babel/parser": "^7.21.3",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.3",
- "@babel/types": "^7.21.3",
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.22.15",
+ "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/helper-module-transforms": "^7.22.20",
+ "@babel/helpers": "^7.22.15",
+ "@babel/parser": "^7.22.16",
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.22.20",
+ "@babel/types": "^7.22.19",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
- "json5": "^2.2.2",
- "semver": "^6.3.0"
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
},
"dependencies": {
"convert-source-map": {
@@ -27180,45 +27598,38 @@
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
"dev": true
+ },
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
}
}
},
"@babel/generator": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz",
- "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz",
+ "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==",
"dev": true,
"requires": {
- "@babel/types": "^7.21.3",
+ "@babel/types": "^7.22.15",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
- },
- "dependencies": {
- "@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "dev": true,
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- }
}
},
"@babel/helper-compilation-targets": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz",
- "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
+ "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.20.5",
- "@babel/helper-validator-option": "^7.18.6",
- "browserslist": "^4.21.3",
+ "@babel/compat-data": "^7.22.9",
+ "@babel/helper-validator-option": "^7.22.15",
+ "browserslist": "^4.21.9",
"lru-cache": "^5.1.1",
- "semver": "^6.3.0"
+ "semver": "^6.3.1"
},
"dependencies": {
"lru-cache": {
@@ -27230,6 +27641,12 @@
"yallist": "^3.0.2"
}
},
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ },
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -27239,119 +27656,120 @@
}
},
"@babel/helper-environment-visitor": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
- "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true
},
"@babel/helper-function-name": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz",
- "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz",
+ "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==",
"dev": true,
"requires": {
- "@babel/template": "^7.20.7",
- "@babel/types": "^7.21.0"
+ "@babel/template": "^7.22.5",
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-hoist-variables": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
- "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
"requires": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-module-imports": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
- "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+ "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"dev": true,
"requires": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.22.15"
}
},
"@babel/helper-module-transforms": {
- "version": "7.21.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz",
- "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz",
+ "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==",
"dev": true,
"requires": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.20.2",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.19.1",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.2",
- "@babel/types": "^7.21.2"
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-module-imports": "^7.22.15",
+ "@babel/helper-simple-access": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-validator-identifier": "^7.22.20"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
- "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
+ "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
"dev": true
},
"@babel/helper-simple-access": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
- "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+ "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
"dev": true,
"requires": {
- "@babel/types": "^7.20.2"
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
- "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
"requires": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-string-parser": {
- "version": "7.19.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
- "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
+ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
"dev": true
},
"@babel/helper-validator-identifier": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
- "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true
},
"@babel/helper-validator-option": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
- "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
+ "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==",
"dev": true
},
"@babel/helpers": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz",
- "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz",
+ "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==",
"dev": true,
"requires": {
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.0",
- "@babel/types": "^7.21.0"
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.22.15",
+ "@babel/types": "^7.22.15"
}
},
"@babel/highlight": {
- "version": "7.18.6",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
+ "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
"js-tokens": "^4.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
"color-convert": "^1.9.0"
@@ -27359,6 +27777,8 @@
},
"chalk": {
"version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"requires": {
"ansi-styles": "^3.2.1",
@@ -27368,6 +27788,8 @@
},
"color-convert": {
"version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
"color-name": "1.1.3"
@@ -27375,18 +27797,26 @@
},
"color-name": {
"version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"dev": true
},
"escape-string-regexp": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true
},
"has-flag": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
"supports-color": {
"version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"requires": {
"has-flag": "^3.0.0"
@@ -27395,9 +27825,9 @@
}
},
"@babel/parser": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz",
- "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==",
+ "version": "7.22.16",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz",
+ "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==",
"dev": true
},
"@babel/plugin-syntax-async-generators": {
@@ -27446,12 +27876,12 @@
}
},
"@babel/plugin-syntax-jsx": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
- "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz",
+ "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-syntax-logical-assignment-operators": {
@@ -27518,51 +27948,51 @@
}
},
"@babel/plugin-syntax-typescript": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz",
- "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz",
+ "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.19.0"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/template": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
- "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.18.6",
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7"
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
}
},
"@babel/traverse": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz",
- "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz",
+ "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.21.3",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.21.0",
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.21.3",
- "@babel/types": "^7.21.3",
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.22.15",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.22.16",
+ "@babel/types": "^7.22.19",
"debug": "^4.1.0",
"globals": "^11.1.0"
}
},
"@babel/types": {
- "version": "7.21.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz",
- "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==",
+ "version": "7.22.19",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz",
+ "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==",
"dev": true,
"requires": {
- "@babel/helper-string-parser": "^7.19.4",
- "@babel/helper-validator-identifier": "^7.19.1",
+ "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.19",
"to-fast-properties": "^2.0.0"
}
},
@@ -27602,156 +28032,156 @@
"dev": true
},
"@esbuild/android-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz",
- "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.7.tgz",
+ "integrity": "sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==",
"dev": true,
"optional": true
},
"@esbuild/android-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz",
- "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.7.tgz",
+ "integrity": "sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==",
"dev": true,
"optional": true
},
"@esbuild/android-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz",
- "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.7.tgz",
+ "integrity": "sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==",
"dev": true,
"optional": true
},
"@esbuild/darwin-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz",
- "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.7.tgz",
+ "integrity": "sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==",
"dev": true,
"optional": true
},
"@esbuild/darwin-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz",
- "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.7.tgz",
+ "integrity": "sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==",
"dev": true,
"optional": true
},
"@esbuild/freebsd-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz",
- "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.7.tgz",
+ "integrity": "sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==",
"dev": true,
"optional": true
},
"@esbuild/freebsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz",
- "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.7.tgz",
+ "integrity": "sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==",
"dev": true,
"optional": true
},
"@esbuild/linux-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz",
- "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.7.tgz",
+ "integrity": "sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==",
"dev": true,
"optional": true
},
"@esbuild/linux-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz",
- "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.7.tgz",
+ "integrity": "sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==",
"dev": true,
"optional": true
},
"@esbuild/linux-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz",
- "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.7.tgz",
+ "integrity": "sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==",
"dev": true,
"optional": true
},
"@esbuild/linux-loong64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz",
- "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.7.tgz",
+ "integrity": "sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==",
"dev": true,
"optional": true
},
"@esbuild/linux-mips64el": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz",
- "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.7.tgz",
+ "integrity": "sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==",
"dev": true,
"optional": true
},
"@esbuild/linux-ppc64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz",
- "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.7.tgz",
+ "integrity": "sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==",
"dev": true,
"optional": true
},
"@esbuild/linux-riscv64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz",
- "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.7.tgz",
+ "integrity": "sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==",
"dev": true,
"optional": true
},
"@esbuild/linux-s390x": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz",
- "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.7.tgz",
+ "integrity": "sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==",
"dev": true,
"optional": true
},
"@esbuild/linux-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz",
- "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.7.tgz",
+ "integrity": "sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==",
"dev": true,
"optional": true
},
"@esbuild/netbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz",
- "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.7.tgz",
+ "integrity": "sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==",
"dev": true,
"optional": true
},
"@esbuild/openbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz",
- "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.7.tgz",
+ "integrity": "sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==",
"dev": true,
"optional": true
},
"@esbuild/sunos-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz",
- "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.7.tgz",
+ "integrity": "sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==",
"dev": true,
"optional": true
},
"@esbuild/win32-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz",
- "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.7.tgz",
+ "integrity": "sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==",
"dev": true,
"optional": true
},
"@esbuild/win32-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz",
- "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.7.tgz",
+ "integrity": "sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==",
"dev": true,
"optional": true
},
"@esbuild/win32-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz",
- "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.7.tgz",
+ "integrity": "sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==",
"dev": true,
"optional": true
},
@@ -27765,20 +28195,20 @@
}
},
"@eslint-community/regexpp": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz",
- "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==",
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz",
+ "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==",
"dev": true
},
"@eslint/eslintrc": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz",
- "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
+ "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.5.1",
+ "espree": "^9.6.0",
"globals": "^13.19.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
@@ -27794,9 +28224,9 @@
"dev": true
},
"globals": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "version": "13.23.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
@@ -27814,16 +28244,18 @@
}
},
"@eslint/js": {
- "version": "8.39.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz",
- "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==",
+ "version": "8.53.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
+ "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
"dev": true
},
"@humanwhocodes/config-array": {
- "version": "0.11.8",
+ "version": "0.11.13",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
+ "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
"dev": true,
"requires": {
- "@humanwhocodes/object-schema": "^1.2.1",
+ "@humanwhocodes/object-schema": "^2.0.1",
"debug": "^4.1.1",
"minimatch": "^3.0.5"
}
@@ -27833,7 +28265,9 @@
"dev": true
},
"@humanwhocodes/object-schema": {
- "version": "1.2.1",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
+ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
"dev": true
},
"@istanbuljs/load-nyc-config": {
@@ -27856,26 +28290,26 @@
"dev": true
},
"@jest/console": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz",
- "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
+ "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
"dev": true,
"requires": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
"slash": "^3.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -27884,9 +28318,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -27895,48 +28329,48 @@
}
},
"@jest/core": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz",
- "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
+ "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
"dev": true,
"requires": {
- "@jest/console": "^29.5.0",
- "@jest/reporters": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/console": "^29.7.0",
+ "@jest/reporters": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
- "jest-changed-files": "^29.5.0",
- "jest-config": "^29.5.0",
- "jest-haste-map": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-resolve-dependencies": "^29.5.0",
- "jest-runner": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
- "jest-watcher": "^29.5.0",
+ "jest-changed-files": "^29.7.0",
+ "jest-config": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-resolve-dependencies": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "jest-watcher": "^29.7.0",
"micromatch": "^4.0.4",
- "pretty-format": "^29.5.0",
+ "pretty-format": "^29.7.0",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -27945,9 +28379,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -27963,24 +28397,24 @@
}
},
"@jest/environment": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz",
- "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
+ "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
"dev": true,
"requires": {
- "@jest/fake-timers": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
- "jest-mock": "^29.5.0"
+ "jest-mock": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -27989,9 +28423,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -28000,45 +28434,45 @@
}
},
"@jest/expect": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz",
- "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
"dev": true,
"requires": {
- "expect": "^29.5.0",
- "jest-snapshot": "^29.5.0"
+ "expect": "^29.7.0",
+ "jest-snapshot": "^29.7.0"
}
},
"@jest/expect-utils": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz",
- "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
+ "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
"dev": true,
"requires": {
- "jest-get-type": "^29.4.3"
+ "jest-get-type": "^29.6.3"
}
},
"@jest/fake-timers": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz",
- "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
+ "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
"dev": true,
"requires": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@sinonjs/fake-timers": "^10.0.2",
"@types/node": "*",
- "jest-message-util": "^29.5.0",
- "jest-mock": "^29.5.0",
- "jest-util": "^29.5.0"
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -28047,9 +28481,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -28058,24 +28492,24 @@
}
},
"@jest/globals": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz",
- "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
+ "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
"dev": true,
"requires": {
- "@jest/environment": "^29.5.0",
- "@jest/expect": "^29.5.0",
- "@jest/types": "^29.5.0",
- "jest-mock": "^29.5.0"
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "jest-mock": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -28084,9 +28518,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -28095,17 +28529,17 @@
}
},
"@jest/reporters": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz",
- "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
+ "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@jridgewell/trace-mapping": "^0.3.15",
+ "@jest/console": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
"@types/node": "*",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
@@ -28113,13 +28547,13 @@
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
"istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^5.1.0",
+ "istanbul-lib-instrument": "^6.0.0",
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.1.3",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-worker": "^29.5.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
"slash": "^3.0.0",
"string-length": "^4.0.1",
"strip-ansi": "^6.0.0",
@@ -28127,12 +28561,12 @@
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -28141,9 +28575,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -28152,44 +28586,44 @@
}
},
"@jest/schemas": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz",
- "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
"dev": true,
"requires": {
- "@sinclair/typebox": "^0.25.16"
+ "@sinclair/typebox": "^0.27.8"
}
},
"@jest/source-map": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz",
- "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
+ "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
"dev": true,
"requires": {
- "@jridgewell/trace-mapping": "^0.3.15",
+ "@jridgewell/trace-mapping": "^0.3.18",
"callsites": "^3.0.0",
"graceful-fs": "^4.2.9"
}
},
"@jest/test-result": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz",
- "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
+ "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
"dev": true,
"requires": {
- "@jest/console": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/console": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -28198,9 +28632,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -28209,34 +28643,34 @@
}
},
"@jest/test-sequencer": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz",
- "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
+ "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
"dev": true,
"requires": {
- "@jest/test-result": "^29.5.0",
+ "@jest/test-result": "^29.7.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
+ "jest-haste-map": "^29.7.0",
"slash": "^3.0.0"
}
},
"@jest/transform": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz",
- "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
+ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
"dev": true,
"requires": {
"@babel/core": "^7.11.6",
- "@jest/types": "^29.5.0",
- "@jridgewell/trace-mapping": "^0.3.15",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
"babel-plugin-istanbul": "^6.1.1",
"chalk": "^4.0.0",
"convert-source-map": "^2.0.0",
"fast-json-stable-stringify": "^2.1.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-util": "^29.5.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
"micromatch": "^4.0.4",
"pirates": "^4.0.4",
"slash": "^3.0.0",
@@ -28244,12 +28678,12 @@
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -28258,9 +28692,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -28280,13 +28714,13 @@
}
},
"@jridgewell/gen-mapping": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
- "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
- "dev": true,
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"requires": {
- "@jridgewell/set-array": "^1.0.0",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
}
},
"@jridgewell/resolve-uri": {
@@ -28303,98 +28737,85 @@
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
- },
- "dependencies": {
- "@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
- "dev": true,
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- }
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.14"
},
"@jridgewell/trace-mapping": {
- "version": "0.3.17",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
- "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
+ "version": "0.3.18",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
+ "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
"requires": {
"@jridgewell/resolve-uri": "3.1.0",
"@jridgewell/sourcemap-codec": "1.4.14"
}
},
"@lezer/common": {
- "version": "0.15.12",
- "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz",
- "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.1.1.tgz",
+ "integrity": "sha512-aAPB9YbvZHqAW+bIwiuuTDGB4DG0sYNRObGLxud8cW7osw1ZQxfDuTZ8KQiqfZ0QJGcR34CvpTMDXEyo/+Htgg==",
"dev": true
},
"@lezer/lr": {
- "version": "0.15.8",
- "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz",
- "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==",
+ "version": "1.3.14",
+ "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.14.tgz",
+ "integrity": "sha512-z5mY4LStlA3yL7aHT/rqgG614cfcvklS+8oFRFBYrs4YaWLJyKKM4+nN6KopToX0o9Hj6zmH6M5kinOYuy06ug==",
"dev": true,
"requires": {
- "@lezer/common": "^0.15.0"
+ "@lezer/common": "^1.0.0"
}
},
"@lmdb/lmdb-darwin-arm64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz",
- "integrity": "sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.8.5.tgz",
+ "integrity": "sha512-KPDeVScZgA1oq0CiPBcOa3kHIqU+pTOwRFDIhxvmf8CTNvqdZQYp5cCKW0bUk69VygB2PuTiINFWbY78aR2pQw==",
"dev": true,
"optional": true
},
"@lmdb/lmdb-darwin-x64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz",
- "integrity": "sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.8.5.tgz",
+ "integrity": "sha512-w/sLhN4T7MW1nB3R/U8WK5BgQLz904wh+/SmA2jD8NnF7BLLoUgflCNxOeSPOWp8geP6nP/+VjWzZVip7rZ1ug==",
"dev": true,
"optional": true
},
"@lmdb/lmdb-linux-arm": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz",
- "integrity": "sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.8.5.tgz",
+ "integrity": "sha512-c0TGMbm2M55pwTDIfkDLB6BpIsgxV4PjYck2HiOX+cy/JWiBXz32lYbarPqejKs9Flm7YVAKSILUducU9g2RVg==",
"dev": true,
"optional": true
},
"@lmdb/lmdb-linux-arm64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz",
- "integrity": "sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.8.5.tgz",
+ "integrity": "sha512-vtbZRHH5UDlL01TT5jB576Zox3+hdyogvpcbvVJlmU5PdL3c5V7cj1EODdh1CHPksRl+cws/58ugEHi8bcj4Ww==",
"dev": true,
"optional": true
},
"@lmdb/lmdb-linux-x64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz",
- "integrity": "sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.8.5.tgz",
+ "integrity": "sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ==",
"dev": true,
"optional": true
},
"@lmdb/lmdb-win32-x64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz",
- "integrity": "sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.8.5.tgz",
+ "integrity": "sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ==",
"dev": true,
"optional": true
},
"@mischnic/json-sourcemap": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz",
- "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==",
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.1.tgz",
+ "integrity": "sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==",
"dev": true,
"requires": {
- "@lezer/common": "^0.15.7",
- "@lezer/lr": "^0.15.4",
+ "@lezer/common": "^1.0.0",
+ "@lezer/lr": "^1.0.0",
"json5": "^2.2.1"
}
},
@@ -28415,51 +28836,51 @@
}
},
"@msgpackr-extract/msgpackr-extract-darwin-arm64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-2.2.0.tgz",
- "integrity": "sha512-Z9LFPzfoJi4mflGWV+rv7o7ZbMU5oAU9VmzCgL240KnqDW65Y2HFCT3MW06/ITJSnbVLacmcEJA8phywK7JinQ==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz",
+ "integrity": "sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==",
"dev": true,
"optional": true
},
"@msgpackr-extract/msgpackr-extract-darwin-x64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-2.2.0.tgz",
- "integrity": "sha512-vq0tT8sjZsy4JdSqmadWVw6f66UXqUCabLmUVHZwUFzMgtgoIIQjT4VVRHKvlof3P/dMCkbMJ5hB1oJ9OWHaaw==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz",
+ "integrity": "sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==",
"dev": true,
"optional": true
},
"@msgpackr-extract/msgpackr-extract-linux-arm": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-2.2.0.tgz",
- "integrity": "sha512-SaJ3Qq4lX9Syd2xEo9u3qPxi/OB+5JO/ngJKK97XDpa1C587H9EWYO6KD8995DAjSinWvdHKRrCOXVUC5fvGOg==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz",
+ "integrity": "sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==",
"dev": true,
"optional": true
},
"@msgpackr-extract/msgpackr-extract-linux-arm64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-2.2.0.tgz",
- "integrity": "sha512-hlxxLdRmPyq16QCutUtP8Tm6RDWcyaLsRssaHROatgnkOxdleMTgetf9JsdncL8vLh7FVy/RN9i3XR5dnb9cRA==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz",
+ "integrity": "sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==",
"dev": true,
"optional": true
},
"@msgpackr-extract/msgpackr-extract-linux-x64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-2.2.0.tgz",
- "integrity": "sha512-94y5PJrSOqUNcFKmOl7z319FelCLAE0rz/jPCWS+UtdMZvpa4jrQd+cJPQCLp2Fes1yAW/YUQj/Di6YVT3c3Iw==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz",
+ "integrity": "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==",
"dev": true,
"optional": true
},
"@msgpackr-extract/msgpackr-extract-win32-x64": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-2.2.0.tgz",
- "integrity": "sha512-XrC0JzsqQSvOyM3t04FMLO6z5gCuhPE6k4FXuLK5xf52ZbdvcFe1yBmo7meCew9B8G2f0T9iu9t3kfTYRYROgA==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz",
+ "integrity": "sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==",
"dev": true,
"optional": true
},
"@napi-rs/cli": {
- "version": "2.15.2",
- "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-2.15.2.tgz",
- "integrity": "sha512-80tBCtCnEhAmFtB9oPM0FL74uW7fAmtpeqjvERH7Q1z/aZzCAs/iNfE7U3ehpwg9Q07Ob2Eh/+1guyCdX/p24w==",
+ "version": "2.16.5",
+ "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-2.16.5.tgz",
+ "integrity": "sha512-mFEzwrg4IOLngGd2/P6yeqIWgwQNn59Z08n1rndu6kLDq1gg954NH9cM1O9Da0RJuybt46p43lqgSsnAY2mxqA==",
"dev": true
},
"@nodelib/fs.scandir": {
@@ -28480,107 +28901,109 @@
}
},
"@parcel/bundler-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.8.3.tgz",
- "integrity": "sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.10.3.tgz",
+ "integrity": "sha512-a+yq8zH8mrg6FBgUjrC+r3z6cfK7dQVMNzduEU/LF52Z4FVAmTR8gefl/YGmAbquJL3PFAHdhICrljYnQ1WQkg==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/graph": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/graph": "3.0.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
}
},
"@parcel/cache": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.8.3.tgz",
- "integrity": "sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.10.3.tgz",
+ "integrity": "sha512-fNNOFOl4dwOlzP8iAa+evZ+3BakX0sV+3+PiYA0zaps7EmPmkTSGDhCWzaYRSO8fhmNDlrUX9Xh7b/X738LFqA==",
"dev": true,
"requires": {
- "@parcel/fs": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/utils": "2.8.3",
- "lmdb": "2.5.2"
+ "@parcel/fs": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "lmdb": "2.8.5"
}
},
"@parcel/codeframe": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.8.3.tgz",
- "integrity": "sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.10.3.tgz",
+ "integrity": "sha512-70ovUzeXBowDMjK+1xaLT4hm3jZUK7EbaCS6tN1cmmr0S1TDhU7g37jnpni+u9de9Lc/lErwTaDVXUf9WSQzQw==",
"dev": true,
"requires": {
"chalk": "^4.1.0"
}
},
"@parcel/compressor-raw": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.8.3.tgz",
- "integrity": "sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.10.3.tgz",
+ "integrity": "sha512-5SUZ80uwu7o0D+0RjhjBnSUXJRgaayfqVQtBRP3U7/W/Bb1Ixm1yDGXtDlyCbzimWqWVMMJ4/eVCEW7I8Ln4Bw==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3"
+ "@parcel/plugin": "2.10.3"
}
},
"@parcel/config-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.8.3.tgz",
- "integrity": "sha512-o/A/mbrO6X/BfGS65Sib8d6SSG45NYrNooNBkH/o7zbOBSRQxwyTlysleK1/3Wa35YpvFyLOwgfakqCtbGy4fw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.10.3.tgz",
+ "integrity": "sha512-gHVw5cKZVA9h/J4E33qQLg3QG3cYMyWVruyVzF8dFy/Rar5ebXMof1f38IhR2BIavpoThbnCnxgD4SVK8xOPag==",
"dev": true,
"requires": {
- "@parcel/bundler-default": "2.8.3",
- "@parcel/compressor-raw": "2.8.3",
- "@parcel/namer-default": "2.8.3",
- "@parcel/optimizer-css": "2.8.3",
- "@parcel/optimizer-htmlnano": "2.8.3",
- "@parcel/optimizer-image": "2.8.3",
- "@parcel/optimizer-svgo": "2.8.3",
- "@parcel/optimizer-terser": "2.8.3",
- "@parcel/packager-css": "2.8.3",
- "@parcel/packager-html": "2.8.3",
- "@parcel/packager-js": "2.8.3",
- "@parcel/packager-raw": "2.8.3",
- "@parcel/packager-svg": "2.8.3",
- "@parcel/reporter-dev-server": "2.8.3",
- "@parcel/resolver-default": "2.8.3",
- "@parcel/runtime-browser-hmr": "2.8.3",
- "@parcel/runtime-js": "2.8.3",
- "@parcel/runtime-react-refresh": "2.8.3",
- "@parcel/runtime-service-worker": "2.8.3",
- "@parcel/transformer-babel": "2.8.3",
- "@parcel/transformer-css": "2.8.3",
- "@parcel/transformer-html": "2.8.3",
- "@parcel/transformer-image": "2.8.3",
- "@parcel/transformer-js": "2.8.3",
- "@parcel/transformer-json": "2.8.3",
- "@parcel/transformer-postcss": "2.8.3",
- "@parcel/transformer-posthtml": "2.8.3",
- "@parcel/transformer-raw": "2.8.3",
- "@parcel/transformer-react-refresh-wrap": "2.8.3",
- "@parcel/transformer-svg": "2.8.3"
+ "@parcel/bundler-default": "2.10.3",
+ "@parcel/compressor-raw": "2.10.3",
+ "@parcel/namer-default": "2.10.3",
+ "@parcel/optimizer-css": "2.10.3",
+ "@parcel/optimizer-htmlnano": "2.10.3",
+ "@parcel/optimizer-image": "2.10.3",
+ "@parcel/optimizer-svgo": "2.10.3",
+ "@parcel/optimizer-swc": "2.10.3",
+ "@parcel/packager-css": "2.10.3",
+ "@parcel/packager-html": "2.10.3",
+ "@parcel/packager-js": "2.10.3",
+ "@parcel/packager-raw": "2.10.3",
+ "@parcel/packager-svg": "2.10.3",
+ "@parcel/packager-wasm": "2.10.3",
+ "@parcel/reporter-dev-server": "2.10.3",
+ "@parcel/resolver-default": "2.10.3",
+ "@parcel/runtime-browser-hmr": "2.10.3",
+ "@parcel/runtime-js": "2.10.3",
+ "@parcel/runtime-react-refresh": "2.10.3",
+ "@parcel/runtime-service-worker": "2.10.3",
+ "@parcel/transformer-babel": "2.10.3",
+ "@parcel/transformer-css": "2.10.3",
+ "@parcel/transformer-html": "2.10.3",
+ "@parcel/transformer-image": "2.10.3",
+ "@parcel/transformer-js": "2.10.3",
+ "@parcel/transformer-json": "2.10.3",
+ "@parcel/transformer-postcss": "2.10.3",
+ "@parcel/transformer-posthtml": "2.10.3",
+ "@parcel/transformer-raw": "2.10.3",
+ "@parcel/transformer-react-refresh-wrap": "2.10.3",
+ "@parcel/transformer-svg": "2.10.3"
}
},
"@parcel/core": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.8.3.tgz",
- "integrity": "sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.10.3.tgz",
+ "integrity": "sha512-b64FdqJi4CX6iWeLZNfmwdTrC1VLPXHMuFusf1sTZTuRBFw2oRpgJvuiqsrInaZ82o3lbLMo4a9/5LtNaZKa+Q==",
"dev": true,
"requires": {
"@mischnic/json-sourcemap": "^0.1.0",
- "@parcel/cache": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/events": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/graph": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/package-manager": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/cache": "2.10.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/events": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/graph": "3.0.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/package-manager": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/profiler": "2.10.3",
+ "@parcel/rust": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3",
"abortcontroller-polyfill": "^1.1.9",
"base-x": "^3.0.8",
"browserslist": "^4.6.6",
@@ -28588,23 +29011,26 @@
"dotenv": "^7.0.0",
"dotenv-expand": "^5.1.0",
"json5": "^2.2.0",
- "msgpackr": "^1.5.4",
+ "msgpackr": "^1.9.9",
"nullthrows": "^1.1.1",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/diagnostic": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.8.3.tgz",
- "integrity": "sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.10.3.tgz",
+ "integrity": "sha512-Hf3xG9UVkDABDXWi89TjEP5U1CLUUj81kx/QFeupBXnzt5GEQZBhkxdBq6+4w17Mmuvk7H5uumNsSptkWq9PCA==",
"dev": true,
"requires": {
"@mischnic/json-sourcemap": "^0.1.0",
@@ -28612,124 +29038,111 @@
}
},
"@parcel/events": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.8.3.tgz",
- "integrity": "sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.10.3.tgz",
+ "integrity": "sha512-I3FsZYmKzgvo1f6frUWdF7hWwpeWTshPrFqpn9ICDXs/1Hjlf32jNXLBqon9b9XUDfMw4nSRMFMzMLJpbdheGA==",
"dev": true
},
"@parcel/fs": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.8.3.tgz",
- "integrity": "sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.10.3.tgz",
+ "integrity": "sha512-0w4+Lc7B5VpwqX4GQfjnI5qN7tc9qbGPSPsf/6U2YPWU4dkGsMfPEmLBx7dZvJy3UiGxpsjMMuRHa14+jJ5QrQ==",
"dev": true,
"requires": {
- "@parcel/fs-search": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"@parcel/watcher": "^2.0.7",
- "@parcel/workers": "2.8.3"
- }
- },
- "@parcel/fs-search": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.8.3.tgz",
- "integrity": "sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==",
- "dev": true,
- "requires": {
- "detect-libc": "^1.0.3"
+ "@parcel/workers": "2.10.3"
}
},
"@parcel/graph": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.8.3.tgz",
- "integrity": "sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-3.0.3.tgz",
+ "integrity": "sha512-zUA8KsjR2+v2Q2bFBF7zBk33ejriDiRA/+LK5QE8LrFpkaDa+gjkx76h2x7JqGXIDHNos446KX4nz2OUCVwrNQ==",
"dev": true,
"requires": {
"nullthrows": "^1.1.1"
}
},
- "@parcel/hash": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.8.3.tgz",
- "integrity": "sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==",
- "dev": true,
- "requires": {
- "detect-libc": "^1.0.3",
- "xxhash-wasm": "^0.4.2"
- }
- },
"@parcel/logger": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.8.3.tgz",
- "integrity": "sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.10.3.tgz",
+ "integrity": "sha512-mAVTA0NgbbwEUzkzjBqjqyBBax+8bscRaZIAsEqMiSFWGcUmRgwVlH/jy3QDkFc7OHzwvdPK+XlMLV7s/3DJNw==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/events": "2.8.3"
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/events": "2.10.3"
}
},
"@parcel/markdown-ansi": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.8.3.tgz",
- "integrity": "sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.10.3.tgz",
+ "integrity": "sha512-uzN1AJmp1oYh/ZLdD9WA7xP5u/L3Bs/6AFZz5s695zus74RCx9OtQcF0Yyl1hbKVJDfuw9WFuzMfPL/9p/C5DQ==",
"dev": true,
"requires": {
"chalk": "^4.1.0"
}
},
"@parcel/namer-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.8.3.tgz",
- "integrity": "sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.10.3.tgz",
+ "integrity": "sha512-s7kgB/x7TISIHhen9IK4+CBXgmRJYahVS+oiAbMm18vcUVuXeZDBeTedOco6zUQIKuB71vx/4DBIuiIp6Q9hpg==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"nullthrows": "^1.1.1"
}
},
"@parcel/node-resolver-core": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.8.3.tgz",
- "integrity": "sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-3.1.3.tgz",
+ "integrity": "sha512-o7XK1KiK3ymO39bhc5qfDQiZpKA1xQmKg0TEPDNiLIXHKLEBheqarhw3Nwwt9MOFibfwsisQtDTIS+2v9A640A==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@mischnic/json-sourcemap": "^0.1.0",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/optimizer-css": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.8.3.tgz",
- "integrity": "sha512-JotGAWo8JhuXsQDK0UkzeQB0UR5hDAKvAviXrjqB4KM9wZNLhLleeEAW4Hk8R9smCeQFP6Xg/N/NkLDpqMwT3g==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.10.3.tgz",
+ "integrity": "sha512-Pc8jwV3U9w5DJDNcRQML5FlKdpPGnuCTtk1P+9FfyEUjdxoVxC+YeMIQcE961clAgl47qh7eNObXtsX/lb04Dg==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/utils": "2.10.3",
"browserslist": "^4.6.6",
"lightningcss": "^1.16.1",
"nullthrows": "^1.1.1"
}
},
"@parcel/optimizer-htmlnano": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.8.3.tgz",
- "integrity": "sha512-L8/fHbEy8Id2a2E0fwR5eKGlv9VYDjrH9PwdJE9Za9v1O/vEsfl/0T/79/x129l5O0yB6EFQkFa20MiK3b+vOg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.10.3.tgz",
+ "integrity": "sha512-KTIZOy19tYeG0j3JRv435A6jnTh3O1LPhsUfo6Xlea7Cz1yUUxAANl9MG8lHZKYbZCFFKbfk2I9QBycmcYxAAw==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
+ "@parcel/plugin": "2.10.3",
"htmlnano": "^2.0.0",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5",
@@ -28792,27 +29205,27 @@
}
},
"@parcel/optimizer-image": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.8.3.tgz",
- "integrity": "sha512-SD71sSH27SkCDNUNx9A3jizqB/WIJr3dsfp+JZGZC42tpD/Siim6Rqy9M4To/BpMMQIIiEXa5ofwS+DgTEiEHQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.10.3.tgz",
+ "integrity": "sha512-hbeI6+GoddJxib8MlK5iafbCm1oy3p0UL9bb8s5mjTZiHtj1PORlH8gP7mT1WlYOCgoy45QdHelcrmL9fJ8kBA==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
- "detect-libc": "^1.0.3"
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3"
}
},
"@parcel/optimizer-svgo": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.8.3.tgz",
- "integrity": "sha512-9KQed99NZnQw3/W4qBYVQ7212rzA9EqrQG019TIWJzkA9tjGBMIm2c/nXpK1tc3hQ3e7KkXkFCQ3C+ibVUnHNA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.10.3.tgz",
+ "integrity": "sha512-STN7sdjz6wGnQnvy22SkQaLi5C1E+j7J0xy96T0/mCP9KoIsBDE7panCtf53p4sWCNRsXNVrXt5KrpCC+u0LHg==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"svgo": "^2.4.0"
},
"dependencies": {
@@ -28871,87 +29284,93 @@
}
}
},
- "@parcel/optimizer-terser": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.8.3.tgz",
- "integrity": "sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA==",
+ "@parcel/optimizer-swc": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/optimizer-swc/-/optimizer-swc-2.10.3.tgz",
+ "integrity": "sha512-Cxy05CysiKbv/PtX++ETje4cbhCJySmN6EmFyQBs0jvzsUdWwqnsttavYRoMviUUK9mjm/i5q+cyewBO/8Oc5g==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
- "nullthrows": "^1.1.1",
- "terser": "^5.2.0"
+ "@parcel/utils": "2.10.3",
+ "@swc/core": "^1.3.36",
+ "nullthrows": "^1.1.1"
}
},
"@parcel/package-manager": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.8.3.tgz",
- "integrity": "sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.10.3.tgz",
+ "integrity": "sha512-KqOW5oUmElrcb7d+hOC68ja1PI2qbPZTwdduduRvB90DAweMt7r1046+W2Df5bd+p9iv72DxGEn9xomX+qz9MA==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
- "semver": "^5.7.1"
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/node-resolver-core": "3.1.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3",
+ "semver": "^7.5.2"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/packager-css": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.8.3.tgz",
- "integrity": "sha512-WyvkMmsurlHG8d8oUVm7S+D+cC/T3qGeqogb7sTI52gB6uiywU7lRCizLNqGFyFGIxcVTVHWnSHqItBcLN76lA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.10.3.tgz",
+ "integrity": "sha512-Jk165fFU2XyWjN7agKy+YvvRoOJbWIb57VlVDgBHanB5ptS7aCildambrljGNTivatr+zFrchE5ZDNUFXZhYnw==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
}
},
"@parcel/packager-html": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.8.3.tgz",
- "integrity": "sha512-OhPu1Hx1RRKJodpiu86ZqL8el2Aa4uhBHF6RAL1Pcrh2EhRRlPf70Sk0tC22zUpYL7es+iNKZ/n0Rl+OWSHWEw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.10.3.tgz",
+ "integrity": "sha512-bEI6FhBvERuoqyi/h681qGImTRBUnqNW4sKoFO67q/bxWLevXtEGMFOeqridiVOjYQH9s1kKwM/ln/UwKVazZw==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5"
}
},
"@parcel/packager-js": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.8.3.tgz",
- "integrity": "sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.10.3.tgz",
+ "integrity": "sha512-SjLSDw0juC7bEk/0geUtSVXaZqm2SgHL2IZaPnkoBQxVqzh2MdvAxJCrS2LxiR/cuQRfvQ5bnoJA7Kk1w2VNAg==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"globals": "^13.2.0",
"nullthrows": "^1.1.1"
},
"dependencies": {
"globals": {
- "version": "13.19.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
- "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
+ "version": "13.23.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
+ "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
@@ -28960,112 +29379,151 @@
}
},
"@parcel/packager-raw": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.8.3.tgz",
- "integrity": "sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.10.3.tgz",
+ "integrity": "sha512-d236tnP2ViOnUJR0+qG6EHw7MUWSA14fLKnYYzL5SRQ4BVo5XC+CM9HKN5O4YCCVu3+9Su2X1+RESo5sxbFq7w==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3"
+ "@parcel/plugin": "2.10.3"
}
},
"@parcel/packager-svg": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.8.3.tgz",
- "integrity": "sha512-mvIoHpmv5yzl36OjrklTDFShLUfPFTwrmp1eIwiszGdEBuQaX7JVI3Oo2jbVQgcN4W7J6SENzGQ3Q5hPTW3pMw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.10.3.tgz",
+ "integrity": "sha512-Rk/GokkNs9uLwiy6Ux/xXpD8nMVhA9LN9eIbVqi8+eR42xUmICmEoUoSm+CnekkXxY2a5e3mKpL7JZbT9vOEhA==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"posthtml": "^0.16.4"
}
},
- "@parcel/plugin": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.8.3.tgz",
- "integrity": "sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==",
+ "@parcel/packager-wasm": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/packager-wasm/-/packager-wasm-2.10.3.tgz",
+ "integrity": "sha512-j6VmU84LKy+XRHgZQFoASG98P50a9tkeT3LYRrol3RGGQrvx7PT3/D6rOqbnQjR2iGnaHzYoAlgg9jIMmWXYiA==",
"dev": true,
"requires": {
- "@parcel/types": "2.8.3"
+ "@parcel/plugin": "2.10.3"
+ }
+ },
+ "@parcel/plugin": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.10.3.tgz",
+ "integrity": "sha512-FgsfGKSdtSV1EcO2NWFCZaY14W0PnEEF8vZaRCTML3vKfUbilYs/biaqf5geFOu4DwRuCC8unOTqFy7dLwcK/A==",
+ "dev": true,
+ "requires": {
+ "@parcel/types": "2.10.3"
+ }
+ },
+ "@parcel/profiler": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/profiler/-/profiler-2.10.3.tgz",
+ "integrity": "sha512-yikaM6/vsvjDCcBHAXTKmDsWUF3UvC0lMG8RpnuVSN+R40MGH1vyrR4vNnqhkiCcs0RkVXm7bpuz3cDJLNLYSQ==",
+ "dev": true,
+ "requires": {
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/events": "2.10.3",
+ "chrome-trace-event": "^1.0.2"
}
},
"@parcel/reporter-cli": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.8.3.tgz",
- "integrity": "sha512-3sJkS6tFFzgIOz3u3IpD/RsmRxvOKKiQHOTkiiqRt1l44mMDGKS7zANRnJYsQzdCsgwc9SOP30XFgJwtoVlMbw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.10.3.tgz",
+ "integrity": "sha512-p5xQTPRuB1K3eI3Ro90vcdxpdt0VqIgrUP/VJKtSI8I3fLLGgPBNmSZejqqLup3jFRzUttQPHYkWl/R14LHjAQ==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"chalk": "^4.1.0",
"term-size": "^2.2.1"
}
},
"@parcel/reporter-dev-server": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.8.3.tgz",
- "integrity": "sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.10.3.tgz",
+ "integrity": "sha512-1Kzb2TrlnOYhGwFXZYCeoO18hpVhI3pRXnN22li9ZmdpeugZ0zZJamfPV8Duj4sBvBoSajbZhiPAe/6tQgWDSA==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3"
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3"
+ }
+ },
+ "@parcel/reporter-tracer": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/reporter-tracer/-/reporter-tracer-2.10.3.tgz",
+ "integrity": "sha512-53T9VPJvCi4Co0iTmNN+nqFD+Fkt3QFW8CPXBVlmlQzOtufVjDb01VsE1NPD8/J7O0jd548HJX/s5uqT0380jg==",
+ "dev": true,
+ "requires": {
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "chrome-trace-event": "^1.0.3",
+ "nullthrows": "^1.1.1"
}
},
"@parcel/resolver-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.8.3.tgz",
- "integrity": "sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.10.3.tgz",
+ "integrity": "sha512-TQc1LwpvEKyF3CnU9ifHOKV2usFLVYmMAVAkxyKKGTbnJGEqBDQ0ITqTapA6bJLvZ6d2eUT7guqd4nrBEjeZpw==",
"dev": true,
"requires": {
- "@parcel/node-resolver-core": "2.8.3",
- "@parcel/plugin": "2.8.3"
+ "@parcel/node-resolver-core": "3.1.3",
+ "@parcel/plugin": "2.10.3"
}
},
"@parcel/runtime-browser-hmr": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.8.3.tgz",
- "integrity": "sha512-2O1PYi2j/Q0lTyGNV3JdBYwg4rKo6TEVFlYGdd5wCYU9ZIN9RRuoCnWWH2qCPj3pjIVtBeppYxzfVjPEHINWVg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.10.3.tgz",
+ "integrity": "sha512-+6+mlJiLL3aNVIEyXMUPbPSgljYgnbl9JNMbEXikDQpGGiXTZ7gNNKsqwYeYzgQBYwgqRfR2ir6Bznc2R7dvxg==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3"
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3"
}
},
"@parcel/runtime-js": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.8.3.tgz",
- "integrity": "sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.10.3.tgz",
+ "integrity": "sha512-EMLgZzBGf5ylOT5U/N2rBK5ZZxnmEM4aJsissEAxcE/2cgE8TyhSng6p3A88vVJlO/unHcwRuFGlxKCueugGsQ==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
}
},
"@parcel/runtime-react-refresh": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.8.3.tgz",
- "integrity": "sha512-2v/qFKp00MfG0234OdOgQNAo6TLENpFYZMbVbAsPMY9ITiqG73MrEsrGXVoGbYiGTMB/Toer/lSWlJxtacOCuA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.10.3.tgz",
+ "integrity": "sha512-l03mni8XJq3fmeAV8UYlKJ/+u0LYRuk6ZVP0VLYLwgK4O0mlRuxwaZWYUeB8r/kTsEjB3gF/9AAtUZdAC7Swow==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"react-error-overlay": "6.0.9",
"react-refresh": "^0.9.0"
}
},
"@parcel/runtime-service-worker": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.8.3.tgz",
- "integrity": "sha512-/Skkw+EeRiwzOJso5fQtK8c9b452uWLNhQH1ISTodbmlcyB4YalAiSsyHCtMYD0c3/t5Sx4ZS7vxBAtQd0RvOw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.10.3.tgz",
+ "integrity": "sha512-NjhS80t+O5iBgKXIQ+i07ZEh/VW8XHzanwTHmznJXEoIjLoBpELZ9r6bV/eUD3mYgM1vmW9Aijdu5xtsd0JW6A==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
}
},
+ "@parcel/rust": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/rust/-/rust-2.10.3.tgz",
+ "integrity": "sha512-s1dD1QI/6JkWLICsFh8/iUvO7W1aj/avx+2mCSzuwEIsMywexpBf56qhVYMa3D9D50hS1h5FMk9RrSnSiPf8WA==",
+ "dev": true
+ },
"@parcel/source-map": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz",
@@ -29076,271 +29534,377 @@
}
},
"@parcel/transformer-babel": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.8.3.tgz",
- "integrity": "sha512-L6lExfpvvC7T/g3pxf3CIJRouQl+sgrSzuWQ0fD4PemUDHvHchSP4SNUVnd6gOytF3Y1KpnEZIunQGi5xVqQCQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.10.3.tgz",
+ "integrity": "sha512-SDTyDZX3WTkX7WS5Dg5cBLjWtIkUeeHezIjeOI4cw40tBjj5bXRR2TBfPsqwOnpTHr5jhNSicD6DN+XfTI2MMw==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/utils": "2.10.3",
"browserslist": "^4.6.6",
"json5": "^2.2.0",
"nullthrows": "^1.1.1",
- "semver": "^5.7.0"
+ "semver": "^7.5.2"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/transformer-css": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.8.3.tgz",
- "integrity": "sha512-xTqFwlSXtnaYen9ivAgz+xPW7yRl/u4QxtnDyDpz5dr8gSeOpQYRcjkd4RsYzKsWzZcGtB5EofEk8ayUbWKEUg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.10.3.tgz",
+ "integrity": "sha512-qlPYcwVgbqFHrec6CKcTQ4hY7EkjvH40Wyqf0xjAyIoIuOPmrpSUOp+VKjeRdbyFwH/4GBjrDZMBvCUsgeM2GA==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
+ "@parcel/utils": "2.10.3",
"browserslist": "^4.6.6",
"lightningcss": "^1.16.1",
"nullthrows": "^1.1.1"
}
},
"@parcel/transformer-html": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.8.3.tgz",
- "integrity": "sha512-kIZO3qsMYTbSnSpl9cnZog+SwL517ffWH54JeB410OSAYF1ouf4n5v9qBnALZbuCCmPwJRGs4jUtE452hxwN4g==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.10.3.tgz",
+ "integrity": "sha512-u0uklWpliEcPADtBlboxhxBvlGrP0yPRZk/A2iL0VhfAi9ONFEuJkEoesispNhAg3KiojEh0Ddzu7bYp9U0yww==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5",
"posthtml-parser": "^0.10.1",
"posthtml-render": "^3.0.0",
- "semver": "^5.7.1",
+ "semver": "^7.5.2",
"srcset": "4"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/transformer-image": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.8.3.tgz",
- "integrity": "sha512-cO4uptcCGTi5H6bvTrAWEFUsTNhA4kCo8BSvRSCHA2sf/4C5tGQPHt3JhdO0GQLPwZRCh/R41EkJs5HZ8A8DAg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.10.3.tgz",
+ "integrity": "sha512-At7D7eMauE+/EnlXiDfNSap2te11L0TIW55SC9iTRTI/CqesWfT96ZB/LcH3HXckYy/GJi0xyTjYxC/YjUqDog==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3",
"nullthrows": "^1.1.1"
}
},
"@parcel/transformer-js": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.8.3.tgz",
- "integrity": "sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.10.3.tgz",
+ "integrity": "sha512-9pGqrCSLlipXvL7hOrLsaW5Pq4bjFBOTiZ5k5kizk1qeuHKMIHxySGdy0E35eSsJ6JzXP0lTXPywMPysSI6owQ==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
- "@swc/helpers": "^0.4.12",
+ "@parcel/utils": "2.10.3",
+ "@parcel/workers": "2.10.3",
+ "@swc/helpers": "^0.5.0",
"browserslist": "^4.6.6",
- "detect-libc": "^1.0.3",
"nullthrows": "^1.1.1",
"regenerator-runtime": "^0.13.7",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"dependencies": {
- "@swc/helpers": {
- "version": "0.4.14",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
- "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"requires": {
- "tslib": "^2.4.0"
+ "lru-cache": "^6.0.0"
}
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
}
}
},
"@parcel/transformer-json": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.8.3.tgz",
- "integrity": "sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.10.3.tgz",
+ "integrity": "sha512-cPhiQNgrX92VEATuxf3GCPQnlfnZW1iCsOHMT1CzgmofE7tVlW1hOOokWw21/8spG44Zax0SrRW0udi9TdmpQA==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
+ "@parcel/plugin": "2.10.3",
"json5": "^2.2.0"
}
},
"@parcel/transformer-postcss": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.8.3.tgz",
- "integrity": "sha512-e8luB/poIlz6jBsD1Izms+6ElbyzuoFVa4lFVLZnTAChI3UxPdt9p/uTsIO46HyBps/Bk8ocvt3J4YF84jzmvg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.10.3.tgz",
+ "integrity": "sha512-SpTZQdGQ3aVvl6+3tLlw/txUyzZSsv8t+hcfc9PM0n1rd4mfjWxVKmgNC1Y3nFoSubLMp+03GbMq16ym8t89WQ==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
+ "@parcel/utils": "2.10.3",
"clone": "^2.1.1",
"nullthrows": "^1.1.1",
"postcss-value-parser": "^4.2.0",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/transformer-posthtml": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.8.3.tgz",
- "integrity": "sha512-pkzf9Smyeaw4uaRLsT41RGrPLT5Aip8ZPcntawAfIo+KivBQUV0erY1IvHYjyfFzq1ld/Fo2Ith9He6mxpPifA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.10.3.tgz",
+ "integrity": "sha512-k6pz0H/W1k+i9uDNXjum7XkaFYKvSSrgEsmhoh7OriXPrLunboIzMBXFQcQSCyxCpw/kLuKFBLP38mQnYC5BbQ==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5",
"posthtml-parser": "^0.10.1",
"posthtml-render": "^3.0.0",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/transformer-raw": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.8.3.tgz",
- "integrity": "sha512-G+5cXnd2/1O3nV/pgRxVKZY/HcGSseuhAe71gQdSQftb8uJEURyUHoQ9Eh0JUD3MgWh9V+nIKoyFEZdf9T0sUQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.10.3.tgz",
+ "integrity": "sha512-r//P2Hg14m/vJK/XJyq0cmcS4RTRy4bPSL4c0FxbEdDRrSm0Hcd1gdfgl0HeqSQQfcz0Xu4nCM5zAhg6FUpiXQ==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3"
+ "@parcel/plugin": "2.10.3"
}
},
"@parcel/transformer-react-refresh-wrap": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.8.3.tgz",
- "integrity": "sha512-q8AAoEvBnCf/nPvgOwFwKZfEl/thwq7c2duxXkhl+tTLDRN2vGmyz4355IxCkavSX+pLWSQ5MexklSEeMkgthg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.10.3.tgz",
+ "integrity": "sha512-Sc6ExGQy/YhNYFxRgEyi4SikYmV3wbATYo/VzqUjvZ4vE9YXM0sC5CyJhcoWVHmMPhm5eowOwFA6UrTsgHd2+g==",
"dev": true,
"requires": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/utils": "2.10.3",
"react-refresh": "^0.9.0"
}
},
"@parcel/transformer-svg": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.8.3.tgz",
- "integrity": "sha512-3Zr/gBzxi1ZH1fftH/+KsZU7w5GqkmxlB0ZM8ovS5E/Pl1lq1t0xvGJue9m2VuQqP8Mxfpl5qLFmsKlhaZdMIQ==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.10.3.tgz",
+ "integrity": "sha512-fjkTdPB8y467I/yHPEaNxNxoGtRIgEqNjVkBhtE/ibhF/YfqIEpDlJyI7G5G71pt2peLMLXZnJowzHqeoEUHOQ==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/plugin": "2.10.3",
+ "@parcel/rust": "2.10.3",
"nullthrows": "^1.1.1",
"posthtml": "^0.16.5",
"posthtml-parser": "^0.10.1",
"posthtml-render": "^3.0.0",
- "semver": "^5.7.1"
+ "semver": "^7.5.2"
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
}
}
},
"@parcel/types": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.8.3.tgz",
- "integrity": "sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.10.3.tgz",
+ "integrity": "sha512-4ISgDKcbJsR7NKj2jquPUPQWc/b2x6zHb/jZVdHVzMQxJp98DX+cvQR137iOTXUAFtwkKVjFcHWfejwGdGf9bw==",
"dev": true,
"requires": {
- "@parcel/cache": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/package-manager": "2.8.3",
+ "@parcel/cache": "2.10.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/package-manager": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "@parcel/workers": "2.8.3",
+ "@parcel/workers": "2.10.3",
"utility-types": "^3.10.0"
}
},
"@parcel/utils": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.8.3.tgz",
- "integrity": "sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.10.3.tgz",
+ "integrity": "sha512-l9pEQgq+D57t42m2sJkdU08Dpp0HVzDEwVrp/by/l37ZkYPJ2Me3oXtsJhvA+hej2kO8+FuKPm64FaUVaA2g+w==",
"dev": true,
"requires": {
- "@parcel/codeframe": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/markdown-ansi": "2.8.3",
+ "@parcel/codeframe": "2.10.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/markdown-ansi": "2.10.3",
+ "@parcel/rust": "2.10.3",
"@parcel/source-map": "^2.1.1",
- "chalk": "^4.1.0"
+ "chalk": "^4.1.0",
+ "nullthrows": "^1.1.1"
}
},
"@parcel/watcher": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz",
- "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.3.0.tgz",
+ "integrity": "sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ==",
"dev": true,
"requires": {
+ "@parcel/watcher-android-arm64": "2.3.0",
+ "@parcel/watcher-darwin-arm64": "2.3.0",
+ "@parcel/watcher-darwin-x64": "2.3.0",
+ "@parcel/watcher-freebsd-x64": "2.3.0",
+ "@parcel/watcher-linux-arm-glibc": "2.3.0",
+ "@parcel/watcher-linux-arm64-glibc": "2.3.0",
+ "@parcel/watcher-linux-arm64-musl": "2.3.0",
+ "@parcel/watcher-linux-x64-glibc": "2.3.0",
+ "@parcel/watcher-linux-x64-musl": "2.3.0",
+ "@parcel/watcher-win32-arm64": "2.3.0",
+ "@parcel/watcher-win32-ia32": "2.3.0",
+ "@parcel/watcher-win32-x64": "2.3.0",
+ "detect-libc": "^1.0.3",
"is-glob": "^4.0.3",
"micromatch": "^4.0.5",
- "node-addon-api": "^3.2.1",
- "node-gyp-build": "^4.3.0"
+ "node-addon-api": "^7.0.0"
}
},
+ "@parcel/watcher-android-arm64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.3.0.tgz",
+ "integrity": "sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-darwin-arm64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.3.0.tgz",
+ "integrity": "sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-darwin-x64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.3.0.tgz",
+ "integrity": "sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-freebsd-x64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.3.0.tgz",
+ "integrity": "sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-arm-glibc": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.3.0.tgz",
+ "integrity": "sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-arm64-glibc": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.3.0.tgz",
+ "integrity": "sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-arm64-musl": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.3.0.tgz",
+ "integrity": "sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-x64-glibc": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.3.0.tgz",
+ "integrity": "sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-linux-x64-musl": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.3.0.tgz",
+ "integrity": "sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-win32-arm64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.3.0.tgz",
+ "integrity": "sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-win32-ia32": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.3.0.tgz",
+ "integrity": "sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow==",
+ "dev": true,
+ "optional": true
+ },
+ "@parcel/watcher-win32-x64": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.3.0.tgz",
+ "integrity": "sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA==",
+ "dev": true,
+ "optional": true
+ },
"@parcel/workers": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.8.3.tgz",
- "integrity": "sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.10.3.tgz",
+ "integrity": "sha512-qlN8G3VybPHVIbD6fsZr2gmrXG2UlROUQIPW/kkAvjQ29uRfFn7YEC8CHTICt8M1HhCNkr0cMXkuXQBi0l3kAg==",
"dev": true,
"requires": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "chrome-trace-event": "^1.0.2",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/profiler": "2.10.3",
+ "@parcel/types": "2.10.3",
+ "@parcel/utils": "2.10.3",
"nullthrows": "^1.1.1"
}
},
@@ -29351,10 +29915,94 @@
"dev": true,
"optional": true
},
+ "@rollup/rollup-android-arm-eabi": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.1.tgz",
+ "integrity": "sha512-YaN43wTyEBaMqLDYeze+gQ4ZrW5RbTEGtT5o1GVDkhpdNcsLTnLRcLccvwy3E9wiDKWg9RIhuoy3JQKDRBfaZA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-android-arm64": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.1.tgz",
+ "integrity": "sha512-n1bX+LCGlQVuPlCofO0zOKe1b2XkFozAVRoczT+yxWZPGnkEAKTTYVOGZz8N4sKuBnKMxDbfhUsB1uwYdup/sw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-arm64": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.1.tgz",
+ "integrity": "sha512-QqJBumdvfBqBBmyGHlKxje+iowZwrHna7pokj/Go3dV1PJekSKfmjKrjKQ/e6ESTGhkfPNLq3VXdYLAc+UtAQw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-x64": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.1.tgz",
+ "integrity": "sha512-RrkDNkR/P5AEQSPkxQPmd2ri8WTjSl0RYmuFOiEABkEY/FSg0a4riihWQGKDJ4LnV9gigWZlTMx2DtFGzUrYQw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.1.tgz",
+ "integrity": "sha512-ZFPxvUZmE+fkB/8D9y/SWl/XaDzNSaxd1TJUSE27XAKlRpQ2VNce/86bGd9mEUgL3qrvjJ9XTGwoX0BrJkYK/A==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.1.tgz",
+ "integrity": "sha512-FEuAjzVIld5WVhu+M2OewLmjmbXWd3q7Zcx+Rwy4QObQCqfblriDMMS7p7+pwgjZoo9BLkP3wa9uglQXzsB9ww==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-musl": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.1.tgz",
+ "integrity": "sha512-f5Gs8WQixqGRtI0Iq/cMqvFYmgFzMinuJO24KRfnv7Ohi/HQclwrBCYkzQu1XfLEEt3DZyvveq9HWo4bLJf1Lw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-gnu": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.1.tgz",
+ "integrity": "sha512-CWPkPGrFfN2vj3mw+S7A/4ZaU3rTV7AkXUr08W9lNP+UzOvKLVf34tWCqrKrfwQ0NTk5GFqUr2XGpeR2p6R4gw==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-musl": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.1.tgz",
+ "integrity": "sha512-ZRETMFA0uVukUC9u31Ed1nx++29073goCxZtmZARwk5aF/ltuENaeTtRVsSQzFlzdd4J6L3qUm+EW8cbGt0CKQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.1.tgz",
+ "integrity": "sha512-ihqfNJNb2XtoZMSCPeoo0cYMgU04ksyFIoOw5S0JUVbOhafLot+KD82vpKXOurE2+9o/awrqIxku9MRR9hozHQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.1.tgz",
+ "integrity": "sha512-zK9MRpC8946lQ9ypFn4gLpdwr5a01aQ/odiIJeL9EbgZDMgbZjjT/XzTqJvDfTmnE1kHdbG20sAeNlpc91/wbg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-x64-msvc": {
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.1.tgz",
+ "integrity": "sha512-5I3Nz4Sb9TYOtkRwlH0ow+BhMH2vnh38tZ4J4mggE48M/YyJyp/0sPSxhw1UeS1+oBgQ8q7maFtSeKpeRJu41Q==",
+ "dev": true,
+ "optional": true
+ },
"@sinclair/typebox": {
- "version": "0.25.24",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz",
- "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==",
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
"dev": true
},
"@sindresorhus/is": {
@@ -29364,27 +30012,27 @@
"dev": true
},
"@sinonjs/commons": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
- "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
+ "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
"dev": true,
"requires": {
"type-detect": "4.0.8"
}
},
"@sinonjs/fake-timers": {
- "version": "10.0.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz",
- "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==",
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
+ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
"dev": true,
"requires": {
- "@sinonjs/commons": "^2.0.0"
+ "@sinonjs/commons": "^3.0.0"
}
},
"@swc/cli": {
- "version": "0.1.62",
- "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.62.tgz",
- "integrity": "sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==",
+ "version": "0.1.63",
+ "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.63.tgz",
+ "integrity": "sha512-EM9oxxHzmmsprYRbGqsS2M4M/Gr5Gkcl0ROYYIdlUyTkhOiX822EQiRCpPCwdutdnzH2GyaTN7wc6i0Y+CKd3A==",
"dev": true,
"requires": {
"@mole-inc/bin-wrapper": "^8.0.1",
@@ -29409,108 +30057,114 @@
}
},
"@swc/core": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.55.tgz",
- "integrity": "sha512-w/lN3OuJsuy868yJZKop+voZLVzI5pVSoopQVtgDNkEzejnPuRp9XaeAValvuMaWqKoTMtOjLzEPyv/xiAGYQQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.95.tgz",
+ "integrity": "sha512-PMrNeuqIusq9DPDooV3FfNEbZuTu5jKAc04N3Hm6Uk2Fl49cqElLFQ4xvl4qDmVDz97n3n/C1RE0/f6WyGPEiA==",
"dev": true,
"requires": {
- "@swc/core-darwin-arm64": "1.3.55",
- "@swc/core-darwin-x64": "1.3.55",
- "@swc/core-linux-arm-gnueabihf": "1.3.55",
- "@swc/core-linux-arm64-gnu": "1.3.55",
- "@swc/core-linux-arm64-musl": "1.3.55",
- "@swc/core-linux-x64-gnu": "1.3.55",
- "@swc/core-linux-x64-musl": "1.3.55",
- "@swc/core-win32-arm64-msvc": "1.3.55",
- "@swc/core-win32-ia32-msvc": "1.3.55",
- "@swc/core-win32-x64-msvc": "1.3.55"
+ "@swc/core-darwin-arm64": "1.3.95",
+ "@swc/core-darwin-x64": "1.3.95",
+ "@swc/core-linux-arm-gnueabihf": "1.3.95",
+ "@swc/core-linux-arm64-gnu": "1.3.95",
+ "@swc/core-linux-arm64-musl": "1.3.95",
+ "@swc/core-linux-x64-gnu": "1.3.95",
+ "@swc/core-linux-x64-musl": "1.3.95",
+ "@swc/core-win32-arm64-msvc": "1.3.95",
+ "@swc/core-win32-ia32-msvc": "1.3.95",
+ "@swc/core-win32-x64-msvc": "1.3.95",
+ "@swc/counter": "^0.1.1",
+ "@swc/types": "^0.1.5"
}
},
"@swc/core-darwin-arm64": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.55.tgz",
- "integrity": "sha512-UnHC8aPg/JvHhgXxTU6EhTtfnYNS7nhq8EKB8laNPxlHbwEyMBVQ2QuJHlNCtFtvSfX/uH5l04Ld1iGXnBTfdQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.95.tgz",
+ "integrity": "sha512-VAuBAP3MNetO/yBIBzvorUXq7lUBwhfpJxYViSxyluMwtoQDhE/XWN598TWMwMl1ZuImb56d7eUsuFdjgY7pJw==",
"dev": true,
"optional": true
},
"@swc/core-darwin-x64": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.55.tgz",
- "integrity": "sha512-VNJkFVARrktIqtaLrD1NFA54gqekH7eAUcUY2U2SdHwO67HYjfMXMxlugLP5PDasSKpTkrVooUdhkffoA5W50g==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.95.tgz",
+ "integrity": "sha512-20vF2rvUsN98zGLZc+dsEdHvLoCuiYq/1B+TDeE4oolgTFDmI1jKO+m44PzWjYtKGU9QR95sZ6r/uec0QC5O4Q==",
"dev": true,
"optional": true
},
"@swc/core-linux-arm-gnueabihf": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.55.tgz",
- "integrity": "sha512-6OcohhIFKKNW/TpJt26Tpul8zyL7dmp1Lnyj2BX9ycsZZ5UnsNiGqn37mrqJgVTx/ansEmbyOmKu2mzm/Ct6cQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.95.tgz",
+ "integrity": "sha512-oEudEM8PST1MRNGs+zu0cx5i9uP8TsLE4/L9HHrS07Ck0RJ3DCj3O2fU832nmLe2QxnAGPwBpSO9FntLfOiWEQ==",
"dev": true,
"optional": true
},
"@swc/core-linux-arm64-gnu": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.55.tgz",
- "integrity": "sha512-MfZtXGBv21XWwvrSMP0CMxScDolT/iv5PRl9UBprYUehwWr7BNjA3V9W7QQ+kKoPyORWk7LX7OpJZF3FnO618Q==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.95.tgz",
+ "integrity": "sha512-pIhFI+cuC1aYg+0NAPxwT/VRb32f2ia8oGxUjQR6aJg65gLkUYQzdwuUmpMtFR2WVf7WVFYxUnjo4UyMuyh3ng==",
"dev": true,
"optional": true
},
"@swc/core-linux-arm64-musl": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.55.tgz",
- "integrity": "sha512-iZJo+7L5lv10W0f0C6SlyteAyMJt5Tp+aH3+nlAwKdtc+VjyL1sGhR8DJMXp2/buBRZJ9tjEtpXKDaWUdSdF7Q==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.95.tgz",
+ "integrity": "sha512-ZpbTr+QZDT4OPJfjPAmScqdKKaT+wGurvMU5AhxLaf85DuL8HwUwwlL0n1oLieLc47DwIJEMuKQkYhXMqmJHlg==",
"dev": true,
"optional": true
},
"@swc/core-linux-x64-gnu": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.55.tgz",
- "integrity": "sha512-Rmc8ny/mslzzz0+wNK9/mLdyAWVbMZHRSvljhpzASmq48NBkmZ5vk9/WID6MnUz2e9cQ0JxJQs8t39KlFJtW3g==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.95.tgz",
+ "integrity": "sha512-n9SuHEFtdfSJ+sHdNXNRuIOVprB8nbsz+08apKfdo4lEKq6IIPBBAk5kVhPhkjmg2dFVHVo4Tr/OHXM1tzWCCw==",
"dev": true,
"optional": true
},
"@swc/core-linux-x64-musl": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.55.tgz",
- "integrity": "sha512-Ymoc4xxINzS93ZjVd2UZfLZk1jF6wHjdCbC1JF+0zK3IrNrxCIDoWoaAj0+Bbvyo3hD1Xg/cneSTsqX8amnnuQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.95.tgz",
+ "integrity": "sha512-L1JrVlsXU3LC0WwmVnMK9HrOT2uhHahAoPNMJnZQpc18a0paO9fqifPG8M/HjNRffMUXR199G/phJsf326UvVg==",
"dev": true,
"optional": true
},
"@swc/core-win32-arm64-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.55.tgz",
- "integrity": "sha512-OhnmFstq2qRU2GI5I0G/8L+vc2rx8+w+IOA6EZBrY4FuMCbPIZKKzlnAIxYn2W+yD4gvBzYP3tgEcaDfQk6EkA==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.95.tgz",
+ "integrity": "sha512-YaP4x/aZbUyNdqCBpC2zL8b8n58MEpOUpmOIZK6G1SxGi+2ENht7gs7+iXpWPc0sy7X3YPKmSWMAuui0h8lgAA==",
"dev": true,
"optional": true
},
"@swc/core-win32-ia32-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.55.tgz",
- "integrity": "sha512-3VR5rHZ6uoL/Vo3djV30GgX2oyDwWWsk+Yp+nyvYyBaKYiH2zeHfxdYRLSQV3W7kSlCAH3oDYpSljrWZ0t5XEQ==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.95.tgz",
+ "integrity": "sha512-w0u3HI916zT4BC/57gOd+AwAEjXeUlQbGJ9H4p/gzs1zkSHtoDQghVUNy3n/ZKp9KFod/95cA8mbVF9t1+6epQ==",
"dev": true,
"optional": true
},
"@swc/core-win32-x64-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.55.tgz",
- "integrity": "sha512-KBtMFtRwnbxBugYf6i2ePqEGdxsk715KcqGMjGhxNg7BTACnXnhj37irHu2e7A7wZffbkUVUYuj/JEgVkEjSxg==",
+ "version": "1.3.95",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.95.tgz",
+ "integrity": "sha512-5RGnMt0S6gg4Gc6QtPUJ3Qs9Un4sKqccEzgH/tj7V/DVTJwKdnBKxFZfgQ34OR2Zpz7zGOn889xwsFVXspVWNA==",
"dev": true,
"optional": true
},
+ "@swc/counter": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz",
+ "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==",
+ "dev": true
+ },
"@swc/helpers": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz",
"integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==",
"dev": true,
- "optional": true,
- "peer": true,
"requires": {
"tslib": "^2.4.0"
}
},
"@swc/jest": {
- "version": "0.2.26",
- "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.26.tgz",
- "integrity": "sha512-7lAi7q7ShTO3E5Gt1Xqf3pIhRbERxR1DUxvtVa9WKzIB+HGQ7wZP5sYx86zqnaEoKKGhmOoZ7gyW0IRu8Br5+A==",
+ "version": "0.2.29",
+ "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.29.tgz",
+ "integrity": "sha512-8reh5RvHBsSikDC3WGCd5ZTd2BXKkyOdK7QwynrCH58jk2cQFhhHhFBg/jvnWZehUQe/EoOImLENc9/DwbBFow==",
"dev": true,
"requires": {
"@jest/create-cache-key-function": "^27.4.2",
@@ -29528,6 +30182,12 @@
"source-map-support": "^0.5.13"
}
},
+ "@swc/types": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz",
+ "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==",
+ "dev": true
+ },
"@szmarczak/http-timer": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
@@ -29540,36 +30200,36 @@
"@tailwindcss/integrations-content-resolution": {
"version": "file:integrations/content-resolution",
"requires": {
- "postcss": "^8.4.23",
+ "postcss": "^8.4.31",
"postcss-cli": "^10.1.0"
}
},
"@tailwindcss/integrations-parcel": {
"version": "file:integrations/parcel",
"requires": {
- "parcel": "^2.8.3"
+ "parcel": "2.10.3"
}
},
"@tailwindcss/integrations-postcss-cli": {
"version": "file:integrations/postcss-cli",
"requires": {
- "postcss": "^8.4.23",
+ "postcss": "^8.4.31",
"postcss-cli": "^10.1.0"
}
},
"@tailwindcss/integrations-rollup": {
"version": "file:integrations/rollup",
"requires": {
- "rollup": "^3.21.0",
+ "rollup": "^4.5.0",
"rollup-plugin-postcss": "^4.0.2"
}
},
"@tailwindcss/integrations-rollup-sass": {
"version": "file:integrations/rollup-sass",
"requires": {
- "rollup": "^3.21.0",
+ "rollup": "^4.5.0",
"rollup-plugin-postcss": "^4.0.2",
- "sass": "^1.62.0"
+ "sass": "^1.69.5"
}
},
"@tailwindcss/integrations-tailwindcss-cli": {
@@ -29582,7 +30242,7 @@
"version": "file:integrations/vite",
"requires": {
"isomorphic-fetch": "^3.0.0",
- "vite": "^4.3.2"
+ "vite": "^5.0.2"
}
},
"@tailwindcss/integrations-webpack-4": {
@@ -29886,7 +30546,7 @@
"@tailwindcss/oxide": {
"version": "file:oxide/crates/node",
"requires": {
- "@napi-rs/cli": "^2.15.2",
+ "@napi-rs/cli": "^2.16.5",
"@tailwindcss/oxide-darwin-arm64": "0.0.0",
"@tailwindcss/oxide-darwin-x64": "0.0.0",
"@tailwindcss/oxide-freebsd-x64": "0.0.0",
@@ -29937,9 +30597,9 @@
"peer": true
},
"@types/babel__core": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz",
- "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz",
+ "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==",
"dev": true,
"requires": {
"@babel/parser": "^7.20.7",
@@ -29950,18 +30610,18 @@
}
},
"@types/babel__generator": {
- "version": "7.6.4",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
- "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
+ "version": "7.6.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz",
+ "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==",
"dev": true,
"requires": {
"@babel/types": "^7.0.0"
}
},
"@types/babel__template": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
- "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
+ "version": "7.4.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz",
+ "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==",
"dev": true,
"requires": {
"@babel/parser": "^7.1.0",
@@ -29969,12 +30629,12 @@
}
},
"@types/babel__traverse": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz",
- "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz",
+ "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==",
"dev": true,
"requires": {
- "@babel/types": "^7.3.0"
+ "@babel/types": "^7.20.7"
}
},
"@types/cacheable-request": {
@@ -30016,9 +30676,9 @@
"dev": true
},
"@types/graceful-fs": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
- "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz",
+ "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==",
"dev": true,
"requires": {
"@types/node": "*"
@@ -30064,8 +30724,13 @@
}
},
"@types/node": {
- "version": "16.10.2",
- "devOptional": true
+ "version": "20.9.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.4.tgz",
+ "integrity": "sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==",
+ "devOptional": true,
+ "requires": {
+ "undici-types": "~5.26.4"
+ }
},
"@types/parse-json": {
"version": "4.0.0",
@@ -30073,12 +30738,6 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
- "@types/prettier": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz",
- "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==",
- "dev": true
- },
"@types/responselike": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
@@ -30105,6 +30764,12 @@
"version": "20.2.1",
"dev": true
},
+ "@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
+ "dev": true
+ },
"@webassemblyjs/ast": {
"version": "1.11.5",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz",
@@ -30411,9 +31076,9 @@
"dev": true
},
"acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
"devOptional": true
},
"acorn-jsx": {
@@ -30637,30 +31302,16 @@
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true
},
- "autoprefixer": {
- "version": "10.4.14",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
- "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.5",
- "caniuse-lite": "^1.0.30001464",
- "fraction.js": "^4.2.0",
- "normalize-range": "^0.1.2",
- "picocolors": "^1.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
"babel-jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz",
- "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
+ "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
"dev": true,
"requires": {
- "@jest/transform": "^29.5.0",
+ "@jest/transform": "^29.7.0",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.5.0",
+ "babel-preset-jest": "^29.6.3",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"slash": "^3.0.0"
@@ -30677,12 +31328,27 @@
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-instrument": "^5.0.4",
"test-exclude": "^6.0.0"
+ },
+ "dependencies": {
+ "istanbul-lib-instrument": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
+ }
+ }
}
},
"babel-plugin-jest-hoist": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz",
- "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
+ "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
"dev": true,
"requires": {
"@babel/template": "^7.3.3",
@@ -30712,12 +31378,12 @@
}
},
"babel-preset-jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz",
- "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
+ "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
"dev": true,
"requires": {
- "babel-plugin-jest-hoist": "^29.5.0",
+ "babel-plugin-jest-hoist": "^29.6.3",
"babel-preset-current-node-syntax": "^1.0.0"
}
},
@@ -31078,14 +31744,14 @@
}
},
"browserslist": {
- "version": "4.21.5",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
- "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
+ "version": "4.22.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
+ "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
"requires": {
- "caniuse-lite": "^1.0.30001449",
- "electron-to-chromium": "^1.4.284",
- "node-releases": "^2.0.8",
- "update-browserslist-db": "^1.0.10"
+ "caniuse-lite": "^1.0.30001541",
+ "electron-to-chromium": "^1.4.535",
+ "node-releases": "^2.0.13",
+ "update-browserslist-db": "^1.0.13"
}
},
"bser": {
@@ -31243,9 +31909,9 @@
}
},
"caniuse-lite": {
- "version": "1.0.30001468",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001468.tgz",
- "integrity": "sha512-zgAo8D5kbOyUcRAgSmgyuvBkjrGk5CGYG5TYgFdpQv+ywcyEpo1LOWoG8YmoflGnh+V+UsNuKYedsoYs0hzV5A=="
+ "version": "1.0.30001546",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz",
+ "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw=="
},
"chalk": {
"version": "4.1.2",
@@ -31332,9 +31998,9 @@
}
},
"cjs-module-lexer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
- "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
+ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
"dev": true
},
"class-utils": {
@@ -31461,9 +32127,9 @@
"dev": true
},
"collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
+ "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
"dev": true
},
"collection-visit": {
@@ -31700,6 +32366,46 @@
"sha.js": "^2.4.8"
}
},
+ "create-jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
+ "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "prompts": "^2.0.1"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.8",
+ "chalk": "^4.0.0"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ }
+ }
+ },
"create-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
@@ -31787,6 +32493,8 @@
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
"integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"boolbase": "^1.0.0",
"css-what": "^6.1.0",
@@ -31800,6 +32508,8 @@
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.2",
@@ -31811,26 +32521,32 @@
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"domelementtype": "^2.3.0"
}
},
"domutils": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz",
- "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"dom-serializer": "^2.0.0",
"domelementtype": "^2.3.0",
- "domhandler": "^5.0.1"
+ "domhandler": "^5.0.3"
}
},
"entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true
+ "dev": true,
+ "optional": true,
+ "peer": true
}
}
},
@@ -31839,6 +32555,8 @@
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"mdn-data": "2.0.30",
"source-map-js": "^1.0.1"
@@ -31853,65 +32571,13 @@
"cssesc": {
"version": "3.0.0"
},
- "cssnano": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.0.tgz",
- "integrity": "sha512-RGlcbzGhzEBCHuQe3k+Udyj5M00z0pm9S+VurHXFEOXxH+y0sVrJH2sMzoyz2d8N1EScazg+DVvmgyx0lurwwA==",
- "dev": true,
- "requires": {
- "cssnano-preset-default": "^6.0.0",
- "lilconfig": "^2.1.0"
- }
- },
- "cssnano-preset-default": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.0.tgz",
- "integrity": "sha512-BDxlaFzObRDXUiCCBQUNQcI+f1/aX2mgoNtXGjV6PG64POcHoDUoX+LgMWw+Q4609QhxwkcSnS65YFs42RA6qQ==",
- "dev": true,
- "requires": {
- "css-declaration-sorter": "^6.3.1",
- "cssnano-utils": "^4.0.0",
- "postcss-calc": "^8.2.3",
- "postcss-colormin": "^6.0.0",
- "postcss-convert-values": "^6.0.0",
- "postcss-discard-comments": "^6.0.0",
- "postcss-discard-duplicates": "^6.0.0",
- "postcss-discard-empty": "^6.0.0",
- "postcss-discard-overridden": "^6.0.0",
- "postcss-merge-longhand": "^6.0.0",
- "postcss-merge-rules": "^6.0.0",
- "postcss-minify-font-values": "^6.0.0",
- "postcss-minify-gradients": "^6.0.0",
- "postcss-minify-params": "^6.0.0",
- "postcss-minify-selectors": "^6.0.0",
- "postcss-normalize-charset": "^6.0.0",
- "postcss-normalize-display-values": "^6.0.0",
- "postcss-normalize-positions": "^6.0.0",
- "postcss-normalize-repeat-style": "^6.0.0",
- "postcss-normalize-string": "^6.0.0",
- "postcss-normalize-timing-functions": "^6.0.0",
- "postcss-normalize-unicode": "^6.0.0",
- "postcss-normalize-url": "^6.0.0",
- "postcss-normalize-whitespace": "^6.0.0",
- "postcss-ordered-values": "^6.0.0",
- "postcss-reduce-initial": "^6.0.0",
- "postcss-reduce-transforms": "^6.0.0",
- "postcss-svgo": "^6.0.0",
- "postcss-unique-selectors": "^6.0.0"
- }
- },
- "cssnano-utils": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
- "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
- "dev": true,
- "requires": {}
- },
"csso": {
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
"integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"css-tree": "~2.2.0"
},
@@ -31921,6 +32587,8 @@
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
"integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"mdn-data": "2.0.28",
"source-map-js": "^1.0.1"
@@ -31930,7 +32598,9 @@
"version": "2.0.28",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
- "dev": true
+ "dev": true,
+ "optional": true,
+ "peer": true
}
}
},
@@ -31975,19 +32645,22 @@
}
},
"dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
- "dev": true
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
+ "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
+ "dev": true,
+ "requires": {}
},
"deep-is": {
- "version": "0.1.3",
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
"deepmerge": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz",
- "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"dev": true
},
"defer-to-connect": {
@@ -32044,9 +32717,9 @@
"peer": true
},
"diff-sequences": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz",
- "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
"dev": true
},
"diffie-hellman": {
@@ -32089,11 +32762,21 @@
},
"dom-serializer": {
"version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
+ "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
"dev": true,
"requires": {
"domelementtype": "^2.0.1",
"domhandler": "^4.2.0",
"entities": "^2.0.0"
+ },
+ "dependencies": {
+ "entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true
+ }
}
},
"domain-browser": {
@@ -32104,10 +32787,14 @@
},
"domelementtype": {
"version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
"dev": true
},
"domhandler": {
"version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
"dev": true,
"requires": {
"domelementtype": "^2.2.0"
@@ -32115,6 +32802,8 @@
},
"domutils": {
"version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
"dev": true,
"requires": {
"dom-serializer": "^1.0.1",
@@ -32147,9 +32836,9 @@
}
},
"electron-to-chromium": {
- "version": "1.4.288",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.288.tgz",
- "integrity": "sha512-8s9aJf3YiokIrR+HOQzNOGmEHFXVUQzXM/JaViVvKdCkNUjS+lEa/uT7xw3nDVG/IgfxiIwUGkwJ6AR1pTpYsQ=="
+ "version": "1.4.544",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.544.tgz",
+ "integrity": "sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w=="
},
"elliptic": {
"version": "6.5.4",
@@ -32210,7 +32899,9 @@
}
},
"entities": {
- "version": "2.2.0",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
+ "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
"dev": true
},
"envinfo": {
@@ -32242,33 +32933,33 @@
"dev": true
},
"esbuild": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz",
- "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==",
+ "version": "0.19.7",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.7.tgz",
+ "integrity": "sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==",
"dev": true,
"requires": {
- "@esbuild/android-arm": "0.17.18",
- "@esbuild/android-arm64": "0.17.18",
- "@esbuild/android-x64": "0.17.18",
- "@esbuild/darwin-arm64": "0.17.18",
- "@esbuild/darwin-x64": "0.17.18",
- "@esbuild/freebsd-arm64": "0.17.18",
- "@esbuild/freebsd-x64": "0.17.18",
- "@esbuild/linux-arm": "0.17.18",
- "@esbuild/linux-arm64": "0.17.18",
- "@esbuild/linux-ia32": "0.17.18",
- "@esbuild/linux-loong64": "0.17.18",
- "@esbuild/linux-mips64el": "0.17.18",
- "@esbuild/linux-ppc64": "0.17.18",
- "@esbuild/linux-riscv64": "0.17.18",
- "@esbuild/linux-s390x": "0.17.18",
- "@esbuild/linux-x64": "0.17.18",
- "@esbuild/netbsd-x64": "0.17.18",
- "@esbuild/openbsd-x64": "0.17.18",
- "@esbuild/sunos-x64": "0.17.18",
- "@esbuild/win32-arm64": "0.17.18",
- "@esbuild/win32-ia32": "0.17.18",
- "@esbuild/win32-x64": "0.17.18"
+ "@esbuild/android-arm": "0.19.7",
+ "@esbuild/android-arm64": "0.19.7",
+ "@esbuild/android-x64": "0.19.7",
+ "@esbuild/darwin-arm64": "0.19.7",
+ "@esbuild/darwin-x64": "0.19.7",
+ "@esbuild/freebsd-arm64": "0.19.7",
+ "@esbuild/freebsd-x64": "0.19.7",
+ "@esbuild/linux-arm": "0.19.7",
+ "@esbuild/linux-arm64": "0.19.7",
+ "@esbuild/linux-ia32": "0.19.7",
+ "@esbuild/linux-loong64": "0.19.7",
+ "@esbuild/linux-mips64el": "0.19.7",
+ "@esbuild/linux-ppc64": "0.19.7",
+ "@esbuild/linux-riscv64": "0.19.7",
+ "@esbuild/linux-s390x": "0.19.7",
+ "@esbuild/linux-x64": "0.19.7",
+ "@esbuild/netbsd-x64": "0.19.7",
+ "@esbuild/openbsd-x64": "0.19.7",
+ "@esbuild/sunos-x64": "0.19.7",
+ "@esbuild/win32-arm64": "0.19.7",
+ "@esbuild/win32-ia32": "0.19.7",
+ "@esbuild/win32-x64": "0.19.7"
}
},
"escalade": {
@@ -32279,27 +32970,28 @@
"dev": true
},
"eslint": {
- "version": "8.39.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz",
- "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==",
+ "version": "8.53.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
+ "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
"dev": true,
"requires": {
"@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.4.0",
- "@eslint/eslintrc": "^2.0.2",
- "@eslint/js": "8.39.0",
- "@humanwhocodes/config-array": "^0.11.8",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.3",
+ "@eslint/js": "8.53.0",
+ "@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.10.0",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
"debug": "^4.3.2",
"doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.0",
- "eslint-visitor-keys": "^3.4.0",
- "espree": "^9.5.1",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
"esquery": "^1.4.2",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
@@ -32307,22 +32999,19 @@
"find-up": "^5.0.0",
"glob-parent": "^6.0.2",
"globals": "^13.19.0",
- "grapheme-splitter": "^1.0.4",
+ "graphemer": "^1.4.0",
"ignore": "^5.2.0",
- "import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"is-path-inside": "^3.0.3",
- "js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
+ "optionator": "^0.9.3",
"strip-ansi": "^6.0.1",
- "strip-json-comments": "^3.1.0",
"text-table": "^0.2.0"
},
"dependencies": {
@@ -32369,9 +33058,9 @@
}
},
"eslint-config-prettier": {
- "version": "8.8.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
- "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
+ "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
"dev": true,
"requires": {}
},
@@ -32383,9 +33072,9 @@
}
},
"eslint-scope": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
- "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
"dev": true,
"requires": {
"esrecurse": "^4.3.0",
@@ -32393,20 +33082,20 @@
}
},
"eslint-visitor-keys": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
- "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true
},
"espree": {
- "version": "9.5.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz",
- "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==",
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
"dev": true,
"requires": {
- "acorn": "^8.8.0",
+ "acorn": "^8.9.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.0"
+ "eslint-visitor-keys": "^3.4.1"
}
},
"esprima": {
@@ -32613,16 +33302,16 @@
}
},
"expect": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz",
- "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
"dev": true,
"requires": {
- "@jest/expect-utils": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0"
+ "@jest/expect-utils": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0"
}
},
"ext-list": {
@@ -32705,7 +33394,9 @@
"dev": true
},
"fast-glob": {
- "version": "3.2.12",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"requires": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -32728,6 +33419,8 @@
},
"fast-levenshtein": {
"version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
"fastest-levenshtein": {
@@ -32989,10 +33682,6 @@
}
}
},
- "fraction.js": {
- "version": "4.2.0",
- "dev": true
- },
"fragment-cache": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
@@ -33037,7 +33726,9 @@
"version": "1.0.0"
},
"fsevents": {
- "version": "2.3.2",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"optional": true
},
"function-bind": {
@@ -33175,8 +33866,10 @@
"version": "4.2.10",
"dev": true
},
- "grapheme-splitter": {
- "version": "1.0.4",
+ "graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true
},
"has": {
@@ -33281,9 +33974,9 @@
"dev": true
},
"htmlnano": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.4.tgz",
- "integrity": "sha512-WGCkyGFwjKW1GeCBsPYacMvaMnZtFJ0zIRnC2NCddkA+IOEhTqskXrS7lep+3yYZw/nQ3dW1UAX4yA/GJyR8BA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.1.0.tgz",
+ "integrity": "sha512-jVGRE0Ep9byMBKEu0Vxgl8dhXYOUk0iNQ2pjsG+BcRB0u0oDF5A9p/iBGMg/PGKYUyMD0OAGu8dVT5Lzj8S58g==",
"dev": true,
"requires": {
"cosmiconfig": "^8.0.0",
@@ -33298,14 +33991,14 @@
"dev": true
},
"cosmiconfig": {
- "version": "8.1.3",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz",
- "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==",
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
"dev": true,
"requires": {
- "import-fresh": "^3.2.1",
+ "import-fresh": "^3.3.0",
"js-yaml": "^4.1.0",
- "parse-json": "^5.0.0",
+ "parse-json": "^5.2.0",
"path-type": "^4.0.0"
}
},
@@ -33330,14 +34023,6 @@
"domhandler": "^4.2.2",
"domutils": "^2.8.0",
"entities": "^3.0.1"
- },
- "dependencies": {
- "entities": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
- "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
- "dev": true
- }
}
},
"http-cache-semantics": {
@@ -33493,9 +34178,9 @@
"dev": true
},
"is-core-module": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz",
- "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==",
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
"requires": {
"has": "^1.0.3"
}
@@ -33644,26 +34329,37 @@
"dev": true
},
"istanbul-lib-instrument": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
- "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz",
+ "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==",
"dev": true,
"requires": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-coverage": "^3.2.0",
- "semver": "^6.3.0"
+ "semver": "^7.5.4"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
}
},
"istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
"requires": {
"istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
+ "make-dir": "^4.0.0",
"supports-color": "^7.1.0"
}
},
@@ -33679,9 +34375,9 @@
}
},
"istanbul-reports": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
- "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
+ "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
"dev": true,
"requires": {
"html-escaper": "^2.0.0",
@@ -33712,24 +34408,24 @@
}
},
"jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz",
- "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
+ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
"dev": true,
"requires": {
- "@jest/core": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/core": "^29.7.0",
+ "@jest/types": "^29.6.3",
"import-local": "^3.0.2",
- "jest-cli": "^29.5.0"
+ "jest-cli": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -33738,9 +34434,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -33749,50 +34445,51 @@
}
},
"jest-changed-files": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz",
- "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
+ "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
"dev": true,
"requires": {
"execa": "^5.0.0",
+ "jest-util": "^29.7.0",
"p-limit": "^3.1.0"
}
},
"jest-circus": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz",
- "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
+ "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
"dev": true,
"requires": {
- "@jest/environment": "^29.5.0",
- "@jest/expect": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
- "dedent": "^0.7.0",
+ "dedent": "^1.0.0",
"is-generator-fn": "^2.0.0",
- "jest-each": "^29.5.0",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
+ "jest-each": "^29.7.0",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
"p-limit": "^3.1.0",
- "pretty-format": "^29.5.0",
+ "pretty-format": "^29.7.0",
"pure-rand": "^6.0.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -33801,9 +34498,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -33812,32 +34509,31 @@
}
},
"jest-cli": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz",
- "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
+ "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
"dev": true,
"requires": {
- "@jest/core": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/core": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
"chalk": "^4.0.0",
+ "create-jest": "^29.7.0",
"exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
"import-local": "^3.0.2",
- "jest-config": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
- "prompts": "^2.0.1",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"yargs": "^17.3.1"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -33846,9 +34542,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -33857,42 +34553,42 @@
}
},
"jest-config": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz",
- "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
+ "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
"dev": true,
"requires": {
"@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^29.5.0",
- "@jest/types": "^29.5.0",
- "babel-jest": "^29.5.0",
+ "@jest/test-sequencer": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-jest": "^29.7.0",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-circus": "^29.5.0",
- "jest-environment-node": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-runner": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
+ "jest-circus": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"micromatch": "^4.0.4",
"parse-json": "^5.2.0",
- "pretty-format": "^29.5.0",
+ "pretty-format": "^29.7.0",
"slash": "^3.0.0",
"strip-json-comments": "^3.1.1"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -33901,9 +34597,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -33912,46 +34608,46 @@
}
},
"jest-diff": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
- "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
- "diff-sequences": "^29.4.3",
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
+ "diff-sequences": "^29.6.3",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
}
},
"jest-docblock": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz",
- "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
+ "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
"dev": true,
"requires": {
"detect-newline": "^3.0.0"
}
},
"jest-each": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz",
- "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
+ "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
"dev": true,
"requires": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"chalk": "^4.0.0",
- "jest-get-type": "^29.4.3",
- "jest-util": "^29.5.0",
- "pretty-format": "^29.5.0"
+ "jest-get-type": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "pretty-format": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -33960,9 +34656,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -33971,26 +34667,26 @@
}
},
"jest-environment-node": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz",
- "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
+ "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
"dev": true,
"requires": {
- "@jest/environment": "^29.5.0",
- "@jest/fake-timers": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
- "jest-mock": "^29.5.0",
- "jest-util": "^29.5.0"
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -33999,9 +34695,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -34010,38 +34706,38 @@
}
},
"jest-get-type": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz",
- "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
+ "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
"dev": true
},
"jest-haste-map": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz",
- "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
"requires": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"fsevents": "^2.3.2",
"graceful-fs": "^4.2.9",
- "jest-regex-util": "^29.4.3",
- "jest-util": "^29.5.0",
- "jest-worker": "^29.5.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -34050,9 +34746,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -34061,51 +34757,51 @@
}
},
"jest-leak-detector": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz",
- "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
+ "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
"dev": true,
"requires": {
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
}
},
"jest-matcher-utils": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz",
- "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
+ "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
- "jest-diff": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
}
},
"jest-message-util": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz",
- "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
- "pretty-format": "^29.5.0",
+ "pretty-format": "^29.7.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -34114,9 +34810,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -34125,23 +34821,23 @@
}
},
"jest-mock": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz",
- "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
+ "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
"dev": true,
"requires": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
- "jest-util": "^29.5.0"
+ "jest-util": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -34150,9 +34846,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -34168,74 +34864,74 @@
"requires": {}
},
"jest-regex-util": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz",
- "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true
},
"jest-resolve": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz",
- "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
+ "jest-haste-map": "^29.7.0",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
"resolve": "^1.20.0",
"resolve.exports": "^2.0.0",
"slash": "^3.0.0"
}
},
"jest-resolve-dependencies": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz",
- "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
+ "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
"dev": true,
"requires": {
- "jest-regex-util": "^29.4.3",
- "jest-snapshot": "^29.5.0"
+ "jest-regex-util": "^29.6.3",
+ "jest-snapshot": "^29.7.0"
}
},
"jest-runner": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz",
- "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
+ "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
"dev": true,
"requires": {
- "@jest/console": "^29.5.0",
- "@jest/environment": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/console": "^29.7.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"emittery": "^0.13.1",
"graceful-fs": "^4.2.9",
- "jest-docblock": "^29.4.3",
- "jest-environment-node": "^29.5.0",
- "jest-haste-map": "^29.5.0",
- "jest-leak-detector": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-resolve": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-watcher": "^29.5.0",
- "jest-worker": "^29.5.0",
+ "jest-docblock": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-leak-detector": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-resolve": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "jest-worker": "^29.7.0",
"p-limit": "^3.1.0",
"source-map-support": "0.5.13"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -34244,9 +34940,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -34265,42 +34961,42 @@
}
},
"jest-runtime": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz",
- "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
+ "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
"dev": true,
"requires": {
- "@jest/environment": "^29.5.0",
- "@jest/fake-timers": "^29.5.0",
- "@jest/globals": "^29.5.0",
- "@jest/source-map": "^29.4.3",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/globals": "^29.7.0",
+ "@jest/source-map": "^29.6.3",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"cjs-module-lexer": "^1.0.0",
"collect-v8-coverage": "^1.0.0",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-mock": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
"slash": "^3.0.0",
"strip-bom": "^4.0.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -34309,9 +35005,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -34320,43 +35016,40 @@
}
},
"jest-snapshot": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz",
- "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
+ "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
"dev": true,
"requires": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
"@babel/plugin-syntax-jsx": "^7.7.2",
"@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/traverse": "^7.7.2",
"@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/babel__traverse": "^7.0.6",
- "@types/prettier": "^2.1.5",
+ "@jest/expect-utils": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^29.5.0",
+ "expect": "^29.7.0",
"graceful-fs": "^4.2.9",
- "jest-diff": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
"natural-compare": "^1.4.0",
- "pretty-format": "^29.5.0",
- "semver": "^7.3.5"
+ "pretty-format": "^29.7.0",
+ "semver": "^7.5.3"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -34365,18 +35058,18 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
}
},
"semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
@@ -34385,12 +35078,12 @@
}
},
"jest-util": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz",
- "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"requires": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -34399,12 +35092,12 @@
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -34413,9 +35106,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -34424,26 +35117,26 @@
}
},
"jest-validate": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz",
- "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
"requires": {
- "@jest/types": "^29.5.0",
+ "@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^29.4.3",
+ "jest-get-type": "^29.6.3",
"leven": "^3.1.0",
- "pretty-format": "^29.5.0"
+ "pretty-format": "^29.7.0"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -34452,9 +35145,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -34469,28 +35162,28 @@
}
},
"jest-watcher": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz",
- "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
+ "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
"dev": true,
"requires": {
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"emittery": "^0.13.1",
- "jest-util": "^29.5.0",
+ "jest-util": "^29.7.0",
"string-length": "^4.0.1"
},
"dependencies": {
"@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
@@ -34499,9 +35192,9 @@
}
},
"@types/yargs": {
- "version": "17.0.22",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz",
- "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==",
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -34510,13 +35203,13 @@
}
},
"jest-worker": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz",
- "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
"requires": {
"@types/node": "*",
- "jest-util": "^29.5.0",
+ "jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
@@ -34533,16 +35226,14 @@
}
},
"jiti": {
- "version": "1.18.2",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz",
- "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg=="
- },
- "js-sdsl": {
- "version": "4.1.4",
- "dev": true
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
+ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q=="
},
"js-tokens": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true
},
"js-yaml": {
@@ -34640,120 +35331,116 @@
},
"levn": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
"requires": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
- },
- "dependencies": {
- "prelude-ls": {
- "version": "1.2.1",
- "dev": true
- },
- "type-check": {
- "version": "0.4.0",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- }
}
},
"lightningcss": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.18.0.tgz",
- "integrity": "sha512-uk10tNxi5fhZqU93vtYiQgx/8a9f0Kvtj5AXIm+VlOXY+t/DWDmCZWJEkZJmmALgvbS6aAW8or+Kq85eJ6TDTw==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.22.1.tgz",
+ "integrity": "sha512-Fy45PhibiNXkm0cK5FJCbfO8Y6jUpD/YcHf/BtuI+jvYYqSXKF4muk61jjE8YxCR9y+hDYIWSzHTc+bwhDE6rQ==",
"requires": {
"detect-libc": "^1.0.3",
- "lightningcss-darwin-arm64": "1.18.0",
- "lightningcss-darwin-x64": "1.18.0",
- "lightningcss-linux-arm-gnueabihf": "1.18.0",
- "lightningcss-linux-arm64-gnu": "1.18.0",
- "lightningcss-linux-arm64-musl": "1.18.0",
- "lightningcss-linux-x64-gnu": "1.18.0",
- "lightningcss-linux-x64-musl": "1.18.0",
- "lightningcss-win32-x64-msvc": "1.18.0"
+ "lightningcss-darwin-arm64": "1.22.1",
+ "lightningcss-darwin-x64": "1.22.1",
+ "lightningcss-freebsd-x64": "1.22.1",
+ "lightningcss-linux-arm-gnueabihf": "1.22.1",
+ "lightningcss-linux-arm64-gnu": "1.22.1",
+ "lightningcss-linux-arm64-musl": "1.22.1",
+ "lightningcss-linux-x64-gnu": "1.22.1",
+ "lightningcss-linux-x64-musl": "1.22.1",
+ "lightningcss-win32-x64-msvc": "1.22.1"
}
},
"lightningcss-darwin-arm64": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.18.0.tgz",
- "integrity": "sha512-OqjydwtiNPgdH1ByIjA1YzqvDG/OMR6L3LPN6wRl1729LB0y4Mik7L06kmZaTb+pvUHr+NmDd2KCwnlrQ4zO3w==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.22.1.tgz",
+ "integrity": "sha512-ldvElu+R0QimNTjsKpaZkUv3zf+uefzLy/R1R19jtgOfSRM+zjUCUgDhfEDRmVqJtMwYsdhMI2aJtJChPC6Osg==",
"optional": true
},
"lightningcss-darwin-x64": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.18.0.tgz",
- "integrity": "sha512-mNiuPHj89/JHZmJMp+5H8EZSt6EL5DZRWJ31O6k3DrLLnRIQjXuXdDdN8kP7LoIkeWI5xvyD60CsReJm+YWYAw==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.22.1.tgz",
+ "integrity": "sha512-5p2rnlVTv6Gpw4PlTLq925nTVh+HFh4MpegX8dPDYJae+NFVjQ67gY7O6iHIzQjLipDiYejFF0yHrhjU3XgLBQ==",
+ "optional": true
+ },
+ "lightningcss-freebsd-x64": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.22.1.tgz",
+ "integrity": "sha512-1FaBtcFrZqB2hkFbAxY//Pnp8koThvyB6AhjbdVqKD4/pu13Rl91fKt2N9qyeQPUt3xy7ORUvSO+dPk3J6EjXg==",
"optional": true
},
"lightningcss-linux-arm-gnueabihf": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.18.0.tgz",
- "integrity": "sha512-S+25JjI6601HiAVoTDXW6SqH+E94a+FHA7WQqseyNHunOgVWKcAkNEc2LJvVxgwTq6z41sDIb9/M3Z9wa9lk4A==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.22.1.tgz",
+ "integrity": "sha512-6rub98tYGfE5I5j0BP8t/2d4BZyu1S7Iz9vUkm0H26snAFHYxLfj3RbQn0xHHIePSetjLnhcg3QlfwUAkD/FYg==",
"optional": true
},
"lightningcss-linux-arm64-gnu": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.18.0.tgz",
- "integrity": "sha512-JSqh4+21dCgBecIQUet35dtE4PhhSEMyqe3y0ZNQrAJQ5kyUPSQHiw81WXnPJcOSTTpG0TyMLiC8K//+BsFGQA==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.22.1.tgz",
+ "integrity": "sha512-nYO5qGtb/1kkTZu3FeTiM+2B2TAb7m2DkLCTgQIs2bk2o9aEs7I96fwySKcoHWQAiQDGR9sMux9vkV4KQXqPaQ==",
"optional": true
},
"lightningcss-linux-arm64-musl": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.18.0.tgz",
- "integrity": "sha512-2FWHa8iUhShnZnqhn2wfIcK5adJat9hAAaX7etNsoXJymlliDIOFuBQEsba2KBAZSM4QqfQtvRdR7m8i0I7ybQ==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.22.1.tgz",
+ "integrity": "sha512-MCV6RuRpzXbunvzwY644iz8cw4oQxvW7oer9xPkdadYqlEyiJJ6wl7FyJOH7Q6ZYH4yjGAUCvxDBxPbnDu9ZVg==",
"optional": true
},
"lightningcss-linux-x64-gnu": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.18.0.tgz",
- "integrity": "sha512-plCPGQJtDZHcLVKVRLnQVF2XRsIC32WvuJhQ7fJ7F6BV98b/VZX0OlX05qUaOESD9dCDHjYSfxsgcvOKgCWh7A==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.22.1.tgz",
+ "integrity": "sha512-RjNgpdM20VUXgV7us/VmlO3Vn2ZRiDnc3/bUxCVvySZWPiVPprpqW/QDWuzkGa+NCUf6saAM5CLsZLSxncXJwg==",
"optional": true
},
"lightningcss-linux-x64-musl": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.18.0.tgz",
- "integrity": "sha512-na+BGtVU6fpZvOHKhnlA0XHeibkT3/46nj6vLluG3kzdJYoBKU6dIl7DSOk++8jv4ybZyFJ0aOFMMSc8g2h58A==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.22.1.tgz",
+ "integrity": "sha512-ZgO4C7Rd6Hv/5MnyY2KxOYmIlzk4rplVolDt3NbkNR8DndnyX0Q5IR4acJWNTBICQ21j3zySzKbcJaiJpk/4YA==",
"optional": true
},
"lightningcss-win32-x64-msvc": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.18.0.tgz",
- "integrity": "sha512-5qeAH4RMNy2yMNEl7e5TI6upt/7xD2ZpHWH4RkT8iJ7/6POS5mjHbXWUO9Q1hhDhqkdzGa76uAdMzEouIeCyNw==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.22.1.tgz",
+ "integrity": "sha512-4pozV4eyD0MDET41ZLHAeBo+H04Nm2UEYIk5w/ts40231dRFV7E0cjwbnZvSoc1DXFgecAhiC0L16ruv/ZDCpg==",
"optional": true
},
"lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
+ "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g=="
},
"lines-and-columns": {
"version": "1.2.4"
},
"lmdb": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.5.2.tgz",
- "integrity": "sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==",
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.8.5.tgz",
+ "integrity": "sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==",
"dev": true,
"requires": {
- "@lmdb/lmdb-darwin-arm64": "2.5.2",
- "@lmdb/lmdb-darwin-x64": "2.5.2",
- "@lmdb/lmdb-linux-arm": "2.5.2",
- "@lmdb/lmdb-linux-arm64": "2.5.2",
- "@lmdb/lmdb-linux-x64": "2.5.2",
- "@lmdb/lmdb-win32-x64": "2.5.2",
- "msgpackr": "^1.5.4",
- "node-addon-api": "^4.3.0",
- "node-gyp-build-optional-packages": "5.0.3",
- "ordered-binary": "^1.2.4",
+ "@lmdb/lmdb-darwin-arm64": "2.8.5",
+ "@lmdb/lmdb-darwin-x64": "2.8.5",
+ "@lmdb/lmdb-linux-arm": "2.8.5",
+ "@lmdb/lmdb-linux-arm64": "2.8.5",
+ "@lmdb/lmdb-linux-x64": "2.8.5",
+ "@lmdb/lmdb-win32-x64": "2.8.5",
+ "msgpackr": "^1.9.5",
+ "node-addon-api": "^6.1.0",
+ "node-gyp-build-optional-packages": "5.1.1",
+ "ordered-binary": "^1.4.1",
"weak-lru-cache": "^1.2.2"
},
"dependencies": {
"node-addon-api": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
- "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
+ "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==",
"dev": true
}
}
@@ -34826,12 +35513,23 @@
}
},
"make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
"requires": {
- "semver": "^6.0.0"
+ "semver": "^7.5.3"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
}
},
"make-error": {
@@ -34880,7 +35578,9 @@
"version": "2.0.30",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
- "dev": true
+ "dev": true,
+ "optional": true,
+ "peer": true
},
"memory-fs": {
"version": "0.4.1",
@@ -35101,28 +35801,37 @@
"dev": true
},
"msgpackr": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.2.tgz",
- "integrity": "sha512-eLuPeok0DMwsGN23AvuVg32mYpx55tsQnxI87d8V1yZsdT8U5jrWhmCa1INO/joGAFQFfo/eTlM/BxVwLKbBOQ==",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.10.0.tgz",
+ "integrity": "sha512-rVQ5YAQDoZKZLX+h8tNq7FiHrPJoeGHViz3U4wIcykhAEpwF/nH2Vbk8dQxmpX5JavkI8C7pt4bnkJ02ZmRoUw==",
"dev": true,
"requires": {
- "msgpackr-extract": "^2.2.0"
+ "msgpackr-extract": "^3.0.2"
}
},
"msgpackr-extract": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-2.2.0.tgz",
- "integrity": "sha512-0YcvWSv7ZOGl9Od6Y5iJ3XnPww8O7WLcpYMDwX+PAA/uXLDtyw94PJv9GLQV/nnp3cWlDhMoyKZIQLrx33sWog==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz",
+ "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==",
"dev": true,
"optional": true,
"requires": {
- "@msgpackr-extract/msgpackr-extract-darwin-arm64": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-darwin-x64": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-linux-arm": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-linux-arm64": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-linux-x64": "2.2.0",
- "@msgpackr-extract/msgpackr-extract-win32-x64": "2.2.0",
- "node-gyp-build-optional-packages": "5.0.3"
+ "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2",
+ "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2",
+ "node-gyp-build-optional-packages": "5.0.7"
+ },
+ "dependencies": {
+ "node-gyp-build-optional-packages": {
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz",
+ "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==",
+ "dev": true,
+ "optional": true
+ }
}
},
"mz": {
@@ -35177,9 +35886,9 @@
"dev": true
},
"node-addon-api": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
- "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz",
+ "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==",
"dev": true
},
"node-fetch": {
@@ -35191,17 +35900,22 @@
"whatwg-url": "^5.0.0"
}
},
- "node-gyp-build": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
- "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
- "dev": true
- },
"node-gyp-build-optional-packages": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz",
- "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==",
- "dev": true
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz",
+ "integrity": "sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==",
+ "dev": true,
+ "requires": {
+ "detect-libc": "^2.0.1"
+ },
+ "dependencies": {
+ "detect-libc": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
+ "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
+ "dev": true
+ }
+ }
},
"node-int64": {
"version": "0.4.0",
@@ -35260,17 +35974,13 @@
}
},
"node-releases": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
- "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w=="
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ=="
},
"normalize-path": {
"version": "3.0.0"
},
- "normalize-range": {
- "version": "0.1.2",
- "dev": true
- },
"normalize-url": {
"version": "6.1.0",
"dev": true
@@ -35407,34 +36117,23 @@
}
},
"optionator": {
- "version": "0.9.1",
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
"dev": true,
"requires": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
- },
- "dependencies": {
- "prelude-ls": {
- "version": "1.2.1",
- "dev": true
- },
- "type-check": {
- "version": "0.4.0",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- }
+ "type-check": "^0.4.0"
}
},
"ordered-binary": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.0.tgz",
- "integrity": "sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz",
+ "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==",
"dev": true
},
"os-browserify": {
@@ -35528,25 +36227,25 @@
}
},
"parcel": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.8.3.tgz",
- "integrity": "sha512-5rMBpbNE72g6jZvkdR5gS2nyhwIXaJy8i65osOqs/+5b7zgf3eMKgjSsDrv6bhz3gzifsba6MBJiZdBckl+vnA==",
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.10.3.tgz",
+ "integrity": "sha512-Ocx33N4ZVnotJTALhMZ0AqPIE9UN5uP6jjA+lYJ4FlEYuYYZsvOQXZQgeMa62pFj6jrOHWh7ho8uJhRdTNwVyg==",
"dev": true,
"requires": {
- "@parcel/config-default": "2.8.3",
- "@parcel/core": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/events": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/package-manager": "2.8.3",
- "@parcel/reporter-cli": "2.8.3",
- "@parcel/reporter-dev-server": "2.8.3",
- "@parcel/utils": "2.8.3",
+ "@parcel/config-default": "2.10.3",
+ "@parcel/core": "2.10.3",
+ "@parcel/diagnostic": "2.10.3",
+ "@parcel/events": "2.10.3",
+ "@parcel/fs": "2.10.3",
+ "@parcel/logger": "2.10.3",
+ "@parcel/package-manager": "2.10.3",
+ "@parcel/reporter-cli": "2.10.3",
+ "@parcel/reporter-dev-server": "2.10.3",
+ "@parcel/reporter-tracer": "2.10.3",
+ "@parcel/utils": "2.10.3",
"chalk": "^4.1.0",
"commander": "^7.0.0",
- "get-port": "^4.2.0",
- "v8-compile-cache": "^2.0.0"
+ "get-port": "^4.2.0"
}
},
"parent-module": {
@@ -35683,9 +36382,9 @@
"dev": true
},
"postcss": {
- "version": "8.4.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz",
- "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==",
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
"requires": {
"nanoid": "^3.3.6",
"picocolors": "^1.0.0",
@@ -35730,56 +36429,6 @@
}
}
},
- "postcss-colormin": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz",
- "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "colord": "^2.9.1",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-convert-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz",
- "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-discard-comments": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz",
- "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==",
- "dev": true,
- "requires": {}
- },
- "postcss-discard-duplicates": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz",
- "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==",
- "dev": true,
- "requires": {}
- },
- "postcss-discard-empty": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz",
- "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==",
- "dev": true,
- "requires": {}
- },
- "postcss-discard-overridden": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz",
- "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==",
- "dev": true,
- "requires": {}
- },
"postcss-import": {
"version": "15.1.0",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
@@ -35799,18 +36448,18 @@
}
},
"postcss-load-config": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
- "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
"requires": {
- "lilconfig": "^2.0.5",
- "yaml": "^2.1.1"
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
},
"dependencies": {
"yaml": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
- "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA=="
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
+ "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA=="
}
}
},
@@ -35849,68 +36498,6 @@
}
}
},
- "postcss-merge-longhand": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz",
- "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0",
- "stylehacks": "^6.0.0"
- }
- },
- "postcss-merge-rules": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.0.tgz",
- "integrity": "sha512-rCXkklftzEkniyv3f4mRCQzxD6oE4Quyh61uyWTUbCJ26Pv2hoz+fivJSsSBWxDBeScR4fKCfF3HHTcD7Ybqnw==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "cssnano-utils": "^4.0.0",
- "postcss-selector-parser": "^6.0.5"
- }
- },
- "postcss-minify-font-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz",
- "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-minify-gradients": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz",
- "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==",
- "dev": true,
- "requires": {
- "colord": "^2.9.1",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-minify-params": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz",
- "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-minify-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz",
- "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==",
- "dev": true,
- "requires": {
- "postcss-selector-parser": "^6.0.5"
- }
- },
"postcss-modules": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz",
@@ -35971,115 +36558,6 @@
"postcss-selector-parser": "^6.0.11"
}
},
- "postcss-normalize-charset": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz",
- "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==",
- "dev": true,
- "requires": {}
- },
- "postcss-normalize-display-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz",
- "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-positions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz",
- "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-repeat-style": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz",
- "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-string": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz",
- "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-timing-functions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz",
- "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-unicode": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz",
- "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-url": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz",
- "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-whitespace": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz",
- "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-ordered-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz",
- "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==",
- "dev": true,
- "requires": {
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-reduce-initial": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz",
- "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0"
- }
- },
- "postcss-reduce-transforms": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz",
- "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
"postcss-reporter": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz",
@@ -36091,31 +36569,14 @@
}
},
"postcss-selector-parser": {
- "version": "6.0.11",
+ "version": "6.0.12",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.12.tgz",
+ "integrity": "sha512-NdxGCAZdRrwVI1sy59+Wzrh+pMMHxapGnpfenDVlMEXoOcvt4pGE0JLK9YY2F5dLxcFYA/YbVQKhcGU+FtSYQg==",
"requires": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
}
},
- "postcss-svgo": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz",
- "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0",
- "svgo": "^3.0.2"
- }
- },
- "postcss-unique-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz",
- "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==",
- "dev": true,
- "requires": {
- "postcss-selector-parser": "^6.0.5"
- }
- },
"postcss-value-parser": {
"version": "4.2.0"
},
@@ -36158,6 +36619,12 @@
"is-json": "^2.0.1"
}
},
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
"prettier": {
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
@@ -36172,12 +36639,12 @@
}
},
"pretty-format": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
- "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.4.3",
+ "@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
@@ -36298,9 +36765,9 @@
"dev": true
},
"pure-rand": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.1.tgz",
- "integrity": "sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz",
+ "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==",
"dev": true
},
"querystring": {
@@ -36461,11 +36928,11 @@
"dev": true
},
"resolve": {
- "version": "1.22.2",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
- "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"requires": {
- "is-core-module": "^2.11.0",
+ "is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
}
@@ -36494,9 +36961,9 @@
"dev": true
},
"resolve.exports": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.1.tgz",
- "integrity": "sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
+ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
"dev": true
},
"responselike": {
@@ -36570,11 +37037,23 @@
}
},
"rollup": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.0.tgz",
- "integrity": "sha512-ANPhVcyeHvYdQMUyCbczy33nbLzI7RzrBje4uvNiTDJGIMtlKoOStmympwr9OtS1LZxiDmE2wvxHyVhoLtf1KQ==",
+ "version": "4.5.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.5.1.tgz",
+ "integrity": "sha512-0EQribZoPKpb5z1NW/QYm3XSR//Xr8BeEXU49Lc/mQmpmVVG5jPUVrpc2iptup/0WMrY9mzas0fxH+TjYvG2CA==",
"dev": true,
"requires": {
+ "@rollup/rollup-android-arm-eabi": "4.5.1",
+ "@rollup/rollup-android-arm64": "4.5.1",
+ "@rollup/rollup-darwin-arm64": "4.5.1",
+ "@rollup/rollup-darwin-x64": "4.5.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.5.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.5.1",
+ "@rollup/rollup-linux-arm64-musl": "4.5.1",
+ "@rollup/rollup-linux-x64-gnu": "4.5.1",
+ "@rollup/rollup-linux-x64-musl": "4.5.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.5.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.5.1",
+ "@rollup/rollup-win32-x64-msvc": "4.5.1",
"fsevents": "~2.3.2"
}
},
@@ -36686,6 +37165,12 @@
"css-tree": "^1.1.2"
}
},
+ "lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "dev": true
+ },
"mdn-data": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
@@ -37035,9 +37520,9 @@
"dev": true
},
"sass": {
- "version": "1.62.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.0.tgz",
- "integrity": "sha512-Q4USplo4pLYgCi+XlipZCWUQz5pkg/ruSSgJ0WRDSb/+3z9tXUOkQ7QPYn4XrhZKYAK4HlpaQecRwKLJX6+DBg==",
+ "version": "1.69.5",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz",
+ "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==",
"dev": true,
"requires": {
"chokidar": ">=3.0.0 <4.0.0",
@@ -37652,20 +38137,10 @@
"integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==",
"dev": true
},
- "stylehacks": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz",
- "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "postcss-selector-parser": "^6.0.4"
- }
- },
"sucrase": {
- "version": "3.32.0",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz",
- "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==",
+ "version": "3.34.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz",
+ "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==",
"requires": {
"@jridgewell/gen-mapping": "^0.3.2",
"commander": "^4.0.0",
@@ -37676,16 +38151,6 @@
"ts-interface-checker": "^0.1.9"
},
"dependencies": {
- "@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
"commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
@@ -37704,16 +38169,19 @@
"version": "1.0.0"
},
"svgo": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
- "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.4.tgz",
+ "integrity": "sha512-T+Xul3JwuJ6VGXKo/p2ndqx1ibxNKnLTvRc1ZTWKCfyKS/GgNjRZcYsK84fxTsy/izr91g/Rwx6fGnVgaFSI5g==",
"dev": true,
+ "optional": true,
+ "peer": true,
"requires": {
"@trysound/sax": "0.2.0",
"commander": "^7.2.0",
"css-select": "^5.1.0",
"css-tree": "^2.2.1",
- "csso": "^5.0.5",
+ "css-what": "^6.1.0",
+ "csso": "5.0.5",
"picocolors": "^1.0.0"
}
},
@@ -38010,61 +38478,70 @@
"dev": true
},
"turbo": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.9.3.tgz",
- "integrity": "sha512-ID7mxmaLUPKG/hVkp+h0VuucB1U99RPCJD9cEuSEOdIPoSIuomcIClEJtKamUsdPLhLCud+BvapBNnhgh58Nzw==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.10.16.tgz",
+ "integrity": "sha512-2CEaK4FIuSZiP83iFa9GqMTQhroW2QryckVqUydmg4tx78baftTOS0O+oDAhvo9r9Nit4xUEtC1RAHoqs6ZEtg==",
"dev": true,
"requires": {
- "turbo-darwin-64": "1.9.3",
- "turbo-darwin-arm64": "1.9.3",
- "turbo-linux-64": "1.9.3",
- "turbo-linux-arm64": "1.9.3",
- "turbo-windows-64": "1.9.3",
- "turbo-windows-arm64": "1.9.3"
+ "turbo-darwin-64": "1.10.16",
+ "turbo-darwin-arm64": "1.10.16",
+ "turbo-linux-64": "1.10.16",
+ "turbo-linux-arm64": "1.10.16",
+ "turbo-windows-64": "1.10.16",
+ "turbo-windows-arm64": "1.10.16"
}
},
"turbo-darwin-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.9.3.tgz",
- "integrity": "sha512-0dFc2cWXl82kRE4Z+QqPHhbEFEpUZho1msHXHWbz5+PqLxn8FY0lEVOHkq5tgKNNEd5KnGyj33gC/bHhpZOk5g==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.10.16.tgz",
+ "integrity": "sha512-+Jk91FNcp9e9NCLYlvDDlp2HwEDp14F9N42IoW3dmHI5ZkGSXzalbhVcrx3DOox3QfiNUHxzWg4d7CnVNCuuMg==",
"dev": true,
"optional": true
},
"turbo-darwin-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.9.3.tgz",
- "integrity": "sha512-1cYbjqLBA2zYE1nbf/qVnEkrHa4PkJJbLo7hnuMuGM0bPzh4+AnTNe98gELhqI1mkTWBu/XAEeF5u6dgz0jLNA==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.10.16.tgz",
+ "integrity": "sha512-jqGpFZipIivkRp/i+jnL8npX0VssE6IAVNKtu573LXtssZdV/S+fRGYA16tI46xJGxSAivrZ/IcgZrV6Jk80bw==",
"dev": true,
"optional": true
},
"turbo-linux-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.9.3.tgz",
- "integrity": "sha512-UuBPFefawEwpuxh5pM9Jqq3q4C8M0vYxVYlB3qea/nHQ80pxYq7ZcaLGEpb10SGnr3oMUUs1zZvkXWDNKCJb8Q==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.10.16.tgz",
+ "integrity": "sha512-PpqEZHwLoizQ6sTUvmImcRmACyRk9EWLXGlqceogPZsJ1jTRK3sfcF9fC2W56zkSIzuLEP07k5kl+ZxJd8JMcg==",
"dev": true,
"optional": true
},
"turbo-linux-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.9.3.tgz",
- "integrity": "sha512-vUrNGa3hyDtRh9W0MkO+l1dzP8Co2gKnOVmlJQW0hdpOlWlIh22nHNGGlICg+xFa2f9j4PbQlWTsc22c019s8Q==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.10.16.tgz",
+ "integrity": "sha512-TMjFYz8to1QE0fKVXCIvG/4giyfnmqcQIwjdNfJvKjBxn22PpbjeuFuQ5kNXshUTRaTJihFbuuCcb5OYFNx4uw==",
"dev": true,
"optional": true
},
"turbo-windows-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.9.3.tgz",
- "integrity": "sha512-0BZ7YaHs6r+K4ksqWus1GKK3W45DuDqlmfjm/yuUbTEVc8szmMCs12vugU2Zi5GdrdJSYfoKfEJ/PeegSLIQGQ==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.10.16.tgz",
+ "integrity": "sha512-+jsf68krs0N66FfC4/zZvioUap/Tq3sPFumnMV+EBo8jFdqs4yehd6+MxIwYTjSQLIcpH8KoNMB0gQYhJRLZzw==",
"dev": true,
"optional": true
},
"turbo-windows-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.9.3.tgz",
- "integrity": "sha512-QJUYLSsxdXOsR1TquiOmLdAgtYcQ/RuSRpScGvnZb1hY0oLc7JWU0llkYB81wVtWs469y8H9O0cxbKwCZGR4RQ==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.10.16.tgz",
+ "integrity": "sha512-sKm3hcMM1bl0B3PLG4ifidicOGfoJmOEacM5JtgBkYM48ncMHjkHfFY7HrJHZHUnXM4l05RQTpLFoOl/uIo2HQ==",
"dev": true,
"optional": true
},
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
"type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
@@ -38088,6 +38565,12 @@
"devOptional": true,
"peer": true
},
+ "undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "devOptional": true
+ },
"union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -38180,7 +38663,9 @@
"optional": true
},
"update-browserslist-db": {
- "version": "1.0.10",
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+ "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
"requires": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
@@ -38249,12 +38734,6 @@
"integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==",
"dev": true
},
- "v8-compile-cache": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
- "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
- "dev": true
- },
"v8-compile-cache-lib": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
@@ -38282,15 +38761,15 @@
}
},
"vite": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.2.tgz",
- "integrity": "sha512-9R53Mf+TBoXCYejcL+qFbZde+eZveQLDYd9XgULILLC1a5ZwPaqgmdVpL8/uvw2BM/1TzetWjglwm+3RO+xTyw==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.2.tgz",
+ "integrity": "sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==",
"dev": true,
"requires": {
- "esbuild": "^0.17.5",
- "fsevents": "~2.3.2",
- "postcss": "^8.4.21",
- "rollup": "^3.21.0"
+ "esbuild": "^0.19.3",
+ "fsevents": "~2.3.3",
+ "postcss": "^8.4.31",
+ "rollup": "^4.2.0"
}
},
"vm-browserify": {
@@ -38820,10 +39299,6 @@
"integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
"dev": true
},
- "word-wrap": {
- "version": "1.2.3",
- "dev": true
- },
"worker-farm": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
@@ -38861,12 +39336,6 @@
"version": "4.0.2",
"dev": true
},
- "xxhash-wasm": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz",
- "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==",
- "dev": true
- },
"y18n": {
"version": "5.0.8",
"dev": true
@@ -39206,61 +39675,70 @@
"dev": true
},
"turbo": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.9.3.tgz",
- "integrity": "sha512-ID7mxmaLUPKG/hVkp+h0VuucB1U99RPCJD9cEuSEOdIPoSIuomcIClEJtKamUsdPLhLCud+BvapBNnhgh58Nzw==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.10.16.tgz",
+ "integrity": "sha512-2CEaK4FIuSZiP83iFa9GqMTQhroW2QryckVqUydmg4tx78baftTOS0O+oDAhvo9r9Nit4xUEtC1RAHoqs6ZEtg==",
"dev": true,
"requires": {
- "turbo-darwin-64": "1.9.3",
- "turbo-darwin-arm64": "1.9.3",
- "turbo-linux-64": "1.9.3",
- "turbo-linux-arm64": "1.9.3",
- "turbo-windows-64": "1.9.3",
- "turbo-windows-arm64": "1.9.3"
+ "turbo-darwin-64": "1.10.16",
+ "turbo-darwin-arm64": "1.10.16",
+ "turbo-linux-64": "1.10.16",
+ "turbo-linux-arm64": "1.10.16",
+ "turbo-windows-64": "1.10.16",
+ "turbo-windows-arm64": "1.10.16"
}
},
"turbo-darwin-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.9.3.tgz",
- "integrity": "sha512-0dFc2cWXl82kRE4Z+QqPHhbEFEpUZho1msHXHWbz5+PqLxn8FY0lEVOHkq5tgKNNEd5KnGyj33gC/bHhpZOk5g==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.10.16.tgz",
+ "integrity": "sha512-+Jk91FNcp9e9NCLYlvDDlp2HwEDp14F9N42IoW3dmHI5ZkGSXzalbhVcrx3DOox3QfiNUHxzWg4d7CnVNCuuMg==",
"dev": true,
"optional": true
},
"turbo-darwin-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.9.3.tgz",
- "integrity": "sha512-1cYbjqLBA2zYE1nbf/qVnEkrHa4PkJJbLo7hnuMuGM0bPzh4+AnTNe98gELhqI1mkTWBu/XAEeF5u6dgz0jLNA==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.10.16.tgz",
+ "integrity": "sha512-jqGpFZipIivkRp/i+jnL8npX0VssE6IAVNKtu573LXtssZdV/S+fRGYA16tI46xJGxSAivrZ/IcgZrV6Jk80bw==",
"dev": true,
"optional": true
},
"turbo-linux-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.9.3.tgz",
- "integrity": "sha512-UuBPFefawEwpuxh5pM9Jqq3q4C8M0vYxVYlB3qea/nHQ80pxYq7ZcaLGEpb10SGnr3oMUUs1zZvkXWDNKCJb8Q==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.10.16.tgz",
+ "integrity": "sha512-PpqEZHwLoizQ6sTUvmImcRmACyRk9EWLXGlqceogPZsJ1jTRK3sfcF9fC2W56zkSIzuLEP07k5kl+ZxJd8JMcg==",
"dev": true,
"optional": true
},
"turbo-linux-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.9.3.tgz",
- "integrity": "sha512-vUrNGa3hyDtRh9W0MkO+l1dzP8Co2gKnOVmlJQW0hdpOlWlIh22nHNGGlICg+xFa2f9j4PbQlWTsc22c019s8Q==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.10.16.tgz",
+ "integrity": "sha512-TMjFYz8to1QE0fKVXCIvG/4giyfnmqcQIwjdNfJvKjBxn22PpbjeuFuQ5kNXshUTRaTJihFbuuCcb5OYFNx4uw==",
"dev": true,
"optional": true
},
"turbo-windows-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.9.3.tgz",
- "integrity": "sha512-0BZ7YaHs6r+K4ksqWus1GKK3W45DuDqlmfjm/yuUbTEVc8szmMCs12vugU2Zi5GdrdJSYfoKfEJ/PeegSLIQGQ==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.10.16.tgz",
+ "integrity": "sha512-+jsf68krs0N66FfC4/zZvioUap/Tq3sPFumnMV+EBo8jFdqs4yehd6+MxIwYTjSQLIcpH8KoNMB0gQYhJRLZzw==",
"dev": true,
"optional": true
},
"turbo-windows-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.9.3.tgz",
- "integrity": "sha512-QJUYLSsxdXOsR1TquiOmLdAgtYcQ/RuSRpScGvnZb1hY0oLc7JWU0llkYB81wVtWs469y8H9O0cxbKwCZGR4RQ==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.10.16.tgz",
+ "integrity": "sha512-sKm3hcMM1bl0B3PLG4ifidicOGfoJmOEacM5JtgBkYM48ncMHjkHfFY7HrJHZHUnXM4l05RQTpLFoOl/uIo2HQ==",
"dev": true,
"optional": true
},
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
"type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
@@ -39284,6 +39762,12 @@
"devOptional": true,
"peer": true
},
+ "undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "devOptional": true
+ },
"union-value": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -39376,7 +39860,9 @@
"optional": true
},
"update-browserslist-db": {
- "version": "1.0.10",
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+ "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
"requires": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
@@ -39445,12 +39931,6 @@
"integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==",
"dev": true
},
- "v8-compile-cache": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
- "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
- "dev": true
- },
"v8-compile-cache-lib": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
@@ -39478,15 +39958,15 @@
}
},
"vite": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.2.tgz",
- "integrity": "sha512-9R53Mf+TBoXCYejcL+qFbZde+eZveQLDYd9XgULILLC1a5ZwPaqgmdVpL8/uvw2BM/1TzetWjglwm+3RO+xTyw==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.2.tgz",
+ "integrity": "sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==",
"dev": true,
"requires": {
- "esbuild": "^0.17.5",
- "fsevents": "~2.3.2",
- "postcss": "^8.4.21",
- "rollup": "^3.21.0"
+ "esbuild": "^0.19.3",
+ "fsevents": "~2.3.3",
+ "postcss": "^8.4.31",
+ "rollup": "^4.2.0"
}
},
"vm-browserify": {
@@ -40016,10 +40496,6 @@
"integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
"dev": true
},
- "word-wrap": {
- "version": "1.2.3",
- "dev": true
- },
"worker-farm": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
@@ -40057,12 +40533,6 @@
"version": "4.0.2",
"dev": true
},
- "xxhash-wasm": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz",
- "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==",
- "dev": true
- },
"y18n": {
"version": "5.0.8",
"dev": true
diff --git a/package-lock.stable.json b/package-lock.stable.json
deleted file mode 100644
index a80b9c55c..000000000
--- a/package-lock.stable.json
+++ /dev/null
@@ -1,13998 +0,0 @@
-{
- "name": "tailwindcss",
- "version": "3.3.2",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "name": "tailwindcss",
- "version": "3.3.2",
- "license": "MIT",
- "dependencies": {
- "@alloc/quick-lru": "^5.2.0",
- "arg": "^5.0.2",
- "chokidar": "^3.5.3",
- "didyoumean": "^1.2.2",
- "dlv": "^1.1.3",
- "fast-glob": "^3.2.12",
- "glob-parent": "^6.0.2",
- "is-glob": "^4.0.3",
- "jiti": "^1.18.2",
- "lilconfig": "^2.1.0",
- "micromatch": "^4.0.5",
- "normalize-path": "^3.0.0",
- "object-hash": "^3.0.0",
- "picocolors": "^1.0.0",
- "postcss": "^8.4.23",
- "postcss-import": "^15.1.0",
- "postcss-js": "^4.0.1",
- "postcss-load-config": "^4.0.1",
- "postcss-nested": "^6.0.1",
- "postcss-selector-parser": "^6.0.11",
- "postcss-value-parser": "^4.2.0",
- "resolve": "^1.22.2",
- "sucrase": "^3.32.0"
- },
- "bin": {
- "tailwind": "lib/cli.js",
- "tailwindcss": "lib/cli.js"
- },
- "devDependencies": {
- "@swc/cli": "^0.1.62",
- "@swc/core": "^1.3.55",
- "@swc/jest": "^0.2.26",
- "@swc/register": "^0.1.10",
- "autoprefixer": "^10.4.14",
- "browserslist": "^4.21.5",
- "concurrently": "^8.0.1",
- "cssnano": "^6.0.0",
- "esbuild": "^0.17.18",
- "eslint": "^8.39.0",
- "eslint-config-prettier": "^8.8.0",
- "eslint-plugin-prettier": "^4.2.1",
- "jest": "^29.5.0",
- "jest-diff": "^29.5.0",
- "lightningcss": "1.18.0",
- "prettier": "^2.8.8",
- "rimraf": "^5.0.0",
- "source-map-js": "^1.0.2",
- "turbo": "^1.9.3"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "integrations/content-resolution": {
- "name": "@tailwindcss/integrations-content-resolution",
- "version": "0.0.0",
- "extraneous": true,
- "devDependencies": {
- "postcss": "^8.4.21",
- "postcss-cli": "^9.1.0"
- }
- },
- "integrations/parcel": {
- "name": "@tailwindcss/integrations-parcel",
- "version": "0.0.0",
- "extraneous": true,
- "devDependencies": {
- "parcel": "^2.5.0"
- }
- },
- "integrations/postcss-cli": {
- "name": "@tailwindcss/integrations-postcss-cli",
- "version": "0.0.0",
- "extraneous": true,
- "devDependencies": {
- "postcss": "^8.4.21",
- "postcss-cli": "^9.1.0"
- }
- },
- "integrations/rollup": {
- "name": "@tailwindcss/integrations-rollup",
- "version": "0.0.0",
- "extraneous": true,
- "devDependencies": {
- "rollup": "^2.74.1",
- "rollup-plugin-postcss": "^4.0.2"
- }
- },
- "integrations/rollup-sass": {
- "name": "@tailwindcss/integrations-rollup-sass",
- "version": "0.0.0",
- "extraneous": true,
- "devDependencies": {
- "rollup": "^2.74.1",
- "rollup-plugin-postcss": "^4.0.2",
- "sass": "^1.51.0"
- }
- },
- "integrations/tailwindcss-cli": {
- "name": "@tailwindcss/integrations-tailwindcss-cli",
- "version": "0.0.0",
- "extraneous": true,
- "dependencies": {
- "tailwindcss": "file:../../"
- }
- },
- "integrations/vite": {
- "name": "@tailwindcss/integrations-vite",
- "version": "0.0.0",
- "extraneous": true,
- "devDependencies": {
- "isomorphic-fetch": "^3.0.0",
- "vite": "^2.9.9"
- }
- },
- "integrations/webpack-4": {
- "name": "@tailwindcss/integrations-webpack-4",
- "version": "0.0.0",
- "extraneous": true,
- "devDependencies": {
- "css-loader": "^5.2.7",
- "mini-css-extract-plugin": "^1.6.2",
- "postcss-loader": "^4.3.0",
- "webpack": "^4.46.0",
- "webpack-cli": "^4.9.2"
- }
- },
- "integrations/webpack-5": {
- "name": "@tailwindcss/integrations-webpack-5",
- "version": "0.0.0",
- "extraneous": true,
- "devDependencies": {
- "css-loader": "^6.7.1",
- "mini-css-extract-plugin": "^2.7.2",
- "postcss-loader": "^6.2.1",
- "webpack": "^5.75.0",
- "webpack-cli": "^5.0.1"
- }
- },
- "node_modules/@alloc/quick-lru": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
- "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@ampproject/remapping": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
- "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
- "dev": true,
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz",
- "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==",
- "dev": true,
- "dependencies": {
- "@babel/highlight": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/compat-data": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz",
- "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz",
- "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==",
- "dev": true,
- "dependencies": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.21.4",
- "@babel/generator": "^7.21.4",
- "@babel/helper-compilation-targets": "^7.21.4",
- "@babel/helper-module-transforms": "^7.21.2",
- "@babel/helpers": "^7.21.0",
- "@babel/parser": "^7.21.4",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.4",
- "@babel/types": "^7.21.4",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.2",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/core/node_modules/convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "dev": true
- },
- "node_modules/@babel/core/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/generator": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz",
- "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.21.4",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
- "jsesc": "^2.5.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz",
- "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==",
- "dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.21.4",
- "@babel/helper-validator-option": "^7.21.0",
- "browserslist": "^4.21.3",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- },
- "node_modules/@babel/helper-environment-visitor": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
- "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-function-name": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz",
- "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.20.7",
- "@babel/types": "^7.21.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
- "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-imports": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz",
- "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.21.4"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.21.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz",
- "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.20.2",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.19.1",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.2",
- "@babel/types": "^7.21.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
- "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-simple-access": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
- "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.20.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
- "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.19.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
- "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
- "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-option": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
- "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helpers": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz",
- "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.0",
- "@babel/types": "^7.21.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
- "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz",
- "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==",
- "dev": true,
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-bigint": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
- "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.12.13"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-meta": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz",
- "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.20.2"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-top-level-await": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz",
- "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.20.2"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/template": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
- "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.18.6",
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz",
- "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.21.4",
- "@babel/generator": "^7.21.4",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.21.0",
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.21.4",
- "@babel/types": "^7.21.4",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse/node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz",
- "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-string-parser": "^7.19.4",
- "@babel/helper-validator-identifier": "^7.19.1",
- "to-fast-properties": "^2.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@bcoe/v8-coverage": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
- "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz",
- "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz",
- "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz",
- "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz",
- "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz",
- "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz",
- "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz",
- "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz",
- "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz",
- "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz",
- "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz",
- "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz",
- "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz",
- "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz",
- "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz",
- "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz",
- "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz",
- "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz",
- "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz",
- "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz",
- "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz",
- "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz",
- "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz",
- "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==",
- "dev": true,
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz",
- "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.5.1",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/js": {
- "version": "8.39.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz",
- "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.8",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@humanwhocodes/object-schema": "^1.2.1",
- "debug": "^4.1.1",
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
- "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
- "dev": true,
- "dependencies": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/schema": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
- "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@jest/console": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz",
- "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/console/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/console/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@jest/core": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz",
- "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==",
- "dev": true,
- "dependencies": {
- "@jest/console": "^29.5.0",
- "@jest/reporters": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
- "jest-changed-files": "^29.5.0",
- "jest-config": "^29.5.0",
- "jest-haste-map": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-resolve-dependencies": "^29.5.0",
- "jest-runner": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
- "jest-watcher": "^29.5.0",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.5.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/@jest/core/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/core/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@jest/create-cache-key-function": {
- "version": "27.4.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^27.4.2"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/@jest/environment": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz",
- "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==",
- "dev": true,
- "dependencies": {
- "@jest/fake-timers": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "jest-mock": "^29.5.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/environment/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/environment/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@jest/expect": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz",
- "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==",
- "dev": true,
- "dependencies": {
- "expect": "^29.5.0",
- "jest-snapshot": "^29.5.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/expect-utils": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz",
- "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==",
- "dev": true,
- "dependencies": {
- "jest-get-type": "^29.4.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/fake-timers": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz",
- "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.5.0",
- "@sinonjs/fake-timers": "^10.0.2",
- "@types/node": "*",
- "jest-message-util": "^29.5.0",
- "jest-mock": "^29.5.0",
- "jest-util": "^29.5.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/fake-timers/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/fake-timers/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@jest/globals": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz",
- "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==",
- "dev": true,
- "dependencies": {
- "@jest/environment": "^29.5.0",
- "@jest/expect": "^29.5.0",
- "@jest/types": "^29.5.0",
- "jest-mock": "^29.5.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/globals/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/globals/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@jest/reporters": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz",
- "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==",
- "dev": true,
- "dependencies": {
- "@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@jridgewell/trace-mapping": "^0.3.15",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^5.1.0",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.1.3",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-worker": "^29.5.0",
- "slash": "^3.0.0",
- "string-length": "^4.0.1",
- "strip-ansi": "^6.0.0",
- "v8-to-istanbul": "^9.0.1"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/@jest/reporters/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/reporters/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@jest/schemas": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz",
- "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==",
- "dev": true,
- "dependencies": {
- "@sinclair/typebox": "^0.25.16"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/source-map": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz",
- "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==",
- "dev": true,
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.15",
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.9"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/test-result": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz",
- "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==",
- "dev": true,
- "dependencies": {
- "@jest/console": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/test-result/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/test-result/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@jest/test-sequencer": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz",
- "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==",
- "dev": true,
- "dependencies": {
- "@jest/test-result": "^29.5.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/transform": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz",
- "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.11.6",
- "@jest/types": "^29.5.0",
- "@jridgewell/trace-mapping": "^0.3.15",
- "babel-plugin-istanbul": "^6.1.1",
- "chalk": "^4.0.0",
- "convert-source-map": "^2.0.0",
- "fast-json-stable-stringify": "^2.1.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-util": "^29.5.0",
- "micromatch": "^4.0.4",
- "pirates": "^4.0.4",
- "slash": "^3.0.0",
- "write-file-atomic": "^4.0.2"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/transform/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/transform/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@jest/types": {
- "version": "27.5.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^16.0.0",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
- "dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.18",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
- "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
- "dependencies": {
- "@jridgewell/resolve-uri": "3.1.0",
- "@jridgewell/sourcemap-codec": "1.4.14"
- }
- },
- "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
- },
- "node_modules/@mole-inc/bin-wrapper": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/@mole-inc/bin-wrapper/-/bin-wrapper-8.0.1.tgz",
- "integrity": "sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==",
- "dev": true,
- "dependencies": {
- "bin-check": "^4.1.0",
- "bin-version-check": "^5.0.0",
- "content-disposition": "^0.5.4",
- "ext-name": "^5.0.0",
- "file-type": "^17.1.6",
- "filenamify": "^5.0.2",
- "got": "^11.8.5",
- "os-filter-obj": "^2.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@sinclair/typebox": {
- "version": "0.25.24",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz",
- "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==",
- "dev": true
- },
- "node_modules/@sindresorhus/is": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
- "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/is?sponsor=1"
- }
- },
- "node_modules/@sinonjs/commons": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
- "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
- "dev": true,
- "dependencies": {
- "type-detect": "4.0.8"
- }
- },
- "node_modules/@sinonjs/fake-timers": {
- "version": "10.0.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz",
- "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^2.0.0"
- }
- },
- "node_modules/@swc/cli": {
- "version": "0.1.62",
- "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.62.tgz",
- "integrity": "sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==",
- "dev": true,
- "dependencies": {
- "@mole-inc/bin-wrapper": "^8.0.1",
- "commander": "^7.1.0",
- "fast-glob": "^3.2.5",
- "semver": "^7.3.8",
- "slash": "3.0.0",
- "source-map": "^0.7.3"
- },
- "bin": {
- "spack": "bin/spack.js",
- "swc": "bin/swc.js",
- "swcx": "bin/swcx.js"
- },
- "engines": {
- "node": ">= 12.13"
- },
- "peerDependencies": {
- "@swc/core": "^1.2.66",
- "chokidar": "^3.5.1"
- },
- "peerDependenciesMeta": {
- "chokidar": {
- "optional": true
- }
- }
- },
- "node_modules/@swc/cli/node_modules/source-map": {
- "version": "0.7.3",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@swc/core": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.55.tgz",
- "integrity": "sha512-w/lN3OuJsuy868yJZKop+voZLVzI5pVSoopQVtgDNkEzejnPuRp9XaeAValvuMaWqKoTMtOjLzEPyv/xiAGYQQ==",
- "dev": true,
- "hasInstallScript": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/swc"
- },
- "optionalDependencies": {
- "@swc/core-darwin-arm64": "1.3.55",
- "@swc/core-darwin-x64": "1.3.55",
- "@swc/core-linux-arm-gnueabihf": "1.3.55",
- "@swc/core-linux-arm64-gnu": "1.3.55",
- "@swc/core-linux-arm64-musl": "1.3.55",
- "@swc/core-linux-x64-gnu": "1.3.55",
- "@swc/core-linux-x64-musl": "1.3.55",
- "@swc/core-win32-arm64-msvc": "1.3.55",
- "@swc/core-win32-ia32-msvc": "1.3.55",
- "@swc/core-win32-x64-msvc": "1.3.55"
- },
- "peerDependencies": {
- "@swc/helpers": "^0.5.0"
- },
- "peerDependenciesMeta": {
- "@swc/helpers": {
- "optional": true
- }
- }
- },
- "node_modules/@swc/core-darwin-arm64": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.55.tgz",
- "integrity": "sha512-UnHC8aPg/JvHhgXxTU6EhTtfnYNS7nhq8EKB8laNPxlHbwEyMBVQ2QuJHlNCtFtvSfX/uH5l04Ld1iGXnBTfdQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-darwin-x64": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.55.tgz",
- "integrity": "sha512-VNJkFVARrktIqtaLrD1NFA54gqekH7eAUcUY2U2SdHwO67HYjfMXMxlugLP5PDasSKpTkrVooUdhkffoA5W50g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.55.tgz",
- "integrity": "sha512-6OcohhIFKKNW/TpJt26Tpul8zyL7dmp1Lnyj2BX9ycsZZ5UnsNiGqn37mrqJgVTx/ansEmbyOmKu2mzm/Ct6cQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.55.tgz",
- "integrity": "sha512-MfZtXGBv21XWwvrSMP0CMxScDolT/iv5PRl9UBprYUehwWr7BNjA3V9W7QQ+kKoPyORWk7LX7OpJZF3FnO618Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.55.tgz",
- "integrity": "sha512-iZJo+7L5lv10W0f0C6SlyteAyMJt5Tp+aH3+nlAwKdtc+VjyL1sGhR8DJMXp2/buBRZJ9tjEtpXKDaWUdSdF7Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.55.tgz",
- "integrity": "sha512-Rmc8ny/mslzzz0+wNK9/mLdyAWVbMZHRSvljhpzASmq48NBkmZ5vk9/WID6MnUz2e9cQ0JxJQs8t39KlFJtW3g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-linux-x64-musl": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.55.tgz",
- "integrity": "sha512-Ymoc4xxINzS93ZjVd2UZfLZk1jF6wHjdCbC1JF+0zK3IrNrxCIDoWoaAj0+Bbvyo3hD1Xg/cneSTsqX8amnnuQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.55.tgz",
- "integrity": "sha512-OhnmFstq2qRU2GI5I0G/8L+vc2rx8+w+IOA6EZBrY4FuMCbPIZKKzlnAIxYn2W+yD4gvBzYP3tgEcaDfQk6EkA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.55.tgz",
- "integrity": "sha512-3VR5rHZ6uoL/Vo3djV30GgX2oyDwWWsk+Yp+nyvYyBaKYiH2zeHfxdYRLSQV3W7kSlCAH3oDYpSljrWZ0t5XEQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.55.tgz",
- "integrity": "sha512-KBtMFtRwnbxBugYf6i2ePqEGdxsk715KcqGMjGhxNg7BTACnXnhj37irHu2e7A7wZffbkUVUYuj/JEgVkEjSxg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@swc/jest": {
- "version": "0.2.26",
- "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.26.tgz",
- "integrity": "sha512-7lAi7q7ShTO3E5Gt1Xqf3pIhRbERxR1DUxvtVa9WKzIB+HGQ7wZP5sYx86zqnaEoKKGhmOoZ7gyW0IRu8Br5+A==",
- "dev": true,
- "dependencies": {
- "@jest/create-cache-key-function": "^27.4.2",
- "jsonc-parser": "^3.2.0"
- },
- "engines": {
- "npm": ">= 7.0.0"
- },
- "peerDependencies": {
- "@swc/core": "*"
- }
- },
- "node_modules/@swc/register": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/@swc/register/-/register-0.1.10.tgz",
- "integrity": "sha512-6STwH/q4dc3pitXLVkV7sP0Hiy+zBsU2wOF1aXpXR95pnH3RYHKIsDC+gvesfyB7jxNT9OOZgcqOp9RPxVTx9A==",
- "dev": true,
- "dependencies": {
- "lodash.clonedeep": "^4.5.0",
- "pirates": "^4.0.1",
- "source-map-support": "^0.5.13"
- },
- "bin": {
- "swc-node": "bin/swc-node"
- },
- "peerDependencies": {
- "@swc/core": "^1.0.46"
- }
- },
- "node_modules/@szmarczak/http-timer": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
- "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
- "dev": true,
- "dependencies": {
- "defer-to-connect": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@tokenizer/token": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==",
- "dev": true
- },
- "node_modules/@trysound/sax": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
- "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
- "dev": true,
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/@types/babel__core": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz",
- "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==",
- "dev": true,
- "dependencies": {
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
- }
- },
- "node_modules/@types/babel__generator": {
- "version": "7.6.4",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
- "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__template": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
- "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
- "dev": true,
- "dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__traverse": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz",
- "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.3.0"
- }
- },
- "node_modules/@types/cacheable-request": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz",
- "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==",
- "dev": true,
- "dependencies": {
- "@types/http-cache-semantics": "*",
- "@types/keyv": "^3.1.4",
- "@types/node": "*",
- "@types/responselike": "^1.0.0"
- }
- },
- "node_modules/@types/graceful-fs": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
- "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/http-cache-semantics": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
- "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==",
- "dev": true
- },
- "node_modules/@types/istanbul-lib-coverage": {
- "version": "2.0.3",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/istanbul-lib-report": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/istanbul-lib-coverage": "*"
- }
- },
- "node_modules/@types/istanbul-reports": {
- "version": "3.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/istanbul-lib-report": "*"
- }
- },
- "node_modules/@types/keyv": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz",
- "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/node": {
- "version": "16.10.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/prettier": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz",
- "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==",
- "dev": true
- },
- "node_modules/@types/responselike": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
- "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/stack-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
- "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
- "dev": true
- },
- "node_modules/@types/yargs": {
- "version": "16.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@types/yargs-parser": {
- "version": "20.2.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.21.3"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-escapes/node_modules/type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
- },
- "node_modules/anymatch": {
- "version": "3.1.2",
- "license": "ISC",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/arch": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
- "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/arg": {
- "version": "5.0.2",
- "license": "MIT"
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/autoprefixer": {
- "version": "10.4.14",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
- "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/autoprefixer"
- }
- ],
- "dependencies": {
- "browserslist": "^4.21.5",
- "caniuse-lite": "^1.0.30001464",
- "fraction.js": "^4.2.0",
- "normalize-range": "^0.1.2",
- "picocolors": "^1.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "bin": {
- "autoprefixer": "bin/autoprefixer"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
- "node_modules/babel-jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz",
- "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==",
- "dev": true,
- "dependencies": {
- "@jest/transform": "^29.5.0",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.5.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.8.0"
- }
- },
- "node_modules/babel-plugin-istanbul": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
- "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^5.0.4",
- "test-exclude": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-plugin-jest-hoist": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz",
- "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.1.14",
- "@types/babel__traverse": "^7.0.6"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/babel-preset-current-node-syntax": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
- "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
- "dev": true,
- "dependencies": {
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.8.3",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-top-level-await": "^7.8.3"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/babel-preset-jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz",
- "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==",
- "dev": true,
- "dependencies": {
- "babel-plugin-jest-hoist": "^29.5.0",
- "babel-preset-current-node-syntax": "^1.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.0",
- "license": "MIT"
- },
- "node_modules/bin-check": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz",
- "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==",
- "dev": true,
- "dependencies": {
- "execa": "^0.7.0",
- "executable": "^4.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/bin-version": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-6.0.0.tgz",
- "integrity": "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==",
- "dev": true,
- "dependencies": {
- "execa": "^5.0.0",
- "find-versions": "^5.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/bin-version-check": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.0.0.tgz",
- "integrity": "sha512-Q3FMQnS5eZmrBGqmDXLs4dbAn/f+52voP6ykJYmweSA60t6DyH4UTSwZhtbK5UH+LBoWvDljILUQMLRUtsynsA==",
- "dev": true,
- "dependencies": {
- "bin-version": "^6.0.0",
- "semver": "^7.3.5",
- "semver-truncate": "^2.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/bin-version/node_modules/execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/bin-version/node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/bin-version/node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/bin-version/node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "dev": true
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/browserslist": {
- "version": "4.21.5",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
- "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- }
- ],
- "dependencies": {
- "caniuse-lite": "^1.0.30001449",
- "electron-to-chromium": "^1.4.284",
- "node-releases": "^2.0.8",
- "update-browserslist-db": "^1.0.10"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/bser": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
- "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
- "dev": true,
- "dependencies": {
- "node-int64": "^0.4.0"
- }
- },
- "node_modules/buffer-from": {
- "version": "1.1.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cacheable-lookup": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
- "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
- "dev": true,
- "engines": {
- "node": ">=10.6.0"
- }
- },
- "node_modules/cacheable-request": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
- "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
- "dev": true,
- "dependencies": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^4.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^6.0.1",
- "responselike": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cacheable-request/node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camelcase-css": {
- "version": "2.0.1",
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/caniuse-api": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
- "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.0.0",
- "caniuse-lite": "^1.0.0",
- "lodash.memoize": "^4.1.2",
- "lodash.uniq": "^4.5.0"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001481",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz",
- "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ]
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/char-regex": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
- "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/chokidar": {
- "version": "3.5.3",
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/chokidar/node_modules/braces": {
- "version": "3.0.2",
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/chokidar/node_modules/fill-range": {
- "version": "7.0.1",
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/chokidar/node_modules/glob-parent": {
- "version": "5.1.2",
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/chokidar/node_modules/is-number": {
- "version": "7.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/chokidar/node_modules/to-regex-range": {
- "version": "5.0.1",
- "license": "MIT",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/ci-info": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
- "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cjs-module-lexer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
- "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
- "dev": true
- },
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/clone-response": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz",
- "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==",
- "dev": true,
- "dependencies": {
- "mimic-response": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
- "dev": true,
- "engines": {
- "iojs": ">= 1.0.0",
- "node": ">= 0.12.0"
- }
- },
- "node_modules/collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
- "dev": true
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/colord": {
- "version": "2.9.3",
- "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
- "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
- "dev": true
- },
- "node_modules/commander": {
- "version": "7.2.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "license": "MIT"
- },
- "node_modules/concurrently": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.0.1.tgz",
- "integrity": "sha512-Sh8bGQMEL0TAmAm2meAXMjcASHZa7V0xXQVDBLknCPa9TPtkY9yYs+0cnGGgfdkW0SV1Mlg+hVGfXcoI8d3MJA==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.2",
- "date-fns": "^2.29.3",
- "lodash": "^4.17.21",
- "rxjs": "^7.8.0",
- "shell-quote": "^1.8.0",
- "spawn-command": "0.0.2-1",
- "supports-color": "^8.1.1",
- "tree-kill": "^1.2.2",
- "yargs": "^17.7.1"
- },
- "bin": {
- "conc": "dist/bin/concurrently.js",
- "concurrently": "dist/bin/concurrently.js"
- },
- "engines": {
- "node": "^14.13.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
- }
- },
- "node_modules/concurrently/node_modules/supports-color": {
- "version": "8.1.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "5.2.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
- },
- "node_modules/cross-spawn": {
- "version": "7.0.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/css-declaration-sorter": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz",
- "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==",
- "dev": true,
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.0.9"
- }
- },
- "node_modules/css-select": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
- "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0",
- "css-what": "^6.1.0",
- "domhandler": "^5.0.2",
- "domutils": "^3.0.1",
- "nth-check": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/css-tree": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
- "dev": true,
- "dependencies": {
- "mdn-data": "2.0.30",
- "source-map-js": "^1.0.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
- }
- },
- "node_modules/css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/cssesc": {
- "version": "3.0.0",
- "license": "MIT",
- "bin": {
- "cssesc": "bin/cssesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cssnano": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.0.tgz",
- "integrity": "sha512-RGlcbzGhzEBCHuQe3k+Udyj5M00z0pm9S+VurHXFEOXxH+y0sVrJH2sMzoyz2d8N1EScazg+DVvmgyx0lurwwA==",
- "dev": true,
- "dependencies": {
- "cssnano-preset-default": "^6.0.0",
- "lilconfig": "^2.1.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/cssnano"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/cssnano-preset-default": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.0.tgz",
- "integrity": "sha512-BDxlaFzObRDXUiCCBQUNQcI+f1/aX2mgoNtXGjV6PG64POcHoDUoX+LgMWw+Q4609QhxwkcSnS65YFs42RA6qQ==",
- "dev": true,
- "dependencies": {
- "css-declaration-sorter": "^6.3.1",
- "cssnano-utils": "^4.0.0",
- "postcss-calc": "^8.2.3",
- "postcss-colormin": "^6.0.0",
- "postcss-convert-values": "^6.0.0",
- "postcss-discard-comments": "^6.0.0",
- "postcss-discard-duplicates": "^6.0.0",
- "postcss-discard-empty": "^6.0.0",
- "postcss-discard-overridden": "^6.0.0",
- "postcss-merge-longhand": "^6.0.0",
- "postcss-merge-rules": "^6.0.0",
- "postcss-minify-font-values": "^6.0.0",
- "postcss-minify-gradients": "^6.0.0",
- "postcss-minify-params": "^6.0.0",
- "postcss-minify-selectors": "^6.0.0",
- "postcss-normalize-charset": "^6.0.0",
- "postcss-normalize-display-values": "^6.0.0",
- "postcss-normalize-positions": "^6.0.0",
- "postcss-normalize-repeat-style": "^6.0.0",
- "postcss-normalize-string": "^6.0.0",
- "postcss-normalize-timing-functions": "^6.0.0",
- "postcss-normalize-unicode": "^6.0.0",
- "postcss-normalize-url": "^6.0.0",
- "postcss-normalize-whitespace": "^6.0.0",
- "postcss-ordered-values": "^6.0.0",
- "postcss-reduce-initial": "^6.0.0",
- "postcss-reduce-transforms": "^6.0.0",
- "postcss-svgo": "^6.0.0",
- "postcss-unique-selectors": "^6.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/cssnano-utils": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
- "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/csso": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
- "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
- "dev": true,
- "dependencies": {
- "css-tree": "~2.2.0"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/csso/node_modules/css-tree": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
- "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
- "dev": true,
- "dependencies": {
- "mdn-data": "2.0.28",
- "source-map-js": "^1.0.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/csso/node_modules/mdn-data": {
- "version": "2.0.28",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
- "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
- "dev": true
- },
- "node_modules/date-fns": {
- "version": "2.29.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.11"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/date-fns"
- }
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decompress-response": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
- "dev": true,
- "dependencies": {
- "mimic-response": "^3.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/decompress-response/node_modules/mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
- "dev": true
- },
- "node_modules/deep-is": {
- "version": "0.1.3",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/deepmerge": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/defer-to-connect": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
- "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
- "dev": true,
- "bin": {
- "detect-libc": "bin/detect-libc.js"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/detect-newline": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
- "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/didyoumean": {
- "version": "1.2.2",
- "license": "Apache-2.0"
- },
- "node_modules/diff-sequences": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz",
- "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==",
- "dev": true,
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/dlv": {
- "version": "1.1.3",
- "license": "MIT"
- },
- "node_modules/doctrine": {
- "version": "3.0.0",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/dom-serializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
- "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.2",
- "entities": "^4.2.0"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
- }
- },
- "node_modules/domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ]
- },
- "node_modules/domhandler": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
- "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.3.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/domutils": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz",
- "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==",
- "dev": true,
- "dependencies": {
- "dom-serializer": "^2.0.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.1"
- },
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/electron-to-chromium": {
- "version": "1.4.371",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.371.tgz",
- "integrity": "sha512-jlBzY4tFcJaiUjzhRTCWAqRvTO/fWzjA3Bls0mykzGZ7zvcMP7h05W6UcgzfT9Ca1SW2xyKDOFRyI0pQeRNZGw==",
- "dev": true
- },
- "node_modules/emittery": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
- "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/emittery?sponsor=1"
- }
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/esbuild": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz",
- "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==",
- "dev": true,
- "hasInstallScript": true,
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=12"
- },
- "optionalDependencies": {
- "@esbuild/android-arm": "0.17.18",
- "@esbuild/android-arm64": "0.17.18",
- "@esbuild/android-x64": "0.17.18",
- "@esbuild/darwin-arm64": "0.17.18",
- "@esbuild/darwin-x64": "0.17.18",
- "@esbuild/freebsd-arm64": "0.17.18",
- "@esbuild/freebsd-x64": "0.17.18",
- "@esbuild/linux-arm": "0.17.18",
- "@esbuild/linux-arm64": "0.17.18",
- "@esbuild/linux-ia32": "0.17.18",
- "@esbuild/linux-loong64": "0.17.18",
- "@esbuild/linux-mips64el": "0.17.18",
- "@esbuild/linux-ppc64": "0.17.18",
- "@esbuild/linux-riscv64": "0.17.18",
- "@esbuild/linux-s390x": "0.17.18",
- "@esbuild/linux-x64": "0.17.18",
- "@esbuild/netbsd-x64": "0.17.18",
- "@esbuild/openbsd-x64": "0.17.18",
- "@esbuild/sunos-x64": "0.17.18",
- "@esbuild/win32-arm64": "0.17.18",
- "@esbuild/win32-ia32": "0.17.18",
- "@esbuild/win32-x64": "0.17.18"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "8.39.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz",
- "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.4.0",
- "@eslint/eslintrc": "^2.0.2",
- "@eslint/js": "8.39.0",
- "@humanwhocodes/config-array": "^0.11.8",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.0",
- "eslint-visitor-keys": "^3.4.0",
- "espree": "^9.5.1",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "grapheme-splitter": "^1.0.4",
- "ignore": "^5.2.0",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-sdsl": "^4.1.4",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "strip-ansi": "^6.0.1",
- "strip-json-comments": "^3.1.0",
- "text-table": "^0.2.0"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-config-prettier": {
- "version": "8.8.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
- "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
- "dev": true,
- "bin": {
- "eslint-config-prettier": "bin/cli.js"
- },
- "peerDependencies": {
- "eslint": ">=7.0.0"
- }
- },
- "node_modules/eslint-plugin-prettier": {
- "version": "4.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prettier-linter-helpers": "^1.0.0"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "eslint": ">=7.28.0",
- "prettier": ">=2.0.0"
- },
- "peerDependenciesMeta": {
- "eslint-config-prettier": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-scope": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
- "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
- "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint/node_modules/find-up": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/locate-path": {
- "version": "6.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint/node_modules/p-locate": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/espree": {
- "version": "9.5.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz",
- "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==",
- "dev": true,
- "dependencies": {
- "acorn": "^8.8.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true,
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/esquery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/execa/node_modules/cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "node_modules/execa/node_modules/lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "dev": true,
- "dependencies": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "node_modules/execa/node_modules/shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/execa/node_modules/shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/execa/node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/execa/node_modules/yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
- "dev": true
- },
- "node_modules/executable": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
- "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
- "dev": true,
- "dependencies": {
- "pify": "^2.2.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/expect": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz",
- "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==",
- "dev": true,
- "dependencies": {
- "@jest/expect-utils": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/ext-list": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
- "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
- "dev": true,
- "dependencies": {
- "mime-db": "^1.28.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ext-name": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
- "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
- "dev": true,
- "dependencies": {
- "ext-list": "^2.0.0",
- "sort-keys-length": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "node_modules/fast-diff": {
- "version": "1.2.0",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/fast-glob": {
- "version": "3.2.12",
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fastq": {
- "version": "1.11.0",
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/fb-watchman": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
- "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
- "dev": true,
- "dependencies": {
- "bser": "2.1.1"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flat-cache": "^3.0.4"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/file-type": {
- "version": "17.1.6",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-17.1.6.tgz",
- "integrity": "sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==",
- "dev": true,
- "dependencies": {
- "readable-web-to-node-stream": "^3.0.2",
- "strtok3": "^7.0.0-alpha.9",
- "token-types": "^5.0.0-alpha.2"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/file-type?sponsor=1"
- }
- },
- "node_modules/filename-reserved-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz",
- "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==",
- "dev": true,
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/filenamify": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz",
- "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==",
- "dev": true,
- "dependencies": {
- "filename-reserved-regex": "^3.0.0",
- "strip-outer": "^2.0.0",
- "trim-repeated": "^2.0.0"
- },
- "engines": {
- "node": ">=12.20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-versions": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz",
- "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==",
- "dev": true,
- "dependencies": {
- "semver-regex": "^4.0.5"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat-cache": {
- "version": "3.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/flat-cache/node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/flatted": {
- "version": "3.1.1",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/foreground-child": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/foreground-child/node_modules/signal-exit": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz",
- "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==",
- "dev": true,
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/fraction.js": {
- "version": "4.2.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- },
- "funding": {
- "type": "patreon",
- "url": "https://www.patreon.com/infusion"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "license": "ISC"
- },
- "node_modules/fsevents": {
- "version": "2.3.2",
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "dev": true,
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/glob": {
- "version": "7.1.6",
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/globals": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/got": {
- "version": "11.8.6",
- "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
- "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==",
- "dev": true,
- "dependencies": {
- "@sindresorhus/is": "^4.0.0",
- "@szmarczak/http-timer": "^4.0.5",
- "@types/cacheable-request": "^6.0.1",
- "@types/responselike": "^1.0.0",
- "cacheable-lookup": "^5.0.3",
- "cacheable-request": "^7.0.2",
- "decompress-response": "^6.0.0",
- "http2-wrapper": "^1.0.0-beta.5.2",
- "lowercase-keys": "^2.0.0",
- "p-cancelable": "^2.0.0",
- "responselike": "^2.0.0"
- },
- "engines": {
- "node": ">=10.19.0"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/got?sponsor=1"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
- },
- "node_modules/grapheme-splitter": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/html-escaper": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
- },
- "node_modules/http-cache-semantics": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
- "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
- "dev": true
- },
- "node_modules/http2-wrapper": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
- "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
- "dev": true,
- "dependencies": {
- "quick-lru": "^5.1.1",
- "resolve-alpn": "^1.0.0"
- },
- "engines": {
- "node": ">=10.19.0"
- }
- },
- "node_modules/human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "dev": true,
- "engines": {
- "node": ">=10.17.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/import-local": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
- "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
- "dev": true,
- "dependencies": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- },
- "bin": {
- "import-local-fixture": "fixtures/cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "license": "ISC",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "license": "ISC"
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "license": "MIT",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz",
- "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==",
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-generator-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
- "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/istanbul-lib-coverage": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
- "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-instrument": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
- "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.12.3",
- "@babel/parser": "^7.14.7",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-instrument/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
- "dev": true,
- "dependencies": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-source-maps": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
- "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
- "dev": true,
- "dependencies": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-reports": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
- "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
- "dev": true,
- "dependencies": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jackspeak": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.1.0.tgz",
- "integrity": "sha512-DiEwVPqsieUzZBNxQ2cxznmFzfg/AMgJUjYw5xl6rSmCxAQXECcbSdwcLM6Ds6T09+SBfSNCGPhYUoQ96P4h7A==",
- "dev": true,
- "dependencies": {
- "cliui": "^7.0.4"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/jackspeak/node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz",
- "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==",
- "dev": true,
- "dependencies": {
- "@jest/core": "^29.5.0",
- "@jest/types": "^29.5.0",
- "import-local": "^3.0.2",
- "jest-cli": "^29.5.0"
- },
- "bin": {
- "jest": "bin/jest.js"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/jest-changed-files": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz",
- "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==",
- "dev": true,
- "dependencies": {
- "execa": "^5.0.0",
- "p-limit": "^3.1.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-changed-files/node_modules/execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/jest-changed-files/node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/jest-changed-files/node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/jest-changed-files/node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-circus": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz",
- "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==",
- "dev": true,
- "dependencies": {
- "@jest/environment": "^29.5.0",
- "@jest/expect": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "dedent": "^0.7.0",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^29.5.0",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
- "p-limit": "^3.1.0",
- "pretty-format": "^29.5.0",
- "pure-rand": "^6.0.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-circus/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-circus/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-cli": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz",
- "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==",
- "dev": true,
- "dependencies": {
- "@jest/core": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
- "import-local": "^3.0.2",
- "jest-config": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
- "prompts": "^2.0.1",
- "yargs": "^17.3.1"
- },
- "bin": {
- "jest": "bin/jest.js"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/jest-cli/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-cli/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-config": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz",
- "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^29.5.0",
- "@jest/types": "^29.5.0",
- "babel-jest": "^29.5.0",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-circus": "^29.5.0",
- "jest-environment-node": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-runner": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
- "micromatch": "^4.0.4",
- "parse-json": "^5.2.0",
- "pretty-format": "^29.5.0",
- "slash": "^3.0.0",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@types/node": "*",
- "ts-node": ">=9.0.0"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "ts-node": {
- "optional": true
- }
- }
- },
- "node_modules/jest-config/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-config/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-diff": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
- "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.0.0",
- "diff-sequences": "^29.4.3",
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-docblock": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz",
- "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==",
- "dev": true,
- "dependencies": {
- "detect-newline": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-each": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz",
- "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.5.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.4.3",
- "jest-util": "^29.5.0",
- "pretty-format": "^29.5.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-each/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-each/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-environment-node": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz",
- "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==",
- "dev": true,
- "dependencies": {
- "@jest/environment": "^29.5.0",
- "@jest/fake-timers": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "jest-mock": "^29.5.0",
- "jest-util": "^29.5.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-environment-node/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-environment-node/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-get-type": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz",
- "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==",
- "dev": true,
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-haste-map": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz",
- "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.5.0",
- "@types/graceful-fs": "^4.1.3",
- "@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.2.9",
- "jest-regex-util": "^29.4.3",
- "jest-util": "^29.5.0",
- "jest-worker": "^29.5.0",
- "micromatch": "^4.0.4",
- "walker": "^1.0.8"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "optionalDependencies": {
- "fsevents": "^2.3.2"
- }
- },
- "node_modules/jest-haste-map/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-haste-map/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-leak-detector": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz",
- "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==",
- "dev": true,
- "dependencies": {
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-matcher-utils": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz",
- "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.0.0",
- "jest-diff": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-message-util": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz",
- "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.5.0",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.5.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-message-util/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-message-util/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-mock": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz",
- "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "jest-util": "^29.5.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-mock/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-mock/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-pnp-resolver": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
- "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
- "dev": true,
- "engines": {
- "node": ">=6"
- },
- "peerDependencies": {
- "jest-resolve": "*"
- },
- "peerDependenciesMeta": {
- "jest-resolve": {
- "optional": true
- }
- }
- },
- "node_modules/jest-regex-util": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz",
- "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==",
- "dev": true,
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-resolve": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz",
- "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
- "jest-pnp-resolver": "^1.2.2",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
- "resolve": "^1.20.0",
- "resolve.exports": "^2.0.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-resolve-dependencies": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz",
- "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==",
- "dev": true,
- "dependencies": {
- "jest-regex-util": "^29.4.3",
- "jest-snapshot": "^29.5.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-runner": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz",
- "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==",
- "dev": true,
- "dependencies": {
- "@jest/console": "^29.5.0",
- "@jest/environment": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.13.1",
- "graceful-fs": "^4.2.9",
- "jest-docblock": "^29.4.3",
- "jest-environment-node": "^29.5.0",
- "jest-haste-map": "^29.5.0",
- "jest-leak-detector": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-resolve": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-watcher": "^29.5.0",
- "jest-worker": "^29.5.0",
- "p-limit": "^3.1.0",
- "source-map-support": "0.5.13"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-runner/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-runner/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-runner/node_modules/source-map-support": {
- "version": "0.5.13",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
- "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
- "dev": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/jest-runtime": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz",
- "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==",
- "dev": true,
- "dependencies": {
- "@jest/environment": "^29.5.0",
- "@jest/fake-timers": "^29.5.0",
- "@jest/globals": "^29.5.0",
- "@jest/source-map": "^29.4.3",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "cjs-module-lexer": "^1.0.0",
- "collect-v8-coverage": "^1.0.0",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-mock": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
- "slash": "^3.0.0",
- "strip-bom": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-runtime/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-runtime/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-snapshot": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz",
- "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.11.6",
- "@babel/generator": "^7.7.2",
- "@babel/plugin-syntax-jsx": "^7.7.2",
- "@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/traverse": "^7.7.2",
- "@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/babel__traverse": "^7.0.6",
- "@types/prettier": "^2.1.5",
- "babel-preset-current-node-syntax": "^1.0.0",
- "chalk": "^4.0.0",
- "expect": "^29.5.0",
- "graceful-fs": "^4.2.9",
- "jest-diff": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
- "natural-compare": "^1.4.0",
- "pretty-format": "^29.5.0",
- "semver": "^7.3.5"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-snapshot/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-snapshot/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-util": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz",
- "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "graceful-fs": "^4.2.9",
- "picomatch": "^2.2.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-util/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-util/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-validate": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz",
- "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.5.0",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.4.3",
- "leven": "^3.1.0",
- "pretty-format": "^29.5.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-validate/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-validate/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-validate/node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/jest-watcher": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz",
- "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==",
- "dev": true,
- "dependencies": {
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "emittery": "^0.13.1",
- "jest-util": "^29.5.0",
- "string-length": "^4.0.1"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-watcher/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-watcher/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-worker": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz",
- "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "jest-util": "^29.5.0",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-worker/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/jest/node_modules/@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest/node_modules/@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jiti": {
- "version": "1.18.2",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz",
- "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==",
- "bin": {
- "jiti": "bin/jiti.js"
- }
- },
- "node_modules/js-sdsl": {
- "version": "4.1.4",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true,
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jsonc-parser": {
- "version": "3.2.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/keyv": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz",
- "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==",
- "dev": true,
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/leven": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
- "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/levn/node_modules/prelude-ls": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/levn/node_modules/type-check": {
- "version": "0.4.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/lightningcss": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.18.0.tgz",
- "integrity": "sha512-uk10tNxi5fhZqU93vtYiQgx/8a9f0Kvtj5AXIm+VlOXY+t/DWDmCZWJEkZJmmALgvbS6aAW8or+Kq85eJ6TDTw==",
- "dev": true,
- "dependencies": {
- "detect-libc": "^1.0.3"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "optionalDependencies": {
- "lightningcss-darwin-arm64": "1.18.0",
- "lightningcss-darwin-x64": "1.18.0",
- "lightningcss-linux-arm-gnueabihf": "1.18.0",
- "lightningcss-linux-arm64-gnu": "1.18.0",
- "lightningcss-linux-arm64-musl": "1.18.0",
- "lightningcss-linux-x64-gnu": "1.18.0",
- "lightningcss-linux-x64-musl": "1.18.0",
- "lightningcss-win32-x64-msvc": "1.18.0"
- }
- },
- "node_modules/lightningcss-darwin-arm64": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.18.0.tgz",
- "integrity": "sha512-OqjydwtiNPgdH1ByIjA1YzqvDG/OMR6L3LPN6wRl1729LB0y4Mik7L06kmZaTb+pvUHr+NmDd2KCwnlrQ4zO3w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-darwin-x64": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.18.0.tgz",
- "integrity": "sha512-mNiuPHj89/JHZmJMp+5H8EZSt6EL5DZRWJ31O6k3DrLLnRIQjXuXdDdN8kP7LoIkeWI5xvyD60CsReJm+YWYAw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm-gnueabihf": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.18.0.tgz",
- "integrity": "sha512-S+25JjI6601HiAVoTDXW6SqH+E94a+FHA7WQqseyNHunOgVWKcAkNEc2LJvVxgwTq6z41sDIb9/M3Z9wa9lk4A==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-gnu": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.18.0.tgz",
- "integrity": "sha512-JSqh4+21dCgBecIQUet35dtE4PhhSEMyqe3y0ZNQrAJQ5kyUPSQHiw81WXnPJcOSTTpG0TyMLiC8K//+BsFGQA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-musl": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.18.0.tgz",
- "integrity": "sha512-2FWHa8iUhShnZnqhn2wfIcK5adJat9hAAaX7etNsoXJymlliDIOFuBQEsba2KBAZSM4QqfQtvRdR7m8i0I7ybQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-gnu": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.18.0.tgz",
- "integrity": "sha512-plCPGQJtDZHcLVKVRLnQVF2XRsIC32WvuJhQ7fJ7F6BV98b/VZX0OlX05qUaOESD9dCDHjYSfxsgcvOKgCWh7A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-musl": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.18.0.tgz",
- "integrity": "sha512-na+BGtVU6fpZvOHKhnlA0XHeibkT3/46nj6vLluG3kzdJYoBKU6dIl7DSOk++8jv4ybZyFJ0aOFMMSc8g2h58A==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-win32-x64-msvc": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.18.0.tgz",
- "integrity": "sha512-5qeAH4RMNy2yMNEl7e5TI6upt/7xD2ZpHWH4RkT8iJ7/6POS5mjHbXWUO9Q1hhDhqkdzGa76uAdMzEouIeCyNw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "license": "MIT"
- },
- "node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lodash.clonedeep": {
- "version": "4.5.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lodash.memoize": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
- "dev": true
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
- "dev": true
- },
- "node_modules/lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/make-dir/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/makeerror": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
- "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
- "dev": true,
- "dependencies": {
- "tmpl": "1.0.5"
- }
- },
- "node_modules/mdn-data": {
- "version": "2.0.30",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
- "dev": true
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.5",
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/micromatch/node_modules/braces": {
- "version": "3.0.2",
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/micromatch/node_modules/fill-range": {
- "version": "7.0.1",
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/micromatch/node_modules/is-number": {
- "version": "7.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/micromatch/node_modules/to-regex-range": {
- "version": "5.0.1",
- "license": "MIT",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/mz": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
- "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
- "dependencies": {
- "any-promise": "^1.0.0",
- "object-assign": "^4.0.1",
- "thenify-all": "^1.0.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
- "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/node-int64": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
- "dev": true
- },
- "node_modules/node-releases": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
- "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==",
- "dev": true
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/normalize-range": {
- "version": "0.1.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/normalize-url": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
- "dev": true,
- "dependencies": {
- "path-key": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/npm-run-path/node_modules/path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/nth-check": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
- "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/fb55/nth-check?sponsor=1"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-hash": {
- "version": "3.0.0",
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "license": "ISC",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/optionator/node_modules/prelude-ls": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/optionator/node_modules/type-check": {
- "version": "0.4.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/os-filter-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz",
- "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==",
- "dev": true,
- "dependencies": {
- "arch": "^2.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/p-cancelable": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
- "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-locate/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "license": "MIT"
- },
- "node_modules/path-scurry": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.7.0.tgz",
- "integrity": "sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^9.0.0",
- "minipass": "^5.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/path-scurry/node_modules/lru-cache": {
- "version": "9.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.1.tgz",
- "integrity": "sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==",
- "dev": true,
- "engines": {
- "node": "14 || >=16.14"
- }
- },
- "node_modules/peek-readable": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz",
- "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==",
- "dev": true,
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
- "node_modules/picocolors": {
- "version": "1.0.0",
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pify": {
- "version": "2.3.0",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pirates": {
- "version": "4.0.4",
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz",
- "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/postcss-calc": {
- "version": "8.2.4",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz",
- "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==",
- "dev": true,
- "dependencies": {
- "postcss-selector-parser": "^6.0.9",
- "postcss-value-parser": "^4.2.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.2"
- }
- },
- "node_modules/postcss-colormin": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz",
- "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "colord": "^2.9.1",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-convert-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz",
- "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-comments": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz",
- "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-duplicates": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz",
- "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-empty": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz",
- "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-overridden": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz",
- "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-import": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
- "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
- "dependencies": {
- "postcss-value-parser": "^4.0.0",
- "read-cache": "^1.0.0",
- "resolve": "^1.1.7"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "postcss": "^8.0.0"
- }
- },
- "node_modules/postcss-js": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
- "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
- "dependencies": {
- "camelcase-css": "^2.0.1"
- },
- "engines": {
- "node": "^12 || ^14 || >= 16"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": "^8.4.21"
- }
- },
- "node_modules/postcss-load-config": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
- "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
- "dependencies": {
- "lilconfig": "^2.0.5",
- "yaml": "^2.1.1"
- },
- "engines": {
- "node": ">= 14"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": ">=8.0.9",
- "ts-node": ">=9.0.0"
- },
- "peerDependenciesMeta": {
- "postcss": {
- "optional": true
- },
- "ts-node": {
- "optional": true
- }
- }
- },
- "node_modules/postcss-load-config/node_modules/yaml": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
- "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==",
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/postcss-merge-longhand": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz",
- "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0",
- "stylehacks": "^6.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-merge-rules": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.0.tgz",
- "integrity": "sha512-rCXkklftzEkniyv3f4mRCQzxD6oE4Quyh61uyWTUbCJ26Pv2hoz+fivJSsSBWxDBeScR4fKCfF3HHTcD7Ybqnw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "cssnano-utils": "^4.0.0",
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-font-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz",
- "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-gradients": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz",
- "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==",
- "dev": true,
- "dependencies": {
- "colord": "^2.9.1",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-params": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz",
- "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz",
- "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==",
- "dev": true,
- "dependencies": {
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-nested": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
- "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
- "dependencies": {
- "postcss-selector-parser": "^6.0.11"
- },
- "engines": {
- "node": ">=12.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": "^8.2.14"
- }
- },
- "node_modules/postcss-normalize-charset": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz",
- "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-display-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz",
- "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-positions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz",
- "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-repeat-style": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz",
- "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-string": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz",
- "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-timing-functions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz",
- "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-unicode": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz",
- "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-url": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz",
- "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-whitespace": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz",
- "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-ordered-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz",
- "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==",
- "dev": true,
- "dependencies": {
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-reduce-initial": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz",
- "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-reduce-transforms": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz",
- "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-selector-parser": {
- "version": "6.0.11",
- "license": "MIT",
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/postcss-svgo": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz",
- "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0",
- "svgo": "^3.0.2"
- },
- "engines": {
- "node": "^14 || ^16 || >= 18"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-unique-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz",
- "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==",
- "dev": true,
- "dependencies": {
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-value-parser": {
- "version": "4.2.0",
- "license": "MIT"
- },
- "node_modules/prettier": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
- "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
- "dev": true,
- "bin": {
- "prettier": "bin-prettier.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
- "node_modules/prettier-linter-helpers": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-diff": "^1.1.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/pretty-format": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
- "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.4.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/pretty-format/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/prompts": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
- "dev": true,
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
- "dev": true
- },
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pure-rand": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz",
- "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/dubzzz"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fast-check"
- }
- ]
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/quick-lru": {
- "version": "5.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
- "dev": true
- },
- "node_modules/read-cache": {
- "version": "1.0.0",
- "license": "MIT",
- "dependencies": {
- "pify": "^2.3.0"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readable-web-to-node-stream": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
- "dev": true,
- "dependencies": {
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "license": "MIT",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.2",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
- "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
- "dependencies": {
- "is-core-module": "^2.11.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-alpn": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
- "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
- "dev": true
- },
- "node_modules/resolve-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
- "dev": true,
- "dependencies": {
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-cwd/node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/resolve.exports": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
- "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/responselike": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz",
- "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==",
- "dev": true,
- "dependencies": {
- "lowercase-keys": "^2.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.0.tgz",
- "integrity": "sha512-Jf9llaP+RvaEVS5nPShYFhtXIrb3LRKP281ib3So0KkeZKo2wIKyq0Re7TOSwanasA423PSr6CCIL4bP6T040g==",
- "dev": true,
- "dependencies": {
- "glob": "^10.0.0"
- },
- "bin": {
- "rimraf": "dist/cjs/src/bin.js"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rimraf/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/rimraf/node_modules/glob": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.2.tgz",
- "integrity": "sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ==",
- "dev": true,
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^2.0.3",
- "minimatch": "^9.0.0",
- "minipass": "^5.0.0",
- "path-scurry": "^1.7.0"
- },
- "bin": {
- "glob": "dist/cjs/src/bin.js"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rimraf/node_modules/minimatch": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz",
- "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz",
- "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/semver": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz",
- "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/semver-regex": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz",
- "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/semver-truncate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-2.0.0.tgz",
- "integrity": "sha512-Rh266MLDYNeML5h90ttdMwfXe1+Nc4LAWd9X1KdJe8pPHP4kFmvLZALtsMNHNdvTyQygbEC0D59sIz47DIaq8w==",
- "dev": true,
- "dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/semver-truncate/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shell-quote": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
- "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
- },
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/sort-keys": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
- "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==",
- "dev": true,
- "dependencies": {
- "is-plain-obj": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sort-keys-length": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
- "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==",
- "dev": true,
- "dependencies": {
- "sort-keys": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.0.2",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/spawn-command": {
- "version": "0.0.2-1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true
- },
- "node_modules/stack-utils": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
- "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
- "dev": true,
- "dependencies": {
- "escape-string-regexp": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/stack-utils/node_modules/escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string-length": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
- "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
- "dev": true,
- "dependencies": {
- "char-regex": "^1.0.2",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/strip-outer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz",
- "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==",
- "dev": true,
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/strtok3": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz",
- "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==",
- "dev": true,
- "dependencies": {
- "@tokenizer/token": "^0.3.0",
- "peek-readable": "^5.0.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
- "node_modules/stylehacks": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz",
- "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-selector-parser": "^6.0.4"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/sucrase": {
- "version": "3.32.0",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz",
- "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.2",
- "commander": "^4.0.0",
- "glob": "7.1.6",
- "lines-and-columns": "^1.1.6",
- "mz": "^2.7.0",
- "pirates": "^4.0.1",
- "ts-interface-checker": "^0.1.9"
- },
- "bin": {
- "sucrase": "bin/sucrase",
- "sucrase-node": "bin/sucrase-node"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/sucrase/node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/svgo": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
- "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
- "dev": true,
- "dependencies": {
- "@trysound/sax": "0.2.0",
- "commander": "^7.2.0",
- "css-select": "^5.1.0",
- "css-tree": "^2.2.1",
- "csso": "^5.0.5",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "svgo": "bin/svgo"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/svgo"
- }
- },
- "node_modules/test-exclude": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
- "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
- "dev": true,
- "dependencies": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/thenify": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
- "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
- "dependencies": {
- "any-promise": "^1.0.0"
- }
- },
- "node_modules/thenify-all": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
- "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
- "dependencies": {
- "thenify": ">= 3.1.0 < 4"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/tmpl": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
- "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
- "dev": true
- },
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/token-types": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz",
- "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==",
- "dev": true,
- "dependencies": {
- "@tokenizer/token": "^0.3.0",
- "ieee754": "^1.2.1"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
- "node_modules/tree-kill": {
- "version": "1.2.2",
- "dev": true,
- "license": "MIT",
- "bin": {
- "tree-kill": "cli.js"
- }
- },
- "node_modules/trim-repeated": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz",
- "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==",
- "dev": true,
- "dependencies": {
- "escape-string-regexp": "^5.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/trim-repeated/node_modules/escape-string-regexp": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
- "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ts-interface-checker": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
- "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
- },
- "node_modules/tslib": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
- "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==",
- "dev": true
- },
- "node_modules/turbo": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.9.3.tgz",
- "integrity": "sha512-ID7mxmaLUPKG/hVkp+h0VuucB1U99RPCJD9cEuSEOdIPoSIuomcIClEJtKamUsdPLhLCud+BvapBNnhgh58Nzw==",
- "dev": true,
- "hasInstallScript": true,
- "bin": {
- "turbo": "bin/turbo"
- },
- "optionalDependencies": {
- "turbo-darwin-64": "1.9.3",
- "turbo-darwin-arm64": "1.9.3",
- "turbo-linux-64": "1.9.3",
- "turbo-linux-arm64": "1.9.3",
- "turbo-windows-64": "1.9.3",
- "turbo-windows-arm64": "1.9.3"
- }
- },
- "node_modules/turbo-darwin-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.9.3.tgz",
- "integrity": "sha512-0dFc2cWXl82kRE4Z+QqPHhbEFEpUZho1msHXHWbz5+PqLxn8FY0lEVOHkq5tgKNNEd5KnGyj33gC/bHhpZOk5g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/turbo-darwin-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.9.3.tgz",
- "integrity": "sha512-1cYbjqLBA2zYE1nbf/qVnEkrHa4PkJJbLo7hnuMuGM0bPzh4+AnTNe98gELhqI1mkTWBu/XAEeF5u6dgz0jLNA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/turbo-linux-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.9.3.tgz",
- "integrity": "sha512-UuBPFefawEwpuxh5pM9Jqq3q4C8M0vYxVYlB3qea/nHQ80pxYq7ZcaLGEpb10SGnr3oMUUs1zZvkXWDNKCJb8Q==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/turbo-linux-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.9.3.tgz",
- "integrity": "sha512-vUrNGa3hyDtRh9W0MkO+l1dzP8Co2gKnOVmlJQW0hdpOlWlIh22nHNGGlICg+xFa2f9j4PbQlWTsc22c019s8Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/turbo-windows-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.9.3.tgz",
- "integrity": "sha512-0BZ7YaHs6r+K4ksqWus1GKK3W45DuDqlmfjm/yuUbTEVc8szmMCs12vugU2Zi5GdrdJSYfoKfEJ/PeegSLIQGQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/turbo-windows-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.9.3.tgz",
- "integrity": "sha512-QJUYLSsxdXOsR1TquiOmLdAgtYcQ/RuSRpScGvnZb1hY0oLc7JWU0llkYB81wVtWs469y8H9O0cxbKwCZGR4RQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/type-fest": {
- "version": "0.20.2",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.0.10",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "browserslist-lint": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "license": "MIT"
- },
- "node_modules/v8-to-istanbul": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz",
- "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==",
- "dev": true,
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.12",
- "@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^1.6.0"
- },
- "engines": {
- "node": ">=10.12.0"
- }
- },
- "node_modules/v8-to-istanbul/node_modules/convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "dev": true
- },
- "node_modules/walker": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
- "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
- "dev": true,
- "dependencies": {
- "makeerror": "1.0.12"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "license": "ISC"
- },
- "node_modules/write-file-atomic": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
- "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
- "dev": true,
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.7"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yallist": {
- "version": "4.0.0",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/yargs": {
- "version": "17.7.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz",
- "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==",
- "dev": true,
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "oxide": {
- "name": "tailwindcss-oxide",
- "version": "0.1.0",
- "extraneous": true,
- "license": "MIT",
- "workspaces": [
- "node"
- ]
- },
- "oxide-node-api-shim": {
- "name": "@tailwindcss/oxide-shim",
- "extraneous": true,
- "license": "MIT"
- },
- "oxide/crates/node": {
- "name": "@tailwindcss/oxide",
- "version": "0.0.0",
- "extraneous": true,
- "license": "MIT",
- "devDependencies": {
- "@napi-rs/cli": "^2.14.3"
- },
- "engines": {
- "node": ">= 10"
- },
- "optionalDependencies": {
- "@tailwindcss/oxide-darwin-arm64": "0.0.0",
- "@tailwindcss/oxide-darwin-x64": "0.0.0",
- "@tailwindcss/oxide-freebsd-x64": "0.0.0",
- "@tailwindcss/oxide-linux-arm-gnueabihf": "0.0.0",
- "@tailwindcss/oxide-linux-arm64-gnu": "0.0.0",
- "@tailwindcss/oxide-linux-arm64-musl": "0.0.0",
- "@tailwindcss/oxide-linux-x64-gnu": "0.0.0",
- "@tailwindcss/oxide-linux-x64-musl": "0.0.0",
- "@tailwindcss/oxide-win32-x64-msvc": "0.0.0"
- }
- }
- },
- "dependencies": {
- "@alloc/quick-lru": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
- "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="
- },
- "@ampproject/remapping": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
- "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
- "dev": true,
- "requires": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "@babel/code-frame": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz",
- "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.18.6"
- }
- },
- "@babel/compat-data": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz",
- "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==",
- "dev": true
- },
- "@babel/core": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz",
- "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==",
- "dev": true,
- "requires": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.21.4",
- "@babel/generator": "^7.21.4",
- "@babel/helper-compilation-targets": "^7.21.4",
- "@babel/helper-module-transforms": "^7.21.2",
- "@babel/helpers": "^7.21.0",
- "@babel/parser": "^7.21.4",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.4",
- "@babel/types": "^7.21.4",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.2",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "dev": true
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "@babel/generator": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz",
- "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.21.4",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
- "jsesc": "^2.5.1"
- }
- },
- "@babel/helper-compilation-targets": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz",
- "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.21.4",
- "@babel/helper-validator-option": "^7.21.0",
- "browserslist": "^4.21.3",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- }
- }
- },
- "@babel/helper-environment-visitor": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
- "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
- "dev": true
- },
- "@babel/helper-function-name": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz",
- "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.20.7",
- "@babel/types": "^7.21.0"
- }
- },
- "@babel/helper-hoist-variables": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
- "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz",
- "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.21.4"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.21.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz",
- "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==",
- "dev": true,
- "requires": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.20.2",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.19.1",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.2",
- "@babel/types": "^7.21.2"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
- "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
- "dev": true
- },
- "@babel/helper-simple-access": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
- "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.20.2"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
- "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
- "@babel/helper-string-parser": {
- "version": "7.19.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
- "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
- "dev": true
- },
- "@babel/helper-validator-identifier": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
- "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
- "dev": true
- },
- "@babel/helper-validator-option": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
- "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==",
- "dev": true
- },
- "@babel/helpers": {
- "version": "7.21.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz",
- "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.21.0",
- "@babel/types": "^7.21.0"
- }
- },
- "@babel/highlight": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
- "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "@babel/parser": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz",
- "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==",
- "dev": true
- },
- "@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-bigint": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
- "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.12.13"
- }
- },
- "@babel/plugin-syntax-import-meta": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz",
- "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.20.2"
- }
- },
- "@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-top-level-await": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-typescript": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz",
- "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.20.2"
- }
- },
- "@babel/template": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
- "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.18.6",
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7"
- }
- },
- "@babel/traverse": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz",
- "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.21.4",
- "@babel/generator": "^7.21.4",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.21.0",
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.21.4",
- "@babel/types": "^7.21.4",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
- },
- "dependencies": {
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- }
- }
- },
- "@babel/types": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz",
- "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==",
- "dev": true,
- "requires": {
- "@babel/helper-string-parser": "^7.19.4",
- "@babel/helper-validator-identifier": "^7.19.1",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@bcoe/v8-coverage": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
- "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true
- },
- "@esbuild/android-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz",
- "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/android-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz",
- "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/android-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz",
- "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/darwin-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz",
- "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/darwin-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz",
- "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==",
- "dev": true,
- "optional": true
- },
- "@esbuild/freebsd-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz",
- "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/freebsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz",
- "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-arm": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz",
- "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz",
- "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz",
- "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-loong64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz",
- "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-mips64el": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz",
- "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-ppc64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz",
- "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-riscv64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz",
- "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-s390x": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz",
- "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/linux-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz",
- "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/netbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz",
- "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/openbsd-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz",
- "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==",
- "dev": true,
- "optional": true
- },
- "@esbuild/sunos-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz",
- "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-arm64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz",
- "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-ia32": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz",
- "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==",
- "dev": true,
- "optional": true
- },
- "@esbuild/win32-x64": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz",
- "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==",
- "dev": true,
- "optional": true
- },
- "@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^3.3.0"
- }
- },
- "@eslint-community/regexpp": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz",
- "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==",
- "dev": true
- },
- "@eslint/eslintrc": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz",
- "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.5.1",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- }
- },
- "@eslint/js": {
- "version": "8.39.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz",
- "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==",
- "dev": true
- },
- "@humanwhocodes/config-array": {
- "version": "0.11.8",
- "dev": true,
- "requires": {
- "@humanwhocodes/object-schema": "^1.2.1",
- "debug": "^4.1.1",
- "minimatch": "^3.0.5"
- }
- },
- "@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "dev": true
- },
- "@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "dev": true
- },
- "@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
- "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- },
- "dependencies": {
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true
- }
- }
- },
- "@istanbuljs/schema": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
- "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
- "dev": true
- },
- "@jest/console": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz",
- "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
- "slash": "^3.0.0"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "@jest/core": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz",
- "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==",
- "dev": true,
- "requires": {
- "@jest/console": "^29.5.0",
- "@jest/reporters": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
- "jest-changed-files": "^29.5.0",
- "jest-config": "^29.5.0",
- "jest-haste-map": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-resolve-dependencies": "^29.5.0",
- "jest-runner": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
- "jest-watcher": "^29.5.0",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.5.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "@jest/create-cache-key-function": {
- "version": "27.4.2",
- "dev": true,
- "requires": {
- "@jest/types": "^27.4.2"
- }
- },
- "@jest/environment": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz",
- "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==",
- "dev": true,
- "requires": {
- "@jest/fake-timers": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "jest-mock": "^29.5.0"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "@jest/expect": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz",
- "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==",
- "dev": true,
- "requires": {
- "expect": "^29.5.0",
- "jest-snapshot": "^29.5.0"
- }
- },
- "@jest/expect-utils": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz",
- "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==",
- "dev": true,
- "requires": {
- "jest-get-type": "^29.4.3"
- }
- },
- "@jest/fake-timers": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz",
- "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==",
- "dev": true,
- "requires": {
- "@jest/types": "^29.5.0",
- "@sinonjs/fake-timers": "^10.0.2",
- "@types/node": "*",
- "jest-message-util": "^29.5.0",
- "jest-mock": "^29.5.0",
- "jest-util": "^29.5.0"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "@jest/globals": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz",
- "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==",
- "dev": true,
- "requires": {
- "@jest/environment": "^29.5.0",
- "@jest/expect": "^29.5.0",
- "@jest/types": "^29.5.0",
- "jest-mock": "^29.5.0"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "@jest/reporters": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz",
- "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==",
- "dev": true,
- "requires": {
- "@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@jridgewell/trace-mapping": "^0.3.15",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^5.1.0",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.1.3",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-worker": "^29.5.0",
- "slash": "^3.0.0",
- "string-length": "^4.0.1",
- "strip-ansi": "^6.0.0",
- "v8-to-istanbul": "^9.0.1"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "@jest/schemas": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz",
- "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==",
- "dev": true,
- "requires": {
- "@sinclair/typebox": "^0.25.16"
- }
- },
- "@jest/source-map": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz",
- "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==",
- "dev": true,
- "requires": {
- "@jridgewell/trace-mapping": "^0.3.15",
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.9"
- }
- },
- "@jest/test-result": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz",
- "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==",
- "dev": true,
- "requires": {
- "@jest/console": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "@jest/test-sequencer": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz",
- "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==",
- "dev": true,
- "requires": {
- "@jest/test-result": "^29.5.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
- "slash": "^3.0.0"
- }
- },
- "@jest/transform": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz",
- "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.11.6",
- "@jest/types": "^29.5.0",
- "@jridgewell/trace-mapping": "^0.3.15",
- "babel-plugin-istanbul": "^6.1.1",
- "chalk": "^4.0.0",
- "convert-source-map": "^2.0.0",
- "fast-json-stable-stringify": "^2.1.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-util": "^29.5.0",
- "micromatch": "^4.0.4",
- "pirates": "^4.0.4",
- "slash": "^3.0.0",
- "write-file-atomic": "^4.0.2"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "@jest/types": {
- "version": "27.5.1",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^16.0.0",
- "chalk": "^4.0.0"
- }
- },
- "@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "@jridgewell/resolve-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
- },
- "@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
- },
- "@jridgewell/trace-mapping": {
- "version": "0.3.18",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
- "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
- "requires": {
- "@jridgewell/resolve-uri": "3.1.0",
- "@jridgewell/sourcemap-codec": "1.4.14"
- },
- "dependencies": {
- "@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
- }
- }
- },
- "@mole-inc/bin-wrapper": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/@mole-inc/bin-wrapper/-/bin-wrapper-8.0.1.tgz",
- "integrity": "sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==",
- "dev": true,
- "requires": {
- "bin-check": "^4.1.0",
- "bin-version-check": "^5.0.0",
- "content-disposition": "^0.5.4",
- "ext-name": "^5.0.0",
- "file-type": "^17.1.6",
- "filenamify": "^5.0.2",
- "got": "^11.8.5",
- "os-filter-obj": "^2.0.0"
- }
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.5",
- "requires": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.5"
- },
- "@nodelib/fs.walk": {
- "version": "1.2.8",
- "requires": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- }
- },
- "@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
- "optional": true
- },
- "@sinclair/typebox": {
- "version": "0.25.24",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz",
- "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==",
- "dev": true
- },
- "@sindresorhus/is": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
- "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==",
- "dev": true
- },
- "@sinonjs/commons": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
- "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "10.0.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz",
- "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^2.0.0"
- }
- },
- "@swc/cli": {
- "version": "0.1.62",
- "resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.1.62.tgz",
- "integrity": "sha512-kOFLjKY3XH1DWLfXL1/B5MizeNorHR8wHKEi92S/Zi9Md/AK17KSqR8MgyRJ6C1fhKHvbBCl8wboyKAFXStkYw==",
- "dev": true,
- "requires": {
- "@mole-inc/bin-wrapper": "^8.0.1",
- "commander": "^7.1.0",
- "fast-glob": "^3.2.5",
- "semver": "^7.3.8",
- "slash": "3.0.0",
- "source-map": "^0.7.3"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.3",
- "dev": true
- }
- }
- },
- "@swc/core": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.55.tgz",
- "integrity": "sha512-w/lN3OuJsuy868yJZKop+voZLVzI5pVSoopQVtgDNkEzejnPuRp9XaeAValvuMaWqKoTMtOjLzEPyv/xiAGYQQ==",
- "dev": true,
- "requires": {
- "@swc/core-darwin-arm64": "1.3.55",
- "@swc/core-darwin-x64": "1.3.55",
- "@swc/core-linux-arm-gnueabihf": "1.3.55",
- "@swc/core-linux-arm64-gnu": "1.3.55",
- "@swc/core-linux-arm64-musl": "1.3.55",
- "@swc/core-linux-x64-gnu": "1.3.55",
- "@swc/core-linux-x64-musl": "1.3.55",
- "@swc/core-win32-arm64-msvc": "1.3.55",
- "@swc/core-win32-ia32-msvc": "1.3.55",
- "@swc/core-win32-x64-msvc": "1.3.55"
- }
- },
- "@swc/core-darwin-arm64": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.55.tgz",
- "integrity": "sha512-UnHC8aPg/JvHhgXxTU6EhTtfnYNS7nhq8EKB8laNPxlHbwEyMBVQ2QuJHlNCtFtvSfX/uH5l04Ld1iGXnBTfdQ==",
- "dev": true,
- "optional": true
- },
- "@swc/core-darwin-x64": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.55.tgz",
- "integrity": "sha512-VNJkFVARrktIqtaLrD1NFA54gqekH7eAUcUY2U2SdHwO67HYjfMXMxlugLP5PDasSKpTkrVooUdhkffoA5W50g==",
- "dev": true,
- "optional": true
- },
- "@swc/core-linux-arm-gnueabihf": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.55.tgz",
- "integrity": "sha512-6OcohhIFKKNW/TpJt26Tpul8zyL7dmp1Lnyj2BX9ycsZZ5UnsNiGqn37mrqJgVTx/ansEmbyOmKu2mzm/Ct6cQ==",
- "dev": true,
- "optional": true
- },
- "@swc/core-linux-arm64-gnu": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.55.tgz",
- "integrity": "sha512-MfZtXGBv21XWwvrSMP0CMxScDolT/iv5PRl9UBprYUehwWr7BNjA3V9W7QQ+kKoPyORWk7LX7OpJZF3FnO618Q==",
- "dev": true,
- "optional": true
- },
- "@swc/core-linux-arm64-musl": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.55.tgz",
- "integrity": "sha512-iZJo+7L5lv10W0f0C6SlyteAyMJt5Tp+aH3+nlAwKdtc+VjyL1sGhR8DJMXp2/buBRZJ9tjEtpXKDaWUdSdF7Q==",
- "dev": true,
- "optional": true
- },
- "@swc/core-linux-x64-gnu": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.55.tgz",
- "integrity": "sha512-Rmc8ny/mslzzz0+wNK9/mLdyAWVbMZHRSvljhpzASmq48NBkmZ5vk9/WID6MnUz2e9cQ0JxJQs8t39KlFJtW3g==",
- "dev": true,
- "optional": true
- },
- "@swc/core-linux-x64-musl": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.55.tgz",
- "integrity": "sha512-Ymoc4xxINzS93ZjVd2UZfLZk1jF6wHjdCbC1JF+0zK3IrNrxCIDoWoaAj0+Bbvyo3hD1Xg/cneSTsqX8amnnuQ==",
- "dev": true,
- "optional": true
- },
- "@swc/core-win32-arm64-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.55.tgz",
- "integrity": "sha512-OhnmFstq2qRU2GI5I0G/8L+vc2rx8+w+IOA6EZBrY4FuMCbPIZKKzlnAIxYn2W+yD4gvBzYP3tgEcaDfQk6EkA==",
- "dev": true,
- "optional": true
- },
- "@swc/core-win32-ia32-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.55.tgz",
- "integrity": "sha512-3VR5rHZ6uoL/Vo3djV30GgX2oyDwWWsk+Yp+nyvYyBaKYiH2zeHfxdYRLSQV3W7kSlCAH3oDYpSljrWZ0t5XEQ==",
- "dev": true,
- "optional": true
- },
- "@swc/core-win32-x64-msvc": {
- "version": "1.3.55",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.55.tgz",
- "integrity": "sha512-KBtMFtRwnbxBugYf6i2ePqEGdxsk715KcqGMjGhxNg7BTACnXnhj37irHu2e7A7wZffbkUVUYuj/JEgVkEjSxg==",
- "dev": true,
- "optional": true
- },
- "@swc/jest": {
- "version": "0.2.26",
- "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.26.tgz",
- "integrity": "sha512-7lAi7q7ShTO3E5Gt1Xqf3pIhRbERxR1DUxvtVa9WKzIB+HGQ7wZP5sYx86zqnaEoKKGhmOoZ7gyW0IRu8Br5+A==",
- "dev": true,
- "requires": {
- "@jest/create-cache-key-function": "^27.4.2",
- "jsonc-parser": "^3.2.0"
- }
- },
- "@swc/register": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/@swc/register/-/register-0.1.10.tgz",
- "integrity": "sha512-6STwH/q4dc3pitXLVkV7sP0Hiy+zBsU2wOF1aXpXR95pnH3RYHKIsDC+gvesfyB7jxNT9OOZgcqOp9RPxVTx9A==",
- "dev": true,
- "requires": {
- "lodash.clonedeep": "^4.5.0",
- "pirates": "^4.0.1",
- "source-map-support": "^0.5.13"
- }
- },
- "@szmarczak/http-timer": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
- "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
- "dev": true,
- "requires": {
- "defer-to-connect": "^2.0.0"
- }
- },
- "@tokenizer/token": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==",
- "dev": true
- },
- "@trysound/sax": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
- "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
- "dev": true
- },
- "@types/babel__core": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz",
- "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==",
- "dev": true,
- "requires": {
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
- }
- },
- "@types/babel__generator": {
- "version": "7.6.4",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
- "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.0.0"
- }
- },
- "@types/babel__template": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
- "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
- "dev": true,
- "requires": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "@types/babel__traverse": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz",
- "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.3.0"
- }
- },
- "@types/cacheable-request": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz",
- "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==",
- "dev": true,
- "requires": {
- "@types/http-cache-semantics": "*",
- "@types/keyv": "^3.1.4",
- "@types/node": "*",
- "@types/responselike": "^1.0.0"
- }
- },
- "@types/graceful-fs": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
- "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/http-cache-semantics": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
- "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==",
- "dev": true
- },
- "@types/istanbul-lib-coverage": {
- "version": "2.0.3",
- "dev": true
- },
- "@types/istanbul-lib-report": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-coverage": "*"
- }
- },
- "@types/istanbul-reports": {
- "version": "3.0.1",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-report": "*"
- }
- },
- "@types/keyv": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz",
- "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/node": {
- "version": "16.10.2",
- "dev": true
- },
- "@types/prettier": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz",
- "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==",
- "dev": true
- },
- "@types/responselike": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
- "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/stack-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
- "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
- "dev": true
- },
- "@types/yargs": {
- "version": "16.0.4",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- },
- "@types/yargs-parser": {
- "version": "20.2.1",
- "dev": true
- },
- "acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "dev": true
- },
- "acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "requires": {}
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dev": true,
- "requires": {
- "type-fest": "^0.21.3"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true
- }
- }
- },
- "ansi-regex": {
- "version": "5.0.1",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "any-promise": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
- },
- "anymatch": {
- "version": "3.1.2",
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "arch": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
- "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
- "dev": true
- },
- "arg": {
- "version": "5.0.2"
- },
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "autoprefixer": {
- "version": "10.4.14",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
- "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.5",
- "caniuse-lite": "^1.0.30001464",
- "fraction.js": "^4.2.0",
- "normalize-range": "^0.1.2",
- "picocolors": "^1.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "babel-jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz",
- "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==",
- "dev": true,
- "requires": {
- "@jest/transform": "^29.5.0",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.5.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "slash": "^3.0.0"
- }
- },
- "babel-plugin-istanbul": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
- "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^5.0.4",
- "test-exclude": "^6.0.0"
- }
- },
- "babel-plugin-jest-hoist": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz",
- "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.1.14",
- "@types/babel__traverse": "^7.0.6"
- }
- },
- "babel-preset-current-node-syntax": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
- "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
- "dev": true,
- "requires": {
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.8.3",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-top-level-await": "^7.8.3"
- }
- },
- "babel-preset-jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz",
- "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==",
- "dev": true,
- "requires": {
- "babel-plugin-jest-hoist": "^29.5.0",
- "babel-preset-current-node-syntax": "^1.0.0"
- }
- },
- "balanced-match": {
- "version": "1.0.0"
- },
- "bin-check": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz",
- "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==",
- "dev": true,
- "requires": {
- "execa": "^0.7.0",
- "executable": "^4.1.0"
- }
- },
- "bin-version": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-6.0.0.tgz",
- "integrity": "sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==",
- "dev": true,
- "requires": {
- "execa": "^5.0.0",
- "find-versions": "^5.0.0"
- },
- "dependencies": {
- "execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- }
- },
- "get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true
- },
- "is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true
- },
- "npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "requires": {
- "path-key": "^3.0.0"
- }
- }
- }
- },
- "bin-version-check": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.0.0.tgz",
- "integrity": "sha512-Q3FMQnS5eZmrBGqmDXLs4dbAn/f+52voP6ykJYmweSA60t6DyH4UTSwZhtbK5UH+LBoWvDljILUQMLRUtsynsA==",
- "dev": true,
- "requires": {
- "bin-version": "^6.0.0",
- "semver": "^7.3.5",
- "semver-truncate": "^2.0.0"
- }
- },
- "binary-extensions": {
- "version": "2.2.0"
- },
- "boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "browserslist": {
- "version": "4.21.5",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
- "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30001449",
- "electron-to-chromium": "^1.4.284",
- "node-releases": "^2.0.8",
- "update-browserslist-db": "^1.0.10"
- }
- },
- "bser": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
- "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
- "dev": true,
- "requires": {
- "node-int64": "^0.4.0"
- }
- },
- "buffer-from": {
- "version": "1.1.1",
- "dev": true
- },
- "cacheable-lookup": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
- "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
- "dev": true
- },
- "cacheable-request": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
- "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
- "dev": true,
- "requires": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^4.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^6.0.1",
- "responselike": "^2.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- }
- }
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "camelcase-css": {
- "version": "2.0.1"
- },
- "caniuse-api": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
- "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
- "dev": true,
- "requires": {
- "browserslist": "^4.0.0",
- "caniuse-lite": "^1.0.0",
- "lodash.memoize": "^4.1.2",
- "lodash.uniq": "^4.5.0"
- }
- },
- "caniuse-lite": {
- "version": "1.0.30001481",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz",
- "integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==",
- "dev": true
- },
- "chalk": {
- "version": "4.1.2",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "char-regex": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
- "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
- "dev": true
- },
- "chokidar": {
- "version": "3.5.3",
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "dependencies": {
- "braces": {
- "version": "3.0.2",
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "is-number": {
- "version": "7.0.0"
- },
- "to-regex-range": {
- "version": "5.0.1",
- "requires": {
- "is-number": "^7.0.0"
- }
- }
- }
- },
- "ci-info": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
- "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
- "dev": true
- },
- "cjs-module-lexer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
- "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
- "dev": true
- },
- "cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- }
- },
- "clone-response": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz",
- "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==",
- "dev": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
- "dev": true
- },
- "collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
- "dev": true
- },
- "color-convert": {
- "version": "2.0.1",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "dev": true
- },
- "colord": {
- "version": "2.9.3",
- "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
- "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
- "dev": true
- },
- "commander": {
- "version": "7.2.0",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1"
- },
- "concurrently": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.0.1.tgz",
- "integrity": "sha512-Sh8bGQMEL0TAmAm2meAXMjcASHZa7V0xXQVDBLknCPa9TPtkY9yYs+0cnGGgfdkW0SV1Mlg+hVGfXcoI8d3MJA==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.2",
- "date-fns": "^2.29.3",
- "lodash": "^4.17.21",
- "rxjs": "^7.8.0",
- "shell-quote": "^1.8.0",
- "spawn-command": "0.0.2-1",
- "supports-color": "^8.1.1",
- "tree-kill": "^1.2.2",
- "yargs": "^17.7.1"
- },
- "dependencies": {
- "supports-color": {
- "version": "8.1.1",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "content-disposition": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
- "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.2.1"
- }
- },
- "convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
- },
- "cross-spawn": {
- "version": "7.0.3",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "css-declaration-sorter": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz",
- "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==",
- "dev": true,
- "requires": {}
- },
- "css-select": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
- "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
- "dev": true,
- "requires": {
- "boolbase": "^1.0.0",
- "css-what": "^6.1.0",
- "domhandler": "^5.0.2",
- "domutils": "^3.0.1",
- "nth-check": "^2.0.1"
- }
- },
- "css-tree": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
- "dev": true,
- "requires": {
- "mdn-data": "2.0.30",
- "source-map-js": "^1.0.1"
- }
- },
- "css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
- "dev": true
- },
- "cssesc": {
- "version": "3.0.0"
- },
- "cssnano": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.0.tgz",
- "integrity": "sha512-RGlcbzGhzEBCHuQe3k+Udyj5M00z0pm9S+VurHXFEOXxH+y0sVrJH2sMzoyz2d8N1EScazg+DVvmgyx0lurwwA==",
- "dev": true,
- "requires": {
- "cssnano-preset-default": "^6.0.0",
- "lilconfig": "^2.1.0"
- }
- },
- "cssnano-preset-default": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.0.tgz",
- "integrity": "sha512-BDxlaFzObRDXUiCCBQUNQcI+f1/aX2mgoNtXGjV6PG64POcHoDUoX+LgMWw+Q4609QhxwkcSnS65YFs42RA6qQ==",
- "dev": true,
- "requires": {
- "css-declaration-sorter": "^6.3.1",
- "cssnano-utils": "^4.0.0",
- "postcss-calc": "^8.2.3",
- "postcss-colormin": "^6.0.0",
- "postcss-convert-values": "^6.0.0",
- "postcss-discard-comments": "^6.0.0",
- "postcss-discard-duplicates": "^6.0.0",
- "postcss-discard-empty": "^6.0.0",
- "postcss-discard-overridden": "^6.0.0",
- "postcss-merge-longhand": "^6.0.0",
- "postcss-merge-rules": "^6.0.0",
- "postcss-minify-font-values": "^6.0.0",
- "postcss-minify-gradients": "^6.0.0",
- "postcss-minify-params": "^6.0.0",
- "postcss-minify-selectors": "^6.0.0",
- "postcss-normalize-charset": "^6.0.0",
- "postcss-normalize-display-values": "^6.0.0",
- "postcss-normalize-positions": "^6.0.0",
- "postcss-normalize-repeat-style": "^6.0.0",
- "postcss-normalize-string": "^6.0.0",
- "postcss-normalize-timing-functions": "^6.0.0",
- "postcss-normalize-unicode": "^6.0.0",
- "postcss-normalize-url": "^6.0.0",
- "postcss-normalize-whitespace": "^6.0.0",
- "postcss-ordered-values": "^6.0.0",
- "postcss-reduce-initial": "^6.0.0",
- "postcss-reduce-transforms": "^6.0.0",
- "postcss-svgo": "^6.0.0",
- "postcss-unique-selectors": "^6.0.0"
- }
- },
- "cssnano-utils": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
- "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
- "dev": true,
- "requires": {}
- },
- "csso": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
- "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
- "dev": true,
- "requires": {
- "css-tree": "~2.2.0"
- },
- "dependencies": {
- "css-tree": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
- "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
- "dev": true,
- "requires": {
- "mdn-data": "2.0.28",
- "source-map-js": "^1.0.1"
- }
- },
- "mdn-data": {
- "version": "2.0.28",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
- "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
- "dev": true
- }
- }
- },
- "date-fns": {
- "version": "2.29.3",
- "dev": true
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decompress-response": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
- "dev": true,
- "requires": {
- "mimic-response": "^3.1.0"
- },
- "dependencies": {
- "mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
- "dev": true
- }
- }
- },
- "dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
- "dev": true
- },
- "deep-is": {
- "version": "0.1.3",
- "dev": true
- },
- "deepmerge": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
- "dev": true
- },
- "defer-to-connect": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
- "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
- "dev": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
- "dev": true
- },
- "detect-newline": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
- "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
- "dev": true
- },
- "didyoumean": {
- "version": "1.2.2"
- },
- "diff-sequences": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz",
- "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==",
- "dev": true
- },
- "dlv": {
- "version": "1.1.3"
- },
- "doctrine": {
- "version": "3.0.0",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "dom-serializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
- "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
- "dev": true,
- "requires": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.2",
- "entities": "^4.2.0"
- }
- },
- "domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "dev": true
- },
- "domhandler": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
- "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
- "dev": true,
- "requires": {
- "domelementtype": "^2.3.0"
- }
- },
- "domutils": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz",
- "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==",
- "dev": true,
- "requires": {
- "dom-serializer": "^2.0.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.1"
- }
- },
- "electron-to-chromium": {
- "version": "1.4.371",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.371.tgz",
- "integrity": "sha512-jlBzY4tFcJaiUjzhRTCWAqRvTO/fWzjA3Bls0mykzGZ7zvcMP7h05W6UcgzfT9Ca1SW2xyKDOFRyI0pQeRNZGw==",
- "dev": true
- },
- "emittery": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
- "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "esbuild": {
- "version": "0.17.18",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz",
- "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==",
- "dev": true,
- "requires": {
- "@esbuild/android-arm": "0.17.18",
- "@esbuild/android-arm64": "0.17.18",
- "@esbuild/android-x64": "0.17.18",
- "@esbuild/darwin-arm64": "0.17.18",
- "@esbuild/darwin-x64": "0.17.18",
- "@esbuild/freebsd-arm64": "0.17.18",
- "@esbuild/freebsd-x64": "0.17.18",
- "@esbuild/linux-arm": "0.17.18",
- "@esbuild/linux-arm64": "0.17.18",
- "@esbuild/linux-ia32": "0.17.18",
- "@esbuild/linux-loong64": "0.17.18",
- "@esbuild/linux-mips64el": "0.17.18",
- "@esbuild/linux-ppc64": "0.17.18",
- "@esbuild/linux-riscv64": "0.17.18",
- "@esbuild/linux-s390x": "0.17.18",
- "@esbuild/linux-x64": "0.17.18",
- "@esbuild/netbsd-x64": "0.17.18",
- "@esbuild/openbsd-x64": "0.17.18",
- "@esbuild/sunos-x64": "0.17.18",
- "@esbuild/win32-arm64": "0.17.18",
- "@esbuild/win32-ia32": "0.17.18",
- "@esbuild/win32-x64": "0.17.18"
- }
- },
- "escalade": {
- "version": "3.1.1",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "dev": true
- },
- "eslint": {
- "version": "8.39.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz",
- "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==",
- "dev": true,
- "requires": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.4.0",
- "@eslint/eslintrc": "^2.0.2",
- "@eslint/js": "8.39.0",
- "@humanwhocodes/config-array": "^0.11.8",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.0",
- "eslint-visitor-keys": "^3.4.0",
- "espree": "^9.5.1",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "grapheme-splitter": "^1.0.4",
- "ignore": "^5.2.0",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-sdsl": "^4.1.4",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "strip-ansi": "^6.0.1",
- "strip-json-comments": "^3.1.0",
- "text-table": "^0.2.0"
- },
- "dependencies": {
- "find-up": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- }
- }
- },
- "eslint-config-prettier": {
- "version": "8.8.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
- "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
- "dev": true,
- "requires": {}
- },
- "eslint-plugin-prettier": {
- "version": "4.2.1",
- "dev": true,
- "requires": {
- "prettier-linter-helpers": "^1.0.0"
- }
- },
- "eslint-scope": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
- "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- }
- },
- "eslint-visitor-keys": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
- "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
- "dev": true
- },
- "espree": {
- "version": "9.5.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz",
- "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==",
- "dev": true,
- "requires": {
- "acorn": "^8.8.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.0"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "esquery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
- "dev": true,
- "requires": {
- "estraverse": "^5.1.0"
- }
- },
- "esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "requires": {
- "estraverse": "^5.2.0"
- }
- },
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "dev": true
- },
- "execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
- "dev": true,
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
- "dev": true,
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
- "dev": true
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
- "dev": true
- }
- }
- },
- "executable": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
- "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
- "dev": true,
- "requires": {
- "pify": "^2.2.0"
- }
- },
- "exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
- "dev": true
- },
- "expect": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz",
- "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==",
- "dev": true,
- "requires": {
- "@jest/expect-utils": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0"
- }
- },
- "ext-list": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
- "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
- "dev": true,
- "requires": {
- "mime-db": "^1.28.0"
- }
- },
- "ext-name": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
- "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
- "dev": true,
- "requires": {
- "ext-list": "^2.0.0",
- "sort-keys-length": "^1.0.0"
- }
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "fast-diff": {
- "version": "1.2.0",
- "dev": true
- },
- "fast-glob": {
- "version": "3.2.12",
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "dependencies": {
- "glob-parent": {
- "version": "5.1.2",
- "requires": {
- "is-glob": "^4.0.1"
- }
- }
- }
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "dev": true
- },
- "fastq": {
- "version": "1.11.0",
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "fb-watchman": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
- "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
- "dev": true,
- "requires": {
- "bser": "2.1.1"
- }
- },
- "file-entry-cache": {
- "version": "6.0.1",
- "dev": true,
- "requires": {
- "flat-cache": "^3.0.4"
- }
- },
- "file-type": {
- "version": "17.1.6",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-17.1.6.tgz",
- "integrity": "sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==",
- "dev": true,
- "requires": {
- "readable-web-to-node-stream": "^3.0.2",
- "strtok3": "^7.0.0-alpha.9",
- "token-types": "^5.0.0-alpha.2"
- }
- },
- "filename-reserved-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz",
- "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==",
- "dev": true
- },
- "filenamify": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-5.1.1.tgz",
- "integrity": "sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==",
- "dev": true,
- "requires": {
- "filename-reserved-regex": "^3.0.0",
- "strip-outer": "^2.0.0",
- "trim-repeated": "^2.0.0"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "find-versions": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz",
- "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==",
- "dev": true,
- "requires": {
- "semver-regex": "^4.0.5"
- }
- },
- "flat-cache": {
- "version": "3.0.4",
- "dev": true,
- "requires": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- },
- "dependencies": {
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- }
- }
- },
- "flatted": {
- "version": "3.1.1",
- "dev": true
- },
- "foreground-child": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- },
- "dependencies": {
- "signal-exit": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz",
- "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==",
- "dev": true
- }
- }
- },
- "fraction.js": {
- "version": "4.2.0",
- "dev": true
- },
- "fs.realpath": {
- "version": "1.0.0"
- },
- "fsevents": {
- "version": "2.3.2",
- "optional": true
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "dev": true
- },
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
- "dev": true
- },
- "glob": {
- "version": "7.1.6",
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "6.0.2",
- "requires": {
- "is-glob": "^4.0.3"
- }
- },
- "globals": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
- "dev": true,
- "requires": {
- "type-fest": "^0.20.2"
- }
- },
- "got": {
- "version": "11.8.6",
- "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
- "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==",
- "dev": true,
- "requires": {
- "@sindresorhus/is": "^4.0.0",
- "@szmarczak/http-timer": "^4.0.5",
- "@types/cacheable-request": "^6.0.1",
- "@types/responselike": "^1.0.0",
- "cacheable-lookup": "^5.0.3",
- "cacheable-request": "^7.0.2",
- "decompress-response": "^6.0.0",
- "http2-wrapper": "^1.0.0-beta.5.2",
- "lowercase-keys": "^2.0.0",
- "p-cancelable": "^2.0.0",
- "responselike": "^2.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
- },
- "grapheme-splitter": {
- "version": "1.0.4",
- "dev": true
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "dev": true
- },
- "html-escaper": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
- },
- "http-cache-semantics": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
- "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
- "dev": true
- },
- "http2-wrapper": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
- "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
- "dev": true,
- "requires": {
- "quick-lru": "^5.1.1",
- "resolve-alpn": "^1.0.0"
- }
- },
- "human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "dev": true
- },
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true
- },
- "ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "dev": true
- },
- "import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "import-local": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
- "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
- "dev": true,
- "requires": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4"
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
- },
- "is-binary-path": {
- "version": "2.1.0",
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-core-module": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz",
- "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==",
- "requires": {
- "has": "^1.0.3"
- }
- },
- "is-extglob": {
- "version": "2.1.1"
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "is-generator-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
- "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.3",
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-path-inside": {
- "version": "3.0.3",
- "dev": true
- },
- "is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
- "dev": true
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "dev": true
- },
- "istanbul-lib-coverage": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
- "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
- "dev": true
- },
- "istanbul-lib-instrument": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
- "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.12.3",
- "@babel/parser": "^7.14.7",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
- "dev": true,
- "requires": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
- "supports-color": "^7.1.0"
- }
- },
- "istanbul-lib-source-maps": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
- "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- }
- },
- "istanbul-reports": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
- "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
- "dev": true,
- "requires": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- }
- },
- "jackspeak": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.1.0.tgz",
- "integrity": "sha512-DiEwVPqsieUzZBNxQ2cxznmFzfg/AMgJUjYw5xl6rSmCxAQXECcbSdwcLM6Ds6T09+SBfSNCGPhYUoQ96P4h7A==",
- "dev": true,
- "requires": {
- "@pkgjs/parseargs": "^0.11.0",
- "cliui": "^7.0.4"
- },
- "dependencies": {
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- }
- }
- },
- "jest": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz",
- "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==",
- "dev": true,
- "requires": {
- "@jest/core": "^29.5.0",
- "@jest/types": "^29.5.0",
- "import-local": "^3.0.2",
- "jest-cli": "^29.5.0"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "jest-changed-files": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz",
- "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==",
- "dev": true,
- "requires": {
- "execa": "^5.0.0",
- "p-limit": "^3.1.0"
- },
- "dependencies": {
- "execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- }
- },
- "get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true
- },
- "is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true
- },
- "npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "requires": {
- "path-key": "^3.0.0"
- }
- }
- }
- },
- "jest-circus": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz",
- "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==",
- "dev": true,
- "requires": {
- "@jest/environment": "^29.5.0",
- "@jest/expect": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "dedent": "^0.7.0",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^29.5.0",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
- "p-limit": "^3.1.0",
- "pretty-format": "^29.5.0",
- "pure-rand": "^6.0.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "jest-cli": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz",
- "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==",
- "dev": true,
- "requires": {
- "@jest/core": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
- "import-local": "^3.0.2",
- "jest-config": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
- "prompts": "^2.0.1",
- "yargs": "^17.3.1"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "jest-config": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz",
- "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^29.5.0",
- "@jest/types": "^29.5.0",
- "babel-jest": "^29.5.0",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-circus": "^29.5.0",
- "jest-environment-node": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-runner": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
- "micromatch": "^4.0.4",
- "parse-json": "^5.2.0",
- "pretty-format": "^29.5.0",
- "slash": "^3.0.0",
- "strip-json-comments": "^3.1.1"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "jest-diff": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
- "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
- "dev": true,
- "requires": {
- "chalk": "^4.0.0",
- "diff-sequences": "^29.4.3",
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
- }
- },
- "jest-docblock": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz",
- "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==",
- "dev": true,
- "requires": {
- "detect-newline": "^3.0.0"
- }
- },
- "jest-each": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz",
- "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==",
- "dev": true,
- "requires": {
- "@jest/types": "^29.5.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.4.3",
- "jest-util": "^29.5.0",
- "pretty-format": "^29.5.0"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "jest-environment-node": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz",
- "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==",
- "dev": true,
- "requires": {
- "@jest/environment": "^29.5.0",
- "@jest/fake-timers": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "jest-mock": "^29.5.0",
- "jest-util": "^29.5.0"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "jest-get-type": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz",
- "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==",
- "dev": true
- },
- "jest-haste-map": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz",
- "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==",
- "dev": true,
- "requires": {
- "@jest/types": "^29.5.0",
- "@types/graceful-fs": "^4.1.3",
- "@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "fsevents": "^2.3.2",
- "graceful-fs": "^4.2.9",
- "jest-regex-util": "^29.4.3",
- "jest-util": "^29.5.0",
- "jest-worker": "^29.5.0",
- "micromatch": "^4.0.4",
- "walker": "^1.0.8"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "jest-leak-detector": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz",
- "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==",
- "dev": true,
- "requires": {
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
- }
- },
- "jest-matcher-utils": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz",
- "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==",
- "dev": true,
- "requires": {
- "chalk": "^4.0.0",
- "jest-diff": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "pretty-format": "^29.5.0"
- }
- },
- "jest-message-util": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz",
- "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.5.0",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.5.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "jest-mock": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz",
- "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==",
- "dev": true,
- "requires": {
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "jest-util": "^29.5.0"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "jest-pnp-resolver": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
- "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
- "dev": true,
- "requires": {}
- },
- "jest-regex-util": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz",
- "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==",
- "dev": true
- },
- "jest-resolve": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz",
- "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==",
- "dev": true,
- "requires": {
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
- "jest-pnp-resolver": "^1.2.2",
- "jest-util": "^29.5.0",
- "jest-validate": "^29.5.0",
- "resolve": "^1.20.0",
- "resolve.exports": "^2.0.0",
- "slash": "^3.0.0"
- }
- },
- "jest-resolve-dependencies": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz",
- "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==",
- "dev": true,
- "requires": {
- "jest-regex-util": "^29.4.3",
- "jest-snapshot": "^29.5.0"
- }
- },
- "jest-runner": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz",
- "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==",
- "dev": true,
- "requires": {
- "@jest/console": "^29.5.0",
- "@jest/environment": "^29.5.0",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.13.1",
- "graceful-fs": "^4.2.9",
- "jest-docblock": "^29.4.3",
- "jest-environment-node": "^29.5.0",
- "jest-haste-map": "^29.5.0",
- "jest-leak-detector": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-resolve": "^29.5.0",
- "jest-runtime": "^29.5.0",
- "jest-util": "^29.5.0",
- "jest-watcher": "^29.5.0",
- "jest-worker": "^29.5.0",
- "p-limit": "^3.1.0",
- "source-map-support": "0.5.13"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- },
- "source-map-support": {
- "version": "0.5.13",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
- "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- }
- }
- },
- "jest-runtime": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz",
- "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==",
- "dev": true,
- "requires": {
- "@jest/environment": "^29.5.0",
- "@jest/fake-timers": "^29.5.0",
- "@jest/globals": "^29.5.0",
- "@jest/source-map": "^29.4.3",
- "@jest/test-result": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "cjs-module-lexer": "^1.0.0",
- "collect-v8-coverage": "^1.0.0",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-mock": "^29.5.0",
- "jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.5.0",
- "jest-snapshot": "^29.5.0",
- "jest-util": "^29.5.0",
- "slash": "^3.0.0",
- "strip-bom": "^4.0.0"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "jest-snapshot": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz",
- "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.11.6",
- "@babel/generator": "^7.7.2",
- "@babel/plugin-syntax-jsx": "^7.7.2",
- "@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/traverse": "^7.7.2",
- "@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.5.0",
- "@jest/transform": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/babel__traverse": "^7.0.6",
- "@types/prettier": "^2.1.5",
- "babel-preset-current-node-syntax": "^1.0.0",
- "chalk": "^4.0.0",
- "expect": "^29.5.0",
- "graceful-fs": "^4.2.9",
- "jest-diff": "^29.5.0",
- "jest-get-type": "^29.4.3",
- "jest-matcher-utils": "^29.5.0",
- "jest-message-util": "^29.5.0",
- "jest-util": "^29.5.0",
- "natural-compare": "^1.4.0",
- "pretty-format": "^29.5.0",
- "semver": "^7.3.5"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "jest-util": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz",
- "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "graceful-fs": "^4.2.9",
- "picomatch": "^2.2.3"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "jest-validate": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz",
- "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^29.5.0",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.4.3",
- "leven": "^3.1.0",
- "pretty-format": "^29.5.0"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- },
- "camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
- }
- }
- },
- "jest-watcher": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz",
- "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==",
- "dev": true,
- "requires": {
- "@jest/test-result": "^29.5.0",
- "@jest/types": "^29.5.0",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "emittery": "^0.13.1",
- "jest-util": "^29.5.0",
- "string-length": "^4.0.1"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
- "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- }
- }
- },
- "jest-worker": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz",
- "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "jest-util": "^29.5.0",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jiti": {
- "version": "1.18.2",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz",
- "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg=="
- },
- "js-sdsl": {
- "version": "4.1.4",
- "dev": true
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
- "json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true
- },
- "json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "dev": true
- },
- "json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true
- },
- "jsonc-parser": {
- "version": "3.2.0",
- "dev": true
- },
- "keyv": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz",
- "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==",
- "dev": true,
- "requires": {
- "json-buffer": "3.0.1"
- }
- },
- "kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true
- },
- "leven": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
- "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "dev": true
- },
- "levn": {
- "version": "0.4.1",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "dependencies": {
- "prelude-ls": {
- "version": "1.2.1",
- "dev": true
- },
- "type-check": {
- "version": "0.4.0",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- }
- }
- },
- "lightningcss": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.18.0.tgz",
- "integrity": "sha512-uk10tNxi5fhZqU93vtYiQgx/8a9f0Kvtj5AXIm+VlOXY+t/DWDmCZWJEkZJmmALgvbS6aAW8or+Kq85eJ6TDTw==",
- "dev": true,
- "requires": {
- "detect-libc": "^1.0.3",
- "lightningcss-darwin-arm64": "1.18.0",
- "lightningcss-darwin-x64": "1.18.0",
- "lightningcss-linux-arm-gnueabihf": "1.18.0",
- "lightningcss-linux-arm64-gnu": "1.18.0",
- "lightningcss-linux-arm64-musl": "1.18.0",
- "lightningcss-linux-x64-gnu": "1.18.0",
- "lightningcss-linux-x64-musl": "1.18.0",
- "lightningcss-win32-x64-msvc": "1.18.0"
- }
- },
- "lightningcss-darwin-arm64": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.18.0.tgz",
- "integrity": "sha512-OqjydwtiNPgdH1ByIjA1YzqvDG/OMR6L3LPN6wRl1729LB0y4Mik7L06kmZaTb+pvUHr+NmDd2KCwnlrQ4zO3w==",
- "dev": true,
- "optional": true
- },
- "lightningcss-darwin-x64": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.18.0.tgz",
- "integrity": "sha512-mNiuPHj89/JHZmJMp+5H8EZSt6EL5DZRWJ31O6k3DrLLnRIQjXuXdDdN8kP7LoIkeWI5xvyD60CsReJm+YWYAw==",
- "dev": true,
- "optional": true
- },
- "lightningcss-linux-arm-gnueabihf": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.18.0.tgz",
- "integrity": "sha512-S+25JjI6601HiAVoTDXW6SqH+E94a+FHA7WQqseyNHunOgVWKcAkNEc2LJvVxgwTq6z41sDIb9/M3Z9wa9lk4A==",
- "dev": true,
- "optional": true
- },
- "lightningcss-linux-arm64-gnu": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.18.0.tgz",
- "integrity": "sha512-JSqh4+21dCgBecIQUet35dtE4PhhSEMyqe3y0ZNQrAJQ5kyUPSQHiw81WXnPJcOSTTpG0TyMLiC8K//+BsFGQA==",
- "dev": true,
- "optional": true
- },
- "lightningcss-linux-arm64-musl": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.18.0.tgz",
- "integrity": "sha512-2FWHa8iUhShnZnqhn2wfIcK5adJat9hAAaX7etNsoXJymlliDIOFuBQEsba2KBAZSM4QqfQtvRdR7m8i0I7ybQ==",
- "dev": true,
- "optional": true
- },
- "lightningcss-linux-x64-gnu": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.18.0.tgz",
- "integrity": "sha512-plCPGQJtDZHcLVKVRLnQVF2XRsIC32WvuJhQ7fJ7F6BV98b/VZX0OlX05qUaOESD9dCDHjYSfxsgcvOKgCWh7A==",
- "dev": true,
- "optional": true
- },
- "lightningcss-linux-x64-musl": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.18.0.tgz",
- "integrity": "sha512-na+BGtVU6fpZvOHKhnlA0XHeibkT3/46nj6vLluG3kzdJYoBKU6dIl7DSOk++8jv4ybZyFJ0aOFMMSc8g2h58A==",
- "dev": true,
- "optional": true
- },
- "lightningcss-win32-x64-msvc": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.18.0.tgz",
- "integrity": "sha512-5qeAH4RMNy2yMNEl7e5TI6upt/7xD2ZpHWH4RkT8iJ7/6POS5mjHbXWUO9Q1hhDhqkdzGa76uAdMzEouIeCyNw==",
- "dev": true,
- "optional": true
- },
- "lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="
- },
- "lines-and-columns": {
- "version": "1.2.4"
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "dev": true
- },
- "lodash.clonedeep": {
- "version": "4.5.0",
- "dev": true
- },
- "lodash.memoize": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
- "dev": true
- },
- "lodash.merge": {
- "version": "4.6.2",
- "dev": true
- },
- "lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
- "dev": true
- },
- "lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
- "dev": true
- },
- "lru-cache": {
- "version": "6.0.0",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "makeerror": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
- "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
- "dev": true,
- "requires": {
- "tmpl": "1.0.5"
- }
- },
- "mdn-data": {
- "version": "2.0.30",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
- "dev": true
- },
- "merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
- },
- "merge2": {
- "version": "1.4.1"
- },
- "micromatch": {
- "version": "4.0.5",
- "requires": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- },
- "dependencies": {
- "braces": {
- "version": "3.0.2",
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "fill-range": {
- "version": "7.0.1",
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "is-number": {
- "version": "7.0.0"
- },
- "to-regex-range": {
- "version": "5.0.1",
- "requires": {
- "is-number": "^7.0.0"
- }
- }
- }
- },
- "mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true
- },
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
- },
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "dev": true
- },
- "minimatch": {
- "version": "3.1.2",
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
- "dev": true
- },
- "ms": {
- "version": "2.1.2",
- "dev": true
- },
- "mz": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
- "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
- "requires": {
- "any-promise": "^1.0.0",
- "object-assign": "^4.0.1",
- "thenify-all": "^1.0.0"
- }
- },
- "nanoid": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
- "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
- },
- "natural-compare": {
- "version": "1.4.0",
- "dev": true
- },
- "node-int64": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
- "dev": true
- },
- "node-releases": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
- "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==",
- "dev": true
- },
- "normalize-path": {
- "version": "3.0.0"
- },
- "normalize-range": {
- "version": "0.1.2",
- "dev": true
- },
- "normalize-url": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
- "dev": true
- },
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
- "dev": true,
- "requires": {
- "path-key": "^2.0.0"
- },
- "dependencies": {
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
- "dev": true
- }
- }
- },
- "nth-check": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
- "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
- "dev": true,
- "requires": {
- "boolbase": "^1.0.0"
- }
- },
- "object-assign": {
- "version": "4.1.1"
- },
- "object-hash": {
- "version": "3.0.0"
- },
- "once": {
- "version": "1.4.0",
- "requires": {
- "wrappy": "1"
- }
- },
- "onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "optionator": {
- "version": "0.9.1",
- "dev": true,
- "requires": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
- },
- "dependencies": {
- "prelude-ls": {
- "version": "1.2.1",
- "dev": true
- },
- "type-check": {
- "version": "0.4.0",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- }
- }
- },
- "os-filter-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz",
- "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==",
- "dev": true,
- "requires": {
- "arch": "^2.1.0"
- }
- },
- "p-cancelable": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
- "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
- "dev": true
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
- "dev": true
- },
- "p-limit": {
- "version": "3.1.0",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- },
- "dependencies": {
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- }
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1"
- },
- "path-key": {
- "version": "3.1.1",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.7"
- },
- "path-scurry": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.7.0.tgz",
- "integrity": "sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==",
- "dev": true,
- "requires": {
- "lru-cache": "^9.0.0",
- "minipass": "^5.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "9.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.1.tgz",
- "integrity": "sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==",
- "dev": true
- }
- }
- },
- "peek-readable": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz",
- "integrity": "sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==",
- "dev": true
- },
- "picocolors": {
- "version": "1.0.0"
- },
- "picomatch": {
- "version": "2.3.1"
- },
- "pify": {
- "version": "2.3.0"
- },
- "pirates": {
- "version": "4.0.4"
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "postcss": {
- "version": "8.4.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz",
- "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==",
- "requires": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- }
- },
- "postcss-calc": {
- "version": "8.2.4",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz",
- "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==",
- "dev": true,
- "requires": {
- "postcss-selector-parser": "^6.0.9",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-colormin": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz",
- "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "colord": "^2.9.1",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-convert-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz",
- "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-discard-comments": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz",
- "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==",
- "dev": true,
- "requires": {}
- },
- "postcss-discard-duplicates": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz",
- "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==",
- "dev": true,
- "requires": {}
- },
- "postcss-discard-empty": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz",
- "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==",
- "dev": true,
- "requires": {}
- },
- "postcss-discard-overridden": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz",
- "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==",
- "dev": true,
- "requires": {}
- },
- "postcss-import": {
- "version": "15.1.0",
- "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
- "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
- "requires": {
- "postcss-value-parser": "^4.0.0",
- "read-cache": "^1.0.0",
- "resolve": "^1.1.7"
- }
- },
- "postcss-js": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
- "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
- "requires": {
- "camelcase-css": "^2.0.1"
- }
- },
- "postcss-load-config": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
- "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
- "requires": {
- "lilconfig": "^2.0.5",
- "yaml": "^2.1.1"
- },
- "dependencies": {
- "yaml": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz",
- "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA=="
- }
- }
- },
- "postcss-merge-longhand": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz",
- "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0",
- "stylehacks": "^6.0.0"
- }
- },
- "postcss-merge-rules": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.0.tgz",
- "integrity": "sha512-rCXkklftzEkniyv3f4mRCQzxD6oE4Quyh61uyWTUbCJ26Pv2hoz+fivJSsSBWxDBeScR4fKCfF3HHTcD7Ybqnw==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "cssnano-utils": "^4.0.0",
- "postcss-selector-parser": "^6.0.5"
- }
- },
- "postcss-minify-font-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz",
- "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-minify-gradients": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz",
- "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==",
- "dev": true,
- "requires": {
- "colord": "^2.9.1",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-minify-params": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz",
- "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-minify-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz",
- "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==",
- "dev": true,
- "requires": {
- "postcss-selector-parser": "^6.0.5"
- }
- },
- "postcss-nested": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
- "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
- "requires": {
- "postcss-selector-parser": "^6.0.11"
- }
- },
- "postcss-normalize-charset": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz",
- "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==",
- "dev": true,
- "requires": {}
- },
- "postcss-normalize-display-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz",
- "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-positions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz",
- "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-repeat-style": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz",
- "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-string": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz",
- "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-timing-functions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz",
- "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-unicode": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz",
- "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-url": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz",
- "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-normalize-whitespace": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz",
- "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-ordered-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz",
- "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==",
- "dev": true,
- "requires": {
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-reduce-initial": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz",
- "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0"
- }
- },
- "postcss-reduce-transforms": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz",
- "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0"
- }
- },
- "postcss-selector-parser": {
- "version": "6.0.11",
- "requires": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- }
- },
- "postcss-svgo": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz",
- "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==",
- "dev": true,
- "requires": {
- "postcss-value-parser": "^4.2.0",
- "svgo": "^3.0.2"
- }
- },
- "postcss-unique-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz",
- "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==",
- "dev": true,
- "requires": {
- "postcss-selector-parser": "^6.0.5"
- }
- },
- "postcss-value-parser": {
- "version": "4.2.0"
- },
- "prettier": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
- "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
- "dev": true
- },
- "prettier-linter-helpers": {
- "version": "1.0.0",
- "dev": true,
- "requires": {
- "fast-diff": "^1.1.2"
- }
- },
- "pretty-format": {
- "version": "29.5.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
- "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.4.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true
- }
- }
- },
- "prompts": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
- "dev": true,
- "requires": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- }
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
- "dev": true
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "punycode": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
- "dev": true
- },
- "pure-rand": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz",
- "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==",
- "dev": true
- },
- "queue-microtask": {
- "version": "1.2.3"
- },
- "quick-lru": {
- "version": "5.1.1",
- "dev": true
- },
- "react-is": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
- "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
- "dev": true
- },
- "read-cache": {
- "version": "1.0.0",
- "requires": {
- "pify": "^2.3.0"
- }
- },
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readable-web-to-node-stream": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
- "dev": true,
- "requires": {
- "readable-stream": "^3.6.0"
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true
- },
- "resolve": {
- "version": "1.22.2",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
- "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
- "requires": {
- "is-core-module": "^2.11.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "resolve-alpn": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
- "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
- "dev": true
- },
- "resolve-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
- "dev": true,
- "requires": {
- "resolve-from": "^5.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true
- }
- }
- },
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- },
- "resolve.exports": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
- "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
- "dev": true
- },
- "responselike": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz",
- "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==",
- "dev": true,
- "requires": {
- "lowercase-keys": "^2.0.0"
- }
- },
- "reusify": {
- "version": "1.0.4"
- },
- "rimraf": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.0.tgz",
- "integrity": "sha512-Jf9llaP+RvaEVS5nPShYFhtXIrb3LRKP281ib3So0KkeZKo2wIKyq0Re7TOSwanasA423PSr6CCIL4bP6T040g==",
- "dev": true,
- "requires": {
- "glob": "^10.0.0"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "glob": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.2.tgz",
- "integrity": "sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ==",
- "dev": true,
- "requires": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^2.0.3",
- "minimatch": "^9.0.0",
- "minipass": "^5.0.0",
- "path-scurry": "^1.7.0"
- }
- },
- "minimatch": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz",
- "integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
- }
- },
- "run-parallel": {
- "version": "1.2.0",
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
- "rxjs": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz",
- "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==",
- "dev": true,
- "requires": {
- "tslib": "^2.1.0"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- },
- "semver": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz",
- "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "semver-regex": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz",
- "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==",
- "dev": true
- },
- "semver-truncate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-2.0.0.tgz",
- "integrity": "sha512-Rh266MLDYNeML5h90ttdMwfXe1+Nc4LAWd9X1KdJe8pPHP4kFmvLZALtsMNHNdvTyQygbEC0D59sIz47DIaq8w==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
- "shebang-command": {
- "version": "2.0.0",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "dev": true
- },
- "shell-quote": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
- "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
- "dev": true
- },
- "signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
- },
- "sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "dev": true
- },
- "sort-keys": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
- "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==",
- "dev": true,
- "requires": {
- "is-plain-obj": "^1.0.0"
- }
- },
- "sort-keys-length": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
- "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==",
- "dev": true,
- "requires": {
- "sort-keys": "^1.0.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "dev": true
- },
- "source-map-js": {
- "version": "1.0.2"
- },
- "source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "spawn-command": {
- "version": "0.0.2-1",
- "dev": true
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true
- },
- "stack-utils": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
- "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^2.0.0"
- },
- "dependencies": {
- "escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true
- }
- }
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "string-length": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
- "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
- "dev": true,
- "requires": {
- "char-regex": "^1.0.2",
- "strip-ansi": "^6.0.0"
- }
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true
- },
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
- "dev": true
- },
- "strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "dev": true
- },
- "strip-outer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-2.0.0.tgz",
- "integrity": "sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==",
- "dev": true
- },
- "strtok3": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz",
- "integrity": "sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==",
- "dev": true,
- "requires": {
- "@tokenizer/token": "^0.3.0",
- "peek-readable": "^5.0.0"
- }
- },
- "stylehacks": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz",
- "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==",
- "dev": true,
- "requires": {
- "browserslist": "^4.21.4",
- "postcss-selector-parser": "^6.0.4"
- }
- },
- "sucrase": {
- "version": "3.32.0",
- "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz",
- "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==",
- "requires": {
- "@jridgewell/gen-mapping": "^0.3.2",
- "commander": "^4.0.0",
- "glob": "7.1.6",
- "lines-and-columns": "^1.1.6",
- "mz": "^2.7.0",
- "pirates": "^4.0.1",
- "ts-interface-checker": "^0.1.9"
- },
- "dependencies": {
- "commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
- }
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "supports-preserve-symlinks-flag": {
- "version": "1.0.0"
- },
- "svgo": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
- "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
- "dev": true,
- "requires": {
- "@trysound/sax": "0.2.0",
- "commander": "^7.2.0",
- "css-select": "^5.1.0",
- "css-tree": "^2.2.1",
- "csso": "^5.0.5",
- "picocolors": "^1.0.0"
- }
- },
- "test-exclude": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
- "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
- "dev": true,
- "requires": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "dev": true
- },
- "thenify": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
- "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
- "requires": {
- "any-promise": "^1.0.0"
- }
- },
- "thenify-all": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
- "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
- "requires": {
- "thenify": ">= 3.1.0 < 4"
- }
- },
- "tmpl": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
- "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
- "dev": true
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true
- },
- "token-types": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz",
- "integrity": "sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==",
- "dev": true,
- "requires": {
- "@tokenizer/token": "^0.3.0",
- "ieee754": "^1.2.1"
- }
- },
- "tree-kill": {
- "version": "1.2.2",
- "dev": true
- },
- "trim-repeated": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-2.0.0.tgz",
- "integrity": "sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^5.0.0"
- },
- "dependencies": {
- "escape-string-regexp": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
- "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
- "dev": true
- }
- }
- },
- "ts-interface-checker": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
- "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
- },
- "tslib": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
- "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==",
- "dev": true
- },
- "turbo": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.9.3.tgz",
- "integrity": "sha512-ID7mxmaLUPKG/hVkp+h0VuucB1U99RPCJD9cEuSEOdIPoSIuomcIClEJtKamUsdPLhLCud+BvapBNnhgh58Nzw==",
- "dev": true,
- "requires": {
- "turbo-darwin-64": "1.9.3",
- "turbo-darwin-arm64": "1.9.3",
- "turbo-linux-64": "1.9.3",
- "turbo-linux-arm64": "1.9.3",
- "turbo-windows-64": "1.9.3",
- "turbo-windows-arm64": "1.9.3"
- }
- },
- "turbo-darwin-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.9.3.tgz",
- "integrity": "sha512-0dFc2cWXl82kRE4Z+QqPHhbEFEpUZho1msHXHWbz5+PqLxn8FY0lEVOHkq5tgKNNEd5KnGyj33gC/bHhpZOk5g==",
- "dev": true,
- "optional": true
- },
- "turbo-darwin-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.9.3.tgz",
- "integrity": "sha512-1cYbjqLBA2zYE1nbf/qVnEkrHa4PkJJbLo7hnuMuGM0bPzh4+AnTNe98gELhqI1mkTWBu/XAEeF5u6dgz0jLNA==",
- "dev": true,
- "optional": true
- },
- "turbo-linux-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.9.3.tgz",
- "integrity": "sha512-UuBPFefawEwpuxh5pM9Jqq3q4C8M0vYxVYlB3qea/nHQ80pxYq7ZcaLGEpb10SGnr3oMUUs1zZvkXWDNKCJb8Q==",
- "dev": true,
- "optional": true
- },
- "turbo-linux-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.9.3.tgz",
- "integrity": "sha512-vUrNGa3hyDtRh9W0MkO+l1dzP8Co2gKnOVmlJQW0hdpOlWlIh22nHNGGlICg+xFa2f9j4PbQlWTsc22c019s8Q==",
- "dev": true,
- "optional": true
- },
- "turbo-windows-64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.9.3.tgz",
- "integrity": "sha512-0BZ7YaHs6r+K4ksqWus1GKK3W45DuDqlmfjm/yuUbTEVc8szmMCs12vugU2Zi5GdrdJSYfoKfEJ/PeegSLIQGQ==",
- "dev": true,
- "optional": true
- },
- "turbo-windows-arm64": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.9.3.tgz",
- "integrity": "sha512-QJUYLSsxdXOsR1TquiOmLdAgtYcQ/RuSRpScGvnZb1hY0oLc7JWU0llkYB81wVtWs469y8H9O0cxbKwCZGR4RQ==",
- "dev": true,
- "optional": true
- },
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
- },
- "type-fest": {
- "version": "0.20.2",
- "dev": true
- },
- "update-browserslist-db": {
- "version": "1.0.10",
- "dev": true,
- "requires": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- }
- },
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2"
- },
- "v8-to-istanbul": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz",
- "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==",
- "dev": true,
- "requires": {
- "@jridgewell/trace-mapping": "^0.3.12",
- "@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^1.6.0"
- },
- "dependencies": {
- "convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "dev": true
- }
- }
- },
- "walker": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
- "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
- "dev": true,
- "requires": {
- "makeerror": "1.0.12"
- }
- },
- "which": {
- "version": "2.0.2",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "word-wrap": {
- "version": "1.2.3",
- "dev": true
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "wrappy": {
- "version": "1.0.2"
- },
- "write-file-atomic": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
- "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.7"
- }
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
- },
- "yallist": {
- "version": "4.0.0",
- "dev": true
- },
- "yargs": {
- "version": "17.7.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz",
- "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==",
- "dev": true,
- "requires": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- }
- },
- "yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true
- },
- "yocto-queue": {
- "version": "0.1.0",
- "dev": true
- }
- }
-}
diff --git a/package.json b/package.json
index e91533f0b..79407ca1f 100644
--- a/package.json
+++ b/package.json
@@ -16,12 +16,9 @@
"integrations/*",
"oxide/crates/node"
],
- "tailwindcss": {
- "engine": "oxide"
- },
"scripts": {
"dev": "concurrently -n tailwind,oxide-node -c green,yellow 'npm run dev:js' 'npm run dev:rust'",
- "build": "npm run build:rust && npm run build:js && npm run build:peers",
+ "build": "npm run build:rust && npm run build:js",
"test": "jest",
"test:integrations": "npm run test -w ./integrations",
"style": "eslint .",
@@ -29,8 +26,7 @@
"dev:rust": "npm run --prefix ./oxide dev:node",
"dev:js": "npm run build:js -- --watch",
"build:rust": "npm run --prefix ./oxide build:node",
- "build:js": "npm run generate:plugin-list && swc src --out-dir lib --copy-files --delete-dir-on-start --config jsc.transform.optimizer.globals.vars.__OXIDE__='\"true\"'",
- "build:peers": "esbuild lib/cli-peer-dependencies.js --bundle --platform=node --outfile=peers/index.js --define:process.env.CSS_TRANSFORMER_WASM=false",
+ "build:js": "npm run generate:plugin-list && swc src --out-dir lib --copy-files --delete-dir-on-start",
"generate:plugin-list": "node -r @swc/register scripts/create-plugin-list.js",
"generate:types": "node -r @swc/register scripts/generate-types.js"
},
@@ -38,7 +34,6 @@
"src/*",
"cli/*",
"lib/*",
- "peers/*",
"scripts/*.js",
"stubs/*",
"nesting/*",
@@ -48,57 +43,53 @@
"*.js"
],
"devDependencies": {
- "@swc/cli": "^0.1.62",
- "@swc/core": "^1.3.55",
- "@swc/jest": "^0.2.26",
+ "@swc/cli": "^0.1.63",
+ "@swc/core": "^1.3.95",
+ "@swc/jest": "^0.2.29",
"@swc/register": "^0.1.10",
- "autoprefixer": "^10.4.14",
"concurrently": "^8.0.1",
- "cssnano": "^6.0.0",
- "esbuild": "^0.17.18",
- "eslint": "^8.39.0",
- "eslint-config-prettier": "^8.8.0",
+ "eslint": "^8.52.0",
+ "eslint-config-prettier": "^9.0.0",
"eslint-plugin-prettier": "^4.2.1",
- "jest": "^29.5.0",
- "jest-diff": "^29.5.0",
+ "jest": "^29.7.0",
+ "jest-diff": "^29.7.0",
"prettier": "^2.8.8",
"rimraf": "^5.0.0",
"source-map-js": "^1.0.2",
- "turbo": "^1.9.3"
+ "turbo": "^1.10.16"
},
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"@tailwindcss/oxide": "file:oxide/crates/node",
"arg": "^5.0.2",
- "browserslist": "^4.21.5",
+ "browserslist": "^4.22.1",
"chokidar": "^3.5.3",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
- "fast-glob": "^3.2.12",
+ "fast-glob": "^3.3.2",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
- "jiti": "^1.18.2",
- "lightningcss": "^1.18.0",
- "lilconfig": "^2.1.0",
+ "jiti": "^1.21.0",
+ "lightningcss": "^1.22.1",
+ "lilconfig": "^3.0.0",
"micromatch": "^4.0.5",
"normalize-path": "^3.0.0",
"object-hash": "^3.0.0",
"picocolors": "^1.0.0",
- "postcss": "^8.4.23",
+ "postcss": "^8.4.31",
"postcss-import": "^15.1.0",
"postcss-js": "^4.0.1",
- "postcss-load-config": "^4.0.1",
+ "postcss-load-config": "^4.0.2",
"postcss-nested": "^6.0.1",
- "postcss-selector-parser": "^6.0.11",
+ "postcss-selector-parser": "^6.0.12",
"postcss-value-parser": "^4.2.0",
- "resolve": "^1.22.2",
- "sucrase": "^3.32.0"
+ "resolve": "^1.22.8",
+ "sucrase": "^3.34.0"
},
"browserslist": [
- "> 1%",
- "not edge <= 18",
- "not ie 11",
- "not op_mini all"
+ "defaults and supports css-variables and supports css-matches-pseudo",
+ "not android <= 117",
+ "safari >= 14"
],
"jest": {
"testTimeout": 30000,
diff --git a/package.stable.json b/package.stable.json
deleted file mode 100644
index 308740509..000000000
--- a/package.stable.json
+++ /dev/null
@@ -1,122 +0,0 @@
-{
- "name": "tailwindcss",
- "version": "3.3.2",
- "description": "A utility-first CSS framework for rapidly building custom user interfaces.",
- "license": "MIT",
- "main": "lib/index.js",
- "types": "types/index.d.ts",
- "repository": "https://github.com/tailwindlabs/tailwindcss.git",
- "bugs": "https://github.com/tailwindlabs/tailwindcss/issues",
- "homepage": "https://tailwindcss.com",
- "bin": {
- "tailwind": "lib/cli.js",
- "tailwindcss": "lib/cli.js"
- },
- "tailwindcss": {
- "engine": "stable"
- },
- "scripts": {
- "prebuild": "npm run generate && rimraf lib",
- "build": "swc src --out-dir lib --copy-files --config jsc.transform.optimizer.globals.vars.__OXIDE__='\"false\"'",
- "postbuild": "esbuild lib/cli-peer-dependencies.js --bundle --platform=node --outfile=peers/index.js --define:process.env.CSS_TRANSFORMER_WASM=false",
- "rebuild-fixtures": "npm run build && node -r @swc/register scripts/rebuildFixtures.js",
- "style": "eslint .",
- "pretest": "npm run generate",
- "test": "jest",
- "test:integrations": "npm run test --prefix ./integrations",
- "install:integrations": "node scripts/install-integrations.js",
- "generate:plugin-list": "node -r @swc/register scripts/create-plugin-list.js",
- "generate:types": "node -r @swc/register scripts/generate-types.js",
- "generate": "npm run generate:plugin-list && npm run generate:types",
- "release-channel": "node ./scripts/release-channel.js",
- "release-notes": "node ./scripts/release-notes.js",
- "prepublishOnly": "npm install --force && npm run build"
- },
- "files": [
- "src/*",
- "cli/*",
- "lib/*",
- "peers/*",
- "scripts/*.js",
- "stubs/*",
- "nesting/*",
- "types/**/*",
- "*.d.ts",
- "*.css",
- "*.js"
- ],
- "devDependencies": {
- "@swc/cli": "^0.1.62",
- "@swc/core": "^1.3.55",
- "@swc/jest": "^0.2.26",
- "@swc/register": "^0.1.10",
- "autoprefixer": "^10.4.14",
- "browserslist": "^4.21.5",
- "concurrently": "^8.0.1",
- "cssnano": "^6.0.0",
- "esbuild": "^0.17.18",
- "eslint": "^8.39.0",
- "eslint-config-prettier": "^8.8.0",
- "eslint-plugin-prettier": "^4.2.1",
- "jest": "^29.5.0",
- "jest-diff": "^29.5.0",
- "lightningcss": "1.18.0",
- "prettier": "^2.8.8",
- "rimraf": "^5.0.0",
- "source-map-js": "^1.0.2",
- "turbo": "^1.9.3"
- },
- "dependencies": {
- "@alloc/quick-lru": "^5.2.0",
- "arg": "^5.0.2",
- "chokidar": "^3.5.3",
- "didyoumean": "^1.2.2",
- "dlv": "^1.1.3",
- "fast-glob": "^3.2.12",
- "glob-parent": "^6.0.2",
- "is-glob": "^4.0.3",
- "jiti": "^1.18.2",
- "lilconfig": "^2.1.0",
- "micromatch": "^4.0.5",
- "normalize-path": "^3.0.0",
- "object-hash": "^3.0.0",
- "picocolors": "^1.0.0",
- "postcss": "^8.4.23",
- "postcss-import": "^15.1.0",
- "postcss-js": "^4.0.1",
- "postcss-load-config": "^4.0.1",
- "postcss-nested": "^6.0.1",
- "postcss-selector-parser": "^6.0.11",
- "postcss-value-parser": "^4.2.0",
- "resolve": "^1.22.2",
- "sucrase": "^3.32.0"
- },
- "browserslist": [
- "> 1%",
- "not edge <= 18",
- "not ie 11",
- "not op_mini all"
- ],
- "jest": {
- "testTimeout": 30000,
- "setupFilesAfterEnv": [
- "/jest/customMatchers.js"
- ],
- "testPathIgnorePatterns": [
- "/node_modules/",
- "/integrations/",
- "/standalone-cli/",
- "\\.test\\.skip\\.js$"
- ],
- "transformIgnorePatterns": [
- "node_modules/(?!lightningcss)"
- ],
- "transform": {
- "\\.js$": "@swc/jest",
- "\\.ts$": "@swc/jest"
- }
- },
- "engines": {
- "node": ">=14.0.0"
- }
-}
diff --git a/resolveConfig.d.ts b/resolveConfig.d.ts
index 2402a267e..792162775 100644
--- a/resolveConfig.d.ts
+++ b/resolveConfig.d.ts
@@ -1,11 +1,30 @@
-import type { Config, ResolvableTo } from './types/config'
+import { Config, ResolvableTo, ThemeConfig } from './types/config'
+import { DefaultTheme } from './types/generated/default-theme'
+import { DefaultColors } from './types/generated/colors'
+
+type ResolvedConfig = Omit & {
+ theme: MergeThemes<
+ UnwrapResolvables>,
+ T['theme'] extends { extend: infer TExtend } ? UnwrapResolvables : {}
+ >
+}
type UnwrapResolvables = {
[K in keyof T]: T[K] extends ResolvableTo ? R : T[K]
}
-type ResolvedConfig = Omit & {
- theme: UnwrapResolvables
+type ThemeConfigResolved = UnwrapResolvables
+type DefaultThemeFull = DefaultTheme & { colors: DefaultColors }
+
+type MergeThemes = {
+ [K in keyof ThemeConfigResolved | keyof Overrides]: (K extends keyof Overrides
+ ? Overrides[K]
+ : K extends keyof DefaultThemeFull
+ ? DefaultThemeFull[K]
+ : K extends keyof ThemeConfigResolved
+ ? ThemeConfigResolved[K]
+ : never) &
+ (K extends keyof Extensions ? Extensions[K] : {})
}
declare function resolveConfig(config: T): ResolvedConfig
diff --git a/scripts/generate-types.js b/scripts/generate-types.js
index d3e0d303e..a0bd5d523 100644
--- a/scripts/generate-types.js
+++ b/scripts/generate-types.js
@@ -91,9 +91,8 @@ fs.writeFileSync(
path.join(process.cwd(), 'types', 'generated', 'default-theme.d.ts'),
prettier.format(
`
- import { Config } from '../../types'
type CSSDeclarationList = Record
- export type DefaultTheme = Config['theme'] & { ${defaultThemeTypes} }
+ export type DefaultTheme = { ${defaultThemeTypes} }
`,
{
semi: false,
diff --git a/scripts/release-notes.js b/scripts/release-notes.js
index bd29e952d..1c16e3b51 100644
--- a/scripts/release-notes.js
+++ b/scripts/release-notes.js
@@ -1,5 +1,5 @@
// Given a version, figure out what the release notes are so that we can use this to pre-fill the
-// relase notes on a GitHub release for the current version.
+// release notes on a GitHub release for the current version.
let path = require('path')
let fs = require('fs')
diff --git a/scripts/swap-engines.js b/scripts/swap-engines.js
deleted file mode 100644
index ef8308aeb..000000000
--- a/scripts/swap-engines.js
+++ /dev/null
@@ -1,40 +0,0 @@
-let fs = require('fs')
-let path = require('path')
-
-let engines = {
- stable: {
- files: [
- path.resolve(__dirname, '..', 'package.stable.json'),
- path.resolve(__dirname, '..', 'package-lock.stable.json'),
- ],
- },
- oxide: {
- files: [
- path.resolve(__dirname, '..', 'package.oxide.json'),
- path.resolve(__dirname, '..', 'package-lock.oxide.json'),
- ],
- },
-}
-
-// Find out what the current engine is that we are using:
-let [otherEngine, info] = Object.entries(engines).find(([, info]) =>
- info.files.every((file) => fs.existsSync(file))
-)
-let currentEngine = otherEngine === 'oxide' ? 'stable' : 'oxide'
-
-console.log(`Current engine: \`${currentEngine}\`, swapping to \`${otherEngine}\``)
-
-// Swap the engines
-for (let file of info.files) {
- fs.renameSync(
- file.replace(`.${otherEngine}`, ''),
- file.replace(`.${otherEngine}`, `.${currentEngine}`)
- )
-}
-for (let file of engines[otherEngine].files) {
- fs.renameSync(file, file.replace(`.${otherEngine}`, ''))
-}
-
-console.log(
- 'Engines have been swapped. Make sure to run `npm install` to update your dependencies.'
-)
diff --git a/src/cli-peer-dependencies.js b/src/cli-peer-dependencies.js
deleted file mode 100644
index 6b9f986aa..000000000
--- a/src/cli-peer-dependencies.js
+++ /dev/null
@@ -1,15 +0,0 @@
-export function lazyPostcss() {
- return require('postcss')
-}
-
-export function lazyPostcssImport() {
- return require('postcss-import')
-}
-
-export function lazyAutoprefixer() {
- return require('autoprefixer')
-}
-
-export function lazyCssnano() {
- return require('cssnano')
-}
diff --git a/src/cli.js b/src/cli.js
index 4b73accbb..9a5aff27b 100644
--- a/src/cli.js
+++ b/src/cli.js
@@ -1,7 +1,3 @@
#!/usr/bin/env node
-if (__OXIDE__) {
- module.exports = require('./oxide/cli')
-} else {
- module.exports = require('./cli/index')
-}
+module.exports = require('./cli/index')
diff --git a/src/cli/build/deps.js b/src/cli/build/deps.js
deleted file mode 100644
index 9435b929a..000000000
--- a/src/cli/build/deps.js
+++ /dev/null
@@ -1,56 +0,0 @@
-// @ts-check
-
-import {
- // @ts-ignore
- lazyPostcss,
-
- // @ts-ignore
- lazyPostcssImport,
-
- // @ts-ignore
- lazyCssnano,
-
- // @ts-ignore
- lazyAutoprefixer,
-} from '../../../peers/index.js'
-
-/**
- * @returns {import('postcss')}
- */
-export function loadPostcss() {
- // Try to load a local `postcss` version first
- try {
- return require('postcss')
- } catch {}
-
- return lazyPostcss()
-}
-
-export function loadPostcssImport() {
- // Try to load a local `postcss-import` version first
- try {
- return require('postcss-import')
- } catch {}
-
- return lazyPostcssImport()
-}
-
-export function loadCssNano() {
- let options = { preset: ['default', { cssDeclarationSorter: false }] }
-
- // Try to load a local `cssnano` version first
- try {
- return require('cssnano')
- } catch {}
-
- return lazyCssnano()(options)
-}
-
-export function loadAutoprefixer() {
- // Try to load a local `autoprefixer` version first
- try {
- return require('autoprefixer')
- } catch {}
-
- return lazyAutoprefixer()
-}
diff --git a/src/cli/build/index.js b/src/cli/build/index.js
index 62c020e59..a142a4a47 100644
--- a/src/cli/build/index.js
+++ b/src/cli/build/index.js
@@ -25,6 +25,10 @@ export async function build(args) {
process.exit(9)
}
+ if (args['--no-autoprefixer']) {
+ console.error('[deprecation] The --no-autoprefixer flag is deprecated and has no effect.')
+ }
+
// TODO: Reference the @config path here if exists
let configPath = args['--config'] ? args['--config'] : resolveDefaultConfigPath()
diff --git a/src/cli/build/plugin.js b/src/cli/build/plugin.js
index 9f3f6f52f..538ab565d 100644
--- a/src/cli/build/plugin.js
+++ b/src/cli/build/plugin.js
@@ -1,14 +1,17 @@
// @ts-check
+import pkg from '../../../package.json'
import path from 'path'
import fs from 'fs'
+import postcss from 'postcss'
import postcssrc from 'postcss-load-config'
+import browserslist from 'browserslist'
+import lightning, { Features } from 'lightningcss'
import { lilconfig } from 'lilconfig'
import loadPlugins from 'postcss-load-config/src/plugins' // Little bit scary, looking at private/internal API
import loadOptions from 'postcss-load-config/src/options' // Little bit scary, looking at private/internal API
import tailwind from '../../processTailwindFeatures'
-import { loadAutoprefixer, loadCssNano, loadPostcss, loadPostcssImport } from './deps'
import { formatNodes, drainStdin, outputFile } from './utils'
import { env } from '../../lib/sharedState'
import resolveConfig from '../../../resolveConfig.js'
@@ -19,6 +22,50 @@ import { findAtConfigPath } from '../../lib/findAtConfigPath.js'
import log from '../../util/log'
import { loadConfig } from '../../lib/load-config'
import getModuleDependencies from '../../lib/getModuleDependencies'
+import { validateConfig } from '../../util/validateConfig'
+import { handleImportAtRules } from '../../lib/handleImportAtRules'
+import { flagEnabled } from '../../featureFlags'
+
+function license() {
+ return `/* ! tailwindcss v${pkg.version} | MIT License | https://tailwindcss.com */\n`
+}
+
+async function lightningcss(result, { map = true, minify = true } = {}) {
+ try {
+ let resolvedBrowsersListConfig = browserslist.findConfig(
+ result.opts.from ?? process.cwd()
+ )?.defaults
+ let defaultBrowsersListConfig = pkg.browserslist
+ let browsersListConfig = resolvedBrowsersListConfig ?? defaultBrowsersListConfig
+
+ let transformed = lightning.transform({
+ filename: result.opts.from || 'input.css',
+ code: Buffer.from(result.css, 'utf-8'),
+ minify,
+ sourceMap: result.map === undefined ? map : !!result.map,
+ inputSourceMap: result.map ? result.map.toString() : undefined,
+ targets: lightning.browserslistToTargets(browserslist(browsersListConfig)),
+ include: Features.Nesting,
+ exclude: Features.LogicalProperties,
+ })
+
+ return Object.assign(result, {
+ css: transformed.code.toString(),
+ map: result.map
+ ? Object.assign(result.map, {
+ toString() {
+ return transformed.map?.toString()
+ },
+ })
+ : result.map,
+ })
+ } catch (err) {
+ console.error('Unable to use Lightning CSS. Using raw version instead.')
+ console.error(err)
+
+ return result
+ }
+}
/**
*
@@ -75,39 +122,6 @@ async function loadPostCssPlugins(customPostCssPath) {
return [beforePlugins, afterPlugins, config.options]
}
-function loadBuiltinPostcssPlugins() {
- let postcss = loadPostcss()
- let IMPORT_COMMENT = '__TAILWIND_RESTORE_IMPORT__: '
- return [
- [
- (root) => {
- root.walkAtRules('import', (rule) => {
- if (rule.params.slice(1).startsWith('tailwindcss/')) {
- rule.after(postcss.comment({ text: IMPORT_COMMENT + rule.params }))
- rule.remove()
- }
- })
- },
- loadPostcssImport(),
- (root) => {
- root.walkComments((rule) => {
- if (rule.text.startsWith(IMPORT_COMMENT)) {
- rule.after(
- postcss.atRule({
- name: 'import',
- params: rule.text.replace(IMPORT_COMMENT, ''),
- })
- )
- rule.remove()
- }
- })
- },
- ],
- [],
- {},
- ]
-}
-
let state = {
/** @type {any} */
context: null,
@@ -118,7 +132,7 @@ let state = {
/** @type {{content: string, extension: string}[]} */
changedContent: [],
- /** @type {ReturnType | null} */
+ /** @type {{config: import('../../../types').Config, dependencies: Set, dispose: Function } | null} */
configBag: null,
contextDependencies: new Set(),
@@ -160,8 +174,7 @@ let state = {
},
}
- // @ts-ignore
- this.configBag.config = resolveConfig(this.configBag.config, { content: { files: [] } })
+ this.configBag.config = validateConfig(resolveConfig(this.configBag.config))
// Override content files if `--content` has been passed explicitly
if (content?.length > 0) {
@@ -185,7 +198,7 @@ let state = {
let files = fastGlob.sync(this.contentPatterns.all)
for (let file of files) {
- if (__OXIDE__) {
+ if (flagEnabled(this.config, 'oxideParser')) {
content.push({
file,
extension: path.extname(file).slice(1),
@@ -211,16 +224,16 @@ let state = {
},
getContext({ createContext, cliConfigPath, root, result, content }) {
+ env.DEBUG && console.time('Searching for config')
+ let configPath = findAtConfigPath(root, result) ?? cliConfigPath
+ env.DEBUG && console.timeEnd('Searching for config')
+
if (this.context) {
this.context.changedContent = this.changedContent.splice(0)
return this.context
}
- env.DEBUG && console.time('Searching for config')
- let configPath = findAtConfigPath(root, result) ?? cliConfigPath
- env.DEBUG && console.timeEnd('Searching for config')
-
env.DEBUG && console.time('Loading config')
let config = this.loadConfig(configPath, content)
env.DEBUG && console.timeEnd('Loading config')
@@ -251,8 +264,6 @@ let state = {
}
export async function createProcessor(args, cliConfigPath) {
- let postcss = loadPostcss()
-
let input = args['--input']
let output = args['--output']
let includePostCss = args['--postcss']
@@ -260,7 +271,9 @@ export async function createProcessor(args, cliConfigPath) {
let [beforePlugins, afterPlugins, postcssOptions] = includePostCss
? await loadPostCssPlugins(customPostCssPath)
- : loadBuiltinPostcssPlugins()
+ : [[], [], {}]
+
+ beforePlugins.unshift(...handleImportAtRules())
if (args['--purge']) {
log.warn('purge-flag-deprecated', [
@@ -278,9 +291,9 @@ export async function createProcessor(args, cliConfigPath) {
let tailwindPlugin = () => {
return {
postcssPlugin: 'tailwindcss',
- Once(root, { result }) {
+ async Once(root, { result }) {
env.DEBUG && console.time('Compiling CSS')
- tailwind(({ createContext }) => {
+ await tailwind(({ createContext }) => {
console.error()
console.error('Rebuilding...')
@@ -306,8 +319,6 @@ export async function createProcessor(args, cliConfigPath) {
tailwindPlugin,
!args['--minify'] && formatNodes,
...afterPlugins,
- !args['--no-autoprefixer'] && loadAutoprefixer(),
- args['--minify'] && loadCssNano(),
].filter(Boolean)
/** @type {import('postcss').Processor} */
@@ -331,9 +342,20 @@ export async function createProcessor(args, cliConfigPath) {
async function build() {
let start = process.hrtime.bigint()
+ let options = {
+ ...postcssOptions,
+ from: input,
+ to: output,
+ }
return readInput()
- .then((css) => processor.process(css, { ...postcssOptions, from: input, to: output }))
+ .then((css) => processor.process(css, options))
+ .then((result) =>
+ lightningcss(result, {
+ ...options,
+ minify: !!args['--minify'],
+ })
+ )
.then((result) => {
if (!state.watcher) {
return result
@@ -356,12 +378,12 @@ export async function createProcessor(args, cliConfigPath) {
})
.then((result) => {
if (!output) {
- process.stdout.write(result.css)
+ process.stdout.write(license() + result.css)
return
}
return Promise.all([
- outputFile(result.opts.to, result.css),
+ outputFile(result.opts.to, license() + result.css),
result.map && outputFile(result.opts.to + '.map', result.map.toString()),
])
})
diff --git a/src/cli/build/watching.js b/src/cli/build/watching.js
index e69cd9f85..b7788726c 100644
--- a/src/cli/build/watching.js
+++ b/src/cli/build/watching.js
@@ -164,7 +164,7 @@ export function createWatcher(args, { state, rebuild }) {
// This is very likely a chokidar bug but it's one we need to work around
// We treat this as a change event and rebuild the CSS
watcher.on('raw', (evt, filePath, meta) => {
- if (evt !== 'rename') {
+ if (evt !== 'rename' || filePath === null) {
return
}
diff --git a/src/cli/index.js b/src/cli/index.js
index fc1497f62..66dda931c 100644
--- a/src/cli/index.js
+++ b/src/cli/index.js
@@ -70,6 +70,7 @@ let commands = {
description: 'Path to a custom config file',
},
'--no-autoprefixer': {
+ deprecated: true,
type: Boolean,
description: 'Disable autoprefixer',
},
diff --git a/src/corePlugins.js b/src/corePlugins.js
index e4d2ff279..c7cf2d87a 100644
--- a/src/corePlugins.js
+++ b/src/corePlugins.js
@@ -10,7 +10,6 @@ import withAlphaVariable, { withAlphaValue } from './util/withAlphaVariable'
import toColorValue from './util/toColorValue'
import isPlainObject from './util/isPlainObject'
import transformThemeValue from './util/transformThemeValue'
-import { version as tailwindVersion } from '../package.json'
import log from './util/log'
import {
normalizeScreens,
@@ -22,6 +21,7 @@ import { formatBoxShadowValue, parseBoxShadowValue } from './util/parseBoxShadow
import { removeAlphaVariables } from './util/removeAlphaVariables'
import { flagEnabled } from './featureFlags'
import { normalize } from './util/dataTypes'
+import { INTERNAL_FEATURES } from './lib/setupContextUtils'
export let variantPlugins = {
pseudoElementVariants: ({ addVariant }) => {
@@ -80,7 +80,7 @@ export let variantPlugins = {
})
},
- pseudoClassVariants: ({ addVariant, matchVariant, config }) => {
+ pseudoClassVariants: ({ addVariant, matchVariant, config, prefix }) => {
let pseudoVariants = [
// Positional
['first', '&:first-child'],
@@ -151,12 +151,12 @@ export let variantPlugins = {
let variants = {
group: (_, { modifier }) =>
modifier
- ? [`:merge(.group\\/${escapeClassName(modifier)})`, ' &']
- : [`:merge(.group)`, ' &'],
+ ? [`:merge(${prefix('.group')}\\/${escapeClassName(modifier)})`, ' &']
+ : [`:merge(${prefix('.group')})`, ' &'],
peer: (_, { modifier }) =>
modifier
- ? [`:merge(.peer\\/${escapeClassName(modifier)})`, ' ~ &']
- : [`:merge(.peer)`, ' ~ &'],
+ ? [`:merge(${prefix('.peer')}\\/${escapeClassName(modifier)})`, ' ~ &']
+ : [`:merge(${prefix('.peer')})`, ' ~ &'],
}
for (let [name, fn] of Object.entries(variants)) {
@@ -192,7 +192,12 @@ export let variantPlugins = {
return result.slice(0, start) + a + result.slice(start + 1, end) + b + result.slice(end)
},
- { values: Object.fromEntries(pseudoVariants) }
+ {
+ values: Object.fromEntries(pseudoVariants),
+ [INTERNAL_FEATURES]: {
+ respectPrefix: false,
+ },
+ }
)
}
},
@@ -364,7 +369,7 @@ export let variantPlugins = {
let check = normalize(value)
let isRaw = /^\w*\s*\(/.test(check)
- // Chrome has a bug where `(condtion1)or(condition2)` is not valid
+ // Chrome has a bug where `(condition1)or(condition2)` is not valid
// But `(condition1) or (condition2)` is supported.
check = isRaw ? check.replace(/\b(and|or|not)\b/g, ' $1 ') : check
@@ -386,6 +391,26 @@ export let variantPlugins = {
)
},
+ hasVariants: ({ matchVariant }) => {
+ matchVariant('has', (value) => `&:has(${normalize(value)})`, { values: {} })
+ matchVariant(
+ 'group-has',
+ (value, { modifier }) =>
+ modifier
+ ? `:merge(.group\\/${modifier}):has(${normalize(value)}) &`
+ : `:merge(.group):has(${normalize(value)}) &`,
+ { values: {} }
+ )
+ matchVariant(
+ 'peer-has',
+ (value, { modifier }) =>
+ modifier
+ ? `:merge(.peer\\/${modifier}):has(${normalize(value)}) ~ &`
+ : `:merge(.peer):has(${normalize(value)}) ~ &`,
+ { values: {} }
+ )
+ },
+
ariaVariants: ({ matchVariant, theme }) => {
matchVariant('aria', (value) => `&[aria-${normalize(value)}]`, { values: theme('aria') ?? {} })
matchVariant(
@@ -435,15 +460,20 @@ export let variantPlugins = {
addVariant('contrast-more', '@media (prefers-contrast: more)')
addVariant('contrast-less', '@media (prefers-contrast: less)')
},
+
+ forcedColorsVariants: ({ addVariant }) => {
+ addVariant('forced-colors', '@media (forced-colors: active)')
+ },
}
let cssTransformValue = [
- 'translate(var(--tw-translate-x), var(--tw-translate-y))',
- 'rotate(var(--tw-rotate))',
- 'skewX(var(--tw-skew-x))',
- 'skewY(var(--tw-skew-y))',
- 'scaleX(var(--tw-scale-x))',
- 'scaleY(var(--tw-scale-y))',
+ 'var(--tw-translate-x)',
+ 'var(--tw-translate-y)',
+ 'var(--tw-rotate)',
+ 'var(--tw-skew-x)',
+ 'var(--tw-skew-y)',
+ 'var(--tw-scale-x)',
+ 'var(--tw-scale-y)',
].join(' ')
let cssFilterValue = [
@@ -476,12 +506,7 @@ export let corePlugins = {
fs.readFileSync(path.join(__dirname, './css/preflight.css'), 'utf8')
)
- addBase([
- postcss.comment({
- text: `! tailwindcss v${tailwindVersion} | MIT License | https://tailwindcss.com`,
- }),
- ...preflightStyles.nodes,
- ])
+ addBase(preflightStyles.nodes)
},
container: (() => {
@@ -660,6 +685,8 @@ export let corePlugins = {
float: ({ addUtilities }) => {
addUtilities({
+ '.float-start': { float: 'inline-start' },
+ '.float-end': { float: 'inline-end' },
'.float-right': { float: 'right' },
'.float-left': { float: 'left' },
'.float-none': { float: 'none' },
@@ -668,6 +695,8 @@ export let corePlugins = {
clear: ({ addUtilities }) => {
addUtilities({
+ '.clear-start': { clear: 'inline-start' },
+ '.clear-end': { clear: 'inline-end' },
'.clear-left': { clear: 'left' },
'.clear-right': { clear: 'right' },
'.clear-both': { clear: 'both' },
@@ -753,6 +782,8 @@ export let corePlugins = {
aspectRatio: createUtilityPlugin('aspectRatio', [['aspect', ['aspect-ratio']]]),
+ size: createUtilityPlugin('size', [['size', ['width', 'height']]]),
+
height: createUtilityPlugin('height', [['h', ['height']]]),
maxHeight: createUtilityPlugin('maxHeight', [['max-h', ['maxHeight']]]),
minHeight: createUtilityPlugin('minHeight', [['min-h', ['minHeight']]]),
@@ -829,72 +860,97 @@ export let corePlugins = {
},
transformOrigin: createUtilityPlugin('transformOrigin', [['origin', ['transformOrigin']]]),
- translate: createUtilityPlugin(
- 'translate',
- [
- [
- [
- 'translate-x',
- [['@defaults transform', {}], '--tw-translate-x', ['transform', cssTransformValue]],
- ],
- [
- 'translate-y',
- [['@defaults transform', {}], '--tw-translate-y', ['transform', cssTransformValue]],
- ],
- ],
- ],
- { supportsNegativeValues: true }
- ),
- rotate: createUtilityPlugin(
- 'rotate',
- [['rotate', [['@defaults transform', {}], '--tw-rotate', ['transform', cssTransformValue]]]],
- { supportsNegativeValues: true }
- ),
- skew: createUtilityPlugin(
- 'skew',
- [
- [
- ['skew-x', [['@defaults transform', {}], '--tw-skew-x', ['transform', cssTransformValue]]],
- ['skew-y', [['@defaults transform', {}], '--tw-skew-y', ['transform', cssTransformValue]]],
- ],
- ],
- { supportsNegativeValues: true }
- ),
- scale: createUtilityPlugin(
- 'scale',
- [
- [
- 'scale',
- [
- ['@defaults transform', {}],
- '--tw-scale-x',
- '--tw-scale-y',
- ['transform', cssTransformValue],
- ],
- ],
- [
- [
- 'scale-x',
- [['@defaults transform', {}], '--tw-scale-x', ['transform', cssTransformValue]],
- ],
- [
- 'scale-y',
- [['@defaults transform', {}], '--tw-scale-y', ['transform', cssTransformValue]],
- ],
- ],
- ],
- { supportsNegativeValues: true }
- ),
+
+ translate: ({ matchUtilities, theme }) => {
+ matchUtilities(
+ {
+ 'translate-x': (value) => {
+ return {
+ '@defaults transform': {},
+ '--tw-translate-x': `translateX(${value})`,
+ transform: cssTransformValue,
+ }
+ },
+ 'translate-y': (value) => {
+ return {
+ '@defaults transform': {},
+ '--tw-translate-y': `translateY(${value})`,
+ transform: cssTransformValue,
+ }
+ },
+ },
+ { values: theme('translate'), supportsNegativeValues: true }
+ )
+ },
+
+ rotate: ({ matchUtilities, theme }) => {
+ matchUtilities(
+ {
+ rotate: (value) => {
+ return {
+ '@defaults transform': {},
+ '--tw-rotate': `rotate(${value})`,
+ transform: cssTransformValue,
+ }
+ },
+ },
+ { values: theme('rotate'), supportsNegativeValues: true }
+ )
+ },
+
+ skew: ({ matchUtilities, theme }) => {
+ matchUtilities(
+ {
+ 'skew-x': (value) => {
+ return {
+ '@defaults transform': {},
+ '--tw-skew-x': `skewX(${value})`,
+ transform: cssTransformValue,
+ }
+ },
+ 'skew-y': (value) => {
+ return {
+ '@defaults transform': {},
+ '--tw-skew-y': `skewY(${value})`,
+ transform: cssTransformValue,
+ }
+ },
+ },
+ { values: theme('skew'), supportsNegativeValues: true }
+ )
+ },
+
+ scale: ({ matchUtilities, theme }) => {
+ matchUtilities(
+ {
+ 'scale-x': (value) => {
+ return {
+ '@defaults transform': {},
+ '--tw-scale-x': `scaleX(${value})`,
+ transform: cssTransformValue,
+ }
+ },
+ 'scale-y': (value) => {
+ return {
+ '@defaults transform': {},
+ '--tw-scale-y': `scaleY(${value})`,
+ transform: cssTransformValue,
+ }
+ },
+ },
+ { values: theme('scale'), supportsNegativeValues: true }
+ )
+ },
transform: ({ addDefaults, addUtilities }) => {
addDefaults('transform', {
- '--tw-translate-x': '0',
- '--tw-translate-y': '0',
- '--tw-rotate': '0',
- '--tw-skew-x': '0',
- '--tw-skew-y': '0',
- '--tw-scale-x': '1',
- '--tw-scale-y': '1',
+ '--tw-translate-x': ' ',
+ '--tw-translate-y': ' ',
+ '--tw-rotate': ' ',
+ '--tw-skew-x': ' ',
+ '--tw-skew-y': ' ',
+ '--tw-scale-x': ' ',
+ '--tw-scale-y': ' ',
})
addUtilities({
@@ -913,7 +969,7 @@ export let corePlugins = {
},
animation: ({ matchUtilities, theme, config }) => {
- let prefixName = (name) => `${config('prefix')}${escapeClassName(name)}`
+ let prefixName = (name) => escapeClassName(config('prefix') + name)
let keyframes = Object.fromEntries(
Object.entries(theme('keyframes') ?? {}).map(([key, value]) => {
return [key, { [`@keyframes ${prefixName(key)}`]: value }]
@@ -1103,6 +1159,7 @@ export let corePlugins = {
appearance: ({ addUtilities }) => {
addUtilities({
'.appearance-none': { appearance: 'none' },
+ '.appearance-auto': { appearance: 'auto' },
})
},
@@ -1255,13 +1312,13 @@ export let corePlugins = {
],
]),
- space: ({ matchUtilities, addUtilities, theme }) => {
+ space: ({ matchUtilities, addUtilities, theme, config }) => {
matchUtilities(
{
'space-x': (value) => {
value = value === '0' ? '0px' : value
- if (__OXIDE__) {
+ if (flagEnabled(config(), 'logicalSiblingUtilities')) {
return {
'& > :not([hidden]) ~ :not([hidden])': {
'--tw-space-x-reverse': '0',
@@ -1300,13 +1357,13 @@ export let corePlugins = {
})
},
- divideWidth: ({ matchUtilities, addUtilities, theme }) => {
+ divideWidth: ({ matchUtilities, addUtilities, theme, config }) => {
matchUtilities(
{
'divide-x': (value) => {
value = value === '0' ? '0px' : value
- if (__OXIDE__) {
+ if (flagEnabled(config(), 'logicalSiblingUtilities')) {
return {
'& > :not([hidden]) ~ :not([hidden])': {
'@defaults border-width': {},
@@ -1503,6 +1560,15 @@ export let corePlugins = {
})
},
+ textWrap: ({ addUtilities }) => {
+ addUtilities({
+ '.text-wrap': { 'text-wrap': 'wrap' },
+ '.text-nowrap': { 'text-wrap': 'nowrap' },
+ '.text-balance': { 'text-wrap': 'balance' },
+ '.text-pretty': { 'text-wrap': 'pretty' },
+ })
+ },
+
wordBreak: ({ addUtilities }) => {
addUtilities({
'.break-normal': { 'overflow-wrap': 'normal', 'word-break': 'normal' },
@@ -2846,4 +2912,10 @@ export let corePlugins = {
content: createUtilityPlugin('content', [
['content', ['--tw-content', ['content', 'var(--tw-content)']]],
]),
+ forcedColorAdjust: ({ addUtilities }) => {
+ addUtilities({
+ '.forced-color-adjust-auto': { 'forced-color-adjust': 'auto' },
+ '.forced-color-adjust-none': { 'forced-color-adjust': 'none' },
+ })
+ },
}
diff --git a/src/css/preflight.css b/src/css/preflight.css
index fab875d95..b4cb52b01 100644
--- a/src/css/preflight.css
+++ b/src/css/preflight.css
@@ -24,16 +24,19 @@
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
+7. Disable tap highlights on iOS.
*/
-html {
+html,
+:host {
line-height: 1.5; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
-moz-tab-size: 4; /* 3 */
tab-size: 4; /* 3 */
- font-family: theme('fontFamily.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"); /* 4 */
+ font-family: theme('fontFamily.sans', ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); /* 4 */
font-feature-settings: theme('fontFamily.sans[1].fontFeatureSettings', normal); /* 5 */
font-variation-settings: theme('fontFamily.sans[1].fontVariationSettings', normal); /* 6 */
+ -webkit-tap-highlight-color: transparent; /* 7 */
}
/*
@@ -99,8 +102,10 @@ strong {
}
/*
-1. Use the user's configured `mono` font family by default.
-2. Correct the odd `em` font sizing in all browsers.
+1. Use the user's configured `mono` font-family by default.
+2. Use the user's configured `mono` font-feature-settings by default.
+3. Use the user's configured `mono` font-variation-settings by default.
+4. Correct the odd `em` font sizing in all browsers.
*/
code,
@@ -108,7 +113,9 @@ kbd,
samp,
pre {
font-family: theme('fontFamily.mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace); /* 1 */
- font-size: 1em; /* 2 */
+ font-feature-settings: theme('fontFamily.mono[1].fontFeatureSettings', normal); /* 2 */
+ font-variation-settings: theme('fontFamily.mono[1].fontVariationSettings', normal); /* 3 */
+ font-size: 1em; /* 4 */
}
/*
@@ -163,6 +170,8 @@ optgroup,
select,
textarea {
font-family: inherit; /* 1 */
+ font-feature-settings: inherit; /* 1 */
+ font-variation-settings: inherit; /* 1 */
font-size: 100%; /* 1 */
font-weight: inherit; /* 1 */
line-height: inherit; /* 1 */
@@ -264,7 +273,7 @@ summary {
}
/*
-Removes the default spacing and border for appropriate elements.
+Removes the default spacing for appropriate elements.
*/
blockquote,
@@ -300,6 +309,10 @@ menu {
padding: 0;
}
+dialog {
+ padding: 0;
+}
+
/*
Prevent resizing textareas horizontally by default.
*/
@@ -331,6 +344,7 @@ button,
/*
Make sure disabled buttons don't get the pointer cursor.
*/
+
:disabled {
cursor: default;
}
@@ -363,7 +377,10 @@ video {
height: auto;
}
-/* Make elements with the HTML hidden attribute stay hidden by default */
+/*
+Make elements with the HTML hidden attribute stay hidden by default.
+*/
+
[hidden] {
display: none;
}
diff --git a/src/featureFlags.js b/src/featureFlags.js
index dc9f2d7c4..b77914739 100644
--- a/src/featureFlags.js
+++ b/src/featureFlags.js
@@ -3,27 +3,21 @@ import log from './util/log'
let defaults = {
optimizeUniversalDefaults: false,
- generalizedModifiers: true,
- get disableColorOpacityUtilitiesByDefault() {
- return __OXIDE__
- },
- get relativeContentPathsByDefault() {
- return __OXIDE__
- },
+ disableColorOpacityUtilitiesByDefault: false,
+ relativeContentPathsByDefault: false,
+ oxideParser: true,
+ logicalSiblingUtilities: false,
}
-let featureFlags = {
+export let featureFlags = {
future: [
'hoverOnlyWhenSupported',
'respectDefaultRingColorOpacity',
'disableColorOpacityUtilitiesByDefault',
'relativeContentPathsByDefault',
+ 'logicalSiblingUtilities',
],
- experimental: [
- 'optimizeUniversalDefaults',
- 'generalizedModifiers',
- // 'variantGrouping',
- ],
+ experimental: ['optimizeUniversalDefaults', 'oxideParser'],
}
export function flagEnabled(config, flag) {
diff --git a/src/lib/content.js b/src/lib/content.js
index e814efe4d..9979d251d 100644
--- a/src/lib/content.js
+++ b/src/lib/content.js
@@ -7,10 +7,40 @@ import fastGlob from 'fast-glob'
import normalizePath from 'normalize-path'
import { parseGlob } from '../util/parseGlob'
import { env } from './sharedState'
+import { resolveContentPaths } from '@tailwindcss/oxide'
/** @typedef {import('../../types/config.js').RawFile} RawFile */
/** @typedef {import('../../types/config.js').FilePath} FilePath */
+/*
+ * @param {import('tailwindcss').Config} tailwindConfig
+ * @param {{skip:string[]}} options
+ * @returns {ContentPath[]}
+ */
+function resolveContentFiles(tailwindConfig, { skip = [] } = {}) {
+ if (
+ Array.isArray(tailwindConfig.content.files) &&
+ tailwindConfig.content.files.includes('auto')
+ ) {
+ let idx = tailwindConfig.content.files.indexOf('auto')
+ if (idx !== -1) {
+ env.DEBUG && console.time('Calculating resolve content paths')
+ let resolved = resolveContentPaths({ base: process.cwd() })
+ env.DEBUG && console.timeEnd('Calculating resolve content paths')
+
+ tailwindConfig.content.files.splice(idx, 1, ...resolved)
+ }
+ }
+
+ if (skip.length > 0) {
+ tailwindConfig.content.files = tailwindConfig.content.files.filter(
+ (filePath) => !skip.includes(filePath)
+ )
+ }
+
+ return tailwindConfig.content.files
+}
+
/**
* @typedef {object} ContentPath
* @property {string} original
@@ -32,7 +62,9 @@ import { env } from './sharedState'
* @returns {ContentPath[]}
*/
export function parseCandidateFiles(context, tailwindConfig) {
- let files = tailwindConfig.content.files
+ let files = resolveContentFiles(tailwindConfig, {
+ skip: [context.userConfigPath],
+ })
// Normalize the file globs
files = files.filter((filePath) => typeof filePath === 'string')
diff --git a/src/lib/defaultExtractor.js b/src/lib/defaultExtractor.js
index 6382ca7cf..75ee8af50 100644
--- a/src/lib/defaultExtractor.js
+++ b/src/lib/defaultExtractor.js
@@ -1,4 +1,3 @@
-import { flagEnabled } from '../featureFlags'
import * as regex from './regex'
export function defaultExtractor(context) {
@@ -12,16 +11,17 @@ export function defaultExtractor(context) {
let results = []
for (let pattern of patterns) {
- results = [...results, ...(content.match(pattern) ?? [])]
+ for (let result of content.match(pattern) ?? []) {
+ results.push(clipAtBalancedParens(result))
+ }
}
- return results.filter((v) => v !== undefined).map(clipAtBalancedParens)
+ return results
}
}
function* buildRegExps(context) {
let separator = context.tailwindConfig.separator
- let variantGroupingEnabled = flagEnabled(context.tailwindConfig, 'variantGrouping')
let prefix =
context.tailwindConfig.prefix !== ''
? regex.optional(regex.pattern([/-?/, regex.escape(context.tailwindConfig.prefix)]))
@@ -35,7 +35,7 @@ function* buildRegExps(context) {
// This is a targeted fix to continue to allow theme()
// with square brackets to work in arbitrary properties
// while fixing a problem with the regex matching too much
- /\[[^\s:'"`]+:[^\s]+?\[[^\s]+\][^\s]+?\]/,
+ /\[[^\s:'"`\]]+:[^\s]+?\[[^\s]+\][^\s]+?\]/,
// Utilities
regex.pattern([
@@ -47,7 +47,7 @@ function* buildRegExps(context) {
regex.any([
regex.pattern([
// Arbitrary values
- /-(?:\w+-)*\[[^\s:]+\]/,
+ /-(?:\w+-)*\[(?:[^\s\[\]]+\[[^\s\[\]]+\])*[^\s:\[\]]+\]/,
// Not immediately followed by an `{[(`
/(?![{([]])/,
@@ -58,7 +58,7 @@ function* buildRegExps(context) {
regex.pattern([
// Arbitrary values
- /-(?:\w+-)*\[[^\s]+\]/,
+ /-(?:\w+-)*\[(?:[^\s\[\]]+\[[^\s\[\]]+\])*[^\s:\[\]]+\]/,
// Not immediately followed by an `{[(`
/(?![{([]])/,
@@ -80,12 +80,18 @@ function* buildRegExps(context) {
// This is here to provide special support for the `@` variant
regex.pattern([/@\[[^\s"'`]+\](\/[^\s"'`]+)?/, separator]),
+ // With variant modifier (e.g.: group-[..]/modifier)
+ regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s"'`]+\]\/\w+/, separator]),
+
regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s"'`]+\]/, separator]),
regex.pattern([/[^\s"'`\[\\]+/, separator]),
]),
// With quotes allowed
regex.any([
+ // With variant modifier (e.g.: group-[..]/modifier)
+ regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s`]+\]\/\w+/, separator]),
+
regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s`]+\]/, separator]),
regex.pattern([/[^\s`\[\\]+/, separator]),
]),
@@ -103,15 +109,7 @@ function* buildRegExps(context) {
prefix,
- variantGroupingEnabled
- ? regex.any([
- // Or any of those things but grouped separated by commas
- regex.pattern([/\(/, utility, regex.zeroOrMore([/,/, utility]), /\)/]),
-
- // Arbitrary properties, constrained utilities, arbitrary values, etc…
- utility,
- ])
- : utility,
+ utility,
])
}
diff --git a/src/lib/evaluateTailwindFunctions.js b/src/lib/evaluateTailwindFunctions.js
index 7e04ef428..ff73f466c 100644
--- a/src/lib/evaluateTailwindFunctions.js
+++ b/src/lib/evaluateTailwindFunctions.js
@@ -1,7 +1,7 @@
import dlv from 'dlv'
import didYouMean from 'didyoumean'
import transformThemeValue from '../util/transformThemeValue'
-import parseValue from 'postcss-value-parser'
+import parseValue from '../value-parser/index'
import { normalizeScreens } from '../util/normalizeScreens'
import buildMediaQuery from '../util/buildMediaQuery'
import { toPath } from '../util/toPath'
@@ -146,6 +146,9 @@ function resolveVNode(node, vNode, functions) {
}
function resolveFunctions(node, input, functions) {
+ let hasAnyFn = Object.keys(functions).some((fn) => input.includes(`${fn}(`))
+ if (!hasAnyFn) return input
+
return parseValue(input)
.walk((vNode) => {
resolveVNode(node, vNode, functions)
diff --git a/src/lib/expandApplyAtRules.js b/src/lib/expandApplyAtRules.js
index 3763809e0..ed48dbc4f 100644
--- a/src/lib/expandApplyAtRules.js
+++ b/src/lib/expandApplyAtRules.js
@@ -553,6 +553,13 @@ function processApply(root, context, localCache) {
? parent.selector.slice(importantSelector.length)
: parent.selector
+ // If the selector becomes empty after replacing the important selector
+ // This means that it's the same as the parent selector and we don't want to replace it
+ // Otherwise we'll crash
+ if (parentSelector === '') {
+ parentSelector = parent.selector
+ }
+
rule.selector = replaceSelector(parentSelector, rule.selector, applyCandidate)
// And then re-add it if it was removed
diff --git a/src/lib/expandTailwindAtRules.js b/src/lib/expandTailwindAtRules.js
index bf7d8f17f..ebbad5bd5 100644
--- a/src/lib/expandTailwindAtRules.js
+++ b/src/lib/expandTailwindAtRules.js
@@ -1,10 +1,12 @@
import fs from 'fs'
import LRU from '@alloc/quick-lru'
+import { parseCandidateStrings, IO, Parsing } from '@tailwindcss/oxide'
import * as sharedState from './sharedState'
import { generateRules } from './generateRules'
import log from '../util/log'
import cloneNodes from '../util/cloneNodes'
import { defaultExtractor } from './defaultExtractor'
+import { flagEnabled } from '../featureFlags'
let env = sharedState.env
@@ -24,7 +26,10 @@ function getExtractor(context, fileExtension) {
extractors[fileExtension] ||
extractors.DEFAULT ||
builtInExtractors[fileExtension] ||
- builtInExtractors.DEFAULT(context)
+ // Because we call `DEFAULT(context)`, the returning function is always a new function without a
+ // stable identity. Marking it with `DEFAULT_EXTRACTOR` allows us to check if it is the default
+ // extractor without relying on the function identity.
+ Object.assign(builtInExtractors.DEFAULT(context), { DEFAULT_EXTRACTOR: true })
)
}
@@ -98,7 +103,7 @@ function buildStylesheet(rules, context) {
}
export default function expandTailwindAtRules(context) {
- return (root) => {
+ return async (root) => {
let layerNodes = {
base: null,
components: null,
@@ -130,27 +135,51 @@ export default function expandTailwindAtRules(context) {
env.DEBUG && console.time('Reading changed files')
- if (__OXIDE__) {
- // TODO: Pass through or implement `extractor`
- for (let candidate of require('@tailwindcss/oxide').parseCandidateStringsFromFiles(
- context.changedContent
- // Object.assign({}, builtInTransformers, context.tailwindConfig.content.transform)
+ /** @type {[item: {file?: string, content?: string}, meta: {transformer: any, extractor: any}][]} */
+ let regexParserContent = []
+
+ /** @type {{file?: string, content?: string}[]} */
+ let rustParserContent = []
+
+ for (let item of context.changedContent) {
+ let transformer = getTransformer(context.tailwindConfig, item.extension)
+ let extractor = getExtractor(context, item.extension)
+
+ if (
+ flagEnabled(context.tailwindConfig, 'oxideParser') &&
+ transformer === builtInTransformers.DEFAULT &&
+ extractor?.DEFAULT_EXTRACTOR === true
+ ) {
+ rustParserContent.push(item)
+ } else {
+ regexParserContent.push([item, { transformer, extractor }])
+ }
+ }
+
+ // Read files using our newer, faster parser when:
+ // - Oxide is enabled; AND
+ // - The file is using default transfomers and extractors
+ if (rustParserContent.length > 0) {
+ for (let candidate of parseCandidateStrings(
+ rustParserContent,
+ IO.Parallel | Parsing.Parallel
)) {
candidates.add(candidate)
}
+ }
- // for (let { file, content, extension } of context.changedContent) {
- // let transformer = getTransformer(context.tailwindConfig, extension)
- // let extractor = getExtractor(context, extension)
- // getClassCandidatesOxide(file, transformer(content), extractor, candidates, seen)
- // }
- } else {
- for (let { file, content, extension } of context.changedContent) {
- let transformer = getTransformer(context.tailwindConfig, extension)
- let extractor = getExtractor(context, extension)
- content = file ? fs.readFileSync(file, 'utf8') : content
- getClassCandidates(transformer(content), extractor, candidates, seen)
- }
+ // Otherwise, read any files in node and parse with regexes
+ const BATCH_SIZE = 500
+
+ for (let i = 0; i < regexParserContent.length; i += BATCH_SIZE) {
+ let batch = regexParserContent.slice(i, i + BATCH_SIZE)
+
+ await Promise.all(
+ batch.map(async ([{ file, content }, { transformer, extractor }]) => {
+ content = file ? await fs.promises.readFile(file, 'utf8') : content
+ getClassCandidates(transformer(content), extractor, candidates, seen)
+ })
+ )
}
env.DEBUG && console.timeEnd('Reading changed files')
@@ -162,15 +191,16 @@ export default function expandTailwindAtRules(context) {
env.DEBUG && console.time('Generate rules')
env.DEBUG && console.time('Sorting candidates')
- let sortedCandidates = __OXIDE__
- ? candidates
- : new Set(
- [...candidates].sort((a, z) => {
- if (a === z) return 0
- if (a < z) return -1
- return 1
- })
- )
+ // TODO: only sort if we are not using the oxide parser (flagEnabled(context.tailwindConfig,
+ // 'oxideParser')) AND if we got all the candidates form the oxideParser alone. This will not
+ // be the case currently if you have custom transformers / extractors.
+ let sortedCandidates = new Set(
+ [...candidates].sort((a, z) => {
+ if (a === z) return 0
+ if (a < z) return -1
+ return 1
+ })
+ )
env.DEBUG && console.timeEnd('Sorting candidates')
generateRules(sortedCandidates, context)
env.DEBUG && console.timeEnd('Generate rules')
@@ -244,13 +274,26 @@ export default function expandTailwindAtRules(context) {
)
layerNodes.variants.remove()
} else if (variantNodes.length > 0) {
- root.append(
- cloneNodes(variantNodes, root.source, {
- layer: 'variants',
+ let cloned = cloneNodes(variantNodes, undefined, {
+ layer: 'variants',
+ })
+
+ cloned.forEach((node) => {
+ let parentLayer = node.raws.tailwind?.parentLayer ?? null
+
+ node.walk((n) => {
+ if (!n.source) {
+ n.source = layerNodes[parentLayer].source
+ }
})
- )
+ })
+
+ root.append(cloned)
}
+ // TODO: Why is the root node having no source location for `end` possible?
+ root.source.end = root.source.end ?? root.source.start
+
// If we've got a utility layer and no utilities are generated there's likely something wrong
const hasUtilityVariants = variantNodes.some(
(node) => node.raws.tailwind?.parentLayer === 'utilities'
diff --git a/src/lib/generateRules.js b/src/lib/generateRules.js
index 60da2323f..ac9fbb119 100644
--- a/src/lib/generateRules.js
+++ b/src/lib/generateRules.js
@@ -13,10 +13,9 @@ import {
} from '../util/formatVariantSelector'
import { asClass } from '../util/nameClass'
import { normalize } from '../util/dataTypes'
-import { isValidVariantFormatString, parseVariant } from './setupContextUtils'
+import { isValidVariantFormatString, parseVariant, INTERNAL_FEATURES } from './setupContextUtils'
import isValidArbitraryValue from '../util/isSyntacticallyValidPropertyValue'
import { splitAtTopLevelOnly } from '../util/splitAtTopLevelOnly.js'
-import { flagEnabled } from '../featureFlags'
import { applyImportantSelector } from '../util/applyImportantSelector'
let classNameParser = selectorParser((selectors) => {
@@ -45,7 +44,7 @@ function* candidatePermutations(candidate) {
let bracketIdx = candidate.indexOf('[')
// If character before `[` isn't a dash or a slash, this isn't a dynamic class
- // eg. string[]
+ // e.g. string[]
if (candidate[bracketIdx - 1] === '-') {
dashIdx = bracketIdx - 1
} else if (candidate[bracketIdx - 1] === '/') {
@@ -175,10 +174,6 @@ function applyVariant(variant, matches, context) {
if (modifiers.length && !context.variantMap.has(variant)) {
variant = baseVariant
args.modifier = modifiers[0]
-
- if (!flagEnabled(context.tailwindConfig, 'generalizedModifiers')) {
- return []
- }
}
}
@@ -193,13 +188,13 @@ function applyVariant(variant, matches, context) {
// group[:hover] (`-` is missing)
let match = /(.)(-?)\[(.*)\]/g.exec(variant)
if (match) {
- let [, char, seperator, value] = match
+ let [, char, separator, value] = match
// @-[200px] case
- if (char === '@' && seperator === '-') return []
+ if (char === '@' && separator === '-') return []
// group[:hover] case
- if (char !== '@' && seperator === '') return []
+ if (char !== '@' && separator === '') return []
- variant = variant.replace(`${seperator}[${value}]`, '')
+ variant = variant.replace(`${separator}[${value}]`, '')
args.value = value
}
}
@@ -230,9 +225,16 @@ function applyVariant(variant, matches, context) {
if (context.variantMap.has(variant)) {
let isArbitraryVariant = isArbitraryValue(variant)
+ let internalFeatures = context.variantOptions.get(variant)?.[INTERNAL_FEATURES] ?? {}
let variantFunctionTuples = context.variantMap.get(variant).slice()
let result = []
+ let respectPrefix = (() => {
+ if (isArbitraryVariant) return false
+ if (internalFeatures.respectPrefix === false) return false
+ return true
+ })()
+
for (let [meta, rule] of matches) {
// Don't generate variants for user css
if (meta.layer === 'user') {
@@ -293,7 +295,7 @@ function applyVariant(variant, matches, context) {
format(selectorFormat) {
collectedFormats.push({
format: selectorFormat,
- isArbitraryVariant,
+ respectPrefix,
})
},
args,
@@ -322,7 +324,7 @@ function applyVariant(variant, matches, context) {
if (typeof ruleWithVariant === 'string') {
collectedFormats.push({
format: ruleWithVariant,
- isArbitraryVariant,
+ respectPrefix,
})
}
@@ -366,7 +368,7 @@ function applyVariant(variant, matches, context) {
// format: .foo &
collectedFormats.push({
format: modified.replace(rebuiltBase, '&'),
- isArbitraryVariant,
+ respectPrefix,
})
rule.selector = before
})
@@ -459,9 +461,9 @@ function isParsableNode(node) {
}
function isParsableCssValue(property, value) {
- // We don't want to to treat [https://example.com] as a custom property
+ // We don't want to treat [https://example.com] as a custom property
// Even though, according to the CSS grammar, it's a totally valid CSS declaration
- // So we short-circuit here by checking if the custom property looks like a url
+ // So we short-circuit here by checking if the custom property looks like a URL
if (looksLikeUri(`${property}:${value}`)) {
return false
}
@@ -489,7 +491,7 @@ function extractArbitraryProperty(classCandidate, context) {
return null
}
- let normalized = normalize(value)
+ let normalized = normalize(value, { property })
if (!isParsableCssValue(property, normalized)) {
return null
@@ -566,7 +568,7 @@ function* recordCandidates(matches, classCandidate) {
}
}
-function* resolveMatches(candidate, context, original = candidate) {
+function* resolveMatches(candidate, context) {
let separator = context.tailwindConfig.separator
let [classCandidate, ...variants] = splitWithSeparator(candidate, separator).reverse()
let important = false
@@ -576,15 +578,6 @@ function* resolveMatches(candidate, context, original = candidate) {
classCandidate = classCandidate.slice(1)
}
- if (flagEnabled(context.tailwindConfig, 'variantGrouping')) {
- if (classCandidate.startsWith('(') && classCandidate.endsWith(')')) {
- let base = variants.slice().reverse().join(separator)
- for (let part of splitAtTopLevelOnly(classCandidate.slice(1, -1), ',')) {
- yield* resolveMatches(base + separator + part, context, original)
- }
- }
- }
-
// TODO: Reintroduce this in ways that doesn't break on false positives
// function sortAgainst(toSort, against) {
// return toSort.slice().sort((a, z) => {
@@ -773,7 +766,7 @@ function* resolveMatches(candidate, context, original = candidate) {
match[1].raws.tailwind = { ...match[1].raws.tailwind, candidate }
// Apply final format selector
- match = applyFinalFormat(match, { context, candidate, original })
+ match = applyFinalFormat(match, { context, candidate })
// Skip rules with invalid selectors
// This will cause the candidate to be added to the "not class"
@@ -787,7 +780,7 @@ function* resolveMatches(candidate, context, original = candidate) {
}
}
-function applyFinalFormat(match, { context, candidate, original }) {
+function applyFinalFormat(match, { context, candidate }) {
if (!match[0].collectedFormats) {
return match
}
@@ -822,10 +815,19 @@ function applyFinalFormat(match, { context, candidate, original }) {
}
try {
- rule.selector = finalizeSelector(rule.selector, finalFormat, {
- candidate: original,
+ let selector = finalizeSelector(rule.selector, finalFormat, {
+ candidate,
context,
})
+
+ // Finalize Selector determined that this candidate is irrelevant
+ // TODO: This elimination should happen earlier so this never happens
+ if (selector === null) {
+ rule.remove()
+ return
+ }
+
+ rule.selector = selector
} catch {
// If this selector is invalid we also want to skip it
// But it's likely that being invalid here means there's a bug in a plugin rather than too loosely matching content
@@ -838,6 +840,11 @@ function applyFinalFormat(match, { context, candidate, original }) {
return null
}
+ // If all rules have been eliminated we can skip this candidate entirely
+ if (container.nodes.length === 0) {
+ return null
+ }
+
match[1] = container.nodes[0]
return match
@@ -875,7 +882,7 @@ function getImportantStrategy(important) {
}
}
-function generateRules(candidates, context) {
+function generateRules(candidates, context, isSorting = false) {
let allRules = []
let strategy = getImportantStrategy(context.tailwindConfig.important)
@@ -910,7 +917,9 @@ function generateRules(candidates, context) {
rule = container.nodes[0]
}
- let newEntry = [sort, rule]
+ // Note: We have to clone rules during sorting
+ // so we eliminate some shared mutable state
+ let newEntry = [sort, isSorting ? rule.clone() : rule]
rules.add(newEntry)
context.ruleCache.add(newEntry)
allRules.push(newEntry)
diff --git a/src/lib/handleImportAtRules.js b/src/lib/handleImportAtRules.js
new file mode 100644
index 000000000..bcb55b5db
--- /dev/null
+++ b/src/lib/handleImportAtRules.js
@@ -0,0 +1,34 @@
+import postcss from 'postcss'
+import postcssImport from 'postcss-import'
+
+const TAILWIND = Symbol()
+
+export function handleImportAtRules() {
+ let RESTORE_ATRULE_COMMENT = '__TAILWIND_RESTORE__'
+ let atRulesToRestore = ['tailwind', 'config']
+
+ return [
+ (root) => {
+ root.walkAtRules((rule) => {
+ if (!atRulesToRestore.includes(rule.name)) return rule
+
+ rule.after(
+ postcss.comment({
+ text: RESTORE_ATRULE_COMMENT,
+ raws: { [TAILWIND]: { rule } },
+ })
+ )
+ rule.remove()
+ })
+ },
+ postcssImport(),
+ (root) => {
+ root.walkComments((rule) => {
+ if (rule.text === RESTORE_ATRULE_COMMENT) {
+ rule.after(rule.raws[TAILWIND].rule)
+ rule.remove()
+ }
+ })
+ },
+ ]
+}
diff --git a/src/lib/load-config.ts b/src/lib/load-config.ts
index 645e8e1d5..e879412a3 100644
--- a/src/lib/load-config.ts
+++ b/src/lib/load-config.ts
@@ -4,6 +4,14 @@ import { transform } from 'sucrase'
import { Config } from '../../types/config'
let jiti: ReturnType | null = null
+
+// @internal
+// This WILL be removed in some future release
+// If you rely on this your stuff WILL break
+export function useCustomJiti(_jiti: ReturnType) {
+ jiti = _jiti
+}
+
function lazyJiti() {
return (
jiti ??
diff --git a/src/lib/normalizeTailwindDirectives.js b/src/lib/normalizeTailwindDirectives.js
index 3349a7e3a..0366d1662 100644
--- a/src/lib/normalizeTailwindDirectives.js
+++ b/src/lib/normalizeTailwindDirectives.js
@@ -10,33 +10,6 @@ export default function normalizeTailwindDirectives(root) {
applyDirectives.add(atRule)
}
- if (atRule.name === 'import') {
- if (atRule.params === '"tailwindcss/base"' || atRule.params === "'tailwindcss/base'") {
- atRule.name = 'tailwind'
- atRule.params = 'base'
- } else if (
- atRule.params === '"tailwindcss/components"' ||
- atRule.params === "'tailwindcss/components'"
- ) {
- atRule.name = 'tailwind'
- atRule.params = 'components'
- } else if (
- atRule.params === '"tailwindcss/utilities"' ||
- atRule.params === "'tailwindcss/utilities'"
- ) {
- atRule.name = 'tailwind'
- atRule.params = 'utilities'
- } else if (
- atRule.params === '"tailwindcss/screens"' ||
- atRule.params === "'tailwindcss/screens'" ||
- atRule.params === '"tailwindcss/variants"' ||
- atRule.params === "'tailwindcss/variants'"
- ) {
- atRule.name = 'tailwind'
- atRule.params = 'variants'
- }
- }
-
if (atRule.name === 'tailwind') {
if (atRule.params === 'screens') {
atRule.params = 'variants'
diff --git a/src/lib/offsets.js b/src/lib/offsets.js
index a43ebe4f3..0ecc04b77 100644
--- a/src/lib/offsets.js
+++ b/src/lib/offsets.js
@@ -23,7 +23,7 @@ import { remapBitfield } from './remap-bitfield.js'
* @property {bigint} arbitrary 0n if false, 1n if true
* @property {bigint} variants Dynamic size. 1 bit per registered variant. 0n means no variants
* @property {bigint} parallelIndex Rule index for the parallel variant. 0 if not applicable.
- * @property {bigint} index Index of the rule / utility in it's given *parent* layer. Monotonically increasing.
+ * @property {bigint} index Index of the rule / utility in its given *parent* layer. Monotonically increasing.
* @property {VariantOption[]} options Some information on how we can sort arbitrary variants
*/
@@ -302,7 +302,7 @@ export class Offsets {
let mapping = this.recalculateVariantOffsets()
// No arbitrary variants? Nothing to do.
- // Everyhing already in order? Nothing to do.
+ // Everything already in order? Nothing to do.
if (mapping.length === 0) {
return list
}
@@ -354,7 +354,7 @@ function max(nums) {
* Using `.sort()` without a custom compare function is faster
* But you can only use that if you're sorting an array of
* only strings. If you're sorting strings inside objects
- * or arrays, you need must use a custom compare function.
+ * or arrays, you need to use a custom compare function.
*
* @param {string} a
* @param {string} b
diff --git a/src/lib/setupContextUtils.js b/src/lib/setupContextUtils.js
index 0749da68d..050e3cfe4 100644
--- a/src/lib/setupContextUtils.js
+++ b/src/lib/setupContextUtils.js
@@ -21,9 +21,10 @@ import isSyntacticallyValidPropertyValue from '../util/isSyntacticallyValidPrope
import { generateRules, getClassNameFromSelector } from './generateRules'
import { hasContentChanged } from './cacheInvalidation.js'
import { Offsets } from './offsets.js'
-import { flagEnabled } from '../featureFlags.js'
import { finalizeSelector, formatVariantSelector } from '../util/formatVariantSelector'
+export const INTERNAL_FEATURES = Symbol()
+
const VARIANT_TYPES = {
AddVariant: Symbol.for('ADD_VARIANT'),
MatchVariant: Symbol.for('MATCH_VARIANT'),
@@ -146,43 +147,45 @@ function getClasses(selector, mutate) {
return parser.transformSync(selector)
}
+/**
+ * Ignore everything inside a :not(...). This allows you to write code like
+ * `div:not(.foo)`. If `.foo` is never found in your code, then we used to
+ * not generated it. But now we will ignore everything inside a `:not`, so
+ * that it still gets generated.
+ *
+ * @param {selectorParser.Root} selectors
+ */
+function ignoreNot(selectors) {
+ selectors.walkPseudos((pseudo) => {
+ if (pseudo.value === ':not') {
+ pseudo.remove()
+ }
+ })
+}
+
function extractCandidates(node, state = { containsNonOnDemandable: false }, depth = 0) {
let classes = []
+ let selectors = []
- // Handle normal rules
if (node.type === 'rule') {
- // Ignore everything inside a :not(...). This allows you to write code like
- // `div:not(.foo)`. If `.foo` is never found in your code, then we used to
- // not generated it. But now we will ignore everything inside a `:not`, so
- // that it still gets generated.
- function ignoreNot(selectors) {
- selectors.walkPseudos((pseudo) => {
- if (pseudo.value === ':not') {
- pseudo.remove()
- }
- })
- }
-
- for (let selector of node.selectors) {
- let classCandidates = getClasses(selector, ignoreNot)
- // At least one of the selectors contains non-"on-demandable" candidates.
- if (classCandidates.length === 0) {
- state.containsNonOnDemandable = true
- }
-
- for (let classCandidate of classCandidates) {
- classes.push(classCandidate)
- }
- }
+ // Handle normal rules
+ selectors.push(...node.selectors)
+ } else if (node.type === 'atrule') {
+ // Handle at-rules (which contains nested rules)
+ node.walkRules((rule) => selectors.push(...rule.selectors))
}
- // Handle at-rules (which contains nested rules)
- else if (node.type === 'atrule') {
- node.walkRules((rule) => {
- for (let classCandidate of rule.selectors.flatMap((selector) => getClasses(selector))) {
- classes.push(classCandidate)
- }
- })
+ for (let selector of selectors) {
+ let classCandidates = getClasses(selector, ignoreNot)
+
+ // At least one of the selectors contains non-"on-demandable" candidates.
+ if (classCandidates.length === 0) {
+ state.containsNonOnDemandable = true
+ }
+
+ for (let classCandidate of classCandidates) {
+ classes.push(classCandidate)
+ }
}
if (depth === 0) {
@@ -230,8 +233,8 @@ export function parseVariant(variant) {
return ({ format }) => format(str)
}
- let [, name, params] = /@(.*?)( .+|[({].*)/g.exec(str)
- return ({ wrap }) => wrap(postcss.atRule({ name, params: params.trim() }))
+ let [, name, params] = /@(\S*)( .+|[({].*)?/g.exec(str)
+ return ({ wrap }) => wrap(postcss.atRule({ name, params: params?.trim() ?? '' }))
})
.reverse()
@@ -434,10 +437,8 @@ function buildPluginApi(tailwindConfig, context, { variantList, variantMap, offs
},
}
- let modifiersEnabled = flagEnabled(tailwindConfig, 'generalizedModifiers')
-
let ruleSets = []
- .concat(modifiersEnabled ? rule(value, extras) : rule(value))
+ .concat(rule(value, extras))
.filter(Boolean)
.map((declaration) => ({
[nameClass(identifier, modifier)]: declaration,
@@ -514,10 +515,8 @@ function buildPluginApi(tailwindConfig, context, { variantList, variantMap, offs
},
}
- let modifiersEnabled = flagEnabled(tailwindConfig, 'generalizedModifiers')
-
let ruleSets = []
- .concat(modifiersEnabled ? rule(value, extras) : rule(value))
+ .concat(rule(value, extras))
.filter(Boolean)
.map((declaration) => ({
[nameClass(identifier, modifier)]: declaration,
@@ -585,18 +584,13 @@ function buildPluginApi(tailwindConfig, context, { variantList, variantMap, offs
let id = options?.id ?? ++variantIdentifier
let isSpecial = variant === '@'
- let modifiersEnabled = flagEnabled(tailwindConfig, 'generalizedModifiers')
-
for (let [key, value] of Object.entries(options?.values ?? {})) {
if (key === 'DEFAULT') continue
api.addVariant(
isSpecial ? `${variant}${key}` : `${variant}-${key}`,
({ args, container }) => {
- return variantFn(
- value,
- modifiersEnabled ? { modifier: args?.modifier, container } : { container }
- )
+ return variantFn(value, { modifier: args?.modifier, container })
},
{
@@ -624,7 +618,7 @@ function buildPluginApi(tailwindConfig, context, { variantList, variantMap, offs
: // Falling back to args if it is a string, otherwise '' for older intellisense
// (JetBrains) plugins.
args?.value ?? (typeof args === 'string' ? args : ''),
- modifiersEnabled ? { modifier: args?.modifier, container } : { container }
+ { modifier: args?.modifier, container }
)
},
{
@@ -729,7 +723,7 @@ function collectLayerPlugins(root) {
}
function resolvePlugins(context, root) {
- let corePluginList = Object.entries({ ...variantPlugins, ...corePlugins })
+ let corePluginList = Object.entries(corePlugins)
.map(([name, plugin]) => {
if (!context.tailwindConfig.corePlugins.includes(name)) {
return null
@@ -754,6 +748,7 @@ function resolvePlugins(context, root) {
let beforeVariants = [
variantPlugins['pseudoElementVariants'],
variantPlugins['pseudoClassVariants'],
+ variantPlugins['hasVariants'],
variantPlugins['ariaVariants'],
variantPlugins['dataVariants'],
]
@@ -762,6 +757,7 @@ function resolvePlugins(context, root) {
variantPlugins['directionVariants'],
variantPlugins['reducedMotionVariants'],
variantPlugins['prefersContrastVariants'],
+ variantPlugins['forcedColorsVariants'],
variantPlugins['darkVariants'],
variantPlugins['printVariant'],
variantPlugins['screenVariants'],
@@ -943,13 +939,17 @@ function registerPlugins(plugins, context) {
// Sort all classes in order
// Non-tailwind classes won't be generated and will be left as `null`
- let rules = generateRules(new Set(sorted), context)
+ let rules = generateRules(new Set(sorted), context, true)
rules = context.offsets.sort(rules)
let idx = BigInt(parasiteUtilities.length)
for (const [, rule] of rules) {
- sortedClassNames.set(rule.raws.tailwind.candidate, idx++)
+ let candidate = rule.raws.tailwind.candidate
+
+ // When multiple rules match a candidate
+ // always take the position of the first one
+ sortedClassNames.set(candidate, sortedClassNames.get(candidate) ?? idx++)
}
return classes.map((className) => {
@@ -1119,17 +1119,24 @@ function registerPlugins(plugins, context) {
}
let isArbitraryVariant = !(value in (options.values ?? {}))
+ let internalFeatures = options[INTERNAL_FEATURES] ?? {}
+
+ let respectPrefix = (() => {
+ if (isArbitraryVariant) return false
+ if (internalFeatures.respectPrefix === false) return false
+ return true
+ })()
formatStrings = formatStrings.map((format) =>
format.map((str) => ({
format: str,
- isArbitraryVariant,
+ respectPrefix,
}))
)
manualFormatStrings = manualFormatStrings.map((format) => ({
format,
- isArbitraryVariant,
+ respectPrefix,
}))
let opts = {
diff --git a/src/lib/setupTrackingContext.js b/src/lib/setupTrackingContext.js
index 2b281377d..70e7cb684 100644
--- a/src/lib/setupTrackingContext.js
+++ b/src/lib/setupTrackingContext.js
@@ -63,9 +63,7 @@ function getTailwindConfig(configOrPath) {
}
// It's a plain object, not a path
- let newConfig = resolveConfig(
- configOrPath.config === undefined ? configOrPath : configOrPath.config
- )
+ let newConfig = resolveConfig(configOrPath?.config ?? configOrPath ?? {})
newConfig = validateConfig(newConfig)
diff --git a/src/lib/sharedState.js b/src/lib/sharedState.js
index 97bdf09c5..915dd21cb 100644
--- a/src/lib/sharedState.js
+++ b/src/lib/sharedState.js
@@ -1,16 +1,12 @@
-import pkg from '../../package.json'
-
export const env =
typeof process !== 'undefined'
? {
NODE_ENV: process.env.NODE_ENV,
DEBUG: resolveDebug(process.env.DEBUG),
- ENGINE: pkg.tailwindcss.engine,
}
: {
NODE_ENV: 'production',
DEBUG: false,
- ENGINE: pkg.tailwindcss.engine,
}
export const contextMap = new Map()
diff --git a/src/oxide/cli.ts b/src/oxide/cli.ts
deleted file mode 100644
index 17552ecb1..000000000
--- a/src/oxide/cli.ts
+++ /dev/null
@@ -1 +0,0 @@
-import './cli/index'
diff --git a/src/oxide/cli/build/deps.ts b/src/oxide/cli/build/deps.ts
deleted file mode 100644
index 2b4355b17..000000000
--- a/src/oxide/cli/build/deps.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-import packageJson from '../../../../package.json'
-import browserslist from 'browserslist'
-import { Result } from 'postcss'
-
-import {
- // @ts-ignore
- lazyPostcss,
-
- // @ts-ignore
- lazyPostcssImport,
-
- // @ts-ignore
- lazyCssnano,
-
- // @ts-ignore
-} from '../../../../peers/index'
-
-export function lazyLightningCss() {
- // TODO: Make this lazy/bundled
- return require('lightningcss')
-}
-
-let lightningCss
-
-function loadLightningCss() {
- if (lightningCss) {
- return lightningCss
- }
-
- // Try to load a local version first
- try {
- return (lightningCss = require('lightningcss'))
- } catch {}
-
- return (lightningCss = lazyLightningCss())
-}
-
-export async function lightningcss(shouldMinify: boolean, result: Result) {
- let css = loadLightningCss()
-
- try {
- let transformed = css.transform({
- filename: result.opts.from || 'input.css',
- code: Buffer.from(result.css, 'utf-8'),
- minify: shouldMinify,
- sourceMap: !!result.map,
- inputSourceMap: result.map ? result.map.toString() : undefined,
- targets: css.browserslistToTargets(browserslist(packageJson.browserslist)),
- drafts: {
- nesting: true,
- },
- })
-
- return Object.assign(result, {
- css: transformed.code.toString('utf8'),
- map: result.map
- ? Object.assign(result.map, {
- toString() {
- return transformed.map.toString()
- },
- })
- : result.map,
- })
- } catch (err) {
- console.error('Unable to use Lightning CSS. Using raw version instead.')
- console.error(err)
-
- return result
- }
-}
-
-/**
- * @returns {import('postcss')}
- */
-export function loadPostcss() {
- // Try to load a local `postcss` version first
- try {
- return require('postcss')
- } catch {}
-
- return lazyPostcss()
-}
-
-export function loadPostcssImport() {
- // Try to load a local `postcss-import` version first
- try {
- return require('postcss-import')
- } catch {}
-
- return lazyPostcssImport()
-}
diff --git a/src/oxide/cli/build/index.ts b/src/oxide/cli/build/index.ts
deleted file mode 100644
index ba7c87459..000000000
--- a/src/oxide/cli/build/index.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import fs from 'fs'
-import path from 'path'
-import { resolveDefaultConfigPath } from '../../../util/resolveConfigPath'
-import { createProcessor } from './plugin'
-
-export async function build(args) {
- let input = args['--input']
- let shouldWatch = args['--watch']
-
- // TODO: Deprecate this in future versions
- if (!input && args['_'][1]) {
- console.error('[deprecation] Running tailwindcss without -i, please provide an input file.')
- input = args['--input'] = args['_'][1]
- }
-
- if (input && input !== '-' && !fs.existsSync((input = path.resolve(input)))) {
- console.error(`Specified input file ${args['--input']} does not exist.`)
- process.exit(9)
- }
-
- if (args['--config'] && !fs.existsSync((args['--config'] = path.resolve(args['--config'])))) {
- console.error(`Specified config file ${args['--config']} does not exist.`)
- process.exit(9)
- }
-
- // TODO: Reference the @config path here if exists
- let configPath = args['--config'] ? args['--config'] : resolveDefaultConfigPath()
-
- let processor = await createProcessor(args, configPath)
-
- if (shouldWatch) {
- // Abort the watcher if stdin is closed to avoid zombie processes
- // You can disable this behavior with --watch=always
- if (args['--watch'] !== 'always') {
- process.stdin.on('end', () => process.exit(0))
- }
-
- process.stdin.resume()
-
- await processor.watch()
- } else {
- await processor.build().catch((e) => {
- console.error(e)
- process.exit(1)
- })
- }
-}
diff --git a/src/oxide/cli/build/plugin.ts b/src/oxide/cli/build/plugin.ts
deleted file mode 100644
index 4141ec439..000000000
--- a/src/oxide/cli/build/plugin.ts
+++ /dev/null
@@ -1,442 +0,0 @@
-import path from 'path'
-import fs from 'fs'
-import postcssrc from 'postcss-load-config'
-import { lilconfig } from 'lilconfig'
-import loadPlugins from 'postcss-load-config/src/plugins' // Little bit scary, looking at private/internal API
-import loadOptions from 'postcss-load-config/src/options' // Little bit scary, looking at private/internal API
-
-import tailwind from '../../../processTailwindFeatures'
-import { loadPostcss, loadPostcssImport, lightningcss } from './deps'
-import { formatNodes, drainStdin, outputFile } from './utils'
-import { env } from '../../../lib/sharedState'
-import resolveConfig from '../../../../resolveConfig'
-import { parseCandidateFiles } from '../../../lib/content'
-import { createWatcher } from './watching'
-import fastGlob from 'fast-glob'
-import { findAtConfigPath } from '../../../lib/findAtConfigPath'
-import log from '../../../util/log'
-import { loadConfig } from '../../../lib/load-config'
-import getModuleDependencies from '../../../lib/getModuleDependencies'
-import type { Config } from '../../../../types'
-
-/**
- *
- * @param {string} [customPostCssPath ]
- * @returns
- */
-async function loadPostCssPlugins(customPostCssPath) {
- let config = customPostCssPath
- ? await (async () => {
- let file = path.resolve(customPostCssPath)
-
- // Implementation, see: https://unpkg.com/browse/postcss-load-config@3.1.0/src/index.js
- // @ts-ignore
- let { config = {} } = await lilconfig('postcss').load(file)
- if (typeof config === 'function') {
- config = config()
- } else {
- config = Object.assign({}, config)
- }
-
- if (!config.plugins) {
- config.plugins = []
- }
-
- return {
- file,
- plugins: loadPlugins(config, file),
- options: loadOptions(config, file),
- }
- })()
- : await postcssrc()
-
- let configPlugins = config.plugins
-
- let configPluginTailwindIdx = configPlugins.findIndex((plugin) => {
- if (typeof plugin === 'function' && plugin.name === 'tailwindcss') {
- return true
- }
-
- if (typeof plugin === 'object' && plugin !== null && plugin.postcssPlugin === 'tailwindcss') {
- return true
- }
-
- return false
- })
-
- let beforePlugins =
- configPluginTailwindIdx === -1 ? [] : configPlugins.slice(0, configPluginTailwindIdx)
- let afterPlugins =
- configPluginTailwindIdx === -1
- ? configPlugins
- : configPlugins.slice(configPluginTailwindIdx + 1)
-
- return [beforePlugins, afterPlugins, config.options]
-}
-
-function loadBuiltinPostcssPlugins() {
- let postcss = loadPostcss()
- let IMPORT_COMMENT = '__TAILWIND_RESTORE_IMPORT__: '
- return [
- [
- (root) => {
- root.walkAtRules('import', (rule) => {
- if (rule.params.slice(1).startsWith('tailwindcss/')) {
- rule.after(postcss.comment({ text: IMPORT_COMMENT + rule.params }))
- rule.remove()
- }
- })
- },
- loadPostcssImport(),
- (root) => {
- root.walkComments((rule) => {
- if (rule.text.startsWith(IMPORT_COMMENT)) {
- rule.after(
- postcss.atRule({
- name: 'import',
- params: rule.text.replace(IMPORT_COMMENT, ''),
- })
- )
- rule.remove()
- }
- })
- },
- ],
- [],
- {},
- ]
-}
-
-let state = {
- /** @type {any} */
- context: null,
-
- /** @type {ReturnType | null} */
- watcher: null,
-
- /** @type {{content: string, extension: string}[]} */
- changedContent: [],
-
- /** @type {{config: Config, dependencies: Set, dispose: Function } | null} */
- configBag: null,
-
- contextDependencies: new Set(),
-
- /** @type {import('../../lib/content.js').ContentPath[]} */
- contentPaths: [],
-
- refreshContentPaths() {
- this.contentPaths = parseCandidateFiles(this.context, this.context?.tailwindConfig)
- },
-
- get config() {
- return this.context.tailwindConfig
- },
-
- get contentPatterns() {
- return {
- all: this.contentPaths.map((contentPath) => contentPath.pattern),
- dynamic: this.contentPaths
- .filter((contentPath) => contentPath.glob !== undefined)
- .map((contentPath) => contentPath.pattern),
- }
- },
-
- loadConfig(configPath, content) {
- if (this.watcher && configPath) {
- this.refreshConfigDependencies()
- }
-
- let config = loadConfig(configPath)
- let dependencies = getModuleDependencies(configPath)
- this.configBag = {
- config,
- dependencies,
- dispose() {
- for (let file of dependencies) {
- delete require.cache[require.resolve(file)]
- }
- },
- }
-
- // @ts-ignore
- this.configBag.config = resolveConfig(this.configBag.config, { content: { files: [] } })
-
- // Override content files if `--content` has been passed explicitly
- if (content?.length > 0) {
- this.configBag.config.content.files = content
- }
-
- return this.configBag.config
- },
-
- refreshConfigDependencies(configPath) {
- env.DEBUG && console.time('Module dependencies')
- this.configBag?.dispose()
- env.DEBUG && console.timeEnd('Module dependencies')
- },
-
- readContentPaths() {
- let content = []
-
- // Resolve globs from the content config
- // TODO: When we make the postcss plugin async-capable this can become async
- let files = fastGlob.sync(this.contentPatterns.all)
-
- for (let file of files) {
- if (__OXIDE__) {
- content.push({
- file,
- extension: path.extname(file).slice(1),
- })
- } else {
- content.push({
- content: fs.readFileSync(path.resolve(file), 'utf8'),
- extension: path.extname(file).slice(1),
- })
- }
- }
-
- // Resolve raw content in the tailwind config
- let rawContent = this.config.content.files.filter((file) => {
- return file !== null && typeof file === 'object'
- })
-
- for (let { raw: htmlContent, extension = 'html' } of rawContent) {
- content.push({ content: htmlContent, extension })
- }
-
- return content
- },
-
- getContext({ createContext, cliConfigPath, root, result, content }) {
- if (this.context) {
- this.context.changedContent = this.changedContent.splice(0)
-
- return this.context
- }
-
- env.DEBUG && console.time('Searching for config')
- let configPath = findAtConfigPath(root, result) ?? cliConfigPath
- env.DEBUG && console.timeEnd('Searching for config')
-
- env.DEBUG && console.time('Loading config')
- let config = this.loadConfig(configPath, content)
- env.DEBUG && console.timeEnd('Loading config')
-
- env.DEBUG && console.time('Creating context')
- this.context = createContext(config, [])
- Object.assign(this.context, {
- userConfigPath: configPath,
- })
- env.DEBUG && console.timeEnd('Creating context')
-
- env.DEBUG && console.time('Resolving content paths')
- this.refreshContentPaths()
- env.DEBUG && console.timeEnd('Resolving content paths')
-
- if (this.watcher) {
- env.DEBUG && console.time('Watch new files')
- this.watcher.refreshWatchedFiles()
- env.DEBUG && console.timeEnd('Watch new files')
- }
-
- for (let file of this.readContentPaths()) {
- this.context.changedContent.push(file)
- }
-
- return this.context
- },
-}
-
-export async function createProcessor(args, cliConfigPath) {
- let postcss = loadPostcss()
-
- let input = args['--input']
- let output = args['--output']
- let includePostCss = args['--postcss']
- let customPostCssPath = typeof args['--postcss'] === 'string' ? args['--postcss'] : undefined
-
- let [beforePlugins, afterPlugins, postcssOptions] = includePostCss
- ? await loadPostCssPlugins(customPostCssPath)
- : loadBuiltinPostcssPlugins()
-
- if (args['--purge']) {
- log.warn('purge-flag-deprecated', [
- 'The `--purge` flag has been deprecated.',
- 'Please use `--content` instead.',
- ])
-
- if (!args['--content']) {
- args['--content'] = args['--purge']
- }
- }
-
- let content = args['--content']?.split(/(? {
- return {
- postcssPlugin: 'tailwindcss',
- Once(root, { result }) {
- env.DEBUG && console.time('Compiling CSS')
- tailwind(({ createContext }) => {
- console.error()
- console.error('Rebuilding...')
-
- return () => {
- return state.getContext({
- createContext,
- cliConfigPath,
- root,
- result,
- content,
- })
- }
- })(root, result)
- env.DEBUG && console.timeEnd('Compiling CSS')
- },
- }
- }
-
- tailwindPlugin.postcss = true
-
- let plugins = [
- ...beforePlugins,
- tailwindPlugin,
- !args['--minify'] && formatNodes,
- ...afterPlugins,
- ].filter(Boolean)
-
- /** @type {import('postcss').Processor} */
- // @ts-ignore
- let processor = postcss(plugins)
-
- async function readInput() {
- // Piping in data, let's drain the stdin
- if (input === '-') {
- return drainStdin()
- }
-
- // Input file has been provided
- if (input) {
- return fs.promises.readFile(path.resolve(input), 'utf8')
- }
-
- // No input file provided, fallback to default atrules
- return '@tailwind base; @tailwind components; @tailwind utilities'
- }
-
- async function build() {
- let start = process.hrtime.bigint()
-
- return readInput()
- .then((css) => processor.process(css, { ...postcssOptions, from: input, to: output }))
- .then((result) => lightningcss(!!args['--minify'], result))
- .then((result) => {
- if (!state.watcher) {
- return result
- }
-
- env.DEBUG && console.time('Recording PostCSS dependencies')
- for (let message of result.messages) {
- if (message.type === 'dependency') {
- state.contextDependencies.add(message.file)
- }
- }
- env.DEBUG && console.timeEnd('Recording PostCSS dependencies')
-
- // TODO: This needs to be in a different spot
- env.DEBUG && console.time('Watch new files')
- state.watcher.refreshWatchedFiles()
- env.DEBUG && console.timeEnd('Watch new files')
-
- return result
- })
- .then((result) => {
- if (!output) {
- process.stdout.write(result.css)
- return
- }
-
- return Promise.all([
- outputFile(result.opts.to, result.css),
- result.map && outputFile(result.opts.to + '.map', result.map.toString()),
- ])
- })
- .then(() => {
- let end = process.hrtime.bigint()
- console.error()
- console.error('Done in', (end - start) / BigInt(1e6) + 'ms.')
- })
- .then(
- () => {},
- (err) => {
- // TODO: If an initial build fails we can't easily pick up any PostCSS dependencies
- // that were collected before the error occurred
- // The result is not stored on the error so we have to store it externally
- // and pull the messages off of it here somehow
-
- // This results in a less than ideal DX because the watcher will not pick up
- // changes to imported CSS if one of them caused an error during the initial build
- // If you fix it and then save the main CSS file so there's no error
- // The watcher will start watching the imported CSS files and will be
- // resilient to future errors.
-
- if (state.watcher) {
- console.error(err)
- } else {
- return Promise.reject(err)
- }
- }
- )
- }
-
- /**
- * @param {{file: string, content(): Promise, extension: string}[]} changes
- */
- async function parseChanges(changes) {
- return Promise.all(
- changes.map(async (change) => ({
- content: await change.content(),
- extension: change.extension,
- }))
- )
- }
-
- if (input !== undefined && input !== '-') {
- state.contextDependencies.add(path.resolve(input))
- }
-
- return {
- build,
- watch: async () => {
- state.watcher = createWatcher(args, {
- state,
-
- /**
- * @param {{file: string, content(): Promise, extension: string}[]} changes
- */
- async rebuild(changes) {
- let needsNewContext = changes.some((change) => {
- return (
- state.configBag?.dependencies.has(change.file) ||
- state.contextDependencies.has(change.file)
- )
- })
-
- if (needsNewContext) {
- state.context = null
- } else {
- for (let change of await parseChanges(changes)) {
- state.changedContent.push(change)
- }
- }
-
- return build()
- },
- })
-
- await build()
- },
- }
-}
diff --git a/src/oxide/cli/build/utils.ts b/src/oxide/cli/build/utils.ts
deleted file mode 100644
index 001857a91..000000000
--- a/src/oxide/cli/build/utils.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-import fs from 'fs'
-import path from 'path'
-
-export function indentRecursive(node, indent = 0) {
- node.each &&
- node.each((child, i) => {
- if (!child.raws.before || !child.raws.before.trim() || child.raws.before.includes('\n')) {
- child.raws.before = `\n${node.type !== 'rule' && i > 0 ? '\n' : ''}${' '.repeat(indent)}`
- }
- child.raws.after = `\n${' '.repeat(indent)}`
- indentRecursive(child, indent + 1)
- })
-}
-
-export function formatNodes(root) {
- indentRecursive(root)
- if (root.first) {
- root.first.raws.before = ''
- }
-}
-
-/**
- * When rapidly saving files atomically a couple of situations can happen:
- * - The file is missing since the external program has deleted it by the time we've gotten around to reading it from the earlier save.
- * - The file is being written to by the external program by the time we're going to read it and is thus treated as busy because a lock is held.
- *
- * To work around this we retry reading the file a handful of times with a delay between each attempt
- *
- * @param {string} path
- * @param {number} tries
- * @returns {Promise}
- * @throws {Error} If the file is still missing or busy after the specified number of tries
- */
-export async function readFileWithRetries(path, tries = 5) {
- for (let n = 0; n <= tries; n++) {
- try {
- return await fs.promises.readFile(path, 'utf8')
- } catch (err) {
- if (n !== tries) {
- if (err.code === 'ENOENT' || err.code === 'EBUSY') {
- await new Promise((resolve) => setTimeout(resolve, 10))
-
- continue
- }
- }
-
- throw err
- }
- }
-}
-
-export function drainStdin() {
- return new Promise((resolve, reject) => {
- let result = ''
- process.stdin.on('data', (chunk) => {
- result += chunk
- })
- process.stdin.on('end', () => resolve(result))
- process.stdin.on('error', (err) => reject(err))
- })
-}
-
-export async function outputFile(file, newContents) {
- try {
- let currentContents = await fs.promises.readFile(file, 'utf8')
- if (currentContents === newContents) {
- return // Skip writing the file
- }
- } catch {}
-
- // Write the file
- await fs.promises.mkdir(path.dirname(file), { recursive: true })
- await fs.promises.writeFile(file, newContents, 'utf8')
-}
diff --git a/src/oxide/cli/build/watching.ts b/src/oxide/cli/build/watching.ts
deleted file mode 100644
index 9d5680a16..000000000
--- a/src/oxide/cli/build/watching.ts
+++ /dev/null
@@ -1,225 +0,0 @@
-import chokidar from 'chokidar'
-import fs from 'fs'
-import micromatch from 'micromatch'
-import normalizePath from 'normalize-path'
-import path from 'path'
-
-import { readFileWithRetries } from './utils'
-
-/**
- * The core idea of this watcher is:
- * 1. Whenever a file is added, changed, or renamed we queue a rebuild
- * 2. Perform as few rebuilds as possible by batching them together
- * 3. Coalesce events that happen in quick succession to avoid unnecessary rebuilds
- * 4. Ensure another rebuild happens _if_ changed while a rebuild is in progress
- */
-
-/**
- *
- * @param {*} args
- * @param {{ state, rebuild(changedFiles: any[]): Promise }} param1
- * @returns {{
- * fswatcher: import('chokidar').FSWatcher,
- * refreshWatchedFiles(): void,
- * }}
- */
-export function createWatcher(args, { state, rebuild }) {
- let shouldPoll = args['--poll']
- let shouldCoalesceWriteEvents = shouldPoll || process.platform === 'win32'
-
- // Polling interval in milliseconds
- // Used only when polling or coalescing add/change events on Windows
- let pollInterval = 10
-
- let watcher = chokidar.watch([], {
- // Force checking for atomic writes in all situations
- // This causes chokidar to wait up to 100ms for a file to re-added after it's been unlinked
- // This only works when watching directories though
- atomic: true,
-
- usePolling: shouldPoll,
- interval: shouldPoll ? pollInterval : undefined,
- ignoreInitial: true,
- awaitWriteFinish: shouldCoalesceWriteEvents
- ? {
- stabilityThreshold: 50,
- pollInterval: pollInterval,
- }
- : false,
- })
-
- // A queue of rebuilds, file reads, etc… to run
- let chain = Promise.resolve()
-
- /**
- * A list of files that have been changed since the last rebuild
- *
- * @type {{file: string, content: () => Promise, extension: string}[]}
- */
- let changedContent = []
-
- /**
- * A list of files for which a rebuild has already been queued.
- * This is used to prevent duplicate rebuilds when multiple events are fired for the same file.
- * The rebuilt file is cleared from this list when it's associated rebuild has _started_
- * This is because if the file is changed during a rebuild it won't trigger a new rebuild which it should
- **/
- let pendingRebuilds = new Set()
-
- let _timer
- let _reject
-
- /**
- * Rebuilds the changed files and resolves when the rebuild is
- * complete regardless of whether it was successful or not
- */
- async function rebuildAndContinue() {
- let changes = changedContent.splice(0)
-
- // There are no changes to rebuild so we can just do nothing
- if (changes.length === 0) {
- return Promise.resolve()
- }
-
- // Clear all pending rebuilds for the about-to-be-built files
- changes.forEach((change) => pendingRebuilds.delete(change.file))
-
- // Resolve the promise even when the rebuild fails
- return rebuild(changes).then(
- () => {},
- () => {}
- )
- }
-
- /**
- *
- * @param {*} file
- * @param {(() => Promise) | null} content
- * @param {boolean} skipPendingCheck
- * @returns {Promise}
- */
- function recordChangedFile(file, content = null, skipPendingCheck = false) {
- file = path.resolve(file)
-
- // Applications like Vim/Neovim fire both rename and change events in succession for atomic writes
- // In that case rebuild has already been queued by rename, so can be skipped in change
- if (pendingRebuilds.has(file) && !skipPendingCheck) {
- return Promise.resolve()
- }
-
- // Mark that a rebuild of this file is going to happen
- // It MUST happen synchronously before the rebuild is queued for this to be effective
- pendingRebuilds.add(file)
-
- changedContent.push({
- file,
- content: content ?? (() => fs.promises.readFile(file, 'utf8')),
- extension: path.extname(file).slice(1),
- })
-
- if (_timer) {
- clearTimeout(_timer)
- _reject()
- }
-
- // If a rebuild is already in progress we don't want to start another one until the 10ms timer has expired
- chain = chain.then(
- () =>
- new Promise((resolve, reject) => {
- _timer = setTimeout(resolve, 10)
- _reject = reject
- })
- )
-
- // Resolves once this file has been rebuilt (or the rebuild for this file has failed)
- // This queues as many rebuilds as there are changed files
- // But those rebuilds happen after some delay
- // And will immediately resolve if there are no changes
- chain = chain.then(rebuildAndContinue, rebuildAndContinue)
-
- return chain
- }
-
- watcher.on('change', (file) => recordChangedFile(file))
- watcher.on('add', (file) => recordChangedFile(file))
-
- // Restore watching any files that are "removed"
- // This can happen when a file is pseudo-atomically replaced (a copy is created, overwritten, the old one is unlinked, and the new one is renamed)
- // TODO: An an optimization we should allow removal when the config changes
- watcher.on('unlink', (file) => {
- file = normalizePath(file)
-
- // Only re-add the file if it's not covered by a dynamic pattern
- if (!micromatch.some([file], state.contentPatterns.dynamic)) {
- watcher.add(file)
- }
- })
-
- // Some applications such as Visual Studio (but not VS Code)
- // will only fire a rename event for atomic writes and not a change event
- // This is very likely a chokidar bug but it's one we need to work around
- // We treat this as a change event and rebuild the CSS
- watcher.on('raw', (evt, filePath, meta) => {
- if (evt !== 'rename') {
- return
- }
-
- let watchedPath = meta.watchedPath
-
- // Watched path might be the file itself
- // Or the directory it is in
- filePath = watchedPath.endsWith(filePath) ? watchedPath : path.join(watchedPath, filePath)
-
- // Skip this event since the files it is for does not match any of the registered content globs
- if (!micromatch.some([filePath], state.contentPatterns.all)) {
- return
- }
-
- // Skip since we've already queued a rebuild for this file that hasn't happened yet
- if (pendingRebuilds.has(filePath)) {
- return
- }
-
- // We'll go ahead and add the file to the pending rebuilds list here
- // It'll be removed when the rebuild starts unless the read fails
- // which will be taken care of as well
- pendingRebuilds.add(filePath)
-
- async function enqueue() {
- try {
- // We need to read the file as early as possible outside of the chain
- // because it may be gone by the time we get to it. doing the read
- // immediately increases the chance that the file is still there
- let content = await readFileWithRetries(path.resolve(filePath))
-
- if (content === undefined) {
- return
- }
-
- // This will push the rebuild onto the chain
- // We MUST skip the rebuild check here otherwise the rebuild will never happen on Linux
- // This is because the order of events and timing is different on Linux
- // @ts-ignore: TypeScript isn't picking up that content is a string here
- await recordChangedFile(filePath, () => content, true)
- } catch {
- // If reading the file fails, it's was probably a deleted temporary file
- // So we can ignore it and no rebuild is needed
- }
- }
-
- enqueue().then(() => {
- // If the file read fails we still need to make sure the file isn't stuck in the pending rebuilds list
- pendingRebuilds.delete(filePath)
- })
- })
-
- return {
- fswatcher: watcher,
-
- refreshWatchedFiles() {
- watcher.add(Array.from(state.contextDependencies))
- watcher.add(Array.from(state.configBag.dependencies))
- watcher.add(state.contentPatterns.all)
- },
- }
-}
diff --git a/src/oxide/cli/help/index.ts b/src/oxide/cli/help/index.ts
deleted file mode 100644
index c36042a65..000000000
--- a/src/oxide/cli/help/index.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import packageJson from '../../../../package.json'
-
-export function help({ message, usage, commands, options }) {
- let indent = 2
-
- // Render header
- console.log()
- console.log(`${packageJson.name} v${packageJson.version}`)
-
- // Render message
- if (message) {
- console.log()
- for (let msg of message.split('\n')) {
- console.log(msg)
- }
- }
-
- // Render usage
- if (usage && usage.length > 0) {
- console.log()
- console.log('Usage:')
- for (let example of usage) {
- console.log(' '.repeat(indent), example)
- }
- }
-
- // Render commands
- if (commands && commands.length > 0) {
- console.log()
- console.log('Commands:')
- for (let command of commands) {
- console.log(' '.repeat(indent), command)
- }
- }
-
- // Render options
- if (options) {
- let groupedOptions = {}
- for (let [key, value] of Object.entries(options)) {
- if (typeof value === 'object') {
- groupedOptions[key] = { ...value, flags: [key] }
- } else {
- groupedOptions[value].flags.push(key)
- }
- }
-
- console.log()
- console.log('Options:')
- for (let { flags, description, deprecated } of Object.values(groupedOptions)) {
- if (deprecated) continue
-
- if (flags.length === 1) {
- console.log(
- ' '.repeat(indent + 4 /* 4 = "-i, ".length */),
- flags.slice().reverse().join(', ').padEnd(20, ' '),
- description
- )
- } else {
- console.log(
- ' '.repeat(indent),
- flags.slice().reverse().join(', ').padEnd(24, ' '),
- description
- )
- }
- }
- }
-
- console.log()
-}
diff --git a/src/oxide/cli/index.ts b/src/oxide/cli/index.ts
deleted file mode 100644
index 96b284db9..000000000
--- a/src/oxide/cli/index.ts
+++ /dev/null
@@ -1,204 +0,0 @@
-#!/usr/bin/env node
-
-import path from 'path'
-import arg from 'arg'
-import fs from 'fs'
-
-import { build } from './build'
-import { help } from './help'
-import { init } from './init'
-
-// ---
-
-function oneOf(...options) {
- return Object.assign(
- (value = true) => {
- for (let option of options) {
- let parsed = option(value)
- if (parsed === value) {
- return parsed
- }
- }
-
- throw new Error('...')
- },
- { manualParsing: true }
- )
-}
-
-let commands = {
- init: {
- run: init,
- args: {
- '--esm': { type: Boolean, description: `Initialize configuration file as ESM` },
- '--ts': { type: Boolean, description: `Initialize configuration file as TypeScript` },
- '--full': {
- type: Boolean,
- description: `Include the default values for all options in the generated configuration file`,
- },
- '-f': '--full',
- },
- },
- build: {
- run: build,
- args: {
- '--input': { type: String, description: 'Input file' },
- '--output': { type: String, description: 'Output file' },
- '--watch': {
- type: oneOf(String, Boolean),
- description: 'Watch for changes and rebuild as needed',
- },
- '--poll': {
- type: Boolean,
- description: 'Use polling instead of filesystem events when watching',
- },
- '--content': {
- type: String,
- description: 'Content paths to use for removing unused classes',
- },
- '--minify': { type: Boolean, description: 'Minify the output' },
- '--config': {
- type: String,
- description: 'Path to a custom config file',
- },
- '-c': '--config',
- '-i': '--input',
- '-o': '--output',
- '-m': '--minify',
- '-w': '--watch',
- '-p': '--poll',
- },
- },
-}
-
-let sharedFlags = {
- '--help': { type: Boolean, description: 'Display usage information' },
- '-h': '--help',
-}
-
-if (
- process.stdout.isTTY /* Detect redirecting output to a file */ &&
- (process.argv[2] === undefined ||
- process.argv.slice(2).every((flag) => sharedFlags[flag] !== undefined))
-) {
- help({
- usage: [
- 'tailwindcss [--input input.css] [--output output.css] [--watch] [options...]',
- 'tailwindcss init [--full] [options...]',
- ],
- commands: Object.keys(commands)
- .filter((command) => command !== 'build')
- .map((command) => `${command} [options]`),
- options: { ...commands.build.args, ...sharedFlags },
- })
- process.exit(0)
-}
-
-let command = ((arg = '') => (arg.startsWith('-') ? undefined : arg))(process.argv[2]) || 'build'
-
-if (commands[command] === undefined) {
- if (fs.existsSync(path.resolve(command))) {
- // TODO: Deprecate this in future versions
- // Check if non-existing command, might be a file.
- command = 'build'
- } else {
- help({
- message: `Invalid command: ${command}`,
- usage: ['tailwindcss [options]'],
- commands: Object.keys(commands)
- .filter((command) => command !== 'build')
- .map((command) => `${command} [options]`),
- options: sharedFlags,
- })
- process.exit(1)
- }
-}
-
-// Execute command
-let { args: flags, run } = commands[command]
-let args = (() => {
- try {
- let result = arg(
- Object.fromEntries(
- Object.entries({ ...flags, ...sharedFlags })
- .filter(([_key, value]) => !value?.type?.manualParsing)
- .map(([key, value]) => [key, typeof value === 'object' ? value.type : value])
- ),
- { permissive: true }
- )
-
- // Manual parsing of flags to allow for special flags like oneOf(Boolean, String)
- for (let i = result['_'].length - 1; i >= 0; --i) {
- let flag = result['_'][i]
- if (!flag.startsWith('-')) continue
-
- let [flagName, flagValue] = flag.split('=')
- let handler = flags[flagName]
-
- // Resolve flagName & handler
- while (typeof handler === 'string') {
- flagName = handler
- handler = flags[handler]
- }
-
- if (!handler) continue
-
- let args = []
- let offset = i + 1
-
- // --flag value syntax was used so we need to pull `value` from `args`
- if (flagValue === undefined) {
- // Parse args for current flag
- while (result['_'][offset] && !result['_'][offset].startsWith('-')) {
- args.push(result['_'][offset++])
- }
-
- // Cleanup manually parsed flags + args
- result['_'].splice(i, 1 + args.length)
-
- // No args were provided, use default value defined in handler
- // One arg was provided, use that directly
- // Multiple args were provided so pass them all in an array
- flagValue = args.length === 0 ? undefined : args.length === 1 ? args[0] : args
- } else {
- // Remove the whole flag from the args array
- result['_'].splice(i, 1)
- }
-
- // Set the resolved value in the `result` object
- result[flagName] = handler.type(flagValue, flagName)
- }
-
- // Ensure that the `command` is always the first argument in the `args`.
- // This is important so that we don't have to check if a default command
- // (build) was used or not from within each plugin.
- //
- // E.g.: tailwindcss input.css -> _: ['build', 'input.css']
- // E.g.: tailwindcss build input.css -> _: ['build', 'input.css']
- if (result['_'][0] !== command) {
- result['_'].unshift(command)
- }
-
- return result
- } catch (err) {
- if (err.code === 'ARG_UNKNOWN_OPTION') {
- help({
- message: err.message,
- usage: ['tailwindcss [options]'],
- options: sharedFlags,
- })
- process.exit(1)
- }
- throw err
- }
-})()
-
-if (args['--help']) {
- help({
- options: { ...flags, ...sharedFlags },
- usage: [`tailwindcss ${command} [options]`],
- })
- process.exit(0)
-}
-
-run(args)
diff --git a/src/oxide/cli/init/index.ts b/src/oxide/cli/init/index.ts
deleted file mode 100644
index abc93cdc1..000000000
--- a/src/oxide/cli/init/index.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import fs from 'fs'
-import path from 'path'
-
-function isESM() {
- const pkgPath = path.resolve('./package.json')
-
- try {
- let pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'))
- return pkg.type && pkg.type === 'module'
- } catch (err) {
- return false
- }
-}
-
-export function init(args) {
- let messages: string[] = []
-
- let isProjectESM = args['--ts'] || args['--esm'] || isESM()
- let syntax = args['--ts'] ? 'ts' : isProjectESM ? 'js' : 'cjs'
- let extension = args['--ts'] ? 'ts' : 'js'
-
- let tailwindConfigLocation = path.resolve(args['_'][1] ?? `./tailwind.config.${extension}`)
-
- if (fs.existsSync(tailwindConfigLocation)) {
- messages.push(`${path.basename(tailwindConfigLocation)} already exists.`)
- } else {
- let stubContentsFile = fs.readFileSync(
- args['--full']
- ? path.resolve(__dirname, '../../../../stubs/config.full.js')
- : path.resolve(__dirname, '../../../../stubs/config.simple.js'),
- 'utf8'
- )
-
- let stubFile = fs.readFileSync(
- path.resolve(__dirname, `../../../../stubs/tailwind.config.${syntax}`),
- 'utf8'
- )
-
- // Change colors import
- stubContentsFile = stubContentsFile.replace('../colors', 'tailwindcss/colors')
-
- // Replace contents of {ts,js,cjs} file with the stub {simple,full}.
- stubFile =
- stubFile
- .replace('__CONFIG__', stubContentsFile.replace('module.exports =', '').trim())
- .trim() + '\n\n'
-
- fs.writeFileSync(tailwindConfigLocation, stubFile, 'utf8')
-
- messages.push(`Created Tailwind CSS config file: ${path.basename(tailwindConfigLocation)}`)
- }
-
- if (messages.length > 0) {
- console.log()
- for (let message of messages) {
- console.log(message)
- }
- }
-}
diff --git a/src/oxide/postcss-plugin.ts b/src/oxide/postcss-plugin.ts
deleted file mode 100644
index 1be3203f9..000000000
--- a/src/oxide/postcss-plugin.ts
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('../plugin.js')
diff --git a/src/plugin.js b/src/plugin.js
index 59f5fab01..537693ec1 100644
--- a/src/plugin.js
+++ b/src/plugin.js
@@ -1,7 +1,16 @@
+import postcss from 'postcss'
+import lightningcss, { Features } from 'lightningcss'
+import browserslist from 'browserslist'
import setupTrackingContext from './lib/setupTrackingContext'
import processTailwindFeatures from './processTailwindFeatures'
import { env } from './lib/sharedState'
import { findAtConfigPath } from './lib/findAtConfigPath'
+import { handleImportAtRules } from './lib/handleImportAtRules'
+import { version as tailwindVersion } from '../package.json'
+
+function license() {
+ return `/* ! tailwindcss v${tailwindVersion} | MIT License | https://tailwindcss.com */\n`
+}
module.exports = function tailwindcss(configOrPath) {
return {
@@ -13,7 +22,8 @@ module.exports = function tailwindcss(configOrPath) {
console.time('JIT TOTAL')
return root
},
- function (root, result) {
+ ...handleImportAtRules(),
+ async function (root, result) {
// Use the path for the `@config` directive if it exists, otherwise use the
// path for the file being processed
configOrPath = findAtConfigPath(root, result) ?? configOrPath
@@ -25,75 +35,91 @@ module.exports = function tailwindcss(configOrPath) {
for (const root of roots) {
if (root.type === 'root') {
- processTailwindFeatures(context)(root, result)
+ await processTailwindFeatures(context)(root, result)
}
}
return
}
- processTailwindFeatures(context)(root, result)
+ await processTailwindFeatures(context)(root, result)
},
- __OXIDE__ &&
- function lightningCssPlugin(_root, result) {
- let postcss = require('postcss')
- let lightningcss = require('lightningcss')
- let browserslist = require('browserslist')
+ function lightningCssPlugin(_root, result) {
+ let map = result.map ?? result.opts.map
- try {
- let transformed = lightningcss.transform({
- filename: result.opts.from,
- code: Buffer.from(result.root.toString()),
- minify: false,
- sourceMap: !!result.map,
- inputSourceMap: result.map ? result.map.toString() : undefined,
- targets:
- typeof process !== 'undefined' && process.env.JEST_WORKER_ID
- ? { chrome: 106 << 16 }
- : lightningcss.browserslistToTargets(
- browserslist(require('../package.json').browserslist)
- ),
+ let intermediateResult = result.root.toResult({
+ map: map ? { inline: true } : false,
+ })
- drafts: {
- nesting: true,
- customMedia: true,
- },
- })
+ let intermediateMap = intermediateResult.map?.toJSON?.() ?? map
- result.map = Object.assign(result.map ?? {}, {
- toJSON() {
- return transformed.map.toJSON()
- },
- toString() {
- return transformed.map.toString()
- },
- })
+ try {
+ let resolvedBrowsersListConfig = browserslist.findConfig(
+ result.opts.from ?? process.cwd()
+ )?.defaults
+ let defaultBrowsersListConfig = require('../package.json').browserslist
+ let browsersListConfig = resolvedBrowsersListConfig ?? defaultBrowsersListConfig
- result.root = postcss.parse(transformed.code.toString('utf8'))
- } catch (err) {
- if (typeof process !== 'undefined' && process.env.JEST_WORKER_ID) {
- let lines = err.source.split('\n')
- err = new Error(
- [
- 'Error formatting using Lightning CSS:',
- '',
- ...[
- '```css',
- ...lines.slice(Math.max(err.loc.line - 3, 0), err.loc.line),
- ' '.repeat(err.loc.column - 1) + '^-- ' + err.toString(),
- ...lines.slice(err.loc.line, err.loc.line + 2),
- '```',
- ],
- ].join('\n')
- )
+ let transformed = lightningcss.transform({
+ filename: result.opts.from,
+ code: Buffer.from(intermediateResult.css),
+ minify: false,
+ sourceMap: !!intermediateMap,
+ targets: lightningcss.browserslistToTargets(browserslist(browsersListConfig)),
+ errorRecovery: true,
+ drafts: {
+ customMedia: true,
+ },
+ nonStandard: {
+ deepSelectorCombinator: true,
+ },
+ include: Features.Nesting,
+ exclude: Features.LogicalProperties,
+ })
+
+ let code = transformed.code.toString()
+
+ // https://postcss.org/api/#sourcemapoptions
+ if (intermediateMap && transformed.map != null) {
+ let prev = transformed.map.toString()
+
+ if (typeof intermediateMap === 'object') {
+ intermediateMap.prev = prev
+ } else {
+ code = `${code}\n/*# sourceMappingURL=data:application/json;base64,${Buffer.from(
+ prev
+ ).toString('base64')} */`
}
-
- if (Error.captureStackTrace) {
- Error.captureStackTrace(err, lightningCssPlugin)
- }
- throw err
}
- },
+
+ result.root = postcss.parse(license() + code, {
+ ...result.opts,
+ map: intermediateMap,
+ })
+ } catch (err) {
+ if (err.source && typeof process !== 'undefined' && process.env.JEST_WORKER_ID) {
+ let lines = err.source.split('\n')
+ err = new Error(
+ [
+ 'Error formatting using Lightning CSS:',
+ '',
+ ...[
+ '```css',
+ ...lines.slice(Math.max(err.loc.line - 3, 0), err.loc.line),
+ ' '.repeat(err.loc.column - 1) + '^-- ' + err.toString(),
+ ...lines.slice(err.loc.line, err.loc.line + 2),
+ '```',
+ ],
+ ].join('\n')
+ )
+ }
+
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(err, lightningCssPlugin)
+ }
+ throw err
+ }
+ },
env.DEBUG &&
function (root) {
console.timeEnd('JIT TOTAL')
diff --git a/src/processTailwindFeatures.js b/src/processTailwindFeatures.js
index 952e17a13..fa363b003 100644
--- a/src/processTailwindFeatures.js
+++ b/src/processTailwindFeatures.js
@@ -12,7 +12,7 @@ import { createContext } from './lib/setupContextUtils'
import { issueFlagNotices } from './featureFlags'
export default function processTailwindFeatures(setupContext) {
- return function (root, result) {
+ return async function (root, result) {
let { tailwindDirectives, applyDirectives } = normalizeTailwindDirectives(root)
detectNesting()(root, result)
@@ -44,7 +44,8 @@ export default function processTailwindFeatures(setupContext) {
issueFlagNotices(context.tailwindConfig)
- expandTailwindAtRules(context)(root, result)
+ await expandTailwindAtRules(context)(root, result)
+
// Partition apply rules that are generated by
// addComponents, addUtilities and so on.
partitionApplyAtRules()(root, result)
diff --git a/src/util/cloneNodes.js b/src/util/cloneNodes.js
index 299dd63b3..9fa1c14a9 100644
--- a/src/util/cloneNodes.js
+++ b/src/util/cloneNodes.js
@@ -1,21 +1,13 @@
+/**
+ * @param {import('postcss').Container[]} nodes
+ * @param {any} source
+ * @param {any} raws
+ * @returns {import('postcss').Container[]}
+ */
export default function cloneNodes(nodes, source = undefined, raws = undefined) {
return nodes.map((node) => {
let cloned = node.clone()
- // We always want override the source map
- // except when explicitly told not to
- let shouldOverwriteSource = node.raws.tailwind?.preserveSource !== true || !cloned.source
-
- if (source !== undefined && shouldOverwriteSource) {
- cloned.source = source
-
- if ('walk' in cloned) {
- cloned.walk((child) => {
- child.source = source
- })
- }
- }
-
if (raws !== undefined) {
cloned.raws.tailwind = {
...cloned.raws.tailwind,
@@ -23,6 +15,35 @@ export default function cloneNodes(nodes, source = undefined, raws = undefined)
}
}
+ if (source !== undefined) {
+ traverse(cloned, (node) => {
+ // Do not traverse nodes that have opted
+ // to preserve their original source
+ let shouldPreserveSource = node.raws.tailwind?.preserveSource === true && node.source
+ if (shouldPreserveSource) {
+ return false
+ }
+
+ // Otherwise we can safely replace the source
+ // And continue traversing
+ node.source = source
+ })
+ }
+
return cloned
})
}
+
+/**
+ * Traverse a tree of nodes and don't traverse children if the callback
+ * returns false. Ideally we'd use Container#walk instead of this
+ * function but it stops traversing siblings too.
+ *
+ * @param {import('postcss').Container} node
+ * @param {(node: import('postcss').Container) => boolean} onNode
+ */
+function traverse(node, onNode) {
+ if (onNode(node) !== false) {
+ node.each?.((child) => traverse(child, onNode))
+ }
+}
diff --git a/src/util/color.js b/src/util/color.js
index ea6f752b3..733ca99ff 100644
--- a/src/util/color.js
+++ b/src/util/color.js
@@ -5,7 +5,7 @@ let SHORT_HEX = /^#([a-f\d])([a-f\d])([a-f\d])([a-f\d])?$/i
let VALUE = /(?:\d+|\d*\.\d+)%?/
let SEP = /(?:\s*,\s*|\s+)/
let ALPHA_SEP = /\s*[,/]\s*/
-let CUSTOM_PROPERTY = /var\(--(?:[^ )]*?)\)/
+let CUSTOM_PROPERTY = /var\(--(?:[^ )]*?)(?:,(?:[^ )]*?|var\(--[^ )]*?\)))?\)/
let RGB = new RegExp(
`^(rgba?)\\(\\s*(${VALUE.source}|${CUSTOM_PROPERTY.source})(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?(?:${ALPHA_SEP.source}(${VALUE.source}|${CUSTOM_PROPERTY.source}))?\\s*\\)$`
diff --git a/src/util/dataTypes.js b/src/util/dataTypes.js
index 55cc00579..7d8224606 100644
--- a/src/util/dataTypes.js
+++ b/src/util/dataTypes.js
@@ -3,20 +3,42 @@ import { parseBoxShadowValue } from './parseBoxShadowValue'
import { splitAtTopLevelOnly } from './splitAtTopLevelOnly'
let cssFunctions = ['min', 'max', 'clamp', 'calc']
+let IS_CSS_FN = new RegExp(`^(${cssFunctions.join('|')})\\(.*\\)`)
// Ref: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Types
function isCSSFunction(value) {
- return cssFunctions.some((fn) => new RegExp(`^${fn}\\(.*\\)`).test(value))
+ return IS_CSS_FN.test(value)
}
-const placeholder = '--tw-placeholder'
-const placeholderRe = new RegExp(placeholder, 'g')
+// These properties accept a `` as one of the values. This means that you can use them
+// as: `timeline-scope: --tl;`
+//
+// Without the `var(--tl)`, in these cases we don't want to normalize the value, and you should add
+// the `var()` yourself.
+//
+// More info:
+// - https://drafts.csswg.org/scroll-animations/#propdef-timeline-scope
+// - https://developer.mozilla.org/en-US/docs/Web/CSS/timeline-scope#dashed-ident
+//
+const AUTO_VAR_INJECTION_EXCEPTIONS = new Set([
+ // Concrete properties
+ 'scroll-timeline-name',
+ 'timeline-scope',
+ 'view-timeline-name',
+ 'font-palette',
+
+ // Shorthand properties
+ 'scroll-timeline',
+ 'animation-timeline',
+ 'view-timeline',
+])
// This is not a data type, but rather a function that can normalize the
// correct values.
-export function normalize(value, isRoot = true) {
- if (value.startsWith('--')) {
+export function normalize(value, context = null, isRoot = true) {
+ let isVarException = context && AUTO_VAR_INJECTION_EXCEPTIONS.has(context.property)
+ if (value.startsWith('--') && !isVarException) {
return `var(${value})`
}
@@ -30,7 +52,7 @@ export function normalize(value, isRoot = true) {
return part
}
- return normalize(part, false)
+ return normalize(part, context, false)
})
.join('')
}
@@ -49,22 +71,113 @@ export function normalize(value, isRoot = true) {
value = value.trim()
}
- // Add spaces around operators inside math functions like calc() that do not follow an operator
- // or '('.
- value = value.replace(/(calc|min|max|clamp)\(.+\)/g, (match) => {
- let vars = []
- return match
- .replace(/var\((--.+?)[,)]/g, (match, g1) => {
- vars.push(g1)
- return match.replace(g1, placeholder)
- })
- .replace(/(-?\d*\.?\d(?!\b-\d.+[,)](?![^+\-/*])\D)(?:%|[a-z]+)?|\))([+\-/*])/g, '$1 $2 ')
- .replace(placeholderRe, () => vars.shift())
- })
+ value = normalizeMathOperatorSpacing(value)
return value
}
+/**
+ * Add spaces around operators inside math functions
+ * like calc() that do not follow an operator, '(', or `,`.
+ *
+ * @param {string} value
+ * @returns {string}
+ */
+function normalizeMathOperatorSpacing(value) {
+ let preventFormattingInFunctions = ['theme']
+ let preventFormattingKeywords = [
+ 'min-content',
+ 'max-content',
+ 'fit-content',
+
+ // Env
+ 'safe-area-inset-top',
+ 'safe-area-inset-right',
+ 'safe-area-inset-bottom',
+ 'safe-area-inset-left',
+
+ 'titlebar-area-x',
+ 'titlebar-area-y',
+ 'titlebar-area-width',
+ 'titlebar-area-height',
+
+ 'keyboard-inset-top',
+ 'keyboard-inset-right',
+ 'keyboard-inset-bottom',
+ 'keyboard-inset-left',
+ 'keyboard-inset-width',
+ 'keyboard-inset-height',
+ ]
+
+ return value.replace(/(calc|min|max|clamp)\(.+\)/g, (match) => {
+ let result = ''
+
+ function lastChar() {
+ let char = result.trimEnd()
+ return char[char.length - 1]
+ }
+
+ for (let i = 0; i < match.length; i++) {
+ function peek(word) {
+ return word.split('').every((char, j) => match[i + j] === char)
+ }
+
+ function consumeUntil(chars) {
+ let minIndex = Infinity
+ for (let char of chars) {
+ let index = match.indexOf(char, i)
+ if (index !== -1 && index < minIndex) {
+ minIndex = index
+ }
+ }
+
+ let result = match.slice(i, minIndex)
+ i += result.length - 1
+ return result
+ }
+
+ let char = match[i]
+
+ // Handle `var(--variable)`
+ if (peek('var')) {
+ // When we consume until `)`, then we are dealing with this scenario:
+ // `var(--example)`
+ //
+ // When we consume until `,`, then we are dealing with this scenario:
+ // `var(--example, 1rem)`
+ //
+ // In this case we do want to "format", the default value as well
+ result += consumeUntil([')', ','])
+ }
+
+ // Skip formatting of known keywords
+ else if (preventFormattingKeywords.some((keyword) => peek(keyword))) {
+ let keyword = preventFormattingKeywords.find((keyword) => peek(keyword))
+ result += keyword
+ i += keyword.length - 1
+ }
+
+ // Skip formatting inside known functions
+ else if (preventFormattingInFunctions.some((fn) => peek(fn))) {
+ result += consumeUntil([')'])
+ }
+
+ // Handle operators
+ else if (
+ ['+', '-', '*', '/'].includes(char) &&
+ !['(', '+', '-', '*', '/', ','].includes(lastChar())
+ ) {
+ result += ` ${char} `
+ } else {
+ result += char
+ }
+ }
+
+ // Simplify multiple spaces
+ return result.replace(/\s+/g, ' ')
+ })
+}
+
export function url(value) {
return value.startsWith('url(')
}
@@ -114,12 +227,9 @@ let lengthUnits = [
'cqmax',
]
let lengthUnitsPattern = `(?:${lengthUnits.join('|')})`
+let lengthRegExp = new RegExp(`^[+-]?[0-9]*\.?[0-9]+(?:[eE][+-]?[0-9]+)?${lengthUnitsPattern}$`)
export function length(value) {
- return (
- value === '0' ||
- new RegExp(`^[+-]?[0-9]*\.?[0-9]+(?:[eE][+-]?[0-9]+)?${lengthUnitsPattern}$`).test(value) ||
- isCSSFunction(value)
- )
+ return value === '0' || lengthRegExp.test(value) || isCSSFunction(value)
}
let lineWidths = new Set(['thin', 'medium', 'thick'])
@@ -178,11 +288,12 @@ export function image(value) {
}
let gradientTypes = new Set([
+ 'conic-gradient',
'linear-gradient',
'radial-gradient',
+ 'repeating-conic-gradient',
'repeating-linear-gradient',
'repeating-radial-gradient',
- 'conic-gradient',
])
export function gradient(value) {
value = normalize(value)
diff --git a/src/util/formatVariantSelector.js b/src/util/formatVariantSelector.js
index e3016e804..a3261855b 100644
--- a/src/util/formatVariantSelector.js
+++ b/src/util/formatVariantSelector.js
@@ -3,13 +3,14 @@ import unescape from 'postcss-selector-parser/dist/util/unesc'
import escapeClassName from '../util/escapeClassName'
import prefixSelector from '../util/prefixSelector'
import { movePseudos } from './pseudoElements'
+import { splitAtTopLevelOnly } from './splitAtTopLevelOnly'
/** @typedef {import('postcss-selector-parser').Root} Root */
/** @typedef {import('postcss-selector-parser').Selector} Selector */
/** @typedef {import('postcss-selector-parser').Pseudo} Pseudo */
/** @typedef {import('postcss-selector-parser').Node} Node */
-/** @typedef {{format: string, isArbitraryVariant: boolean}[]} RawFormats */
+/** @typedef {{format: string, respectPrefix: boolean}[]} RawFormats */
/** @typedef {import('postcss-selector-parser').Root} ParsedFormats */
/** @typedef {RawFormats | ParsedFormats} AcceptedFormats */
@@ -29,7 +30,7 @@ export function formatVariantSelector(formats, { context, candidate }) {
return {
...format,
- ast: format.isArbitraryVariant ? ast : prefixSelector(prefix, ast),
+ ast: format.respectPrefix ? prefixSelector(prefix, ast) : ast,
}
})
@@ -160,7 +161,7 @@ export function finalizeSelector(current, formats, { context, candidate, base })
// │ │ │ ╰── We will not split here
// ╰──┴─────┴─────────────── We will split here
//
- base = base ?? candidate.split(new RegExp(`\\${separator}(?![^[]*\\])`)).pop()
+ base = base ?? splitAtTopLevelOnly(candidate, separator).pop()
// Parse the selector into an AST
let selector = selectorParser().astSync(current)
@@ -185,6 +186,13 @@ export function finalizeSelector(current, formats, { context, candidate, base })
// Remove extraneous selectors that do not include the base candidate
selector.each((sel) => eliminateIrrelevantSelectors(sel, base))
+ // If after eliminating irrelevant selectors, we end up with nothing
+ // Then the whole "rule" this is associated with does not need to exist
+ // We use `null` as a marker value for that case
+ if (selector.length === 0) {
+ return null
+ }
+
// If there are no formats that means there were no variants added to the candidate
// so we can just return the selector as-is
let formatAst = Array.isArray(formats)
diff --git a/src/util/isPlainObject.js b/src/util/isPlainObject.js
index 7563f3218..6bd031abd 100644
--- a/src/util/isPlainObject.js
+++ b/src/util/isPlainObject.js
@@ -4,5 +4,5 @@ export default function isPlainObject(value) {
}
const prototype = Object.getPrototypeOf(value)
- return prototype === null || prototype === Object.prototype
+ return prototype === null || Object.getPrototypeOf(prototype) === null
}
diff --git a/src/util/log.js b/src/util/log.js
index 0df5c8719..900c2d53f 100644
--- a/src/util/log.js
+++ b/src/util/log.js
@@ -17,6 +17,30 @@ export function dim(input) {
}
export default {
+ group(key, cb) {
+ if (typeof process !== 'undefined' && process.env.JEST_WORKER_ID) return
+
+ if (key && alreadyShown.has(key)) return
+ if (key) alreadyShown.add(key)
+
+ console.warn('')
+
+ cb({
+ info(messages) {
+ messages.forEach((message) => console.warn(colors.bold(colors.cyan('info')), '-', message))
+ },
+ warn(messages) {
+ messages.forEach((message) =>
+ console.warn(colors.bold(colors.yellow('warn')), '-', message)
+ )
+ },
+ risk(messages) {
+ messages.forEach((message) =>
+ console.warn(colors.bold(colors.magenta('risk')), '-', message)
+ )
+ },
+ })
+ },
info(key, messages) {
log(colors.bold(colors.cyan('info')), ...(Array.isArray(key) ? [key] : [messages, key]))
},
diff --git a/src/util/normalizeConfig.js b/src/util/normalizeConfig.js
index 7e1a592de..c7c7c1c71 100644
--- a/src/util/normalizeConfig.js
+++ b/src/util/normalizeConfig.js
@@ -1,4 +1,4 @@
-import { flagEnabled } from '../featureFlags'
+import { flagEnabled, featureFlags } from '../featureFlags'
import log, { dim } from './log'
export function normalizeConfig(config) {
@@ -18,6 +18,10 @@ export function normalizeConfig(config) {
* }
*/
let valid = (() => {
+ if (config.content === 'auto') {
+ return true
+ }
+
// `config.purge` should not exist anymore
if (config.purge) {
return false
@@ -196,11 +200,17 @@ export function normalizeConfig(config) {
files: (() => {
let { content, purge } = config
- if (Array.isArray(purge)) return purge
- if (Array.isArray(purge?.content)) return purge.content
+ if (content === undefined && purge === undefined) return []
+ if (purge) {
+ if (Array.isArray(purge)) return purge
+ if (Array.isArray(purge?.content)) return purge.content
+ return []
+ }
+
if (Array.isArray(content)) return content
if (Array.isArray(content?.content)) return content.content
if (Array.isArray(content?.files)) return content.files
+ if (content === 'auto') return ['auto']
return []
})(),
@@ -284,16 +294,33 @@ export function normalizeConfig(config) {
})(),
}
+ // Force disable the `oxideParser` feature flag when using unsupported features.
+ // TODO: Remove once we have prefix or separator support in the oxide parser.
+ if (config.prefix !== '' || config.separator !== ':') {
+ if (config.experimental === 'all') {
+ config.experimental = {}
+ for (let key of featureFlags.experimental) {
+ config.experimental[key] = true
+ }
+ } else {
+ config.experimental = config.experimental ?? {}
+ }
+
+ config.experimental.oxideParser = false
+ }
+
// Validate globs to prevent bogus globs.
// E.g.: `./src/*.{html}` is invalid, the `{html}` should just be `html`
- for (let file of config.content.files) {
- if (typeof file === 'string' && /{([^,]*?)}/g.test(file)) {
- log.warn('invalid-glob-braces', [
- `The glob pattern ${dim(file)} in your Tailwind CSS configuration is invalid.`,
- `Update it to ${dim(file.replace(/{([^,]*?)}/g, '$1'))} to silence this warning.`,
- // TODO: Add https://tw.wtf/invalid-glob-braces
- ])
- break
+ if (config.content.files !== 'auto') {
+ for (let file of config.content.files) {
+ if (typeof file === 'string' && /{([^,]*?)}/g.test(file)) {
+ log.warn('invalid-glob-braces', [
+ `The glob pattern ${dim(file)} in your Tailwind CSS configuration is invalid.`,
+ `Update it to ${dim(file.replace(/{([^,]*?)}/g, '$1'))} to silence this warning.`,
+ // TODO: Add https://tw.wtf/invalid-glob-braces
+ ])
+ break
+ }
}
}
diff --git a/src/util/pluginUtils.js b/src/util/pluginUtils.js
index bef9fc165..a170f4f9b 100644
--- a/src/util/pluginUtils.js
+++ b/src/util/pluginUtils.js
@@ -18,7 +18,6 @@ import {
} from './dataTypes'
import negateValue from './negateValue'
import { backgroundSize } from './validateFormalSyntax'
-import { flagEnabled } from '../featureFlags.js'
/**
* @param {import('postcss-selector-parser').Container} selectors
@@ -88,6 +87,22 @@ function isArbitraryValue(input) {
function splitUtilityModifier(modifier) {
let slashIdx = modifier.lastIndexOf('/')
+ // If the `/` is inside an arbitrary, we want to find the previous one if any
+ // This logic probably isn't perfect but it should work for most cases
+ let arbitraryStartIdx = modifier.lastIndexOf('[', slashIdx)
+ let arbitraryEndIdx = modifier.indexOf(']', slashIdx)
+
+ let isNextToArbitrary = modifier[slashIdx - 1] === ']' || modifier[slashIdx + 1] === '['
+
+ // Backtrack to the previous `/` if the one we found was inside an arbitrary
+ if (!isNextToArbitrary) {
+ if (arbitraryStartIdx !== -1 && arbitraryEndIdx !== -1) {
+ if (arbitraryStartIdx < slashIdx && slashIdx < arbitraryEndIdx) {
+ slashIdx = modifier.lastIndexOf('/', arbitraryStartIdx)
+ }
+ }
+ }
+
if (slashIdx === -1 || slashIdx === modifier.length - 1) {
return [modifier, undefined]
}
@@ -243,12 +258,9 @@ export function coerceValue(types, modifier, options, tailwindConfig) {
* @returns {Iterator<[value: string, type: string, modifier: string | null]>}
*/
export function* getMatchingTypes(types, rawModifier, options, tailwindConfig) {
- let modifiersEnabled = flagEnabled(tailwindConfig, 'generalizedModifiers')
-
let [modifier, utilityModifier] = splitUtilityModifier(rawModifier)
let canUseUtilityModifier =
- modifiersEnabled &&
options.modifiers != null &&
(options.modifiers === 'any' ||
(typeof options.modifiers === 'object' &&
diff --git a/src/util/prefixSelector.js b/src/util/prefixSelector.js
index 0e7bb445b..93cbeb957 100644
--- a/src/util/prefixSelector.js
+++ b/src/util/prefixSelector.js
@@ -17,6 +17,7 @@ export default function (prefix, selector, prependNegative = false) {
return selector
}
+ /** @type {import('postcss-selector-parser').Root} */
let ast = typeof selector === 'string' ? parser().astSync(selector) : selector
ast.walkClasses((classSelector) => {
diff --git a/src/util/pseudoElements.js b/src/util/pseudoElements.js
index 9f0e54c67..5795cdd42 100644
--- a/src/util/pseudoElements.js
+++ b/src/util/pseudoElements.js
@@ -19,40 +19,37 @@
// **Jumpable**
// Any terminal element may "jump" over combinators when moving to the end of the selector
//
-// This is a backwards-compat quirk of :before and :after variants.
+// This is a backwards-compat quirk of pseudo element variants from earlier versions of Tailwind CSS.
/** @typedef {'terminal' | 'actionable' | 'jumpable'} PseudoProperty */
/** @type {Record} */
let elementProperties = {
+ // Pseudo elements from the spec
'::after': ['terminal', 'jumpable'],
- '::backdrop': ['terminal'],
+ '::backdrop': ['terminal', 'jumpable'],
'::before': ['terminal', 'jumpable'],
'::cue': ['terminal'],
'::cue-region': ['terminal'],
'::first-letter': ['terminal', 'jumpable'],
'::first-line': ['terminal', 'jumpable'],
'::grammar-error': ['terminal'],
- '::marker': ['terminal'],
+ '::marker': ['terminal', 'jumpable'],
'::part': ['terminal', 'actionable'],
- '::placeholder': ['terminal'],
- '::selection': ['terminal'],
+ '::placeholder': ['terminal', 'jumpable'],
+ '::selection': ['terminal', 'jumpable'],
'::slotted': ['terminal'],
'::spelling-error': ['terminal'],
'::target-text': ['terminal'],
- // other
+ // Pseudo elements from the spec with special rules
'::file-selector-button': ['terminal', 'actionable'],
- '::-webkit-progress-bar': ['terminal', 'actionable'],
- // Webkit scroll bar pseudo elements can be combined with user-action pseudo classes
- '::-webkit-scrollbar': ['terminal', 'actionable'],
- '::-webkit-scrollbar-button': ['terminal', 'actionable'],
- '::-webkit-scrollbar-thumb': ['terminal', 'actionable'],
- '::-webkit-scrollbar-track': ['terminal', 'actionable'],
- '::-webkit-scrollbar-track-piece': ['terminal', 'actionable'],
- '::-webkit-scrollbar-corner': ['terminal', 'actionable'],
- '::-webkit-resizer': ['terminal', 'actionable'],
+ // Library-specific pseudo elements used by component libraries
+ // These are Shadow DOM-like
+ '::deep': ['actionable'],
+ '::v-deep': ['actionable'],
+ '::ng-deep': ['actionable'],
// Note: As a rule, double colons (::) should be used instead of a single colon
// (:). This distinguishes pseudo-classes from pseudo-elements. However, since
@@ -65,8 +62,8 @@ let elementProperties = {
// The default value is used when the pseudo-element is not recognized
// Because it's not recognized, we don't know if it's terminal or not
- // So we assume it can't be moved AND can have user-action pseudo classes attached to it
- __default__: ['actionable'],
+ // So we assume it can be moved AND can have user-action pseudo classes attached to it
+ __default__: ['terminal', 'actionable'],
}
/**
diff --git a/src/util/resolveConfig.js b/src/util/resolveConfig.js
index cfeda6ec4..b8d729369 100644
--- a/src/util/resolveConfig.js
+++ b/src/util/resolveConfig.js
@@ -210,27 +210,51 @@ function resolveFunctionKeys(object) {
}, {})
}
-function extractPluginConfigs(configs) {
+function resolvePlugins(configs) {
+ let pluginGroups = []
let allConfigs = []
- configs.forEach((config) => {
- allConfigs = [...allConfigs, config]
+ for (let config of configs) {
+ allConfigs.push(config)
- const plugins = config?.plugins ?? []
+ let plugins = []
- if (plugins.length === 0) {
- return
- }
+ for (let plugin of config?.plugins ?? []) {
+ // TODO: If we want to support ESM plugins then a handful of things will have to become async
+ if (typeof plugin === 'string') {
+ // If the plugin is specified as a string then it's just the package name
+ plugin = require(plugin)
+ plugin = plugin.default ?? plugin
+ } else if (Array.isArray(plugin)) {
+ // If the plugin is specified as an array then it's a package name and optional options object
+ // [name] or [name, options]
+ let [pkg, options = undefined] = plugin
+ plugin = require(pkg)
+ plugin = plugin.default ?? plugin
+ plugin = plugin(options)
+ }
- plugins.forEach((plugin) => {
if (plugin.__isOptionsFunction) {
plugin = plugin()
}
- allConfigs = [...allConfigs, ...extractPluginConfigs([plugin?.config ?? {}])]
- })
- })
- return allConfigs
+ // We're explicitly skipping registering child plugins
+ // This will change in v4
+ let [, childConfigs] = resolvePlugins([plugin?.config ?? {}])
+
+ plugins.push(plugin)
+ allConfigs.push(...childConfigs)
+ }
+
+ pluginGroups.push(plugins)
+ }
+
+ // Reverse the order of the plugin groups
+ // This matches the old `reduceRight` behavior of the old `resolvePluginLists`
+ // Why? No idea.
+ let plugins = pluginGroups.reverse().flat()
+
+ return [plugins, allConfigs]
}
function resolveCorePlugins(corePluginConfigs) {
@@ -244,17 +268,11 @@ function resolveCorePlugins(corePluginConfigs) {
return result
}
-function resolvePluginLists(pluginLists) {
- const result = [...pluginLists].reduceRight((resolved, pluginList) => {
- return [...resolved, ...pluginList]
- }, [])
-
- return result
-}
-
export default function resolveConfig(configs) {
+ let [plugins, pluginConfigs] = resolvePlugins(configs)
+
let allConfigs = [
- ...extractPluginConfigs(configs),
+ ...pluginConfigs,
{
prefix: '',
important: false,
@@ -269,7 +287,7 @@ export default function resolveConfig(configs) {
mergeExtensions(mergeThemes(allConfigs.map((t) => t?.theme ?? {})))
),
corePlugins: resolveCorePlugins(allConfigs.map((c) => c.corePlugins)),
- plugins: resolvePluginLists(configs.map((c) => c?.plugins ?? [])),
+ plugins,
},
...allConfigs
)
diff --git a/src/util/validateConfig.js b/src/util/validateConfig.js
index 8c22e4450..ebd63d2d2 100644
--- a/src/util/validateConfig.js
+++ b/src/util/validateConfig.js
@@ -1,3 +1,4 @@
+import pc from 'picocolors'
import log from './log'
export function validateConfig(config) {
@@ -9,6 +10,15 @@ export function validateConfig(config) {
])
}
+ if (config.content.files.includes('auto')) {
+ log.group('auto-content-experimental', (log) => {
+ log.info([pc.bold('Automatically detecting Tailwind CSS content sources...')])
+ log.warn([
+ 'Automatic content detection is experimental, and the behavior may change at any time.',
+ ])
+ })
+ }
+
// Warn if the line-clamp plugin is installed
try {
let plugin = require('@tailwindcss/line-clamp')
diff --git a/src/value-parser/LICENSE b/src/value-parser/LICENSE
new file mode 100644
index 000000000..6dcaefcbe
--- /dev/null
+++ b/src/value-parser/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) Bogdan Chadkin
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/src/value-parser/README.md b/src/value-parser/README.md
new file mode 100644
index 000000000..ea9e20291
--- /dev/null
+++ b/src/value-parser/README.md
@@ -0,0 +1,3 @@
+# postcss-value-parser (forked + inlined)
+
+This is a customized version of of [PostCSS Value Parser](https://github.com/TrySound/postcss-value-parser) to fix some bugs around parsing CSS functions.
diff --git a/src/value-parser/index.d.ts b/src/value-parser/index.d.ts
new file mode 100644
index 000000000..0c0c4b991
--- /dev/null
+++ b/src/value-parser/index.d.ts
@@ -0,0 +1,177 @@
+declare namespace postcssValueParser {
+ interface BaseNode {
+ /**
+ * The offset, inclusive, inside the CSS value at which the node starts.
+ */
+ sourceIndex: number
+
+ /**
+ * The offset, exclusive, inside the CSS value at which the node ends.
+ */
+ sourceEndIndex: number
+
+ /**
+ * The node's characteristic value
+ */
+ value: string
+ }
+
+ interface ClosableNode {
+ /**
+ * Whether the parsed CSS value ended before the node was properly closed
+ */
+ unclosed?: true
+ }
+
+ interface AdjacentAwareNode {
+ /**
+ * The token at the start of the node
+ */
+ before: string
+
+ /**
+ * The token at the end of the node
+ */
+ after: string
+ }
+
+ interface CommentNode extends BaseNode, ClosableNode {
+ type: 'comment'
+ }
+
+ interface DivNode extends BaseNode, AdjacentAwareNode {
+ type: 'div'
+ }
+
+ interface FunctionNode extends BaseNode, ClosableNode, AdjacentAwareNode {
+ type: 'function'
+
+ /**
+ * Nodes inside the function
+ */
+ nodes: Node[]
+ }
+
+ interface SpaceNode extends BaseNode {
+ type: 'space'
+ }
+
+ interface StringNode extends BaseNode, ClosableNode {
+ type: 'string'
+
+ /**
+ * The quote type delimiting the string
+ */
+ quote: '"' | "'"
+ }
+
+ interface UnicodeRangeNode extends BaseNode {
+ type: 'unicode-range'
+ }
+
+ interface WordNode extends BaseNode {
+ type: 'word'
+ }
+
+ /**
+ * Any node parsed from a CSS value
+ */
+ type Node =
+ | CommentNode
+ | DivNode
+ | FunctionNode
+ | SpaceNode
+ | StringNode
+ | UnicodeRangeNode
+ | WordNode
+
+ interface CustomStringifierCallback {
+ /**
+ * @param node The node to stringify
+ * @returns The serialized CSS representation of the node
+ */
+ (nodes: Node): string | undefined
+ }
+
+ interface WalkCallback {
+ /**
+ * @param node The currently visited node
+ * @param index The index of the node in the series of parsed nodes
+ * @param nodes The series of parsed nodes
+ * @returns Returning `false` will prevent traversal of descendant nodes (only applies if `bubble` was set to `true` in the `walk()` call)
+ */
+ (node: Node, index: number, nodes: Node[]): void | boolean
+ }
+
+ /**
+ * A CSS dimension, decomposed into its numeric and unit parts
+ */
+ interface Dimension {
+ number: string
+ unit: string
+ }
+
+ /**
+ * A wrapper around a parsed CSS value that allows for inspecting and walking nodes
+ */
+ interface ParsedValue {
+ /**
+ * The series of parsed nodes
+ */
+ nodes: Node[]
+
+ /**
+ * Walk all parsed nodes, applying a callback
+ *
+ * @param callback A visitor callback that will be executed for each node
+ * @param bubble When set to `true`, walking will be done inside-out instead of outside-in
+ */
+ walk(callback: WalkCallback, bubble?: boolean): this
+ }
+
+ interface ValueParser {
+ /**
+ * Decompose a CSS dimension into its numeric and unit part
+ *
+ * @param value The dimension to decompose
+ * @returns An object representing `number` and `unit` part of the dimension or `false` if the decomposing fails
+ */
+ unit(value: string): Dimension | false
+
+ /**
+ * Serialize a series of nodes into a CSS value
+ *
+ * @param nodes The nodes to stringify
+ * @param custom A custom stringifier callback
+ * @returns The generated CSS value
+ */
+ stringify(nodes: Node | Node[], custom?: CustomStringifierCallback): string
+
+ /**
+ * Walk a series of nodes, applying a callback
+ *
+ * @param nodes The nodes to walk
+ * @param callback A visitor callback that will be executed for each node
+ * @param bubble When set to `true`, walking will be done inside-out instead of outside-in
+ */
+ walk(nodes: Node[], callback: WalkCallback, bubble?: boolean): void
+
+ /**
+ * Parse a CSS value into a series of nodes to operate on
+ *
+ * @param value The value to parse
+ */
+ new (value: string): ParsedValue
+
+ /**
+ * Parse a CSS value into a series of nodes to operate on
+ *
+ * @param value The value to parse
+ */
+ (value: string): ParsedValue
+ }
+}
+
+declare const postcssValueParser: postcssValueParser.ValueParser
+
+export = postcssValueParser
diff --git a/src/value-parser/index.js b/src/value-parser/index.js
new file mode 100644
index 000000000..5587ccfa3
--- /dev/null
+++ b/src/value-parser/index.js
@@ -0,0 +1,28 @@
+var parse = require('./parse')
+var walk = require('./walk')
+var stringify = require('./stringify')
+
+function ValueParser(value) {
+ if (this instanceof ValueParser) {
+ this.nodes = parse(value)
+ return this
+ }
+ return new ValueParser(value)
+}
+
+ValueParser.prototype.toString = function () {
+ return Array.isArray(this.nodes) ? stringify(this.nodes) : ''
+}
+
+ValueParser.prototype.walk = function (cb, bubble) {
+ walk(this.nodes, cb, bubble)
+ return this
+}
+
+ValueParser.unit = require('./unit')
+
+ValueParser.walk = walk
+
+ValueParser.stringify = stringify
+
+module.exports = ValueParser
diff --git a/src/value-parser/parse.js b/src/value-parser/parse.js
new file mode 100644
index 000000000..445599664
--- /dev/null
+++ b/src/value-parser/parse.js
@@ -0,0 +1,303 @@
+var openParentheses = '('.charCodeAt(0)
+var closeParentheses = ')'.charCodeAt(0)
+var singleQuote = "'".charCodeAt(0)
+var doubleQuote = '"'.charCodeAt(0)
+var backslash = '\\'.charCodeAt(0)
+var slash = '/'.charCodeAt(0)
+var comma = ','.charCodeAt(0)
+var colon = ':'.charCodeAt(0)
+var star = '*'.charCodeAt(0)
+var uLower = 'u'.charCodeAt(0)
+var uUpper = 'U'.charCodeAt(0)
+var plus = '+'.charCodeAt(0)
+var isUnicodeRange = /^[a-f0-9?-]+$/i
+
+module.exports = function (input) {
+ var tokens = []
+ var value = input
+
+ var next, quote, prev, token, escape, escapePos, whitespacePos, parenthesesOpenPos
+ var pos = 0
+ var code = value.charCodeAt(pos)
+ var max = value.length
+ var stack = [{ nodes: tokens }]
+ var balanced = 0
+ var parent
+
+ var name = ''
+ var before = ''
+ var after = ''
+
+ while (pos < max) {
+ // Whitespaces
+ if (code <= 32) {
+ next = pos
+ do {
+ next += 1
+ code = value.charCodeAt(next)
+ } while (code <= 32)
+ token = value.slice(pos, next)
+
+ prev = tokens[tokens.length - 1]
+ if (code === closeParentheses && balanced) {
+ after = token
+ } else if (prev && prev.type === 'div') {
+ prev.after = token
+ prev.sourceEndIndex += token.length
+ } else if (
+ code === comma ||
+ code === colon ||
+ (code === slash &&
+ value.charCodeAt(next + 1) !== star &&
+ (!parent || (parent && parent.type === 'function' && false)))
+ ) {
+ before = token
+ } else {
+ tokens.push({
+ type: 'space',
+ sourceIndex: pos,
+ sourceEndIndex: next,
+ value: token,
+ })
+ }
+
+ pos = next
+
+ // Quotes
+ } else if (code === singleQuote || code === doubleQuote) {
+ next = pos
+ quote = code === singleQuote ? "'" : '"'
+ token = {
+ type: 'string',
+ sourceIndex: pos,
+ quote: quote,
+ }
+ do {
+ escape = false
+ next = value.indexOf(quote, next + 1)
+ if (~next) {
+ escapePos = next
+ while (value.charCodeAt(escapePos - 1) === backslash) {
+ escapePos -= 1
+ escape = !escape
+ }
+ } else {
+ value += quote
+ next = value.length - 1
+ token.unclosed = true
+ }
+ } while (escape)
+ token.value = value.slice(pos + 1, next)
+ token.sourceEndIndex = token.unclosed ? next : next + 1
+ tokens.push(token)
+ pos = next + 1
+ code = value.charCodeAt(pos)
+
+ // Comments
+ } else if (code === slash && value.charCodeAt(pos + 1) === star) {
+ next = value.indexOf('*/', pos)
+
+ token = {
+ type: 'comment',
+ sourceIndex: pos,
+ sourceEndIndex: next + 2,
+ }
+
+ if (next === -1) {
+ token.unclosed = true
+ next = value.length
+ token.sourceEndIndex = next
+ }
+
+ token.value = value.slice(pos + 2, next)
+ tokens.push(token)
+
+ pos = next + 2
+ code = value.charCodeAt(pos)
+
+ // Operation within calc
+ } else if ((code === slash || code === star) && parent && parent.type === 'function' && true) {
+ token = value[pos]
+ tokens.push({
+ type: 'word',
+ sourceIndex: pos - before.length,
+ sourceEndIndex: pos + token.length,
+ value: token,
+ })
+ pos += 1
+ code = value.charCodeAt(pos)
+
+ // Dividers
+ } else if (code === slash || code === comma || code === colon) {
+ token = value[pos]
+
+ tokens.push({
+ type: 'div',
+ sourceIndex: pos - before.length,
+ sourceEndIndex: pos + token.length,
+ value: token,
+ before: before,
+ after: '',
+ })
+ before = ''
+
+ pos += 1
+ code = value.charCodeAt(pos)
+
+ // Open parentheses
+ } else if (openParentheses === code) {
+ // Whitespaces after open parentheses
+ next = pos
+ do {
+ next += 1
+ code = value.charCodeAt(next)
+ } while (code <= 32)
+ parenthesesOpenPos = pos
+ token = {
+ type: 'function',
+ sourceIndex: pos - name.length,
+ value: name,
+ before: value.slice(parenthesesOpenPos + 1, next),
+ }
+ pos = next
+
+ if (name === 'url' && code !== singleQuote && code !== doubleQuote) {
+ next -= 1
+ do {
+ escape = false
+ next = value.indexOf(')', next + 1)
+ if (~next) {
+ escapePos = next
+ while (value.charCodeAt(escapePos - 1) === backslash) {
+ escapePos -= 1
+ escape = !escape
+ }
+ } else {
+ value += ')'
+ next = value.length - 1
+ token.unclosed = true
+ }
+ } while (escape)
+ // Whitespaces before closed
+ whitespacePos = next
+ do {
+ whitespacePos -= 1
+ code = value.charCodeAt(whitespacePos)
+ } while (code <= 32)
+ if (parenthesesOpenPos < whitespacePos) {
+ if (pos !== whitespacePos + 1) {
+ token.nodes = [
+ {
+ type: 'word',
+ sourceIndex: pos,
+ sourceEndIndex: whitespacePos + 1,
+ value: value.slice(pos, whitespacePos + 1),
+ },
+ ]
+ } else {
+ token.nodes = []
+ }
+ if (token.unclosed && whitespacePos + 1 !== next) {
+ token.after = ''
+ token.nodes.push({
+ type: 'space',
+ sourceIndex: whitespacePos + 1,
+ sourceEndIndex: next,
+ value: value.slice(whitespacePos + 1, next),
+ })
+ } else {
+ token.after = value.slice(whitespacePos + 1, next)
+ token.sourceEndIndex = next
+ }
+ } else {
+ token.after = ''
+ token.nodes = []
+ }
+ pos = next + 1
+ token.sourceEndIndex = token.unclosed ? next : pos
+ code = value.charCodeAt(pos)
+ tokens.push(token)
+ } else {
+ balanced += 1
+ token.after = ''
+ token.sourceEndIndex = pos + 1
+ tokens.push(token)
+ stack.push(token)
+ tokens = token.nodes = []
+ parent = token
+ }
+ name = ''
+
+ // Close parentheses
+ } else if (closeParentheses === code && balanced) {
+ pos += 1
+ code = value.charCodeAt(pos)
+
+ parent.after = after
+ parent.sourceEndIndex += after.length
+ after = ''
+ balanced -= 1
+ stack[stack.length - 1].sourceEndIndex = pos
+ stack.pop()
+ parent = stack[balanced]
+ tokens = parent.nodes
+
+ // Words
+ } else {
+ next = pos
+ do {
+ if (code === backslash) {
+ next += 1
+ }
+ next += 1
+ code = value.charCodeAt(next)
+ } while (
+ next < max &&
+ !(
+ code <= 32 ||
+ code === singleQuote ||
+ code === doubleQuote ||
+ code === comma ||
+ code === colon ||
+ code === slash ||
+ code === openParentheses ||
+ (code === star && parent && parent.type === 'function' && true) ||
+ (code === slash && parent.type === 'function' && true) ||
+ (code === closeParentheses && balanced)
+ )
+ )
+ token = value.slice(pos, next)
+
+ if (openParentheses === code) {
+ name = token
+ } else if (
+ (uLower === token.charCodeAt(0) || uUpper === token.charCodeAt(0)) &&
+ plus === token.charCodeAt(1) &&
+ isUnicodeRange.test(token.slice(2))
+ ) {
+ tokens.push({
+ type: 'unicode-range',
+ sourceIndex: pos,
+ sourceEndIndex: next,
+ value: token,
+ })
+ } else {
+ tokens.push({
+ type: 'word',
+ sourceIndex: pos,
+ sourceEndIndex: next,
+ value: token,
+ })
+ }
+
+ pos = next
+ }
+ }
+
+ for (pos = stack.length - 1; pos; pos -= 1) {
+ stack[pos].unclosed = true
+ stack[pos].sourceEndIndex = value.length
+ }
+
+ return stack[0].nodes
+}
diff --git a/src/value-parser/stringify.js b/src/value-parser/stringify.js
new file mode 100644
index 000000000..c95890610
--- /dev/null
+++ b/src/value-parser/stringify.js
@@ -0,0 +1,41 @@
+function stringifyNode(node, custom) {
+ var type = node.type
+ var value = node.value
+ var buf
+ var customResult
+
+ if (custom && (customResult = custom(node)) !== undefined) {
+ return customResult
+ } else if (type === 'word' || type === 'space') {
+ return value
+ } else if (type === 'string') {
+ buf = node.quote || ''
+ return buf + value + (node.unclosed ? '' : buf)
+ } else if (type === 'comment') {
+ return '/*' + value + (node.unclosed ? '' : '*/')
+ } else if (type === 'div') {
+ return (node.before || '') + value + (node.after || '')
+ } else if (Array.isArray(node.nodes)) {
+ buf = stringify(node.nodes, custom)
+ if (type !== 'function') {
+ return buf
+ }
+ return value + '(' + (node.before || '') + buf + (node.after || '') + (node.unclosed ? '' : ')')
+ }
+ return value
+}
+
+function stringify(nodes, custom) {
+ var result, i
+
+ if (Array.isArray(nodes)) {
+ result = ''
+ for (i = nodes.length - 1; ~i; i -= 1) {
+ result = stringifyNode(nodes[i], custom) + result
+ }
+ return result
+ }
+ return stringifyNode(nodes, custom)
+}
+
+module.exports = stringify
diff --git a/src/value-parser/unit.js b/src/value-parser/unit.js
new file mode 100644
index 000000000..42d6cd3a7
--- /dev/null
+++ b/src/value-parser/unit.js
@@ -0,0 +1,118 @@
+var minus = '-'.charCodeAt(0)
+var plus = '+'.charCodeAt(0)
+var dot = '.'.charCodeAt(0)
+var exp = 'e'.charCodeAt(0)
+var EXP = 'E'.charCodeAt(0)
+
+// Check if three code points would start a number
+// https://www.w3.org/TR/css-syntax-3/#starts-with-a-number
+function likeNumber(value) {
+ var code = value.charCodeAt(0)
+ var nextCode
+
+ if (code === plus || code === minus) {
+ nextCode = value.charCodeAt(1)
+
+ if (nextCode >= 48 && nextCode <= 57) {
+ return true
+ }
+
+ var nextNextCode = value.charCodeAt(2)
+
+ if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {
+ return true
+ }
+
+ return false
+ }
+
+ if (code === dot) {
+ nextCode = value.charCodeAt(1)
+
+ if (nextCode >= 48 && nextCode <= 57) {
+ return true
+ }
+
+ return false
+ }
+
+ if (code >= 48 && code <= 57) {
+ return true
+ }
+
+ return false
+}
+
+// Consume a number
+// https://www.w3.org/TR/css-syntax-3/#consume-number
+module.exports = function (value) {
+ var pos = 0
+ var length = value.length
+ var code
+ var nextCode
+ var nextNextCode
+
+ if (length === 0 || !likeNumber(value)) {
+ return false
+ }
+
+ code = value.charCodeAt(pos)
+
+ if (code === plus || code === minus) {
+ pos++
+ }
+
+ while (pos < length) {
+ code = value.charCodeAt(pos)
+
+ if (code < 48 || code > 57) {
+ break
+ }
+
+ pos += 1
+ }
+
+ code = value.charCodeAt(pos)
+ nextCode = value.charCodeAt(pos + 1)
+
+ if (code === dot && nextCode >= 48 && nextCode <= 57) {
+ pos += 2
+
+ while (pos < length) {
+ code = value.charCodeAt(pos)
+
+ if (code < 48 || code > 57) {
+ break
+ }
+
+ pos += 1
+ }
+ }
+
+ code = value.charCodeAt(pos)
+ nextCode = value.charCodeAt(pos + 1)
+ nextNextCode = value.charCodeAt(pos + 2)
+
+ if (
+ (code === exp || code === EXP) &&
+ ((nextCode >= 48 && nextCode <= 57) ||
+ ((nextCode === plus || nextCode === minus) && nextNextCode >= 48 && nextNextCode <= 57))
+ ) {
+ pos += nextCode === plus || nextCode === minus ? 3 : 2
+
+ while (pos < length) {
+ code = value.charCodeAt(pos)
+
+ if (code < 48 || code > 57) {
+ break
+ }
+
+ pos += 1
+ }
+ }
+
+ return {
+ number: value.slice(0, pos),
+ unit: value.slice(pos),
+ }
+}
diff --git a/src/value-parser/walk.js b/src/value-parser/walk.js
new file mode 100644
index 000000000..dd20a4392
--- /dev/null
+++ b/src/value-parser/walk.js
@@ -0,0 +1,18 @@
+module.exports = function walk(nodes, cb, bubble) {
+ var i, max, node, result
+
+ for (i = 0, max = nodes.length; i < max; i += 1) {
+ node = nodes[i]
+ if (!bubble) {
+ result = cb(node, i, nodes)
+ }
+
+ if (result !== false && node.type === 'function' && Array.isArray(node.nodes)) {
+ walk(node.nodes, cb, bubble)
+ }
+
+ if (bubble) {
+ cb(node, i, nodes)
+ }
+ }
+}
diff --git a/standalone-cli/patch-require.js b/standalone-cli/patch-require.js
new file mode 100644
index 000000000..c5857baf8
--- /dev/null
+++ b/standalone-cli/patch-require.js
@@ -0,0 +1,50 @@
+const Module = require('node:module')
+
+/**
+ * @param {Record} mods
+ */
+module.exports.patchRequire = function patchRequire(mods, parentCache) {
+ function wrapRequire(origRequire) {
+ return Object.assign(
+ function (id) {
+ // Patch require(…) to return the cached module
+ if (mods.hasOwnProperty(id)) {
+ return mods[id]
+ }
+
+ return origRequire.apply(this, arguments)
+ },
+
+ // Make sure we carry over other properties of the original require(…)
+ origRequire,
+
+ {
+ resolve(id) {
+ // Defer to the "parent" require cache when resolving the module
+ // This also requires that the module be provided as a "native module" to JITI
+
+ // The path returned here is VERY important as it ensures that the `isNativeRe` in JITI
+ // passes which is required for the module to be loaded via the native require(…) function
+ // Thankfully, the regex just means that it needs to be in a node_modules folder which is true
+ // even when bundled using Vercel's `pkg`
+ if (parentCache.hasOwnProperty(id)) {
+ return parentCache[id].filename
+ }
+
+ return origRequire.resolve.apply(this, arguments)
+ },
+ }
+ )
+ }
+
+ let origRequire = Module.prototype.require
+ let origCreateRequire = Module.createRequire
+
+ // We have to augment the default "require" in every module
+ Module.prototype.require = wrapRequire(origRequire)
+
+ // And any "require" created by the "createRequire" method
+ Module.createRequire = function () {
+ return wrapRequire(origCreateRequire.apply(this, arguments))
+ }
+}
diff --git a/standalone-cli/standalone.js b/standalone-cli/standalone.js
index 28ddf69a9..ce0bde1cb 100644
--- a/standalone-cli/standalone.js
+++ b/standalone-cli/standalone.js
@@ -1,5 +1,3 @@
-let Module = require('module')
-let origRequire = Module.prototype.require
let log = require('tailwindcss/lib/util/log').default
let localModules = {
@@ -25,11 +23,38 @@ let localModules = {
tailwindcss: require('tailwindcss'),
}
-Module.prototype.require = function (id) {
- if (localModules.hasOwnProperty(id)) {
- return localModules[id]
- }
- return origRequire.apply(this, arguments)
-}
+// Swap out the default JITI implementation with one that has the built-in modules above preloaded as "native modules"
+// NOTE: This uses a private, internal API of Tailwind CSS and is subject to change at any time
+let { useCustomJiti } = require('tailwindcss/lib/lib/load-config')
+let { transform } = require('sucrase')
+
+useCustomJiti(() =>
+ require('jiti')(__filename, {
+ interopDefault: true,
+ nativeModules: Object.keys(localModules),
+ transform: (opts) => {
+ return transform(opts.source, {
+ transforms: ['typescript', 'imports'],
+ })
+ },
+ })
+)
+
+let { patchRequire } = require('./patch-require.js')
+patchRequire(
+ // Patch require(…) to return the bundled modules above so they don't need to be installed
+ localModules,
+
+ // Create a require cache that maps module IDs to module objects
+ // This MUST be done before require is patched to handle caching
+ Object.fromEntries(
+ Object.keys(localModules).map((id) => [
+ id,
+ id === '@tailwindcss/line-clamp'
+ ? `node_modules/@tailwindcss/line-clamp/`
+ : require.cache[require.resolve(id)],
+ ])
+ )
+)
require('tailwindcss/lib/cli')
diff --git a/stubs/config.full.js b/stubs/config.full.js
index c32ccd3a0..b3241edc1 100644
--- a/stubs/config.full.js
+++ b/stubs/config.full.js
@@ -1,5 +1,5 @@
module.exports = {
- content: [],
+ content: ['auto'],
presets: [],
darkMode: 'media', // or 'class'
theme: {
@@ -15,6 +15,7 @@ module.exports = {
bounce: 'bounce 1s infinite',
},
aria: {
+ busy: 'busy="true"',
checked: 'checked="true"',
disabled: 'disabled="true"',
expanded: 'expanded="true"',
@@ -302,13 +303,6 @@ module.exports = {
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"',
@@ -450,6 +444,12 @@ module.exports = {
'span-4': 'span 4 / span 4',
'span-5': 'span 5 / span 5',
'span-6': 'span 6 / span 6',
+ 'span-7': 'span 7 / span 7',
+ 'span-8': 'span 8 / span 8',
+ 'span-9': 'span 9 / span 9',
+ 'span-10': 'span 10 / span 10',
+ 'span-11': 'span 11 / span 11',
+ 'span-12': 'span 12 / span 12',
'span-full': '1 / -1',
},
gridRowEnd: {
@@ -461,6 +461,12 @@ module.exports = {
5: '5',
6: '6',
7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12',
+ 13: '13',
},
gridRowStart: {
auto: 'auto',
@@ -471,9 +477,16 @@ module.exports = {
5: '5',
6: '6',
7: '7',
+ 8: '8',
+ 9: '9',
+ 10: '10',
+ 11: '11',
+ 12: '12',
+ 13: '13',
},
gridTemplateColumns: {
none: 'none',
+ subgrid: 'subgrid',
1: 'repeat(1, minmax(0, 1fr))',
2: 'repeat(2, minmax(0, 1fr))',
3: 'repeat(3, minmax(0, 1fr))',
@@ -489,12 +502,19 @@ module.exports = {
},
gridTemplateRows: {
none: 'none',
+ subgrid: 'subgrid',
1: 'repeat(1, minmax(0, 1fr))',
2: 'repeat(2, minmax(0, 1fr))',
3: 'repeat(3, minmax(0, 1fr))',
4: 'repeat(4, minmax(0, 1fr))',
5: 'repeat(5, minmax(0, 1fr))',
6: 'repeat(6, minmax(0, 1fr))',
+ 7: 'repeat(7, minmax(0, 1fr))',
+ 8: 'repeat(8, minmax(0, 1fr))',
+ 9: 'repeat(9, minmax(0, 1fr))',
+ 10: 'repeat(10, minmax(0, 1fr))',
+ 11: 'repeat(11, minmax(0, 1fr))',
+ 12: 'repeat(12, minmax(0, 1fr))',
},
height: ({ theme }) => ({
auto: 'auto',
@@ -516,6 +536,9 @@ module.exports = {
'5/6': '83.333333%',
full: '100%',
screen: '100vh',
+ svh: '100svh',
+ lvh: '100lvh',
+ dvh: '100dvh',
min: 'min-content',
max: 'max-content',
fit: 'fit-content',
@@ -620,13 +643,16 @@ module.exports = {
none: 'none',
full: '100%',
screen: '100vh',
+ svh: '100svh',
+ lvh: '100lvh',
+ dvh: '100dvh',
min: 'min-content',
max: 'max-content',
fit: 'fit-content',
}),
maxWidth: ({ theme, breakpoints }) => ({
+ ...theme('spacing'),
none: 'none',
- 0: '0rem',
xs: '20rem',
sm: '24rem',
md: '28rem',
@@ -645,21 +671,24 @@ module.exports = {
prose: '65ch',
...breakpoints(theme('screens')),
}),
- minHeight: {
- 0: '0px',
+ minHeight: ({ theme }) => ({
+ ...theme('spacing'),
full: '100%',
screen: '100vh',
+ svh: '100svh',
+ lvh: '100lvh',
+ dvh: '100dvh',
min: 'min-content',
max: 'max-content',
fit: 'fit-content',
- },
- minWidth: {
- 0: '0px',
+ }),
+ minWidth: ({ theme }) => ({
+ ...theme('spacing'),
full: '100%',
min: 'min-content',
max: 'max-content',
fit: 'fit-content',
- },
+ }),
objectPosition: {
bottom: 'bottom',
center: 'center',
@@ -675,15 +704,21 @@ module.exports = {
0: '0',
5: '0.05',
10: '0.1',
+ 15: '0.15',
20: '0.2',
25: '0.25',
30: '0.3',
+ 35: '0.35',
40: '0.4',
+ 45: '0.45',
50: '0.5',
+ 55: '0.55',
60: '0.6',
+ 65: '0.65',
70: '0.7',
75: '0.75',
80: '0.8',
+ 85: '0.85',
90: '0.9',
95: '0.95',
100: '1',
@@ -935,6 +970,40 @@ module.exports = {
'3/4': '75%',
full: '100%',
}),
+ size: ({ theme }) => ({
+ auto: 'auto',
+ ...theme('spacing'),
+ '1/2': '50%',
+ '1/3': '33.333333%',
+ '2/3': '66.666667%',
+ '1/4': '25%',
+ '2/4': '50%',
+ '3/4': '75%',
+ '1/5': '20%',
+ '2/5': '40%',
+ '3/5': '60%',
+ '4/5': '80%',
+ '1/6': '16.666667%',
+ '2/6': '33.333333%',
+ '3/6': '50%',
+ '4/6': '66.666667%',
+ '5/6': '83.333333%',
+ '1/12': '8.333333%',
+ '2/12': '16.666667%',
+ '3/12': '25%',
+ '4/12': '33.333333%',
+ '5/12': '41.666667%',
+ '6/12': '50%',
+ '7/12': '58.333333%',
+ '8/12': '66.666667%',
+ '9/12': '75%',
+ '10/12': '83.333333%',
+ '11/12': '91.666667%',
+ full: '100%',
+ min: 'min-content',
+ max: 'max-content',
+ fit: 'fit-content',
+ }),
width: ({ theme }) => ({
auto: 'auto',
...theme('spacing'),
@@ -966,6 +1035,9 @@ module.exports = {
'11/12': '91.666667%',
full: '100%',
screen: '100vw',
+ svw: '100svw',
+ lvw: '100lvw',
+ dvw: '100dvw',
min: 'min-content',
max: 'max-content',
fit: 'fit-content',
diff --git a/stubs/config.simple.js b/stubs/config.simple.js
index 9843c0557..3e0d35604 100644
--- a/stubs/config.simple.js
+++ b/stubs/config.simple.js
@@ -1,5 +1,5 @@
module.exports = {
- content: [],
+ content: ['auto'],
theme: {
extend: {},
},
diff --git a/stubs/postcss.config.cjs b/stubs/postcss.config.cjs
index 33ad091d2..08a01d4d1 100644
--- a/stubs/postcss.config.cjs
+++ b/stubs/postcss.config.cjs
@@ -1,6 +1,5 @@
module.exports = {
plugins: {
tailwindcss: {},
- autoprefixer: {},
},
}
diff --git a/stubs/postcss.config.js b/stubs/postcss.config.js
index 2e7af2b7f..284180207 100644
--- a/stubs/postcss.config.js
+++ b/stubs/postcss.config.js
@@ -1,6 +1,5 @@
export default {
plugins: {
tailwindcss: {},
- autoprefixer: {},
},
}
diff --git a/tests/animations.test.js b/tests/animations.test.js
deleted file mode 100644
index 958f24252..000000000
--- a/tests/animations.test.js
+++ /dev/null
@@ -1,278 +0,0 @@
-import { crosscheck, run, html, css } from './util/run'
-
-crosscheck(() => {
- test('basic', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
- `,
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @keyframes spin {
- to {
- transform: rotate(360deg);
- }
- }
- .animate-spin {
- animation: 1s linear infinite spin;
- }
- @keyframes ping {
- 75%,
- 100% {
- opacity: 0;
- transform: scale(2);
- }
- }
- .hover\:animate-ping:hover {
- animation: 1s cubic-bezier(0, 0, 0.2, 1) infinite ping;
- }
- @keyframes bounce {
- 0%,
- 100% {
- animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
- transform: translateY(-25%);
- }
- 50% {
- animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
- transform: none;
- }
- }
- .group:hover .group-hover\:animate-bounce {
- animation: 1s infinite bounce;
- }
- `)
- })
- })
-
- test('custom', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- extend: {
- keyframes: {
- one: { to: { transform: 'rotate(360deg)' } },
- },
- animation: {
- one: 'one 2s',
- },
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @keyframes one {
- to {
- transform: rotate(360deg);
- }
- }
- .animate-one {
- animation: 2s one;
- }
- `)
- })
- })
-
- test('custom prefixed', () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: `
` }],
- theme: {
- extend: {
- keyframes: {
- one: { to: { transform: 'rotate(360deg)' } },
- },
- animation: {
- one: 'one 2s',
- },
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @keyframes tw-one {
- to {
- transform: rotate(360deg);
- }
- }
- .tw-animate-one {
- animation: 2s tw-one;
- }
- `)
- })
- })
-
- test('multiple', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- extend: {
- animation: {
- multiple: 'bounce 2s linear, pulse 3s ease-in',
- },
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @keyframes bounce {
- 0%,
- 100% {
- animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
- transform: translateY(-25%);
- }
- 50% {
- animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
- transform: none;
- }
- }
- @keyframes pulse {
- 50% {
- opacity: 0.5;
- }
- }
- .animate-multiple {
- animation: 2s linear bounce, 3s ease-in pulse;
- }
- `)
- })
- })
-
- test('multiple custom', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- extend: {
- keyframes: {
- one: { to: { transform: 'rotate(360deg)' } },
- two: { to: { transform: 'scale(1.23)' } },
- },
- animation: {
- multiple: 'one 2s, two 3s',
- },
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @keyframes one {
- to {
- transform: rotate(360deg);
- }
- }
- @keyframes two {
- to {
- transform: scale(1.23);
- }
- }
- .animate-multiple {
- animation: 2s one, 3s two;
- }
- `)
- })
- })
-
- test('with dots in the name', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
- `,
- },
- ],
- theme: {
- extend: {
- keyframes: {
- 'zoom-.5': { to: { transform: 'scale(0.5)' } },
- 'zoom-1.5': { to: { transform: 'scale(1.5)' } },
- },
- animation: {
- 'zoom-.5': 'zoom-.5 2s',
- 'zoom-1.5': 'zoom-1.5 2s',
- },
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @keyframes zoom-\.5 {
- to {
- transform: scale(0.5);
- }
- }
- .animate-zoom-\.5 {
- animation: 2s zoom-\.5;
- }
- @keyframes zoom-1\.5 {
- to {
- transform: scale(1.5);
- }
- }
- .animate-zoom-1\.5 {
- animation: 2s zoom-1\.5;
- }
- `)
- })
- })
-
- test('with dots in the name and prefix', () => {
- let config = {
- prefix: 'tw-',
- content: [
- {
- raw: html`
-
-
- `,
- },
- ],
- theme: {
- extend: {
- keyframes: {
- 'zoom-.5': { to: { transform: 'scale(0.5)' } },
- 'zoom-1.5': { to: { transform: 'scale(1.5)' } },
- },
- animation: {
- 'zoom-.5': 'zoom-.5 2s',
- 'zoom-1.5': 'zoom-1.5 2s',
- },
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @keyframes tw-zoom-\.5 {
- to {
- transform: scale(0.5);
- }
- }
- .tw-animate-zoom-\.5 {
- animation: 2s tw-zoom-\.5;
- }
- @keyframes tw-zoom-1\.5 {
- to {
- transform: scale(1.5);
- }
- }
- .tw-animate-zoom-1\.5 {
- animation: 2s tw-zoom-1\.5;
- }
- `)
- })
- })
-})
diff --git a/tests/any-type.test.js b/tests/any-type.test.js
index 7b7873966..c9cce9c7a 100644
--- a/tests/any-type.test.js
+++ b/tests/any-type.test.js
@@ -1,1307 +1,797 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(({ stable, oxide }) => {
- // Hi there, so you are debugging this test because something failed... right? Well we can look into
- // the future and guessed that this would happen. So basically it means that we (it was probably
- // you, silly) introduced a new plugin that conflicts with an existing plugin that has (either
- // implicit or explicit) an `any` type.
- //
- // Now it is your job to decide which one should win, and mark that one with
- // ```diff
- // - 'any'
- // + ['any', { preferOnConflict: true }]
- // ```
- // in the corePlugins.js file.
- //
- // You probably want to let the original one win for backwards compatible reasons.
- //
- // Good luck!
- test('any types are set on correct plugins', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
+// Hi there, so you are debugging this test because something failed... right? Well we can look into
+// the future and guessed that this would happen. So basically it means that we (it was probably
+// you, silly) introduced a new plugin that conflicts with an existing plugin that has (either
+// implicit or explicit) an `any` type.
+//
+// Now it is your job to decide which one should win, and mark that one with
+// ```diff
+// - 'any'
+// + ['any', { preferOnConflict: true }]
+// ```
+// in the corePlugins.js file.
+//
+// You probably want to let the original one win for backwards compatible reasons.
+//
+// Good luck!
+test('any types are set on correct plugins', () => {
+ let config = {
+ future: {
+ logicalSiblingUtilities: false,
+ disableColorOpacityUtilitiesByDefault: false,
+ },
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- oxide.expect(result.css).toMatchFormattedCss(css`
- .inset-\[var\(--any-value\)\] {
- inset: var(--any-value);
- }
- .inset-x-\[var\(--any-value\)\] {
- left: var(--any-value);
- right: var(--any-value);
- }
- .inset-y-\[var\(--any-value\)\] {
- top: var(--any-value);
- bottom: var(--any-value);
- }
- .bottom-\[var\(--any-value\)\] {
- bottom: var(--any-value);
- }
- .left-\[var\(--any-value\)\] {
- left: var(--any-value);
- }
- .right-\[var\(--any-value\)\] {
- right: var(--any-value);
- }
- .top-\[var\(--any-value\)\] {
- top: var(--any-value);
- }
- .z-\[var\(--any-value\)\] {
- z-index: var(--any-value);
- }
- .order-\[var\(--any-value\)\] {
- order: var(--any-value);
- }
- .col-\[var\(--any-value\)\] {
- grid-column: var(--any-value);
- }
- .col-start-\[var\(--any-value\)\] {
- grid-column-start: var(--any-value);
- }
- .col-end-\[var\(--any-value\)\] {
- grid-column-end: var(--any-value);
- }
- .row-\[var\(--any-value\)\] {
- grid-row: var(--any-value);
- }
- .row-start-\[var\(--any-value\)\] {
- grid-row-start: var(--any-value);
- }
- .row-end-\[var\(--any-value\)\] {
- grid-row-end: var(--any-value);
- }
- .m-\[var\(--any-value\)\] {
- margin: var(--any-value);
- }
- .mx-\[var\(--any-value\)\] {
- margin-left: var(--any-value);
- margin-right: var(--any-value);
- }
- .my-\[var\(--any-value\)\] {
- margin-top: var(--any-value);
- margin-bottom: var(--any-value);
- }
- .mb-\[var\(--any-value\)\] {
- margin-bottom: var(--any-value);
- }
- .ml-\[var\(--any-value\)\] {
- margin-left: var(--any-value);
- }
- .mr-\[var\(--any-value\)\] {
- margin-right: var(--any-value);
- }
- .mt-\[var\(--any-value\)\] {
- margin-top: var(--any-value);
- }
- .aspect-\[var\(--any-value\)\] {
- aspect-ratio: var(--any-value);
- }
- .h-\[var\(--any-value\)\] {
- height: var(--any-value);
- }
- .max-h-\[var\(--any-value\)\] {
- max-height: var(--any-value);
- }
- .min-h-\[var\(--any-value\)\] {
- min-height: var(--any-value);
- }
- .w-\[var\(--any-value\)\] {
- width: var(--any-value);
- }
- .min-w-\[var\(--any-value\)\] {
- min-width: var(--any-value);
- }
- .max-w-\[var\(--any-value\)\] {
- max-width: var(--any-value);
- }
- .flex-\[var\(--any-value\)\] {
- flex: var(--any-value);
- }
- .flex-shrink-\[var\(--any-value\)\],
- .shrink-\[var\(--any-value\)\] {
- flex-shrink: var(--any-value);
- }
- .flex-grow-\[var\(--any-value\)\],
- .grow-\[var\(--any-value\)\] {
- flex-grow: var(--any-value);
- }
- .basis-\[var\(--any-value\)\] {
- flex-basis: var(--any-value);
- }
- .border-spacing-\[var\(--any-value\)\] {
- --tw-border-spacing-x: var(--any-value);
- --tw-border-spacing-y: var(--any-value);
- border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
- }
- .border-spacing-x-\[var\(--any-value\)\] {
- --tw-border-spacing-x: var(--any-value);
- border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
- }
- .border-spacing-y-\[var\(--any-value\)\] {
- --tw-border-spacing-y: var(--any-value);
- border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
- }
- .origin-\[var\(--any-value\)\] {
- transform-origin: var(--any-value);
- }
- .translate-x-\[var\(--any-value\)\] {
- --tw-translate-x: var(--any-value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .translate-y-\[var\(--any-value\)\] {
- --tw-translate-y: var(--any-value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .rotate-\[var\(--any-value\)\] {
- --tw-rotate: var(--any-value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .scale-\[var\(--any-value\)\] {
- --tw-scale-x: var(--any-value);
- --tw-scale-y: var(--any-value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .scale-x-\[var\(--any-value\)\] {
- --tw-scale-x: var(--any-value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .scale-y-\[var\(--any-value\)\] {
- --tw-scale-y: var(--any-value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .animate-\[var\(--any-value\)\] {
- animation: var(--any-value);
- }
- .cursor-\[var\(--any-value\)\] {
- cursor: var(--any-value);
- }
- .scroll-m-\[var\(--any-value\)\] {
- scroll-margin: var(--any-value);
- }
- .scroll-mx-\[var\(--any-value\)\] {
- scroll-margin-left: var(--any-value);
- scroll-margin-right: var(--any-value);
- }
- .scroll-my-\[var\(--any-value\)\] {
- scroll-margin-top: var(--any-value);
- scroll-margin-bottom: var(--any-value);
- }
- .scroll-mb-\[var\(--any-value\)\] {
- scroll-margin-bottom: var(--any-value);
- }
- .scroll-ml-\[var\(--any-value\)\] {
- scroll-margin-left: var(--any-value);
- }
- .scroll-mr-\[var\(--any-value\)\] {
- scroll-margin-right: var(--any-value);
- }
- .scroll-mt-\[var\(--any-value\)\] {
- scroll-margin-top: var(--any-value);
- }
- .scroll-p-\[var\(--any-value\)\] {
- scroll-padding: var(--any-value);
- }
- .scroll-px-\[var\(--any-value\)\] {
- scroll-padding-left: var(--any-value);
- scroll-padding-right: var(--any-value);
- }
- .scroll-py-\[var\(--any-value\)\] {
- scroll-padding-top: var(--any-value);
- scroll-padding-bottom: var(--any-value);
- }
- .scroll-pb-\[var\(--any-value\)\] {
- scroll-padding-bottom: var(--any-value);
- }
- .scroll-pl-\[var\(--any-value\)\] {
- scroll-padding-left: var(--any-value);
- }
- .scroll-pr-\[var\(--any-value\)\] {
- scroll-padding-right: var(--any-value);
- }
- .scroll-pt-\[var\(--any-value\)\] {
- scroll-padding-top: var(--any-value);
- }
- .list-\[var\(--any-value\)\] {
- list-style-type: var(--any-value);
- }
- .columns-\[var\(--any-value\)\] {
- columns: var(--any-value);
- }
- .auto-cols-\[var\(--any-value\)\] {
- grid-auto-columns: var(--any-value);
- }
- .auto-rows-\[var\(--any-value\)\] {
- grid-auto-rows: var(--any-value);
- }
- .grid-cols-\[var\(--any-value\)\] {
- grid-template-columns: var(--any-value);
- }
- .grid-rows-\[var\(--any-value\)\] {
- grid-template-rows: var(--any-value);
- }
- .gap-\[var\(--any-value\)\] {
- gap: var(--any-value);
- }
- .gap-x-\[var\(--any-value\)\] {
- column-gap: var(--any-value);
- }
- .gap-y-\[var\(--any-value\)\] {
- row-gap: var(--any-value);
- }
- .space-x-\[var\(--any-value\)\] > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-inline-start: calc(var(--any-value) * calc(1 - var(--tw-space-x-reverse)));
- margin-inline-end: calc(var(--any-value) * var(--tw-space-x-reverse));
- }
- .space-y-\[var\(--any-value\)\] > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(var(--any-value) * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(var(--any-value) * var(--tw-space-y-reverse));
- }
- .divide-y-\[var\(--any-value\)\] > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(var(--any-value) * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(var(--any-value) * var(--tw-divide-y-reverse));
- }
- .divide-\[var\(--any-value\)\] > :not([hidden]) ~ :not([hidden]) {
- border-color: var(--any-value);
- }
- .rounded-\[var\(--any-value\)\] {
- border-radius: var(--any-value);
- }
- .rounded-b-\[var\(--any-value\)\] {
- border-bottom-right-radius: var(--any-value);
- border-bottom-left-radius: var(--any-value);
- }
- .rounded-l-\[var\(--any-value\)\] {
- border-top-left-radius: var(--any-value);
- border-bottom-left-radius: var(--any-value);
- }
- .rounded-r-\[var\(--any-value\)\] {
- border-top-right-radius: var(--any-value);
- border-bottom-right-radius: var(--any-value);
- }
- .rounded-t-\[var\(--any-value\)\] {
- border-top-left-radius: var(--any-value);
- border-top-right-radius: var(--any-value);
- }
- .rounded-bl-\[var\(--any-value\)\] {
- border-bottom-left-radius: var(--any-value);
- }
- .rounded-br-\[var\(--any-value\)\] {
- border-bottom-right-radius: var(--any-value);
- }
- .rounded-tl-\[var\(--any-value\)\] {
- border-top-left-radius: var(--any-value);
- }
- .rounded-tr-\[var\(--any-value\)\] {
- border-top-right-radius: var(--any-value);
- }
- .border-\[var\(--any-value\)\] {
- border-color: var(--any-value);
- }
- .border-x-\[var\(--any-value\)\] {
- border-left-color: var(--any-value);
- border-right-color: var(--any-value);
- }
- .border-y-\[var\(--any-value\)\] {
- border-top-color: var(--any-value);
- border-bottom-color: var(--any-value);
- }
- .border-b-\[var\(--any-value\)\] {
- border-bottom-color: var(--any-value);
- }
- .border-l-\[var\(--any-value\)\] {
- border-left-color: var(--any-value);
- }
- .border-r-\[var\(--any-value\)\] {
- border-right-color: var(--any-value);
- }
- .border-t-\[var\(--any-value\)\] {
- border-top-color: var(--any-value);
- }
- .bg-\[var\(--any-value\)\] {
- background-color: var(--any-value);
- }
- .from-\[var\(--any-value\)\] {
- --tw-gradient-from: var(--any-value) var(--tw-gradient-from-position);
- --tw-gradient-to: #fff0 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
- }
- .via-\[var\(--any-value\)\] {
- --tw-gradient-to: #fff0 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from),
- var(--any-value) var(--tw-gradient-via-position), var(--tw-gradient-to);
- }
- .to-\[var\(--any-value\)\] {
- --tw-gradient-to: var(--any-value) var(--tw-gradient-to-position);
- }
- .fill-\[var\(--any-value\)\] {
- fill: var(--any-value);
- }
- .stroke-\[var\(--any-value\)\] {
- stroke: var(--any-value);
- }
- .object-\[var\(--any-value\)\] {
- object-position: var(--any-value);
- }
- .p-\[var\(--any-value\)\] {
- padding: var(--any-value);
- }
- .px-\[var\(--any-value\)\] {
- padding-left: var(--any-value);
- padding-right: var(--any-value);
- }
- .py-\[var\(--any-value\)\] {
- padding-top: var(--any-value);
- padding-bottom: var(--any-value);
- }
- .pb-\[var\(--any-value\)\] {
- padding-bottom: var(--any-value);
- }
- .pl-\[var\(--any-value\)\] {
- padding-left: var(--any-value);
- }
- .pr-\[var\(--any-value\)\] {
- padding-right: var(--any-value);
- }
- .pt-\[var\(--any-value\)\] {
- padding-top: var(--any-value);
- }
- .indent-\[var\(--any-value\)\] {
- text-indent: var(--any-value);
- }
- .align-\[var\(--any-value\)\] {
- vertical-align: var(--any-value);
- }
- .font-\[var\(--any-value\)\] {
- font-weight: var(--any-value);
- }
- .leading-\[var\(--any-value\)\] {
- line-height: var(--any-value);
- }
- .tracking-\[var\(--any-value\)\] {
- letter-spacing: var(--any-value);
- }
- .text-\[var\(--any-value\)\] {
- color: var(--any-value);
- }
- .decoration-\[var\(--any-value\)\] {
- text-decoration-color: var(--any-value);
- }
- .underline-offset-\[var\(--any-value\)\] {
- text-underline-offset: var(--any-value);
- }
- .placeholder-\[var\(--any-value\)\]::placeholder {
- color: var(--any-value);
- }
- .caret-\[var\(--any-value\)\] {
- caret-color: var(--any-value);
- }
- .accent-\[var\(--any-value\)\] {
- accent-color: var(--any-value);
- }
- .opacity-\[var\(--any-value\)\] {
- opacity: var(--any-value);
- }
- .shadow-\[var\(--any-value\)\] {
- --tw-shadow-color: var(--any-value);
- --tw-shadow: var(--tw-shadow-colored);
- }
- .outline-offset-\[var\(--any-value\)\] {
- outline-offset: var(--any-value);
- }
- .outline-\[var\(--any-value\)\] {
- outline-color: var(--any-value);
- }
- .ring-\[var\(--any-value\)\] {
- --tw-ring-color: var(--any-value);
- }
- .ring-offset-\[var\(--any-value\)\] {
- --tw-ring-offset-color: var(--any-value);
- }
- .blur-\[var\(--any-value\)\] {
- --tw-blur: blur(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .brightness-\[var\(--any-value\)\] {
- --tw-brightness: brightness(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .contrast-\[var\(--any-value\)\] {
- --tw-contrast: contrast(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .drop-shadow-\[var\(--any-value\)\] {
- --tw-drop-shadow: drop-shadow(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .grayscale-\[var\(--any-value\)\] {
- --tw-grayscale: grayscale(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .hue-rotate-\[var\(--any-value\)\] {
- --tw-hue-rotate: hue-rotate(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .invert-\[var\(--any-value\)\] {
- --tw-invert: invert(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .saturate-\[var\(--any-value\)\] {
- --tw-saturate: saturate(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .sepia-\[var\(--any-value\)\] {
- --tw-sepia: sepia(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .backdrop-blur-\[var\(--any-value\)\] {
- --tw-backdrop-blur: blur(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-brightness-\[var\(--any-value\)\] {
- --tw-backdrop-brightness: brightness(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-contrast-\[var\(--any-value\)\] {
- --tw-backdrop-contrast: contrast(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-grayscale-\[var\(--any-value\)\] {
- --tw-backdrop-grayscale: grayscale(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-hue-rotate-\[var\(--any-value\)\] {
- --tw-backdrop-hue-rotate: hue-rotate(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-invert-\[var\(--any-value\)\] {
- --tw-backdrop-invert: invert(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-opacity-\[var\(--any-value\)\] {
- --tw-backdrop-opacity: opacity(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-saturate-\[var\(--any-value\)\] {
- --tw-backdrop-saturate: saturate(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-sepia-\[var\(--any-value\)\] {
- --tw-backdrop-sepia: sepia(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .transition-\[var\(--any-value\)\] {
- transition-property: var(--any-value);
- transition-duration: 0.15s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- }
- .delay-\[var\(--any-value\)\] {
- transition-delay: var(--any-value);
- }
- .duration-\[var\(--any-value\)\] {
- transition-duration: var(--any-value);
- }
- .ease-\[var\(--any-value\)\] {
- transition-timing-function: var(--any-value);
- }
- .will-change-\[var\(--any-value\)\] {
- will-change: var(--any-value);
- }
- .content-\[var\(--any-value\)\] {
- --tw-content: var(--any-value);
- content: var(--tw-content);
- }
- `)
- stable.expect(result.css).toMatchFormattedCss(css`
- .inset-\[var\(--any-value\)\] {
- inset: var(--any-value);
- }
- .inset-x-\[var\(--any-value\)\] {
- left: var(--any-value);
- right: var(--any-value);
- }
- .inset-y-\[var\(--any-value\)\] {
- top: var(--any-value);
- bottom: var(--any-value);
- }
- .bottom-\[var\(--any-value\)\] {
- bottom: var(--any-value);
- }
- .left-\[var\(--any-value\)\] {
- left: var(--any-value);
- }
- .right-\[var\(--any-value\)\] {
- right: var(--any-value);
- }
- .top-\[var\(--any-value\)\] {
- top: var(--any-value);
- }
- .z-\[var\(--any-value\)\] {
- z-index: var(--any-value);
- }
- .order-\[var\(--any-value\)\] {
- order: var(--any-value);
- }
- .col-\[var\(--any-value\)\] {
- grid-column: var(--any-value);
- }
- .col-start-\[var\(--any-value\)\] {
- grid-column-start: var(--any-value);
- }
- .col-end-\[var\(--any-value\)\] {
- grid-column-end: var(--any-value);
- }
- .row-\[var\(--any-value\)\] {
- grid-row: var(--any-value);
- }
- .row-start-\[var\(--any-value\)\] {
- grid-row-start: var(--any-value);
- }
- .row-end-\[var\(--any-value\)\] {
- grid-row-end: var(--any-value);
- }
- .m-\[var\(--any-value\)\] {
- margin: var(--any-value);
- }
- .mx-\[var\(--any-value\)\] {
- margin-left: var(--any-value);
- margin-right: var(--any-value);
- }
- .my-\[var\(--any-value\)\] {
- margin-top: var(--any-value);
- margin-bottom: var(--any-value);
- }
- .mb-\[var\(--any-value\)\] {
- margin-bottom: var(--any-value);
- }
- .ml-\[var\(--any-value\)\] {
- margin-left: var(--any-value);
- }
- .mr-\[var\(--any-value\)\] {
- margin-right: var(--any-value);
- }
- .mt-\[var\(--any-value\)\] {
- margin-top: var(--any-value);
- }
- .aspect-\[var\(--any-value\)\] {
- aspect-ratio: var(--any-value);
- }
- .h-\[var\(--any-value\)\] {
- height: var(--any-value);
- }
- .max-h-\[var\(--any-value\)\] {
- max-height: var(--any-value);
- }
- .min-h-\[var\(--any-value\)\] {
- min-height: var(--any-value);
- }
- .w-\[var\(--any-value\)\] {
- width: var(--any-value);
- }
- .min-w-\[var\(--any-value\)\] {
- min-width: var(--any-value);
- }
- .max-w-\[var\(--any-value\)\] {
- max-width: var(--any-value);
- }
- .flex-\[var\(--any-value\)\] {
- flex: var(--any-value);
- }
- .flex-shrink-\[var\(--any-value\)\],
- .shrink-\[var\(--any-value\)\] {
- flex-shrink: var(--any-value);
- }
- .flex-grow-\[var\(--any-value\)\],
- .grow-\[var\(--any-value\)\] {
- flex-grow: var(--any-value);
- }
- .basis-\[var\(--any-value\)\] {
- flex-basis: var(--any-value);
- }
- .border-spacing-\[var\(--any-value\)\] {
- --tw-border-spacing-x: var(--any-value);
- --tw-border-spacing-y: var(--any-value);
- border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
- }
- .border-spacing-x-\[var\(--any-value\)\] {
- --tw-border-spacing-x: var(--any-value);
- border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
- }
- .border-spacing-y-\[var\(--any-value\)\] {
- --tw-border-spacing-y: var(--any-value);
- border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
- }
- .origin-\[var\(--any-value\)\] {
- transform-origin: var(--any-value);
- }
- .translate-x-\[var\(--any-value\)\] {
- --tw-translate-x: var(--any-value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .translate-y-\[var\(--any-value\)\] {
- --tw-translate-y: var(--any-value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .rotate-\[var\(--any-value\)\] {
- --tw-rotate: var(--any-value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .scale-\[var\(--any-value\)\] {
- --tw-scale-x: var(--any-value);
- --tw-scale-y: var(--any-value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .scale-x-\[var\(--any-value\)\] {
- --tw-scale-x: var(--any-value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .scale-y-\[var\(--any-value\)\] {
- --tw-scale-y: var(--any-value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .animate-\[var\(--any-value\)\] {
- animation: var(--any-value);
- }
- .cursor-\[var\(--any-value\)\] {
- cursor: var(--any-value);
- }
- .scroll-m-\[var\(--any-value\)\] {
- scroll-margin: var(--any-value);
- }
- .scroll-mx-\[var\(--any-value\)\] {
- scroll-margin-left: var(--any-value);
- scroll-margin-right: var(--any-value);
- }
- .scroll-my-\[var\(--any-value\)\] {
- scroll-margin-top: var(--any-value);
- scroll-margin-bottom: var(--any-value);
- }
- .scroll-mb-\[var\(--any-value\)\] {
- scroll-margin-bottom: var(--any-value);
- }
- .scroll-ml-\[var\(--any-value\)\] {
- scroll-margin-left: var(--any-value);
- }
- .scroll-mr-\[var\(--any-value\)\] {
- scroll-margin-right: var(--any-value);
- }
- .scroll-mt-\[var\(--any-value\)\] {
- scroll-margin-top: var(--any-value);
- }
- .scroll-p-\[var\(--any-value\)\] {
- scroll-padding: var(--any-value);
- }
- .scroll-px-\[var\(--any-value\)\] {
- scroll-padding-left: var(--any-value);
- scroll-padding-right: var(--any-value);
- }
- .scroll-py-\[var\(--any-value\)\] {
- scroll-padding-top: var(--any-value);
- scroll-padding-bottom: var(--any-value);
- }
- .scroll-pb-\[var\(--any-value\)\] {
- scroll-padding-bottom: var(--any-value);
- }
- .scroll-pl-\[var\(--any-value\)\] {
- scroll-padding-left: var(--any-value);
- }
- .scroll-pr-\[var\(--any-value\)\] {
- scroll-padding-right: var(--any-value);
- }
- .scroll-pt-\[var\(--any-value\)\] {
- scroll-padding-top: var(--any-value);
- }
- .list-\[var\(--any-value\)\] {
- list-style-type: var(--any-value);
- }
- .columns-\[var\(--any-value\)\] {
- columns: var(--any-value);
- }
- .auto-cols-\[var\(--any-value\)\] {
- grid-auto-columns: var(--any-value);
- }
- .auto-rows-\[var\(--any-value\)\] {
- grid-auto-rows: var(--any-value);
- }
- .grid-cols-\[var\(--any-value\)\] {
- grid-template-columns: var(--any-value);
- }
- .grid-rows-\[var\(--any-value\)\] {
- grid-template-rows: var(--any-value);
- }
- .gap-\[var\(--any-value\)\] {
- gap: var(--any-value);
- }
- .gap-x-\[var\(--any-value\)\] {
- column-gap: var(--any-value);
- }
- .gap-y-\[var\(--any-value\)\] {
- row-gap: var(--any-value);
- }
- .space-x-\[var\(--any-value\)\] > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-right: calc(var(--any-value) * var(--tw-space-x-reverse));
- margin-left: calc(var(--any-value) * calc(1 - var(--tw-space-x-reverse)));
- }
- .space-y-\[var\(--any-value\)\] > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(var(--any-value) * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(var(--any-value) * var(--tw-space-y-reverse));
- }
- .divide-y-\[var\(--any-value\)\] > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(var(--any-value) * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(var(--any-value) * var(--tw-divide-y-reverse));
- }
- .divide-\[var\(--any-value\)\] > :not([hidden]) ~ :not([hidden]) {
- border-color: var(--any-value);
- }
- .divide-opacity-\[var\(--any-value\)\] > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-opacity: var(--any-value);
- }
- .rounded-\[var\(--any-value\)\] {
- border-radius: var(--any-value);
- }
- .rounded-b-\[var\(--any-value\)\] {
- border-bottom-right-radius: var(--any-value);
- border-bottom-left-radius: var(--any-value);
- }
- .rounded-l-\[var\(--any-value\)\] {
- border-top-left-radius: var(--any-value);
- border-bottom-left-radius: var(--any-value);
- }
- .rounded-r-\[var\(--any-value\)\] {
- border-top-right-radius: var(--any-value);
- border-bottom-right-radius: var(--any-value);
- }
- .rounded-t-\[var\(--any-value\)\] {
- border-top-left-radius: var(--any-value);
- border-top-right-radius: var(--any-value);
- }
- .rounded-bl-\[var\(--any-value\)\] {
- border-bottom-left-radius: var(--any-value);
- }
- .rounded-br-\[var\(--any-value\)\] {
- border-bottom-right-radius: var(--any-value);
- }
- .rounded-tl-\[var\(--any-value\)\] {
- border-top-left-radius: var(--any-value);
- }
- .rounded-tr-\[var\(--any-value\)\] {
- border-top-right-radius: var(--any-value);
- }
- .border-\[var\(--any-value\)\] {
- border-color: var(--any-value);
- }
- .border-x-\[var\(--any-value\)\] {
- border-left-color: var(--any-value);
- border-right-color: var(--any-value);
- }
- .border-y-\[var\(--any-value\)\] {
- border-top-color: var(--any-value);
- border-bottom-color: var(--any-value);
- }
- .border-b-\[var\(--any-value\)\] {
- border-bottom-color: var(--any-value);
- }
- .border-l-\[var\(--any-value\)\] {
- border-left-color: var(--any-value);
- }
- .border-r-\[var\(--any-value\)\] {
- border-right-color: var(--any-value);
- }
- .border-t-\[var\(--any-value\)\] {
- border-top-color: var(--any-value);
- }
- .border-opacity-\[var\(--any-value\)\] {
- --tw-border-opacity: var(--any-value);
- }
- .bg-\[var\(--any-value\)\] {
- background-color: var(--any-value);
- }
- .bg-opacity-\[var\(--any-value\)\] {
- --tw-bg-opacity: var(--any-value);
- }
- .from-\[var\(--any-value\)\] {
- --tw-gradient-from: var(--any-value) var(--tw-gradient-from-position);
- --tw-gradient-to: #fff0 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
- }
- .via-\[var\(--any-value\)\] {
- --tw-gradient-to: #fff0 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from),
- var(--any-value) var(--tw-gradient-via-position), var(--tw-gradient-to);
- }
- .to-\[var\(--any-value\)\] {
- --tw-gradient-to: var(--any-value) var(--tw-gradient-to-position);
- }
- .fill-\[var\(--any-value\)\] {
- fill: var(--any-value);
- }
- .stroke-\[var\(--any-value\)\] {
- stroke: var(--any-value);
- }
- .object-\[var\(--any-value\)\] {
- object-position: var(--any-value);
- }
- .p-\[var\(--any-value\)\] {
- padding: var(--any-value);
- }
- .px-\[var\(--any-value\)\] {
- padding-left: var(--any-value);
- padding-right: var(--any-value);
- }
- .py-\[var\(--any-value\)\] {
- padding-top: var(--any-value);
- padding-bottom: var(--any-value);
- }
- .pb-\[var\(--any-value\)\] {
- padding-bottom: var(--any-value);
- }
- .pl-\[var\(--any-value\)\] {
- padding-left: var(--any-value);
- }
- .pr-\[var\(--any-value\)\] {
- padding-right: var(--any-value);
- }
- .pt-\[var\(--any-value\)\] {
- padding-top: var(--any-value);
- }
- .indent-\[var\(--any-value\)\] {
- text-indent: var(--any-value);
- }
- .align-\[var\(--any-value\)\] {
- vertical-align: var(--any-value);
- }
- .font-\[var\(--any-value\)\] {
- font-weight: var(--any-value);
- }
- .leading-\[var\(--any-value\)\] {
- line-height: var(--any-value);
- }
- .tracking-\[var\(--any-value\)\] {
- letter-spacing: var(--any-value);
- }
- .text-\[var\(--any-value\)\] {
- color: var(--any-value);
- }
- .text-opacity-\[var\(--any-value\)\] {
- --tw-text-opacity: var(--any-value);
- }
- .decoration-\[var\(--any-value\)\] {
- text-decoration-color: var(--any-value);
- }
- .underline-offset-\[var\(--any-value\)\] {
- text-underline-offset: var(--any-value);
- }
- .placeholder-\[var\(--any-value\)\]::placeholder {
- color: var(--any-value);
- }
- .placeholder-opacity-\[var\(--any-value\)\]::placeholder {
- --tw-placeholder-opacity: var(--any-value);
- }
- .caret-\[var\(--any-value\)\] {
- caret-color: var(--any-value);
- }
- .accent-\[var\(--any-value\)\] {
- accent-color: var(--any-value);
- }
- .opacity-\[var\(--any-value\)\] {
- opacity: var(--any-value);
- }
- .shadow-\[var\(--any-value\)\] {
- --tw-shadow-color: var(--any-value);
- --tw-shadow: var(--tw-shadow-colored);
- }
- .outline-offset-\[var\(--any-value\)\] {
- outline-offset: var(--any-value);
- }
- .outline-\[var\(--any-value\)\] {
- outline-color: var(--any-value);
- }
- .ring-\[var\(--any-value\)\] {
- --tw-ring-color: var(--any-value);
- }
- .ring-opacity-\[var\(--any-value\)\] {
- --tw-ring-opacity: var(--any-value);
- }
- .ring-offset-\[var\(--any-value\)\] {
- --tw-ring-offset-color: var(--any-value);
- }
- .blur-\[var\(--any-value\)\] {
- --tw-blur: blur(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .brightness-\[var\(--any-value\)\] {
- --tw-brightness: brightness(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .contrast-\[var\(--any-value\)\] {
- --tw-contrast: contrast(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .drop-shadow-\[var\(--any-value\)\] {
- --tw-drop-shadow: drop-shadow(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .grayscale-\[var\(--any-value\)\] {
- --tw-grayscale: grayscale(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .hue-rotate-\[var\(--any-value\)\] {
- --tw-hue-rotate: hue-rotate(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .invert-\[var\(--any-value\)\] {
- --tw-invert: invert(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .saturate-\[var\(--any-value\)\] {
- --tw-saturate: saturate(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .sepia-\[var\(--any-value\)\] {
- --tw-sepia: sepia(var(--any-value));
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .backdrop-blur-\[var\(--any-value\)\] {
- --tw-backdrop-blur: blur(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-brightness-\[var\(--any-value\)\] {
- --tw-backdrop-brightness: brightness(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-contrast-\[var\(--any-value\)\] {
- --tw-backdrop-contrast: contrast(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-grayscale-\[var\(--any-value\)\] {
- --tw-backdrop-grayscale: grayscale(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-hue-rotate-\[var\(--any-value\)\] {
- --tw-backdrop-hue-rotate: hue-rotate(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-invert-\[var\(--any-value\)\] {
- --tw-backdrop-invert: invert(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-opacity-\[var\(--any-value\)\] {
- --tw-backdrop-opacity: opacity(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-saturate-\[var\(--any-value\)\] {
- --tw-backdrop-saturate: saturate(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .backdrop-sepia-\[var\(--any-value\)\] {
- --tw-backdrop-sepia: sepia(var(--any-value));
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
- var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
- var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
- var(--tw-backdrop-sepia);
- }
- .transition-\[var\(--any-value\)\] {
- transition-property: var(--any-value);
- transition-duration: 0.15s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- }
- .delay-\[var\(--any-value\)\] {
- transition-delay: var(--any-value);
- }
- .duration-\[var\(--any-value\)\] {
- transition-duration: var(--any-value);
- }
- .ease-\[var\(--any-value\)\] {
- transition-timing-function: var(--any-value);
- }
- .will-change-\[var\(--any-value\)\] {
- will-change: var(--any-value);
- }
- .content-\[var\(--any-value\)\] {
- --tw-content: var(--any-value);
- content: var(--tw-content);
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .inset-\[var\(--any-value\)\] {
+ inset: var(--any-value);
+ }
+ .inset-x-\[var\(--any-value\)\] {
+ left: var(--any-value);
+ right: var(--any-value);
+ }
+ .inset-y-\[var\(--any-value\)\] {
+ top: var(--any-value);
+ bottom: var(--any-value);
+ }
+ .bottom-\[var\(--any-value\)\] {
+ bottom: var(--any-value);
+ }
+ .left-\[var\(--any-value\)\] {
+ left: var(--any-value);
+ }
+ .right-\[var\(--any-value\)\] {
+ right: var(--any-value);
+ }
+ .top-\[var\(--any-value\)\] {
+ top: var(--any-value);
+ }
+ .z-\[var\(--any-value\)\] {
+ z-index: var(--any-value);
+ }
+ .order-\[var\(--any-value\)\] {
+ order: var(--any-value);
+ }
+ .col-\[var\(--any-value\)\] {
+ grid-column: var(--any-value);
+ }
+ .col-start-\[var\(--any-value\)\] {
+ grid-column-start: var(--any-value);
+ }
+ .col-end-\[var\(--any-value\)\] {
+ grid-column-end: var(--any-value);
+ }
+ .row-\[var\(--any-value\)\] {
+ grid-row: var(--any-value);
+ }
+ .row-start-\[var\(--any-value\)\] {
+ grid-row-start: var(--any-value);
+ }
+ .row-end-\[var\(--any-value\)\] {
+ grid-row-end: var(--any-value);
+ }
+ .m-\[var\(--any-value\)\] {
+ margin: var(--any-value);
+ }
+ .mx-\[var\(--any-value\)\] {
+ margin-left: var(--any-value);
+ margin-right: var(--any-value);
+ }
+ .my-\[var\(--any-value\)\] {
+ margin-top: var(--any-value);
+ margin-bottom: var(--any-value);
+ }
+ .mb-\[var\(--any-value\)\] {
+ margin-bottom: var(--any-value);
+ }
+ .ml-\[var\(--any-value\)\] {
+ margin-left: var(--any-value);
+ }
+ .mr-\[var\(--any-value\)\] {
+ margin-right: var(--any-value);
+ }
+ .mt-\[var\(--any-value\)\] {
+ margin-top: var(--any-value);
+ }
+ .aspect-\[var\(--any-value\)\] {
+ aspect-ratio: var(--any-value);
+ }
+ .h-\[var\(--any-value\)\] {
+ height: var(--any-value);
+ }
+ .max-h-\[var\(--any-value\)\] {
+ max-height: var(--any-value);
+ }
+ .min-h-\[var\(--any-value\)\] {
+ min-height: var(--any-value);
+ }
+ .w-\[var\(--any-value\)\] {
+ width: var(--any-value);
+ }
+ .min-w-\[var\(--any-value\)\] {
+ min-width: var(--any-value);
+ }
+ .max-w-\[var\(--any-value\)\] {
+ max-width: var(--any-value);
+ }
+ .flex-\[var\(--any-value\)\] {
+ flex: var(--any-value);
+ }
+ .flex-shrink-\[var\(--any-value\)\],
+ .shrink-\[var\(--any-value\)\] {
+ flex-shrink: var(--any-value);
+ }
+ .flex-grow-\[var\(--any-value\)\],
+ .grow-\[var\(--any-value\)\] {
+ flex-grow: var(--any-value);
+ }
+ .basis-\[var\(--any-value\)\] {
+ flex-basis: var(--any-value);
+ }
+ .border-spacing-\[var\(--any-value\)\] {
+ --tw-border-spacing-x: var(--any-value);
+ --tw-border-spacing-y: var(--any-value);
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+ }
+ .border-spacing-x-\[var\(--any-value\)\] {
+ --tw-border-spacing-x: var(--any-value);
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+ }
+ .border-spacing-y-\[var\(--any-value\)\] {
+ --tw-border-spacing-y: var(--any-value);
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+ }
+ .origin-\[var\(--any-value\)\] {
+ transform-origin: var(--any-value);
+ }
+ .translate-x-\[var\(--any-value\)\] {
+ --tw-translate-x: var(--any-value);
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .translate-y-\[var\(--any-value\)\] {
+ --tw-translate-y: var(--any-value);
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .rotate-\[var\(--any-value\)\] {
+ --tw-rotate: var(--any-value);
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .scale-\[var\(--any-value\)\] {
+ --tw-scale-x: var(--any-value);
+ --tw-scale-y: var(--any-value);
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .scale-x-\[var\(--any-value\)\] {
+ --tw-scale-x: var(--any-value);
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .scale-y-\[var\(--any-value\)\] {
+ --tw-scale-y: var(--any-value);
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .animate-\[var\(--any-value\)\] {
+ animation: var(--any-value);
+ }
+ .cursor-\[var\(--any-value\)\] {
+ cursor: var(--any-value);
+ }
+ .scroll-m-\[var\(--any-value\)\] {
+ scroll-margin: var(--any-value);
+ }
+ .scroll-mx-\[var\(--any-value\)\] {
+ scroll-margin-left: var(--any-value);
+ scroll-margin-right: var(--any-value);
+ }
+ .scroll-my-\[var\(--any-value\)\] {
+ scroll-margin-top: var(--any-value);
+ scroll-margin-bottom: var(--any-value);
+ }
+ .scroll-mb-\[var\(--any-value\)\] {
+ scroll-margin-bottom: var(--any-value);
+ }
+ .scroll-ml-\[var\(--any-value\)\] {
+ scroll-margin-left: var(--any-value);
+ }
+ .scroll-mr-\[var\(--any-value\)\] {
+ scroll-margin-right: var(--any-value);
+ }
+ .scroll-mt-\[var\(--any-value\)\] {
+ scroll-margin-top: var(--any-value);
+ }
+ .scroll-p-\[var\(--any-value\)\] {
+ scroll-padding: var(--any-value);
+ }
+ .scroll-px-\[var\(--any-value\)\] {
+ scroll-padding-left: var(--any-value);
+ scroll-padding-right: var(--any-value);
+ }
+ .scroll-py-\[var\(--any-value\)\] {
+ scroll-padding-top: var(--any-value);
+ scroll-padding-bottom: var(--any-value);
+ }
+ .scroll-pb-\[var\(--any-value\)\] {
+ scroll-padding-bottom: var(--any-value);
+ }
+ .scroll-pl-\[var\(--any-value\)\] {
+ scroll-padding-left: var(--any-value);
+ }
+ .scroll-pr-\[var\(--any-value\)\] {
+ scroll-padding-right: var(--any-value);
+ }
+ .scroll-pt-\[var\(--any-value\)\] {
+ scroll-padding-top: var(--any-value);
+ }
+ .list-\[var\(--any-value\)\] {
+ list-style-type: var(--any-value);
+ }
+ .columns-\[var\(--any-value\)\] {
+ columns: var(--any-value);
+ }
+ .auto-cols-\[var\(--any-value\)\] {
+ grid-auto-columns: var(--any-value);
+ }
+ .auto-rows-\[var\(--any-value\)\] {
+ grid-auto-rows: var(--any-value);
+ }
+ .grid-cols-\[var\(--any-value\)\] {
+ grid-template-columns: var(--any-value);
+ }
+ .grid-rows-\[var\(--any-value\)\] {
+ grid-template-rows: var(--any-value);
+ }
+ .gap-\[var\(--any-value\)\] {
+ gap: var(--any-value);
+ }
+ .gap-x-\[var\(--any-value\)\] {
+ column-gap: var(--any-value);
+ }
+ .gap-y-\[var\(--any-value\)\] {
+ row-gap: var(--any-value);
+ }
+ .space-x-\[var\(--any-value\)\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(var(--any-value) * var(--tw-space-x-reverse));
+ margin-left: calc(var(--any-value) * calc(1 - var(--tw-space-x-reverse)));
+ }
+ .space-y-\[var\(--any-value\)\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(var(--any-value) * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(var(--any-value) * var(--tw-space-y-reverse));
+ }
+ .divide-y-\[var\(--any-value\)\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(var(--any-value) * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(var(--any-value) * var(--tw-divide-y-reverse));
+ }
+ .divide-\[var\(--any-value\)\] > :not([hidden]) ~ :not([hidden]) {
+ border-color: var(--any-value);
+ }
+ .divide-opacity-\[var\(--any-value\)\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: var(--any-value);
+ }
+ .rounded-\[var\(--any-value\)\] {
+ border-radius: var(--any-value);
+ }
+ .rounded-b-\[var\(--any-value\)\] {
+ border-bottom-right-radius: var(--any-value);
+ border-bottom-left-radius: var(--any-value);
+ }
+ .rounded-l-\[var\(--any-value\)\] {
+ border-top-left-radius: var(--any-value);
+ border-bottom-left-radius: var(--any-value);
+ }
+ .rounded-r-\[var\(--any-value\)\] {
+ border-top-right-radius: var(--any-value);
+ border-bottom-right-radius: var(--any-value);
+ }
+ .rounded-t-\[var\(--any-value\)\] {
+ border-top-left-radius: var(--any-value);
+ border-top-right-radius: var(--any-value);
+ }
+ .rounded-bl-\[var\(--any-value\)\] {
+ border-bottom-left-radius: var(--any-value);
+ }
+ .rounded-br-\[var\(--any-value\)\] {
+ border-bottom-right-radius: var(--any-value);
+ }
+ .rounded-tl-\[var\(--any-value\)\] {
+ border-top-left-radius: var(--any-value);
+ }
+ .rounded-tr-\[var\(--any-value\)\] {
+ border-top-right-radius: var(--any-value);
+ }
+ .border-\[var\(--any-value\)\] {
+ border-color: var(--any-value);
+ }
+ .border-x-\[var\(--any-value\)\] {
+ border-left-color: var(--any-value);
+ border-right-color: var(--any-value);
+ }
+ .border-y-\[var\(--any-value\)\] {
+ border-top-color: var(--any-value);
+ border-bottom-color: var(--any-value);
+ }
+ .border-b-\[var\(--any-value\)\] {
+ border-bottom-color: var(--any-value);
+ }
+ .border-l-\[var\(--any-value\)\] {
+ border-left-color: var(--any-value);
+ }
+ .border-r-\[var\(--any-value\)\] {
+ border-right-color: var(--any-value);
+ }
+ .border-t-\[var\(--any-value\)\] {
+ border-top-color: var(--any-value);
+ }
+ .border-opacity-\[var\(--any-value\)\] {
+ --tw-border-opacity: var(--any-value);
+ }
+ .bg-\[var\(--any-value\)\] {
+ background-color: var(--any-value);
+ }
+ .bg-opacity-\[var\(--any-value\)\] {
+ --tw-bg-opacity: var(--any-value);
+ }
+ .from-\[var\(--any-value\)\] {
+ --tw-gradient-from: var(--any-value) var(--tw-gradient-from-position);
+ --tw-gradient-to: #fff0 var(--tw-gradient-to-position);
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+ }
+ .via-\[var\(--any-value\)\] {
+ --tw-gradient-to: #fff0 var(--tw-gradient-to-position);
+ --tw-gradient-stops: var(--tw-gradient-from),
+ var(--any-value) var(--tw-gradient-via-position), var(--tw-gradient-to);
+ }
+ .to-\[var\(--any-value\)\] {
+ --tw-gradient-to: var(--any-value) var(--tw-gradient-to-position);
+ }
+ .fill-\[var\(--any-value\)\] {
+ fill: var(--any-value);
+ }
+ .stroke-\[var\(--any-value\)\] {
+ stroke: var(--any-value);
+ }
+ .object-\[var\(--any-value\)\] {
+ object-position: var(--any-value);
+ }
+ .p-\[var\(--any-value\)\] {
+ padding: var(--any-value);
+ }
+ .px-\[var\(--any-value\)\] {
+ padding-left: var(--any-value);
+ padding-right: var(--any-value);
+ }
+ .py-\[var\(--any-value\)\] {
+ padding-top: var(--any-value);
+ padding-bottom: var(--any-value);
+ }
+ .pb-\[var\(--any-value\)\] {
+ padding-bottom: var(--any-value);
+ }
+ .pl-\[var\(--any-value\)\] {
+ padding-left: var(--any-value);
+ }
+ .pr-\[var\(--any-value\)\] {
+ padding-right: var(--any-value);
+ }
+ .pt-\[var\(--any-value\)\] {
+ padding-top: var(--any-value);
+ }
+ .indent-\[var\(--any-value\)\] {
+ text-indent: var(--any-value);
+ }
+ .align-\[var\(--any-value\)\] {
+ vertical-align: var(--any-value);
+ }
+ .font-\[var\(--any-value\)\] {
+ font-weight: var(--any-value);
+ }
+ .leading-\[var\(--any-value\)\] {
+ line-height: var(--any-value);
+ }
+ .tracking-\[var\(--any-value\)\] {
+ letter-spacing: var(--any-value);
+ }
+ .text-\[var\(--any-value\)\] {
+ color: var(--any-value);
+ }
+ .text-opacity-\[var\(--any-value\)\] {
+ --tw-text-opacity: var(--any-value);
+ }
+ .decoration-\[var\(--any-value\)\] {
+ -webkit-text-decoration-color: var(--any-value);
+ text-decoration-color: var(--any-value);
+ }
+ .underline-offset-\[var\(--any-value\)\] {
+ text-underline-offset: var(--any-value);
+ }
+ .placeholder-\[var\(--any-value\)\]::placeholder {
+ color: var(--any-value);
+ }
+ .placeholder-opacity-\[var\(--any-value\)\]::placeholder {
+ --tw-placeholder-opacity: var(--any-value);
+ }
+ .caret-\[var\(--any-value\)\] {
+ caret-color: var(--any-value);
+ }
+ .accent-\[var\(--any-value\)\] {
+ accent-color: var(--any-value);
+ }
+ .opacity-\[var\(--any-value\)\] {
+ opacity: var(--any-value);
+ }
+ .shadow-\[var\(--any-value\)\] {
+ --tw-shadow-color: var(--any-value);
+ --tw-shadow: var(--tw-shadow-colored);
+ }
+ .outline-offset-\[var\(--any-value\)\] {
+ outline-offset: var(--any-value);
+ }
+ .outline-\[var\(--any-value\)\] {
+ outline-color: var(--any-value);
+ }
+ .ring-\[var\(--any-value\)\] {
+ --tw-ring-color: var(--any-value);
+ }
+ .ring-opacity-\[var\(--any-value\)\] {
+ --tw-ring-opacity: var(--any-value);
+ }
+ .ring-offset-\[var\(--any-value\)\] {
+ --tw-ring-offset-color: var(--any-value);
+ }
+ .blur-\[var\(--any-value\)\] {
+ --tw-blur: blur(var(--any-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
+ var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
+ var(--tw-drop-shadow);
+ }
+ .brightness-\[var\(--any-value\)\] {
+ --tw-brightness: brightness(var(--any-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
+ var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
+ var(--tw-drop-shadow);
+ }
+ .contrast-\[var\(--any-value\)\] {
+ --tw-contrast: contrast(var(--any-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
+ var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
+ var(--tw-drop-shadow);
+ }
+ .drop-shadow-\[var\(--any-value\)\] {
+ --tw-drop-shadow: drop-shadow(var(--any-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
+ var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
+ var(--tw-drop-shadow);
+ }
+ .grayscale-\[var\(--any-value\)\] {
+ --tw-grayscale: grayscale(var(--any-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
+ var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
+ var(--tw-drop-shadow);
+ }
+ .hue-rotate-\[var\(--any-value\)\] {
+ --tw-hue-rotate: hue-rotate(var(--any-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
+ var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
+ var(--tw-drop-shadow);
+ }
+ .invert-\[var\(--any-value\)\] {
+ --tw-invert: invert(var(--any-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
+ var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
+ var(--tw-drop-shadow);
+ }
+ .saturate-\[var\(--any-value\)\] {
+ --tw-saturate: saturate(var(--any-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
+ var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
+ var(--tw-drop-shadow);
+ }
+ .sepia-\[var\(--any-value\)\] {
+ --tw-sepia: sepia(var(--any-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
+ var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
+ var(--tw-drop-shadow);
+ }
+ .backdrop-blur-\[var\(--any-value\)\] {
+ --tw-backdrop-blur: blur(var(--any-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ }
+ .backdrop-brightness-\[var\(--any-value\)\] {
+ --tw-backdrop-brightness: brightness(var(--any-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ }
+ .backdrop-contrast-\[var\(--any-value\)\] {
+ --tw-backdrop-contrast: contrast(var(--any-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ }
+ .backdrop-grayscale-\[var\(--any-value\)\] {
+ --tw-backdrop-grayscale: grayscale(var(--any-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ }
+ .backdrop-hue-rotate-\[var\(--any-value\)\] {
+ --tw-backdrop-hue-rotate: hue-rotate(var(--any-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ }
+ .backdrop-invert-\[var\(--any-value\)\] {
+ --tw-backdrop-invert: invert(var(--any-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ }
+ .backdrop-opacity-\[var\(--any-value\)\] {
+ --tw-backdrop-opacity: opacity(var(--any-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ }
+ .backdrop-saturate-\[var\(--any-value\)\] {
+ --tw-backdrop-saturate: saturate(var(--any-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ }
+ .backdrop-sepia-\[var\(--any-value\)\] {
+ --tw-backdrop-sepia: sepia(var(--any-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
+ }
+ .transition-\[var\(--any-value\)\] {
+ transition-property: var(--any-value);
+ transition-duration: 0.15s;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ }
+ .delay-\[var\(--any-value\)\] {
+ transition-delay: var(--any-value);
+ }
+ .duration-\[var\(--any-value\)\] {
+ transition-duration: var(--any-value);
+ }
+ .ease-\[var\(--any-value\)\] {
+ transition-timing-function: var(--any-value);
+ }
+ .will-change-\[var\(--any-value\)\] {
+ will-change: var(--any-value);
+ }
+ .content-\[var\(--any-value\)\] {
+ --tw-content: var(--any-value);
+ content: var(--tw-content);
+ }
+ `)
})
- test.todo('rewrite the any test to be easier to understand or break it up into multiple tests')
})
+test.todo('rewrite the any test to be easier to understand or break it up into multiple tests')
diff --git a/tests/apply-important-selector.test.js b/tests/apply-important-selector.test.js
new file mode 100644
index 000000000..22c1dd88f
--- /dev/null
+++ b/tests/apply-important-selector.test.js
@@ -0,0 +1,25 @@
+import { applyImportantSelector } from '../src/util/applyImportantSelector'
+
+it.each`
+ before | after
+ ${'.foo'} | ${'#app :is(.foo)'}
+ ${'.foo .bar'} | ${'#app :is(.foo .bar)'}
+ ${'.foo:hover'} | ${'#app :is(.foo:hover)'}
+ ${'.foo .bar:hover'} | ${'#app :is(.foo .bar:hover)'}
+ ${'.foo::before'} | ${'#app :is(.foo)::before'}
+ ${'.foo::before'} | ${'#app :is(.foo)::before'}
+ ${'.foo::file-selector-button'} | ${'#app :is(.foo)::file-selector-button'}
+ ${'.foo::-webkit-progress-bar'} | ${'#app :is(.foo)::-webkit-progress-bar'}
+ ${'.foo:hover::before'} | ${'#app :is(.foo:hover)::before'}
+ ${':is(.dark :is([dir="rtl"] .foo::before))'} | ${'#app :is(.dark :is([dir="rtl"] .foo))::before'}
+ ${':is(.dark .foo) .bar'} | ${'#app :is(:is(.dark .foo) .bar)'}
+ ${':is(.foo) :is(.bar)'} | ${'#app :is(:is(.foo) :is(.bar))'}
+ ${':is(.foo)::before'} | ${'#app :is(.foo)::before'}
+ ${'.foo:before'} | ${'#app :is(.foo):before'}
+ ${'.foo::some-unknown-pseudo'} | ${'#app :is(.foo)::some-unknown-pseudo'}
+ ${'.foo::some-unknown-pseudo:hover'} | ${'#app :is(.foo)::some-unknown-pseudo:hover'}
+ ${'.foo:focus::some-unknown-pseudo:hover'} | ${'#app :is(.foo:focus)::some-unknown-pseudo:hover'}
+ ${'.foo:hover::some-unknown-pseudo:focus'} | ${'#app :is(.foo:hover)::some-unknown-pseudo:focus'}
+`('should generate "$after" from "$before"', ({ before, after }) => {
+ expect(applyImportantSelector(before, '#app')).toEqual(after)
+})
diff --git a/tests/apply.test.js b/tests/apply.test.js
index e4af6ee58..27b5f761e 100644
--- a/tests/apply.test.js
+++ b/tests/apply.test.js
@@ -1,2473 +1,2139 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(({ stable, oxide }) => {
- let sharedHtml = html`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+let sharedHtml = html`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`
+
+test('@apply', () => {
+ let config = {
+ darkMode: 'class',
+ content: [{ raw: sharedHtml }],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer components {
+ .basic-example {
+ @apply rounded-md bg-blue-500 px-4 py-2;
+ }
+ .class-order {
+ @apply p-8 px-3 py-7 pt-4 pr-1;
+ }
+ .with-additional-properties {
+ font-weight: 500;
+ @apply text-right;
+ }
+ .variants {
+ @apply font-semibold hover:font-bold focus:font-medium lg:font-light xl:focus:font-black;
+ }
+ .only-variants {
+ @apply hover:font-bold focus:font-medium lg:font-light xl:focus:font-black;
+ }
+ .apply-group-variant {
+ @apply group-hover:text-center lg:group-hover:text-left;
+ }
+ .apply-dark-variant {
+ @apply dark:text-center dark:hover:text-right lg:dark:text-left;
+ }
+ .apply-custom-utility {
+ @apply custom-util hover:custom-util lg:custom-util xl:focus:custom-util;
+ }
+ .multiple,
+ .selectors {
+ @apply rounded-md bg-blue-500 px-4 py-2;
+ }
+ .multiple-variants,
+ .selectors-variants {
+ @apply hover:text-center active:text-right lg:focus:text-left;
+ }
+ .multiple-group,
+ .selectors-group {
+ @apply group-hover:text-center lg:group-hover:text-left;
+ }
+ .complex-utilities {
+ @apply ordinal tabular-nums shadow-lg hover:shadow-xl focus:diagonal-fractions;
+ }
+ .use-base-only-a {
+ @apply font-bold;
+ }
+ .use-base-only-b {
+ @apply use-base-only-a font-normal;
+ }
+ .use-dependant-only-a {
+ @apply font-bold;
+ }
+ .use-dependant-only-b {
+ @apply use-dependant-only-a font-normal;
+ }
+ .btn {
+ @apply rounded py-2 px-4 font-bold;
+ }
+ .btn-blue {
+ @apply btn bg-blue-500 text-white hover:bg-blue-700;
+ }
+ .recursive-apply-a {
+ @apply font-black sm:font-thin;
+ }
+ .recursive-apply-b {
+ @apply recursive-apply-a font-semibold md:font-extralight;
+ }
+ .recursive-apply-c {
+ @apply recursive-apply-b font-bold lg:font-light;
+ }
+ .use-with-other-properties-base {
+ color: green;
+ @apply font-bold;
+ }
+ .use-with-other-properties-component {
+ @apply use-with-other-properties-base;
+ }
+ .add-sibling-properties {
+ padding: 2rem;
+ @apply px-4 hover:px-2 lg:px-10 xl:focus:px-1;
+ padding-top: 3px;
+ @apply use-with-other-properties-base;
+ }
+
+ h1 {
+ @apply text-2xl sm:text-3xl lg:text-2xl;
+ }
+ h2 {
+ @apply text-2xl;
+ @apply lg:text-2xl;
+ @apply sm:text-2xl;
+ }
+
+ .important-modifier {
+ @apply !rounded-md px-4;
+ }
+
+ .important-modifier-variant {
+ @apply px-4 hover:!rounded-md;
+ }
+ }
+
+ @layer utilities {
+ .custom-util {
+ custom: stuff;
+ }
+
+ .foo {
+ @apply animate-spin;
+ }
+
+ .bar {
+ @apply animate-pulse !important;
+ }
+ }
`
- test('@apply', () => {
- let config = {
- darkMode: 'class',
- content: [{ raw: sharedHtml }],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .basic-example {
- @apply rounded-md bg-blue-500 px-4 py-2;
- }
- .class-order {
- @apply p-8 px-3 py-7 pt-4 pr-1;
- }
- .with-additional-properties {
- font-weight: 500;
- @apply text-right;
- }
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .basic-example {
+ --tw-bg-opacity: 1;
+ background-color: rgb(59 130 246 / var(--tw-bg-opacity));
+ border-radius: 0.375rem;
+ padding: 0.5rem 1rem;
+ }
+ .class-order {
+ padding: 1rem 0.25rem 1.75rem 0.75rem;
+ }
+ .with-additional-properties {
+ text-align: right;
+ font-weight: 500;
+ }
+ .variants {
+ font-weight: 600;
+ }
+ .variants:hover {
+ font-weight: 700;
+ }
+ .variants:focus {
+ font-weight: 500;
+ }
+ @media (min-width: 1024px) {
.variants {
- @apply font-semibold hover:font-bold focus:font-medium lg:font-light xl:focus:font-black;
+ font-weight: 300;
}
+ }
+ @media (min-width: 1280px) {
+ .variants:focus {
+ font-weight: 900;
+ }
+ }
+ .only-variants:hover {
+ font-weight: 700;
+ }
+ .only-variants:focus {
+ font-weight: 500;
+ }
+ @media (min-width: 1024px) {
.only-variants {
- @apply hover:font-bold focus:font-medium lg:font-light xl:focus:font-black;
+ font-weight: 300;
}
- .apply-group-variant {
- @apply group-hover:text-center lg:group-hover:text-left;
+ }
+ @media (min-width: 1280px) {
+ .only-variants:focus {
+ font-weight: 900;
}
- .apply-dark-variant {
- @apply dark:text-center dark:hover:text-right lg:dark:text-left;
+ }
+ .group:hover .apply-group-variant {
+ text-align: center;
+ }
+ @media (min-width: 1024px) {
+ .group:hover .apply-group-variant {
+ text-align: left;
}
+ }
+ :is(.dark .apply-dark-variant) {
+ text-align: center;
+ }
+ :is(.dark .apply-dark-variant:hover) {
+ text-align: right;
+ }
+ @media (min-width: 1024px) {
+ :is(.dark .apply-dark-variant) {
+ text-align: left;
+ }
+ }
+ .apply-custom-utility,
+ .apply-custom-utility:hover {
+ custom: stuff;
+ }
+ @media (min-width: 1024px) {
.apply-custom-utility {
- @apply custom-util hover:custom-util lg:custom-util xl:focus:custom-util;
- }
- .multiple,
- .selectors {
- @apply rounded-md bg-blue-500 px-4 py-2;
- }
- .multiple-variants,
- .selectors-variants {
- @apply hover:text-center active:text-right lg:focus:text-left;
- }
- .multiple-group,
- .selectors-group {
- @apply group-hover:text-center lg:group-hover:text-left;
- }
- .complex-utilities {
- @apply ordinal tabular-nums shadow-lg hover:shadow-xl focus:diagonal-fractions;
- }
- .use-base-only-a {
- @apply font-bold;
- }
- .use-base-only-b {
- @apply use-base-only-a font-normal;
- }
- .use-dependant-only-a {
- @apply font-bold;
- }
- .use-dependant-only-b {
- @apply use-dependant-only-a font-normal;
- }
- .btn {
- @apply rounded py-2 px-4 font-bold;
- }
- .btn-blue {
- @apply btn bg-blue-500 text-white hover:bg-blue-700;
- }
- .recursive-apply-a {
- @apply font-black sm:font-thin;
- }
- .recursive-apply-b {
- @apply recursive-apply-a font-semibold md:font-extralight;
- }
- .recursive-apply-c {
- @apply recursive-apply-b font-bold lg:font-light;
- }
- .use-with-other-properties-base {
- color: green;
- @apply font-bold;
- }
- .use-with-other-properties-component {
- @apply use-with-other-properties-base;
- }
- .add-sibling-properties {
- padding: 2rem;
- @apply px-4 hover:px-2 lg:px-10 xl:focus:px-1;
- padding-top: 3px;
- @apply use-with-other-properties-base;
- }
-
- h1 {
- @apply text-2xl sm:text-3xl lg:text-2xl;
- }
- h2 {
- @apply text-2xl;
- @apply lg:text-2xl;
- @apply sm:text-2xl;
- }
-
- .important-modifier {
- @apply !rounded-md px-4;
- }
-
- .important-modifier-variant {
- @apply px-4 hover:!rounded-md;
- }
- }
-
- @layer utilities {
- .custom-util {
custom: stuff;
}
-
- .foo {
- @apply animate-spin;
- }
-
- .bar {
- @apply animate-pulse !important;
- }
}
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .basic-example {
- --tw-bg-opacity: 1;
- background-color: rgb(59 130 246 / var(--tw-bg-opacity));
- border-radius: 0.375rem;
- padding: 0.5rem 1rem;
- }
- .class-order {
- padding: 1rem 0.25rem 1.75rem 0.75rem;
- }
- .with-additional-properties {
- text-align: right;
- font-weight: 500;
- }
- .variants {
- font-weight: 600;
- }
- .variants:hover {
- font-weight: 700;
- }
- .variants:focus {
- font-weight: 500;
- }
- @media (min-width: 1024px) {
- .variants {
- font-weight: 300;
- }
- }
- @media (min-width: 1280px) {
- .variants:focus {
- font-weight: 900;
- }
- }
- .only-variants:hover {
- font-weight: 700;
- }
- .only-variants:focus {
- font-weight: 500;
- }
- @media (min-width: 1024px) {
- .only-variants {
- font-weight: 300;
- }
- }
- @media (min-width: 1280px) {
- .only-variants:focus {
- font-weight: 900;
- }
- }
- .group:hover .apply-group-variant {
- text-align: center;
- }
- @media (min-width: 1024px) {
- .group:hover .apply-group-variant {
- text-align: left;
- }
- }
- :is(.dark .apply-dark-variant) {
- text-align: center;
- }
- :is(.dark .apply-dark-variant:hover) {
- text-align: right;
- }
- @media (min-width: 1024px) {
- :is(.dark .apply-dark-variant) {
- text-align: left;
- }
- }
- .apply-custom-utility,
- .apply-custom-utility:hover {
+ @media (min-width: 1280px) {
+ .apply-custom-utility:focus {
custom: stuff;
}
- @media (min-width: 1024px) {
- .apply-custom-utility {
- custom: stuff;
- }
- }
- @media (min-width: 1280px) {
- .apply-custom-utility:focus {
- custom: stuff;
- }
- }
- .multiple,
- .selectors {
- --tw-bg-opacity: 1;
- background-color: rgb(59 130 246 / var(--tw-bg-opacity));
- border-radius: 0.375rem;
- padding: 0.5rem 1rem;
- }
- .multiple-variants:hover,
- .selectors-variants:hover {
- text-align: center;
- }
- .multiple-variants:active,
- .selectors-variants:active {
- text-align: right;
- }
- @media (min-width: 1024px) {
- .multiple-variants:focus,
- .selectors-variants:focus {
- text-align: left;
- }
+ }
+ .multiple,
+ .selectors {
+ --tw-bg-opacity: 1;
+ background-color: rgb(59 130 246 / var(--tw-bg-opacity));
+ border-radius: 0.375rem;
+ padding: 0.5rem 1rem;
+ }
+ .multiple-variants:hover,
+ .selectors-variants:hover {
+ text-align: center;
+ }
+ .multiple-variants:active,
+ .selectors-variants:active {
+ text-align: right;
+ }
+ @media (min-width: 1024px) {
+ .multiple-variants:focus,
+ .selectors-variants:focus {
+ text-align: left;
}
+ }
+ .group:hover .multiple-group,
+ .group:hover .selectors-group {
+ text-align: center;
+ }
+ @media (min-width: 1024px) {
.group:hover .multiple-group,
.group:hover .selectors-group {
- text-align: center;
- }
- @media (min-width: 1024px) {
- .group:hover .multiple-group,
- .group:hover .selectors-group {
- text-align: left;
- }
- }
- .complex-utilities {
- --tw-ordinal: ordinal;
- --tw-numeric-spacing: tabular-nums;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
- --tw-shadow: 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;
- --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color),
- 0 4px 6px -4px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- .complex-utilities:hover {
- --tw-shadow: 0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;
- --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color),
- 0 8px 10px -6px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- .complex-utilities:focus {
- --tw-numeric-fraction: diagonal-fractions;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
- }
- .use-base-only-a {
- font-weight: 700;
- }
- .use-dependant-only-b {
- font-weight: 400;
- }
- .btn {
- border-radius: 0.25rem;
- padding: 0.5rem 1rem;
- font-weight: 700;
- }
- .btn-blue {
- --tw-bg-opacity: 1;
- background-color: rgb(59 130 246 / var(--tw-bg-opacity));
- --tw-text-opacity: 1;
- color: rgb(255 255 255 / var(--tw-text-opacity));
- border-radius: 0.25rem;
- padding: 0.5rem 1rem;
- font-weight: 700;
- }
- .btn-blue:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(29 78 216 / var(--tw-bg-opacity));
+ text-align: left;
}
+ }
+ .complex-utilities {
+ --tw-ordinal: ordinal;
+ --tw-numeric-spacing: tabular-nums;
+ font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
+ var(--tw-numeric-spacing) var(--tw-numeric-fraction);
+ --tw-shadow: 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color),
+ 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
+ var(--tw-shadow);
+ }
+ .complex-utilities:hover {
+ --tw-shadow: 0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;
+ --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color),
+ 0 8px 10px -6px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
+ var(--tw-shadow);
+ }
+ .complex-utilities:focus {
+ --tw-numeric-fraction: diagonal-fractions;
+ font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
+ var(--tw-numeric-spacing) var(--tw-numeric-fraction);
+ }
+ .use-base-only-a {
+ font-weight: 700;
+ }
+ .use-dependant-only-b {
+ font-weight: 400;
+ }
+ .btn {
+ border-radius: 0.25rem;
+ padding: 0.5rem 1rem;
+ font-weight: 700;
+ }
+ .btn-blue {
+ --tw-bg-opacity: 1;
+ background-color: rgb(59 130 246 / var(--tw-bg-opacity));
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity));
+ border-radius: 0.25rem;
+ padding: 0.5rem 1rem;
+ font-weight: 700;
+ }
+ .btn-blue:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(29 78 216 / var(--tw-bg-opacity));
+ }
+ .recursive-apply-a {
+ font-weight: 900;
+ }
+ @media (min-width: 640px) {
.recursive-apply-a {
- font-weight: 900;
- }
- @media (min-width: 640px) {
- .recursive-apply-a {
- font-weight: 100;
- }
+ font-weight: 100;
}
+ }
+ @media (min-width: 640px) {
.recursive-apply-b {
- font-weight: 900;
- }
- @media (min-width: 640px) {
- .recursive-apply-b {
- font-weight: 100;
- }
+ font-weight: 100;
}
+ }
+ .recursive-apply-b {
+ font-weight: 600;
+ }
+ @media (min-width: 768px) {
.recursive-apply-b {
- font-weight: 600;
- }
- @media (min-width: 768px) {
- .recursive-apply-b {
- font-weight: 200;
- }
+ font-weight: 200;
}
+ }
+ @media (min-width: 640px) {
.recursive-apply-c {
- font-weight: 900;
- }
- @media (min-width: 640px) {
- .recursive-apply-c {
- font-weight: 100;
- }
+ font-weight: 100;
}
+ }
+ @media (min-width: 768px) {
.recursive-apply-c {
- font-weight: 600;
- }
- @media (min-width: 768px) {
- .recursive-apply-c {
- font-weight: 200;
- }
+ font-weight: 200;
}
+ }
+ .recursive-apply-c {
+ font-weight: 700;
+ }
+ @media (min-width: 1024px) {
.recursive-apply-c {
- font-weight: 700;
- }
- @media (min-width: 1024px) {
- .recursive-apply-c {
- font-weight: 300;
- }
- }
- .use-with-other-properties-base,
- .use-with-other-properties-component {
- color: green;
- font-weight: 700;
+ font-weight: 300;
}
+ }
+ .use-with-other-properties-base,
+ .use-with-other-properties-component {
+ color: green;
+ font-weight: 700;
+ }
+ .add-sibling-properties {
+ padding: 2rem 1rem;
+ }
+ .add-sibling-properties:hover {
+ padding-left: 0.5rem;
+ padding-right: 0.5rem;
+ }
+ @media (min-width: 1024px) {
.add-sibling-properties {
- padding: 2rem 1rem;
+ padding-left: 2.5rem;
+ padding-right: 2.5rem;
}
- .add-sibling-properties:hover {
- padding-left: 0.5rem;
- padding-right: 0.5rem;
+ }
+ @media (min-width: 1280px) {
+ .add-sibling-properties:focus {
+ padding-left: 0.25rem;
+ padding-right: 0.25rem;
}
- @media (min-width: 1024px) {
- .add-sibling-properties {
- padding-left: 2.5rem;
- padding-right: 2.5rem;
- }
- }
- @media (min-width: 1280px) {
- .add-sibling-properties:focus {
- padding-left: 0.25rem;
- padding-right: 0.25rem;
- }
- }
- .add-sibling-properties {
- color: green;
- padding-top: 3px;
- font-weight: 700;
+ }
+ .add-sibling-properties {
+ color: green;
+ padding-top: 3px;
+ font-weight: 700;
+ }
+ h1 {
+ font-size: 1.5rem;
+ line-height: 2rem;
+ }
+ @media (min-width: 640px) {
+ h1 {
+ font-size: 1.875rem;
+ line-height: 2.25rem;
}
+ }
+ @media (min-width: 1024px) {
h1 {
font-size: 1.5rem;
line-height: 2rem;
}
- @media (min-width: 640px) {
- h1 {
- font-size: 1.875rem;
- line-height: 2.25rem;
- }
- }
- @media (min-width: 1024px) {
- h1 {
- font-size: 1.5rem;
- line-height: 2rem;
- }
- }
+ }
+ h2 {
+ font-size: 1.5rem;
+ line-height: 2rem;
+ }
+ @media (min-width: 1024px) {
h2 {
font-size: 1.5rem;
line-height: 2rem;
}
- @media (min-width: 1024px) {
- h2 {
- font-size: 1.5rem;
- line-height: 2rem;
- }
- }
- @media (min-width: 640px) {
- h2 {
- font-size: 1.5rem;
- line-height: 2rem;
- }
- }
- .important-modifier {
- padding-left: 1rem;
- padding-right: 1rem;
- border-radius: 0.375rem !important;
- }
- .important-modifier-variant {
- padding-left: 1rem;
- padding-right: 1rem;
- }
- .important-modifier-variant:hover {
- border-radius: 0.375rem !important;
- }
- @keyframes spin {
- to {
- transform: rotate(360deg);
- }
- }
- .foo {
- animation: 1s linear infinite spin;
- }
- @keyframes pulse {
- 50% {
- opacity: 0.5;
- }
- }
- .bar {
- animation: 2s cubic-bezier(0.4, 0, 0.6, 1) infinite pulse !important;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .basic-example {
- background-color: #3b82f6;
- border-radius: 0.375rem;
- padding: 0.5rem 1rem;
- }
- .class-order {
- padding: 1rem 0.25rem 1.75rem 0.75rem;
- }
- .with-additional-properties {
- text-align: right;
- font-weight: 500;
- }
- .variants {
- font-weight: 600;
- }
- .variants:hover {
- font-weight: 700;
- }
- .variants:focus {
- font-weight: 500;
- }
- @media (min-width: 1024px) {
- .variants {
- font-weight: 300;
- }
- }
- @media (min-width: 1280px) {
- .variants:focus {
- font-weight: 900;
- }
- }
- .only-variants:hover {
- font-weight: 700;
- }
- .only-variants:focus {
- font-weight: 500;
- }
- @media (min-width: 1024px) {
- .only-variants {
- font-weight: 300;
- }
- }
- @media (min-width: 1280px) {
- .only-variants:focus {
- font-weight: 900;
- }
- }
- .group:hover .apply-group-variant {
- text-align: center;
- }
- @media (min-width: 1024px) {
- .group:hover .apply-group-variant {
- text-align: left;
- }
- }
- :is(.dark .apply-dark-variant) {
- text-align: center;
- }
- :is(.dark .apply-dark-variant:hover) {
- text-align: right;
- }
- @media (min-width: 1024px) {
- :is(.dark .apply-dark-variant) {
- text-align: left;
- }
- }
- .apply-custom-utility,
- .apply-custom-utility:hover {
- custom: stuff;
- }
- @media (min-width: 1024px) {
- .apply-custom-utility {
- custom: stuff;
- }
- }
- @media (min-width: 1280px) {
- .apply-custom-utility:focus {
- custom: stuff;
- }
- }
- .multiple,
- .selectors {
- background-color: #3b82f6;
- border-radius: 0.375rem;
- padding: 0.5rem 1rem;
- }
- .multiple-variants:hover,
- .selectors-variants:hover {
- text-align: center;
- }
- .multiple-variants:active,
- .selectors-variants:active {
- text-align: right;
- }
- @media (min-width: 1024px) {
- .multiple-variants:focus,
- .selectors-variants:focus {
- text-align: left;
- }
- }
- .group:hover .multiple-group,
- .group:hover .selectors-group {
- text-align: center;
- }
- @media (min-width: 1024px) {
- .group:hover .multiple-group,
- .group:hover .selectors-group {
- text-align: left;
- }
- }
- .complex-utilities {
- --tw-ordinal: ordinal;
- --tw-numeric-spacing: tabular-nums;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
- --tw-shadow: 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;
- --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color),
- 0 4px 6px -4px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- .complex-utilities:hover {
- --tw-shadow: 0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;
- --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color),
- 0 8px 10px -6px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- .complex-utilities:focus {
- --tw-numeric-fraction: diagonal-fractions;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
- }
- .use-base-only-a {
- font-weight: 700;
- }
- .use-dependant-only-b {
- font-weight: 400;
- }
- .btn {
- border-radius: 0.25rem;
- padding: 0.5rem 1rem;
- font-weight: 700;
- }
- .btn-blue {
- color: #fff;
- background-color: #3b82f6;
- border-radius: 0.25rem;
- padding: 0.5rem 1rem;
- font-weight: 700;
- }
- .btn-blue:hover {
- background-color: #1d4ed8;
- }
- .recursive-apply-a {
- font-weight: 900;
- }
- @media (min-width: 640px) {
- .recursive-apply-a {
- font-weight: 100;
- }
- }
- .recursive-apply-b {
- font-weight: 900;
- }
- @media (min-width: 640px) {
- .recursive-apply-b {
- font-weight: 100;
- }
- }
- .recursive-apply-b {
- font-weight: 600;
- }
- @media (min-width: 768px) {
- .recursive-apply-b {
- font-weight: 200;
- }
- }
- .recursive-apply-c {
- font-weight: 900;
- }
- @media (min-width: 640px) {
- .recursive-apply-c {
- font-weight: 100;
- }
- }
- .recursive-apply-c {
- font-weight: 600;
- }
- @media (min-width: 768px) {
- .recursive-apply-c {
- font-weight: 200;
- }
- }
- .recursive-apply-c {
- font-weight: 700;
- }
- @media (min-width: 1024px) {
- .recursive-apply-c {
- font-weight: 300;
- }
- }
- .use-with-other-properties-base,
- .use-with-other-properties-component {
- color: green;
- font-weight: 700;
- }
- .add-sibling-properties {
- padding: 2rem 1rem;
- }
- .add-sibling-properties:hover {
- padding-left: 0.5rem;
- padding-right: 0.5rem;
- }
- @media (min-width: 1024px) {
- .add-sibling-properties {
- padding-left: 2.5rem;
- padding-right: 2.5rem;
- }
- }
- @media (min-width: 1280px) {
- .add-sibling-properties:focus {
- padding-left: 0.25rem;
- padding-right: 0.25rem;
- }
- }
- .add-sibling-properties {
- color: green;
- padding-top: 3px;
- font-weight: 700;
- }
- h1 {
- font-size: 1.5rem;
- line-height: 2rem;
- }
- @media (min-width: 640px) {
- h1 {
- font-size: 1.875rem;
- line-height: 2.25rem;
- }
- }
- @media (min-width: 1024px) {
- h1 {
- font-size: 1.5rem;
- line-height: 2rem;
- }
- }
+ }
+ @media (min-width: 640px) {
h2 {
font-size: 1.5rem;
line-height: 2rem;
}
- @media (min-width: 1024px) {
- h2 {
- font-size: 1.5rem;
- line-height: 2rem;
- }
- }
- @media (min-width: 640px) {
- h2 {
- font-size: 1.5rem;
- line-height: 2rem;
- }
- }
- .important-modifier {
- padding-left: 1rem;
- padding-right: 1rem;
- border-radius: 0.375rem !important;
- }
- .important-modifier-variant {
- padding-left: 1rem;
- padding-right: 1rem;
- }
- .important-modifier-variant:hover {
- border-radius: 0.375rem !important;
- }
- @keyframes spin {
- to {
- transform: rotate(360deg);
- }
- }
- .foo {
- animation: 1s linear infinite spin;
- }
- @keyframes pulse {
- 50% {
- opacity: 0.5;
- }
- }
- .bar {
- animation: 2s cubic-bezier(0.4, 0, 0.6, 1) infinite pulse !important;
- }
- `)
- })
- })
-
- test('@apply error with unknown utility', async () => {
- let config = {
- darkMode: 'class',
- content: [{ raw: sharedHtml }],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .foo {
- @apply a-utility-that-does-not-exist;
+ }
+ .important-modifier {
+ padding-left: 1rem;
+ padding-right: 1rem;
+ border-radius: 0.375rem !important;
+ }
+ .important-modifier-variant {
+ padding-left: 1rem;
+ padding-right: 1rem;
+ }
+ .important-modifier-variant:hover {
+ border-radius: 0.375rem !important;
+ }
+ @keyframes spin {
+ to {
+ transform: rotate(360deg);
}
}
- `
-
- await expect(run(input, config)).rejects.toThrowError('class does not exist')
- })
-
- test('@apply error with nested @screen', async () => {
- let config = {
- darkMode: 'class',
- content: [{ raw: sharedHtml }],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .foo {
- @screen md {
- @apply text-black;
- }
- }
- }
- `
-
- await expect(run(input, config)).rejects.toThrowError(
- '@apply is not supported within nested at-rules like @screen'
- )
- })
-
- test('@apply error with nested @anyatrulehere', async () => {
- let config = {
- darkMode: 'class',
- content: [{ raw: sharedHtml }],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .foo {
- @genie {
- @apply text-black;
- }
- }
- }
- `
-
- await expect(run(input, config)).rejects.toThrowError(
- '@apply is not supported within nested at-rules like @genie'
- )
- })
-
- test('@apply error when using .group utility', async () => {
- let config = {
- darkMode: 'class',
- content: [{ raw: '
' }],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .foo {
- @apply group;
- }
- }
- `
-
- await expect(run(input, config)).rejects.toThrowError(
- `@apply should not be used with the 'group' utility`
- )
- })
-
- test('@apply error when using a prefixed .group utility', async () => {
- let config = {
- prefix: 'tw-',
- darkMode: 'class',
- content: [{ raw: html`
` }],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .foo {
- @apply tw-group;
- }
- }
- `
-
- await expect(run(input, config)).rejects.toThrowError(
- `@apply should not be used with the 'tw-group' utility`
- )
- })
-
- test('@apply error when using .peer utility', async () => {
- let config = {
- darkMode: 'class',
- content: [{ raw: '
' }],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .foo {
- @apply peer;
- }
- }
- `
-
- await expect(run(input, config)).rejects.toThrowError(
- `@apply should not be used with the 'peer' utility`
- )
- })
-
- test('@apply error when using a prefixed .peer utility', async () => {
- let config = {
- prefix: 'tw-',
- darkMode: 'class',
- content: [{ raw: html`
` }],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .foo {
- @apply tw-peer;
- }
- }
- `
-
- await expect(run(input, config)).rejects.toThrowError(
- `@apply should not be used with the 'tw-peer' utility`
- )
- })
-
- test('@apply classes from outside a @layer', async () => {
- let config = {
- content: [{ raw: html`
` }],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
.foo {
- @apply font-bold;
+ animation: 1s linear infinite spin;
+ }
+ @keyframes pulse {
+ 50% {
+ opacity: 0.5;
+ }
}
-
.bar {
- @apply foo text-red-500 hover:text-green-500;
+ animation: 2s cubic-bezier(0.4, 0, 0.6, 1) infinite pulse !important;
}
+ `)
+ })
+})
+test('@apply error with unknown utility', async () => {
+ let config = {
+ darkMode: 'class',
+ content: [{ raw: sharedHtml }],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer components {
+ .foo {
+ @apply a-utility-that-does-not-exist;
+ }
+ }
+ `
+
+ await expect(run(input, config)).rejects.toThrowError('class does not exist')
+})
+
+test('@apply error with nested @screen', async () => {
+ let config = {
+ darkMode: 'class',
+ content: [{ raw: sharedHtml }],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer components {
+ .foo {
+ @screen md {
+ @apply text-black;
+ }
+ }
+ }
+ `
+
+ await expect(run(input, config)).rejects.toThrowError(
+ '@apply is not supported within nested at-rules like @screen'
+ )
+})
+
+test('@apply error with nested @anyatrulehere', async () => {
+ let config = {
+ darkMode: 'class',
+ content: [{ raw: sharedHtml }],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer components {
+ .foo {
+ @genie {
+ @apply text-black;
+ }
+ }
+ }
+ `
+
+ await expect(run(input, config)).rejects.toThrowError(
+ '@apply is not supported within nested at-rules like @genie'
+ )
+})
+
+test('@apply error when using .group utility', async () => {
+ let config = {
+ darkMode: 'class',
+ content: [{ raw: '
' }],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer components {
+ .foo {
+ @apply group;
+ }
+ }
+ `
+
+ await expect(run(input, config)).rejects.toThrowError(
+ `@apply should not be used with the 'group' utility`
+ )
+})
+
+test('@apply error when using a prefixed .group utility', async () => {
+ let config = {
+ prefix: 'tw-',
+ darkMode: 'class',
+ content: [{ raw: html`
` }],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer components {
+ .foo {
+ @apply tw-group;
+ }
+ }
+ `
+
+ await expect(run(input, config)).rejects.toThrowError(
+ `@apply should not be used with the 'tw-group' utility`
+ )
+})
+
+test('@apply error when using .peer utility', async () => {
+ let config = {
+ darkMode: 'class',
+ content: [{ raw: '
' }],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer components {
+ .foo {
+ @apply peer;
+ }
+ }
+ `
+
+ await expect(run(input, config)).rejects.toThrowError(
+ `@apply should not be used with the 'peer' utility`
+ )
+})
+
+test('@apply error when using a prefixed .peer utility', async () => {
+ let config = {
+ prefix: 'tw-',
+ darkMode: 'class',
+ content: [{ raw: html`
` }],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer components {
+ .foo {
+ @apply tw-peer;
+ }
+ }
+ `
+
+ await expect(run(input, config)).rejects.toThrowError(
+ `@apply should not be used with the 'tw-peer' utility`
+ )
+})
+
+test('@apply classes from outside a @layer', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ .foo {
+ @apply font-bold;
+ }
+
+ .bar {
+ @apply foo text-red-500 hover:text-green-500;
+ }
+
+ .baz {
+ @apply bar underline;
+ }
+
+ .keep-me-even-though-I-am-not-used-in-content {
+ color: green;
+ }
+ `
+
+ await run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .font-bold,
+ .foo {
+ font-weight: 700;
+ }
+ .bar {
+ --tw-text-opacity: 1;
+ color: rgb(239 68 68 / var(--tw-text-opacity));
+ font-weight: 700;
+ }
+ .bar:hover {
+ --tw-text-opacity: 1;
+ color: rgb(34 197 94 / var(--tw-text-opacity));
+ }
.baz {
- @apply bar underline;
+ --tw-text-opacity: 1;
+ color: rgb(239 68 68 / var(--tw-text-opacity));
+ font-weight: 700;
+ text-decoration-line: underline;
+ }
+ .baz:hover {
+ --tw-text-opacity: 1;
+ color: rgb(34 197 94 / var(--tw-text-opacity));
}
-
.keep-me-even-though-I-am-not-used-in-content {
color: green;
}
- `
-
- await run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .font-bold,
- .foo {
- font-weight: 700;
- }
- .bar {
- --tw-text-opacity: 1;
- color: rgb(239 68 68 / var(--tw-text-opacity));
- font-weight: 700;
- }
- .bar:hover {
- --tw-text-opacity: 1;
- color: rgb(34 197 94 / var(--tw-text-opacity));
- }
- .baz {
- --tw-text-opacity: 1;
- color: rgb(239 68 68 / var(--tw-text-opacity));
- font-weight: 700;
- text-decoration-line: underline;
- }
- .baz:hover {
- --tw-text-opacity: 1;
- color: rgb(34 197 94 / var(--tw-text-opacity));
- }
- .keep-me-even-though-I-am-not-used-in-content {
- color: green;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .font-bold,
- .foo {
- font-weight: 700;
- }
- .bar {
- color: #ef4444;
- font-weight: 700;
- }
- .bar:hover {
- color: #22c55e;
- }
- .baz {
- color: #ef4444;
- font-weight: 700;
- text-decoration-line: underline;
- }
- .baz:hover {
- color: #22c55e;
- }
- .keep-me-even-though-I-am-not-used-in-content {
- color: green;
- }
- `)
- })
+ `)
})
+})
- test('@applying classes from outside a @layer respects the source order', async () => {
- let config = {
- content: [{ raw: html`
` }],
+test('@applying classes from outside a @layer respects the source order', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ let input = css`
+ .baz {
+ @apply bar underline;
}
- let input = css`
+ @tailwind components;
+
+ .keep-me-even-though-I-am-not-used-in-content {
+ color: green;
+ }
+
+ @tailwind utilities;
+
+ .foo {
+ @apply font-bold;
+ }
+
+ .bar {
+ @apply no-underline;
+ }
+ `
+
+ await run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
.baz {
- @apply bar underline;
+ text-decoration-line: none;
}
-
- @tailwind components;
-
- .keep-me-even-though-I-am-not-used-in-content {
- color: green;
+ .container {
+ width: 100%;
}
-
- @tailwind utilities;
-
- .foo {
- @apply font-bold;
- }
-
- .bar {
- @apply no-underline;
- }
- `
-
- await run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .baz {
- text-decoration-line: none;
- }
+ @media (min-width: 640px) {
.container {
- width: 100%;
+ max-width: 640px;
}
- @media (min-width: 640px) {
- .container {
- max-width: 640px;
- }
+ }
+ @media (min-width: 768px) {
+ .container {
+ max-width: 768px;
}
- @media (min-width: 768px) {
- .container {
- max-width: 768px;
- }
+ }
+ @media (min-width: 1024px) {
+ .container {
+ max-width: 1024px;
}
- @media (min-width: 1024px) {
- .container {
- max-width: 1024px;
- }
+ }
+ @media (min-width: 1280px) {
+ .container {
+ max-width: 1280px;
}
- @media (min-width: 1280px) {
- .container {
- max-width: 1280px;
- }
+ }
+ @media (min-width: 1536px) {
+ .container {
+ max-width: 1536px;
}
- @media (min-width: 1536px) {
- .container {
- max-width: 1536px;
- }
- }
- .keep-me-even-though-I-am-not-used-in-content {
- color: green;
- }
- .font-bold,
- .foo {
- font-weight: 700;
- }
- .bar {
- text-decoration-line: none;
- }
- `)
- })
- })
-
- it('should remove duplicate properties when using apply with similar properties', () => {
- let config = {
- content: [{ raw: 'foo' }],
- }
-
- let input = css`
- @tailwind utilities;
-
+ }
+ .keep-me-even-though-I-am-not-used-in-content {
+ color: green;
+ }
+ .font-bold,
.foo {
- @apply absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 transform;
+ font-weight: 700;
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- --tw-translate-x: -50%;
- --tw-translate-y: -50%;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- position: absolute;
- top: 50%;
- left: 50%;
- }
- `)
- })
+ .bar {
+ text-decoration-line: none;
+ }
+ `)
})
+})
- it('should apply all the definitions of a class', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
+it('should remove duplicate properties when using apply with similar properties', () => {
+ let config = {
+ content: [{ raw: 'foo' }],
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ .foo {
+ @apply absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 transform;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ --tw-translate-x: -50%;
+ --tw-translate-y: -50%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ }
+ `)
+ })
+})
+
+it('should apply all the definitions of a class', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer utilities {
+ .aspect-w-1 {
+ position: relative;
+ }
+
+ .aspect-w-1 {
+ --tw-aspect-w: 1;
+ }
}
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer utilities {
- .aspect-w-1 {
- position: relative;
- }
-
- .aspect-w-1 {
- --tw-aspect-w: 1;
- }
+ @layer components {
+ .foo {
+ @apply aspect-w-1;
}
-
- @layer components {
- .foo {
- @apply aspect-w-1;
- }
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .foo {
- --tw-aspect-w: 1;
- position: relative;
- }
- `)
- })
- })
-
- it('should throw when trying to apply a direct circular dependency', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
}
+ `
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .foo:not(.text-red-500) {
- @apply text-red-500;
- }
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ --tw-aspect-w: 1;
+ position: relative;
}
- `
-
- return run(input, config).catch((err) => {
- expect(err.reason).toBe(
- 'You cannot `@apply` the `text-red-500` utility here because it creates a circular dependency.'
- )
- })
+ `)
})
+})
- it('should throw when trying to apply an indirect circular dependency', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- }
+it('should throw when trying to apply a direct circular dependency', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
- let input = css`
- @tailwind components;
- @tailwind utilities;
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
- @layer components {
- .a {
- @apply b;
- }
-
- .b {
- @apply c;
- }
-
- .c {
- @apply a;
- }
+ @layer components {
+ .foo:not(.text-red-500) {
+ @apply text-red-500;
}
- `
+ }
+ `
- return run(input, config).catch((err) => {
- expect(err.reason).toBe(
- 'You cannot `@apply` the `a` utility here because it creates a circular dependency.'
- )
- })
+ return run(input, config).catch((err) => {
+ expect(err.reason).toBe(
+ 'You cannot `@apply` the `text-red-500` utility here because it creates a circular dependency.'
+ )
})
+})
- it('should not throw when the selector is different (but contains the base partially)', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- }
+it('should throw when trying to apply an indirect circular dependency', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
- let input = css`
- @tailwind components;
- @tailwind utilities;
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
- .focus\:bg-gray-500 {
- @apply bg-gray-500;
- }
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .bg-gray-500,
- .focus\:bg-gray-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(107 114 128 / var(--tw-bg-opacity));
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .bg-gray-500,
- .focus\:bg-gray-500 {
- background-color: #6b7280;
- }
- `)
- })
- })
-
- it('should throw when trying to apply an indirect circular dependency with a modifier (1)', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .a {
- @apply b;
- }
-
- .b {
- @apply c;
- }
-
- .c {
- @apply hover:a;
- }
- }
- `
-
- return run(input, config).catch((err) => {
- expect(err.reason).toBe(
- 'You cannot `@apply` the `hover:a` utility here because it creates a circular dependency.'
- )
- })
- })
-
- it('should throw when trying to apply an indirect circular dependency with a modifier (2)', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .a {
- @apply b;
- }
-
- .b {
- @apply hover:c;
- }
-
- .c {
- @apply a;
- }
- }
- `
-
- return run(input, config).catch((err) => {
- expect(err.reason).toBe(
- 'You cannot `@apply` the `a` utility here because it creates a circular dependency.'
- )
- })
- })
-
- it('should not throw when the circular dependency is part of a different selector (1)', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
-
- @layer utilities {
- html.dark .a,
- .b {
- color: red;
- }
- }
-
- html.dark .c {
+ @layer components {
+ .a {
@apply b;
}
- `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- html.dark .c {
- color: red;
- }
- `)
- })
- })
+ .b {
+ @apply c;
+ }
- it('should not throw when the circular dependency is part of a different selector (2)', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
+ .c {
+ @apply a;
+ }
}
+ `
- let input = css`
- @tailwind utilities;
-
- @layer utilities {
- html.dark .a,
- .b {
- color: red;
- }
- }
-
- html.dark .c {
- @apply hover:b;
- }
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- html.dark .c:hover {
- color: red;
- }
- `)
- })
+ return run(input, config).catch((err) => {
+ expect(err.reason).toBe(
+ 'You cannot `@apply` the `a` utility here because it creates a circular dependency.'
+ )
})
+})
- it('should throw when the circular dependency is part of the same selector', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
+it('should not throw when the selector is different (but contains the base partially)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ .focus\:bg-gray-500 {
+ @apply bg-gray-500;
}
+ `
- let input = css`
- @tailwind utilities;
-
- @layer utilities {
- html.dark .a,
- html.dark .b {
- color: red;
- }
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-gray-500,
+ .focus\:bg-gray-500 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(107 114 128 / var(--tw-bg-opacity));
}
-
- html.dark .c {
- @apply hover:b;
- }
- `
-
- return run(input, config).catch((err) => {
- expect(err.reason).toBe(
- 'You cannot `@apply` the `hover:b` utility here because it creates a circular dependency.'
- )
- })
+ `)
})
+})
- it('rules with vendor prefixes are still separate when optimizing defaults rules', () => {
- let config = {
- experimental: { optimizeUniversalDefaults: true },
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
+it('should throw when trying to apply an indirect circular dependency with a modifier (1)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
- @layer components {
- input[type='range']::-moz-range-thumb {
- @apply border;
- }
+ @layer components {
+ .a {
+ @apply b;
}
- `
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- input[type='range']::-moz-range-thumb {
- border-width: 1px;
- }
- .border {
- border-width: 1px;
- }
- `)
- })
- })
+ .b {
+ @apply c;
+ }
- it('should be possible to apply user css', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
+ .c {
+ @apply hover:a;
+ }
}
+ `
- let input = css`
- @tailwind components;
- @tailwind utilities;
+ return run(input, config).catch((err) => {
+ expect(err.reason).toBe(
+ 'You cannot `@apply` the `hover:a` utility here because it creates a circular dependency.'
+ )
+ })
+})
- .foo {
+it('should throw when trying to apply an indirect circular dependency with a modifier (2)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer components {
+ .a {
+ @apply b;
+ }
+
+ .b {
+ @apply hover:c;
+ }
+
+ .c {
+ @apply a;
+ }
+ }
+ `
+
+ return run(input, config).catch((err) => {
+ expect(err.reason).toBe(
+ 'You cannot `@apply` the `a` utility here because it creates a circular dependency.'
+ )
+ })
+})
+
+it('should not throw when the circular dependency is part of a different selector (1)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ @layer utilities {
+ html.dark .a,
+ .b {
color: red;
}
+ }
+
+ html.dark .c {
+ @apply b;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ html.dark .c {
+ color: red;
+ }
+ `)
+ })
+})
+
+it('should not throw when the circular dependency is part of a different selector (2)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ @layer utilities {
+ html.dark .a,
+ .b {
+ color: red;
+ }
+ }
+
+ html.dark .c {
+ @apply hover:b;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ html.dark .c:hover {
+ color: red;
+ }
+ `)
+ })
+})
+
+it('should throw when the circular dependency is part of the same selector', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ @layer utilities {
+ html.dark .a,
+ html.dark .b {
+ color: red;
+ }
+ }
+
+ html.dark .c {
+ @apply hover:b;
+ }
+ `
+
+ return run(input, config).catch((err) => {
+ expect(err.reason).toBe(
+ 'You cannot `@apply` the `hover:b` utility here because it creates a circular dependency.'
+ )
+ })
+})
+
+it('rules with vendor prefixes are still separate when optimizing defaults rules', () => {
+ let config = {
+ experimental: { optimizeUniversalDefaults: true },
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer components {
+ input[type='range']::-moz-range-thumb {
+ @apply border;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ input[type='range']::-moz-range-thumb {
+ border-width: 1px;
+ }
+ .border {
+ border-width: 1px;
+ }
+ `)
+ })
+})
+
+it('should be possible to apply user css', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ .foo {
+ color: red;
+ }
+
+ .bar {
+ @apply foo;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .foo,
+ .bar {
+ color: red;
+ }
+ `)
+ })
+})
+
+it('should not be possible to apply user css with variants', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ .foo {
+ color: red;
+ }
+
+ .bar {
+ @apply hover:foo;
+ }
+ `
+
+ return run(input, config).catch((err) => {
+ expect(err.reason).toBe(
+ 'The `hover:foo` class does not exist. If `hover:foo` is a custom class, make sure it is defined within a `@layer` directive.'
+ )
+ })
+})
+
+it('should not apply unrelated siblings when applying something from within atrules', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer components {
+ .foo {
+ font-weight: bold;
+ @apply bar;
+ }
.bar {
- @apply foo;
+ color: green;
}
- `
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .foo,
+ @supports (a: b) {
.bar {
+ color: blue;
+ }
+
+ .something-unrelated {
color: red;
}
- `)
- })
- })
-
- it('should not be possible to apply user css with variants', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
+ }
}
+ `
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
.foo {
- color: red;
+ color: green;
+ font-weight: bold;
+ }
+ @supports (a: b) {
+ .foo {
+ color: #00f;
+ }
}
-
.bar {
- @apply hover:foo;
+ color: green;
}
- `
-
- return run(input, config).catch((err) => {
- expect(err.reason).toBe(
- 'The `hover:foo` class does not exist. If `hover:foo` is a custom class, make sure it is defined within a `@layer` directive.'
- )
- })
- })
-
- it('should not apply unrelated siblings when applying something from within atrules', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .foo {
- font-weight: bold;
- @apply bar;
- }
-
+ @supports (a: b) {
.bar {
- color: green;
+ color: #00f;
}
-
- @supports (a: b) {
- .bar {
- color: blue;
- }
-
- .something-unrelated {
- color: red;
- }
+ .something-unrelated {
+ color: red;
}
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- color: green;
- font-weight: bold;
- }
- @supports (a: b) {
- .foo {
- color: #00f;
- }
- }
- .bar {
- color: green;
- }
- @supports (a: b) {
- .bar {
- color: #00f;
- }
- .something-unrelated {
- color: red;
- }
- }
- `)
- })
+ `)
})
+})
- it('should be possible to apply user css without tailwind directives', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
+it('should be possible to apply user css without tailwind directives', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ .bop {
+ color: red;
}
+ .bar {
+ background-color: blue;
+ }
+ .foo {
+ @apply bar bop absolute;
+ }
+ `
- let input = css`
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
.bop {
color: red;
}
.bar {
- background-color: blue;
+ background-color: #00f;
}
.foo {
- @apply bar bop absolute;
+ color: red;
+ background-color: #00f;
+ position: absolute;
+ }
+ `)
+ })
+})
+
+it('should be possible to apply a class from another rule with multiple selectors (2 classes)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
+ .a,
+ .b {
+ @apply underline;
+ }
+
+ .c {
+ @apply b;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .c {
+ text-decoration-line: underline;
+ }
+ `)
+ })
+})
+
+it('should be possible to apply a class from another rule with multiple selectors (1 class, 1 tag)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ @layer utilities {
+ span,
+ .b {
+ @apply underline;
+ }
+
+ .c {
+ @apply b;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ span,
+ .b,
+ .c {
+ text-decoration-line: underline;
+ }
+ `)
+ })
+})
+
+it('should be possible to apply a class from another rule with multiple selectors (1 class, 1 id)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
+ #a,
+ .b {
+ @apply underline;
+ }
+
+ .c {
+ @apply b;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ #a,
+ .b,
+ .c {
+ text-decoration-line: underline;
+ }
+ `)
+ })
+})
+
+describe('multiple instances', () => {
+ it('should be possible to apply multiple "instances" of the same class', () => {
+ let config = {
+ content: [{ raw: html`` }],
+ plugins: [],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ .a {
+ @apply b;
+ }
+
+ .b {
+ @apply uppercase;
+ }
+
+ .b {
+ color: red;
}
`
return run(input, config).then((result) => {
return expect(result.css).toMatchFormattedCss(css`
- .bop {
- color: red;
- }
- .bar {
- background-color: #00f;
- }
- .foo {
- color: red;
- background-color: #00f;
- position: absolute;
- }
- `)
- })
- })
-
- it('should be possible to apply a class from another rule with multiple selectors (2 classes)', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- @layer utilities {
.a,
.b {
- @apply underline;
- }
-
- .c {
- @apply b;
- }
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .c {
- text-decoration-line: underline;
- }
- `)
- })
- })
-
- it('should be possible to apply a class from another rule with multiple selectors (1 class, 1 tag)', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
-
- @layer utilities {
- span,
- .b {
- @apply underline;
- }
-
- .c {
- @apply b;
- }
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- span,
- .b,
- .c {
- text-decoration-line: underline;
- }
- `)
- })
- })
-
- it('should be possible to apply a class from another rule with multiple selectors (1 class, 1 id)', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- @layer utilities {
- #a,
- .b {
- @apply underline;
- }
-
- .c {
- @apply b;
- }
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- #a,
- .b,
- .c {
- text-decoration-line: underline;
- }
- `)
- })
- })
-
- describe('multiple instances', () => {
- it('should be possible to apply multiple "instances" of the same class', () => {
- let config = {
- content: [{ raw: html`` }],
- plugins: [],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- .a {
- @apply b;
- }
-
- .b {
- @apply uppercase;
- }
-
- .b {
+ text-transform: uppercase;
color: red;
}
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .a,
- .b {
- text-transform: uppercase;
- color: red;
- }
- `)
- })
- })
-
- it('should be possible to apply a combination of multiple "instances" of the same class', () => {
- let config = {
- content: [{ raw: html`` }],
- plugins: [],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- .a {
- @apply b;
- }
-
- .b {
- @apply uppercase;
- color: red;
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .a,
- .b {
- text-transform: uppercase;
- color: red;
- }
- `)
- })
- })
-
- it('should generate the same output, even if it was used in a @layer', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind components;
-
- @layer components {
- .a {
- @apply b;
- }
-
- .b {
- @apply uppercase;
- color: red;
- }
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .a,
- .b {
- text-transform: uppercase;
- color: red;
- }
- `)
- })
- })
-
- it('should be possible to apply a combination of multiple "instances" of the same class (defined in a layer)', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind components;
-
- @layer components {
- .a {
- color: red;
- @apply b;
- color: blue;
- }
-
- .b {
- @apply text-green-500;
- text-decoration: underline;
- }
- }
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .a {
- color: red;
- --tw-text-opacity: 1;
- color: rgb(34 197 94 / var(--tw-text-opacity));
- color: #00f;
- text-decoration: underline;
- }
- .b {
- --tw-text-opacity: 1;
- color: rgb(34 197 94 / var(--tw-text-opacity));
- text-decoration: underline;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .a {
- color: red;
- color: #22c55e;
- color: #00f;
- text-decoration: underline;
- }
- .b {
- color: #22c55e;
- text-decoration: underline;
- }
- `)
- })
- })
-
- it('should properly maintain the order', () => {
- let config = {
- content: [{ raw: html`` }],
- plugins: [],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- h2 {
- @apply text-xl;
- @apply lg:text-3xl;
- @apply sm:text-2xl;
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- h2 {
- font-size: 1.25rem;
- line-height: 1.75rem;
- }
- @media (min-width: 1024px) {
- h2 {
- font-size: 1.875rem;
- line-height: 2.25rem;
- }
- }
- @media (min-width: 640px) {
- h2 {
- font-size: 1.5rem;
- line-height: 2rem;
- }
- }
- `)
- })
- })
- })
-
- it('apply can emit defaults in isolated environments without @tailwind directives', () => {
- let config = {
- experimental: { optimizeUniversalDefaults: true },
-
- content: [{ raw: html`
` }],
- }
-
- let input = css`
- .foo {
- @apply focus:rotate-90;
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .foo:focus {
- --tw-rotate: 90deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
`)
})
})
- it('apply does not emit defaults in isolated environments without optimizeUniversalDefaults', () => {
+ it('should be possible to apply a combination of multiple "instances" of the same class', () => {
let config = {
- experimental: { optimizeUniversalDefaults: false },
- content: [{ raw: html`
` }],
+ content: [{ raw: html`` }],
+ plugins: [],
corePlugins: { preflight: false },
}
let input = css`
- @tailwind base;
+ .a {
+ @apply b;
+ }
- .foo {
- @apply focus:rotate-90;
+ .b {
+ @apply uppercase;
+ color: red;
}
`
return run(input, config).then((result) => {
return expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .foo:focus {
- --tw-rotate: 90deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+ .a,
+ .b {
+ text-transform: uppercase;
+ color: red;
}
`)
})
})
- it('should work outside of layer', async () => {
+ it('should generate the same output, even if it was used in a @layer', () => {
let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- .input-text {
- @apply bg-white;
- background-color: red;
- }
- `
-
- let result
- result = await run(input, config)
-
- stable.expect(result.css).toMatchFormattedCss(css`
- .input-text {
- --tw-bg-opacity: 1;
- background-color: rgb(255 255 255 / var(--tw-bg-opacity));
- background-color: red;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .input-text {
- background-color: red;
- }
- `)
-
- result = await run(input, config)
-
- stable.expect(result.css).toMatchFormattedCss(css`
- .input-text {
- --tw-bg-opacity: 1;
- background-color: rgb(255 255 255 / var(--tw-bg-opacity));
- background-color: red;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .input-text {
- background-color: red;
- }
- `)
- })
-
- it('should work in layer', async () => {
- let config = {
- content: [{ raw: html`
` }],
+ content: [{ raw: html`
` }],
+ plugins: [],
corePlugins: { preflight: false },
}
let input = css`
@tailwind components;
+
@layer components {
- .input-text {
- @apply bg-white;
- background-color: red;
+ .a {
+ @apply b;
+ }
+
+ .b {
+ @apply uppercase;
+ color: red;
}
}
`
- await run(input, config)
- const result = await run(input, config)
-
- stable.expect(result.css).toMatchFormattedCss(css`
- .input-text {
- --tw-bg-opacity: 1;
- background-color: rgb(255 255 255 / var(--tw-bg-opacity));
- background-color: red;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .input-text {
- background-color: red;
- }
- `)
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .a,
+ .b {
+ text-transform: uppercase;
+ color: red;
+ }
+ `)
+ })
})
- it('apply partitioning works with media queries', async () => {
+ it('should be possible to apply a combination of multiple "instances" of the same class (defined in a layer)', () => {
let config = {
- content: [{ raw: html`` }],
+ content: [{ raw: html`
` }],
+ plugins: [],
corePlugins: { preflight: false },
}
let input = css`
- @tailwind base;
- @layer base {
- html,
- body {
- @apply text-green-600;
- font-size: 1rem;
+ @tailwind components;
+
+ @layer components {
+ .a {
+ color: red;
+ @apply b;
+ color: blue;
}
- @media print {
- html,
- body {
- @apply text-red-600;
- font-size: 2rem;
- }
+ .b {
+ @apply text-green-500;
+ text-decoration: underline;
}
}
`
- await run(input, config)
- const result = await run(input, config)
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .a {
+ color: #00f;
+ --tw-text-opacity: 1;
+ text-decoration: underline;
+ }
+ .b {
+ --tw-text-opacity: 1;
+ color: rgb(34 197 94 / var(--tw-text-opacity));
+ text-decoration: underline;
+ }
+ `)
+ })
+ })
- stable.expect(result.css).toMatchFormattedCss(css`
+ it('should properly maintain the order', () => {
+ let config = {
+ content: [{ raw: html`` }],
+ plugins: [],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ h2 {
+ @apply text-xl;
+ @apply lg:text-3xl;
+ @apply sm:text-2xl;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ h2 {
+ font-size: 1.25rem;
+ line-height: 1.75rem;
+ }
+ @media (min-width: 1024px) {
+ h2 {
+ font-size: 1.875rem;
+ line-height: 2.25rem;
+ }
+ }
+ @media (min-width: 640px) {
+ h2 {
+ font-size: 1.5rem;
+ line-height: 2rem;
+ }
+ }
+ `)
+ })
+ })
+})
+
+it('apply can emit defaults in isolated environments without @tailwind directives', () => {
+ let config = {
+ experimental: { optimizeUniversalDefaults: true },
+
+ content: [{ raw: html`
` }],
+ }
+
+ let input = css`
+ .foo {
+ @apply focus:rotate-90;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .foo:focus {
+ --tw-rotate: 90deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ `)
+ })
+})
+
+it('apply does not emit defaults in isolated environments without optimizeUniversalDefaults', () => {
+ let config = {
+ experimental: { optimizeUniversalDefaults: false },
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+
+ .foo {
+ @apply focus:rotate-90;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .foo:focus {
+ --tw-rotate: 90deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ `)
+ })
+})
+
+it('should work outside of layer', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ .input-text {
+ @apply bg-white;
+ background-color: red;
+ }
+ `
+
+ let result
+ result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .input-text {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
+ background-color: red;
+ }
+ `)
+
+ result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .input-text {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
+ background-color: red;
+ }
+ `)
+})
+
+it('should work in layer', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind components;
+ @layer components {
+ .input-text {
+ @apply bg-white;
+ background-color: red;
+ }
+ }
+ `
+
+ await run(input, config)
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .input-text {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
+ background-color: red;
+ }
+ `)
+})
+
+it('apply partitioning works with media queries', async () => {
+ let config = {
+ content: [{ raw: html`` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @layer base {
+ html,
+ body {
+ @apply text-green-600;
+ font-size: 1rem;
+ }
+
+ @media print {
+ html,
+ body {
+ @apply text-red-600;
+ font-size: 2rem;
+ }
+ }
+ }
+ `
+
+ await run(input, config)
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ html,
+ body {
+ --tw-text-opacity: 1;
+ color: rgb(22 163 74 / var(--tw-text-opacity));
+ font-size: 1rem;
+ }
+ @media print {
html,
body {
--tw-text-opacity: 1;
- color: rgb(22 163 74 / var(--tw-text-opacity));
- font-size: 1rem;
+ color: rgb(220 38 38 / var(--tw-text-opacity));
+ font-size: 2rem;
}
- @media print {
- html,
- body {
- --tw-text-opacity: 1;
- color: rgb(220 38 38 / var(--tw-text-opacity));
- font-size: 2rem;
- }
- }
- ${defaults}
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- html,
- body {
- color: #16a34a;
- font-size: 1rem;
- }
- @media print {
- html,
- body {
- color: #dc2626;
- font-size: 2rem;
- }
- }
- ${defaults}
- `)
- })
-
- it('should be possible to use apply in plugins', async () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [
- function ({ addComponents }) {
- addComponents({
- '.a': {
- color: 'red',
- },
- '.b': {
- '@apply a': {},
- color: 'blue',
- },
- })
- },
- ],
}
+ ${defaults}
+ `)
+})
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .a {
- color: red;
- }
- .b {
- color: red;
- color: #00f;
- }
- `)
- })
- })
+it('should be possible to use apply in plugins', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ plugins: [
+ function ({ addComponents }) {
+ addComponents({
+ '.a': {
+ color: 'red',
+ },
+ '.b': {
+ '@apply a': {},
+ color: 'blue',
+ },
+ })
+ },
+ ],
+ }
- it('should apply using the updated user CSS when the source has changed', async () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- }
-
- let inputBefore = css`
- .foo {
- color: green;
- }
-
- .bar {
- @apply foo;
- }
- `
-
- let inputAfter = css`
- .foo {
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .a {
color: red;
}
-
- .bar {
- @apply foo;
- }
- `
-
- let result = await run(inputBefore, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .foo,
- .bar {
- color: green;
- }
- `)
-
- result = await run(inputAfter, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .foo,
- .bar {
- color: red;
+ .b {
+ color: #00f;
}
`)
})
+})
- it('apply + layer utilities + selector variants (like group) + important selector', async () => {
- let config = {
- important: '#myselector',
- content: [{ raw: html`
` }],
- plugins: [],
+it('should apply using the updated user CSS when the source has changed', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let inputBefore = css`
+ .foo {
+ color: green;
}
- let input = css`
- @tailwind utilities;
- @layer utilities {
- .custom-utility {
- @apply font-normal group-hover:underline;
- }
- }
- `
+ .bar {
+ @apply foo;
+ }
+ `
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- #myselector :is(.custom-utility) {
- font-weight: 400;
- }
- #myselector :is(.group:hover .custom-utility) {
- text-decoration-line: underline;
- }
- `)
- })
-
- it('apply + user CSS + selector variants (like group) + important selector (1)', async () => {
- let config = {
- important: '#myselector',
- content: [{ raw: html`
` }],
- plugins: [],
+ let inputAfter = css`
+ .foo {
+ color: red;
}
- let input = css`
+ .bar {
+ @apply foo;
+ }
+ `
+
+ let result = await run(inputBefore, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .foo,
+ .bar {
+ color: green;
+ }
+ `)
+
+ result = await run(inputAfter, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .foo,
+ .bar {
+ color: red;
+ }
+ `)
+})
+
+it('apply + layer utilities + selector variants (like group) + important selector', async () => {
+ let config = {
+ important: '#myselector',
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
.custom-utility {
@apply font-normal group-hover:underline;
}
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .custom-utility {
- font-weight: 400;
- }
- .group:hover .custom-utility {
- text-decoration-line: underline;
- }
- `)
- })
-
- it('apply + user CSS + selector variants (like group) + important selector (2)', async () => {
- let config = {
- important: '#myselector',
- content: [{ raw: html`
` }],
- plugins: [],
}
+ `
- let input = css`
- #myselector .custom-utility {
- @apply font-normal group-hover:underline;
- }
- `
+ let result = await run(input, config)
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- #myselector .custom-utility {
- font-weight: 400;
- }
- .group:hover #myselector .custom-utility {
- text-decoration-line: underline;
- }
- `)
- })
-
- it('can apply user utilities that start with a dash', async () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
+ expect(result.css).toMatchFormattedCss(css`
+ #myselector .custom-utility {
+ font-weight: 400;
}
+ #myselector :is(.group:hover .custom-utility) {
+ text-decoration-line: underline;
+ }
+ `)
+})
- let input = css`
- @tailwind utilities;
- @layer utilities {
- .foo-1 {
- margin: 10px;
- }
- .-foo-1 {
- margin: -15px;
- }
- .new-class {
- @apply -foo-1;
- }
- }
- `
+it('apply + user CSS + selector variants (like group) + important selector (1)', async () => {
+ let config = {
+ important: '#myselector',
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
- let result = await run(input, config)
+ let input = css`
+ .custom-utility {
+ @apply font-normal group-hover:underline;
+ }
+ `
- expect(result.css).toMatchFormattedCss(css`
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .custom-utility {
+ font-weight: 400;
+ }
+ .group:hover .custom-utility {
+ text-decoration-line: underline;
+ }
+ `)
+})
+
+it('apply + user CSS + selector variants (like group) + important selector (2)', async () => {
+ let config = {
+ important: '#myselector',
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ #myselector .custom-utility {
+ @apply font-normal group-hover:underline;
+ }
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ #myselector .custom-utility {
+ font-weight: 400;
+ }
+ .group:hover #myselector .custom-utility {
+ text-decoration-line: underline;
+ }
+ `)
+})
+
+it('can apply user utilities that start with a dash', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
.foo-1 {
margin: 10px;
}
- .-foo-1,
- .new-class {
+ .-foo-1 {
margin: -15px;
}
- `)
- })
+ .new-class {
+ @apply -foo-1;
+ }
+ }
+ `
- it('can apply joined classes when using elements', async () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .foo-1 {
+ margin: 10px;
+ }
+ .-foo-1,
+ .new-class {
+ margin: -15px;
+ }
+ `)
+})
+
+it('can apply joined classes when using elements', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ .foo.bar {
+ color: red;
+ }
+ .bar.foo {
+ color: green;
+ }
+ header:nth-of-type(odd) {
+ @apply foo;
+ }
+ header::after {
+ @apply foo;
+ }
+ main {
+ @apply foo bar;
+ }
+ footer {
+ @apply bar;
+ }
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .foo.bar {
+ color: red;
+ }
+ .bar.foo {
+ color: green;
+ }
+ header:nth-of-type(odd).bar {
+ color: red;
+ }
+ header.bar:nth-of-type(odd),
+ header.bar:after,
+ main.bar,
+ main.foo,
+ footer.foo {
+ color: green;
+ }
+ `)
+})
+
+it('should not replace multiple instances of the same class in a single selector', async () => {
+ // NOTE: This test is non-normative and is not part of the spec of how `@apply` works per-se
+ // It describes how it currently works because the "correct" way produces a combinatorial explosion
+ // of selectors that is not easily doable
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ .foo + .foo {
+ color: blue;
+ }
+ .bar + .bar {
+ color: fuchsia;
+ }
+ header {
+ @apply foo;
+ }
+ main {
+ @apply foo bar;
+ }
+ footer {
+ @apply bar;
+ }
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .foo + .foo {
+ color: #00f;
+ }
+ .bar + .bar {
+ color: #f0f;
+ }
+ header + .foo,
+ main + .foo {
+ color: #00f;
+ }
+ main + .bar,
+ footer + .bar {
+ color: #f0f;
+ }
+ `)
+})
+
+it('should maintain the correct selector when applying other utilities', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ .foo:hover.bar .baz {
+ @apply bg-black;
+ color: red;
}
- let input = css`
- .foo.bar {
- color: red;
- }
- .bar.foo {
- color: green;
- }
- header:nth-of-type(odd) {
- @apply foo;
- }
- header::after {
- @apply foo;
- }
- main {
- @apply foo bar;
- }
- footer {
- @apply bar;
- }
- `
-
- let result = await run(input, config)
+ .foo:hover.bar > .baz {
+ @apply bg-black;
+ color: red;
+ }
+ `
+ return run(input, config).then((result) => {
expect(result.css).toMatchFormattedCss(css`
- .foo.bar {
- color: red;
- }
- .bar.foo {
- color: green;
- }
- header:nth-of-type(2n + 1).bar {
- color: red;
- }
- header.bar:nth-of-type(2n + 1) {
- color: green;
- }
- header.bar:after,
- main.bar,
- main.foo,
- footer.foo {
- color: red;
- color: green;
- }
- `)
- })
-
- it('should not replace multiple instances of the same class in a single selector', async () => {
- // NOTE: This test is non-normative and is not part of the spec of how `@apply` works per-se
- // It describes how it currently works because the "correct" way produces a combinatorial explosion
- // of selectors that is not easily doable
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- }
-
- let input = css`
- .foo + .foo {
- color: blue;
- }
- .bar + .bar {
- color: fuchsia;
- }
- header {
- @apply foo;
- }
- main {
- @apply foo bar;
- }
- footer {
- @apply bar;
- }
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .foo + .foo {
- color: #00f;
- }
- .bar + .bar {
- color: #f0f;
- }
- header + .foo,
- main + .foo {
- color: #00f;
- }
- main + .bar,
- footer + .bar {
- color: #f0f;
- }
- `)
- })
-
- it('should maintain the correct selector when applying other utilities', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
-
- .foo:hover.bar .baz {
- @apply bg-black;
- color: red;
- }
-
+ .foo:hover.bar .baz,
.foo:hover.bar > .baz {
- @apply bg-black;
+ --tw-bg-opacity: 1;
+ background-color: rgb(0 0 0 / var(--tw-bg-opacity));
color: red;
}
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .foo:hover.bar .baz,
- .foo:hover.bar > .baz {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- color: red;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .foo:hover.bar .baz,
- .foo:hover.bar > .baz {
- color: red;
- background-color: #000;
- }
- `)
- })
+ `)
})
+})
- it('pseudo elements inside apply are moved outside of :is() or :has()', () => {
- let config = {
- darkMode: 'class',
- content: [
- {
- raw: html`
`,
- },
- ],
+it('pseudo elements inside apply are moved outside of :is() or :has()', () => {
+ let config = {
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ }
+
+ let input = css`
+ .foo::before {
+ @apply dark:bg-black/100;
}
- let input = css`
- .foo::before {
- @apply dark:bg-black/100;
- }
-
- .bar::before {
- @apply rtl:dark:bg-black/100;
- }
-
- .baz::before {
- @apply rtl:dark:hover:bg-black/100;
- }
-
- .qux::file-selector-button {
- @apply rtl:dark:hover:bg-black/100;
- }
-
- .steve::before {
- @apply rtl:hover:dark:bg-black/100;
- }
-
- .bob::file-selector-button {
- @apply rtl:hover:dark:bg-black/100;
- }
-
- .foo::before {
- @apply [:has([dir="rtl"]_&)]:hover:bg-black/100;
- }
-
- .bar::file-selector-button {
- @apply [:has([dir="rtl"]_&)]:hover:bg-black/100;
- }
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- :is(.dark .foo)::before,
- :is([dir='rtl'] :is(.dark .bar))::before,
- :is([dir='rtl'] :is(.dark .baz:hover))::before {
- background-color: #000;
- }
- :is([dir='rtl'] :is(.dark .qux))::file-selector-button:hover {
- background-color: #000;
- }
- :is([dir='rtl'] :is(.dark .steve):hover):before {
- background-color: #000;
- }
- :is([dir='rtl'] :is(.dark .bob))::file-selector-button:hover {
- background-color: #000;
- }
- :has([dir='rtl'] .foo:hover):before {
- background-color: #000;
- }
- :has([dir='rtl'] .bar)::file-selector-button:hover {
- background-color: #000;
- }
- `)
- })
- })
-
- stable.test('::ng-deep, ::deep, ::v-deep pseudo elements are left alone', () => {
- let config = {
- darkMode: 'class',
- content: [
- {
- raw: html`
`,
- },
- ],
+ .bar::before {
+ @apply rtl:dark:bg-black/100;
}
- let input = css`
+ .baz::before {
+ @apply rtl:dark:hover:bg-black/100;
+ }
+
+ .qux::file-selector-button {
+ @apply rtl:dark:hover:bg-black/100;
+ }
+
+ .steve::before {
+ @apply rtl:hover:dark:bg-black/100;
+ }
+
+ .bob::file-selector-button {
+ @apply rtl:hover:dark:bg-black/100;
+ }
+
+ .foo::before {
+ @apply [:has([dir="rtl"]_&)]:hover:bg-black/100;
+ }
+
+ .bar::file-selector-button {
+ @apply [:has([dir="rtl"]_&)]:hover:bg-black/100;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ :is(.dark .foo):before,
+ :is([dir='rtl'] :is(.dark .bar)):before,
+ :is([dir='rtl'] :is(.dark .baz:hover)):before {
+ background-color: #000;
+ }
+ :-webkit-any([dir='rtl'] :-webkit-any(.dark .qux))::-webkit-file-upload-button:hover {
+ background-color: #000;
+ }
+ :is([dir='rtl'] :is(.dark .qux))::file-selector-button:hover {
+ background-color: #000;
+ }
+ :is([dir='rtl'] :is(.dark .steve):hover):before {
+ background-color: #000;
+ }
+ :-webkit-any([dir='rtl'] :-webkit-any(.dark .bob))::-webkit-file-upload-button:hover {
+ background-color: #000;
+ }
+ :is([dir='rtl'] :is(.dark .bob))::file-selector-button:hover {
+ background-color: #000;
+ }
+ :has([dir='rtl'] .foo:hover):before {
+ background-color: #000;
+ }
+ :has([dir='rtl'] .bar)::-webkit-file-upload-button:hover {
+ background-color: #000;
+ }
+ :has([dir='rtl'] .bar)::file-selector-button:hover {
+ background-color: #000;
+ }
+ `)
+ })
+})
+
+test('::ng-deep, ::deep, ::v-deep pseudo elements are left alone', () => {
+ let config = {
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ }
+
+ let input = css`
+ ::ng-deep .foo .bar {
+ @apply font-bold;
+ }
+ ::v-deep .foo .bar {
+ @apply font-bold;
+ }
+ ::deep .foo .bar {
+ @apply font-bold;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
::ng-deep .foo .bar {
- @apply font-bold;
+ font-weight: 700;
}
::v-deep .foo .bar {
- @apply font-bold;
+ font-weight: 700;
}
::deep .foo .bar {
- @apply font-bold;
+ font-weight: 700;
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ::ng-deep .foo .bar {
- font-weight: 700;
- }
- ::v-deep .foo .bar {
- font-weight: 700;
- }
- ::deep .foo .bar {
- font-weight: 700;
- }
- `)
- })
+ `)
})
-
- // 1. `::ng-deep` is deprecated
- // 2. `::deep` and `::v-deep` are non-standard
- // 3. They all use invalid selector syntax that Lightning CSS does not support
- // It may be enough for Oxide to not support it at all
- oxide.test.todo('::ng-deep, ::deep, ::v-deep pseudo elements are left alone')
+})
+
+test('should not break replacing important selector when the same as the parent selector (pseudo)', async () => {
+ let config = {
+ important: ':root',
+ content: [],
+ }
+
+ let input = css`
+ @tailwind components;
+ @layer components {
+ :root {
+ @apply flex;
+ }
+ }
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ :root {
+ display: flex;
+ }
+ `)
+})
+
+test('should not break replacing important selector when the same as the parent selector (class)', async () => {
+ let config = {
+ important: '.foo',
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind components;
+ @layer components {
+ .foo {
+ @apply flex;
+ }
+ }
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ display: flex;
+ }
+ `)
})
diff --git a/tests/arbitrary-properties.test.js b/tests/arbitrary-properties.test.js
index ce52c1bc7..17f0bcf1f 100644
--- a/tests/arbitrary-properties.test.js
+++ b/tests/arbitrary-properties.test.js
@@ -1,460 +1,456 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(() => {
- test('basic arbitrary properties', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
+test('basic arbitrary properties', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[paint-order\:markers\] {
- paint-order: markers;
- }
- `)
- })
- })
-
- test('different arbitrary properties are picked up separately', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[bar\:baz\] {
- bar: baz;
- }
- .\[foo\:bar\] {
- foo: bar;
- }
- `)
- })
- })
-
- test('arbitrary properties with modifiers', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- @media (prefers-color-scheme: dark) {
- @media (min-width: 1024px) {
- .dark\:lg\:hover\:\[paint-order\:markers\]:hover {
- paint-order: markers;
- }
- }
- }
- `)
- })
- })
-
- test('arbitrary properties are sorted after utilities', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .content-none {
- --tw-content: none;
- content: var(--tw-content);
- }
- .\[paint-order\:markers\] {
- paint-order: markers;
- }
- .hover\:pointer-events-none:hover {
- pointer-events: none;
- }
- `)
- })
- })
-
- test('using CSS variables', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[--my-var\:auto\] {
- --my-var: auto;
- }
- `)
- })
- })
-
- test('using underscores as spaces', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[--my-var\:2px_4px\] {
- --my-var: 2px 4px;
- }
- `)
- })
- })
-
- test('using the important modifier', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\!\[--my-var\:2px_4px\] {
- --my-var: 2px 4px !important;
- }
- `)
- })
- })
-
- test('colons are allowed in quotes', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[content\:\'foo\:bar\'\] {
- content: 'foo:bar';
- }
- `)
- })
- })
-
- test('colons are allowed in braces', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[background-image\:url\(http\:\/\/example\.com\/picture\.jpg\)\] {
- background-image: url('http://example.com/picture.jpg');
- }
- `)
- })
- })
-
- test('invalid class', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- `)
- })
- })
-
- test('invalid arbitrary property', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- `)
- })
- })
-
- test('invalid arbitrary property 2', () => {
- let config = {
- content: [
- {
- raw: html`[0:02]`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- `)
- })
- })
-
- test('using fractional spacing values inside theme() function', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[border\:_calc\(5vw_-_theme\(spacing\[2\.5\]\)\)_double_theme\(\'colors\.fuchsia\.700\'\)\] {
- border: calc(5vw - 0.625rem) double #a21caf;
- }
- `)
- })
- })
-
- test('using multiple arbitrary props having fractional spacing values', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[box-shadow\:_0_calc\(theme\(spacing\[0\.5\]\)_\*_-1\)_theme\(colors\.red\.400\)_inset\] {
- box-shadow: inset 0 -0.125rem #f87171;
- }
- .\[height\:_calc\(100vh_-_theme\(spacing\[2\.5\]\)\)\] {
- height: calc(100vh - 0.625rem);
- }
- `)
- })
- })
-
- it('should be possible to read theme values in arbitrary properties (without quotes)', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[--a\:theme\(colors\.blue\.500\)\] {
- --a: #3b82f6;
- }
- .\[color\:var\(--a\)\] {
- color: var(--a);
- }
- `)
- })
- })
-
- it('should be possible to read theme values in arbitrary properties (with quotes)', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[--a\:theme\(\'colors\.blue\.500\'\)\] {
- --a: #3b82f6;
- }
- .\[color\:var\(--a\)\] {
- color: var(--a);
- }
- `)
- })
- })
-
- it('should not generate invalid CSS', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
- `,
-
- // NOTE: In this case `stillworks:/example` being generated is not ideal
- // but it at least doesn't produce invalid CSS when run through prettier
- // So we can let it through since it is technically valid
- },
- ],
- corePlugins: { preflight: false },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .\[stillworks\:\/example\] {
- stillworks: /example;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[paint-order\:markers\] {
+ paint-order: markers;
+ }
+ `)
+ })
+})
+
+test('different arbitrary properties are picked up separately', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[bar\:baz\] {
+ bar: baz;
+ }
+ .\[foo\:bar\] {
+ foo: bar;
+ }
+ `)
+ })
+})
+
+test('arbitrary properties with modifiers', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ @media (prefers-color-scheme: dark) {
+ @media (min-width: 1024px) {
+ .dark\:lg\:hover\:\[paint-order\:markers\]:hover {
+ paint-order: markers;
+ }
+ }
+ }
+ `)
+ })
+})
+
+test('arbitrary properties are sorted after utilities', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .content-none {
+ --tw-content: none;
+ content: var(--tw-content);
+ }
+ .\[paint-order\:markers\] {
+ paint-order: markers;
+ }
+ .hover\:pointer-events-none:hover {
+ pointer-events: none;
+ }
+ `)
+ })
+})
+
+test('using CSS variables', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[--my-var\:auto\] {
+ --my-var: auto;
+ }
+ `)
+ })
+})
+
+test('using underscores as spaces', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[--my-var\:2px_4px\] {
+ --my-var: 2px 4px;
+ }
+ `)
+ })
+})
+
+test('using the important modifier', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\!\[--my-var\:2px_4px\] {
+ --my-var: 2px 4px !important;
+ }
+ `)
+ })
+})
+
+test('colons are allowed in quotes', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[content\:\'foo\:bar\'\] {
+ content: 'foo:bar';
+ }
+ `)
+ })
+})
+
+test('colons are allowed in braces', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[background-image\:url\(http\:\/\/example\.com\/picture\.jpg\)\] {
+ background-image: url('http://example.com/picture.jpg');
+ }
+ `)
+ })
+})
+
+test('invalid class', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ `)
+ })
+})
+
+test('invalid arbitrary property', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ `)
+ })
+})
+
+test('invalid arbitrary property 2', () => {
+ let config = {
+ content: [
+ {
+ raw: html`[0:02]`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ `)
+ })
+})
+
+test('using fractional spacing values inside theme() function', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[border\:_calc\(5vw_-_theme\(spacing\[2\.5\]\)\)_double_theme\(\'colors\.fuchsia\.700\'\)\] {
+ border: calc(5vw - 0.625rem) double #a21caf;
+ }
+ `)
+ })
+})
+
+test('using multiple arbitrary props having fractional spacing values', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[box-shadow\:_0_calc\(theme\(spacing\[0\.5\]\)_\*_-1\)_theme\(colors\.red\.400\)_inset\] {
+ box-shadow: inset 0 -0.125rem #f87171;
+ }
+ .\[height\:_calc\(100vh_-_theme\(spacing\[2\.5\]\)\)\] {
+ height: calc(100vh - 0.625rem);
+ }
+ `)
+ })
+})
+
+it('should be possible to read theme values in arbitrary properties (without quotes)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[--a\:theme\(colors\.blue\.500\)\] {
+ --a: #3b82f6;
+ }
+ .\[color\:var\(--a\)\] {
+ color: var(--a);
+ }
+ `)
+ })
+})
+
+it('should be possible to read theme values in arbitrary properties (with quotes)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[--a\:theme\(\'colors\.blue\.500\'\)\] {
+ --a: #3b82f6;
+ }
+ .\[color\:var\(--a\)\] {
+ color: var(--a);
+ }
+ `)
+ })
+})
+
+it('should not generate invalid CSS', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+ `,
+
+ // NOTE: In this case `stillworks:/example` being generated is not ideal
+ // but it at least doesn't produce invalid CSS when run through prettier
+ // So we can let it through since it is technically valid
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .\[stillworks\:\/example\] {
+ stillworks: /example;
+ }
+ `)
})
})
diff --git a/tests/arbitrary-values.oxide.test.css b/tests/arbitrary-values.oxide.test.css
deleted file mode 100644
index 97d838d7d..000000000
--- a/tests/arbitrary-values.oxide.test.css
+++ /dev/null
@@ -1,1070 +0,0 @@
-.inset-\[11px\] {
- inset: 11px;
-}
-.inset-\[var\(--value\)\] {
- inset: var(--value);
-}
-.inset-x-\[11px\] {
- left: 11px;
- right: 11px;
-}
-.inset-x-\[var\(--value\)\] {
- left: var(--value);
- right: var(--value);
-}
-.inset-y-\[11px\] {
- top: 11px;
- bottom: 11px;
-}
-.inset-y-\[var\(--value\)\] {
- top: var(--value);
- bottom: var(--value);
-}
-.bottom-\[11px\] {
- bottom: 11px;
-}
-.bottom-\[var\(--value\)\] {
- bottom: var(--value);
-}
-.left-\[11px\] {
- left: 11px;
-}
-.left-\[var\(--value\)\] {
- left: var(--value);
-}
-.right-\[11px\] {
- right: 11px;
-}
-.right-\[var\(--value\)\] {
- right: var(--value);
-}
-.top-\[11px\] {
- top: 11px;
-}
-.top-\[var\(--value\)\] {
- top: var(--value);
-}
-.z-\[123\] {
- z-index: 123;
-}
-.z-\[var\(--value\)\] {
- z-index: var(--value);
-}
-.order-\[4\] {
- order: 4;
-}
-.order-\[var\(--value\)\] {
- order: var(--value);
-}
-.col-\[7\] {
- grid-column: 7;
-}
-.col-start-\[7\] {
- grid-column-start: 7;
-}
-.col-end-\[7\] {
- grid-column-end: 7;
-}
-.row-\[7\] {
- grid-row: 7;
-}
-.row-start-\[7\] {
- grid-row-start: 7;
-}
-.row-end-\[7\] {
- grid-row-end: 7;
-}
-.m-\[7px\] {
- margin: 7px;
-}
-.mx-\[7px\] {
- margin-left: 7px;
- margin-right: 7px;
-}
-.my-\[7px\] {
- margin-top: 7px;
- margin-bottom: 7px;
-}
-.mb-\[7px\] {
- margin-bottom: 7px;
-}
-.ml-\[7px\] {
- margin-left: 7px;
-}
-.mr-\[7px\] {
- margin-right: 7px;
-}
-.mt-\[7px\] {
- margin-top: 7px;
-}
-.mt-\[clamp\(30px\,100px\)\] {
- margin-top: clamp(30px, 100px);
-}
-.aspect-\[16\/9\] {
- aspect-ratio: 16 / 9;
-}
-.aspect-\[var\(--aspect\)\] {
- aspect-ratio: var(--aspect);
-}
-.h-\[3\.23rem\] {
- height: 3.23rem;
-}
-.h-\[calc\(100\%\+1rem\)\] {
- height: calc(100% + 1rem);
-}
-.h-\[var\(--height\)\] {
- height: var(--height);
-}
-.max-h-\[3\.23rem\] {
- max-height: 3.23rem;
-}
-.max-h-\[calc\(100\%\+1rem\)\] {
- max-height: calc(100% + 1rem);
-}
-.max-h-\[var\(--height\)\] {
- max-height: var(--height);
-}
-.min-h-\[3\.23rem\] {
- min-height: 3.23rem;
-}
-.min-h-\[calc\(100\%\+1rem\)\] {
- min-height: calc(100% + 1rem);
-}
-.min-h-\[var\(--height\)\] {
- min-height: var(--height);
-}
-.w-\[\'\)\(\)\'\] {
- width: ')()';
-}
-.w-\[\'\]\[\]\'\] {
- width: '][]';
-}
-.w-\[\'\}\{\}\'\] {
- width: '}{}';
-}
-.w-\[\(\(\)\)\] {
- width: (());
-}
-.w-\[\(\)\] {
- width: ();
-}
-.w-\[0\] {
- width: 0;
-}
-.w-\[3\.23rem\] {
- width: 3.23rem;
-}
-.w-\[\[\[\]\]\] {
- width: [[]];
-}
-.w-\[\[\]\] {
- width: [];
-}
-.w-\[calc\(100\%\+1rem\)\] {
- width: calc(100% + 1rem);
-}
-.w-\[calc\(100\%\/3-1rem\*2\)\] {
- width: calc(33.3333% - 2rem);
-}
-.w-\[calc\(var\(--10-10px\,calc\(-20px-\(-30px--40px\)\)\)-50px\)\] {
- width: calc(var(--10-10px, calc(-20px - (-30px - -40px))) - 50px);
-}
-.w-\[var\(--width\)\] {
- width: var(--width);
-}
-.w-\[var\(--width\,calc\(100\%\+1rem\)\)\] {
- width: var(--width, calc(100% + 1rem));
-}
-.w-\[\{\{\}\}\] {
- width: {{}}
-}
-.w-\[\{\}\] {
- width: {}
-}
-.min-w-\[3\.23rem\] {
- min-width: 3.23rem;
-}
-.min-w-\[calc\(1-\(\(12-3\)\*0\.5\)\)\] {
- min-width: -3.5px;
-}
-.min-w-\[calc\(1-\(var\(--something\)\*0\.5\)\)\] {
- min-width: calc(1 - (var(--something) * 0.5));
-}
-.min-w-\[calc\(1-var\(--something\)\*0\.5\)\] {
- min-width: calc(1 - var(--something) * 0.5);
-}
-.min-w-\[calc\(100\%\+1rem\)\] {
- min-width: calc(100% + 1rem);
-}
-.min-w-\[var\(--width\)\] {
- min-width: var(--width);
-}
-.max-w-\[3\.23rem\] {
- max-width: 3.23rem;
-}
-.max-w-\[calc\(100\%\+1rem\)\] {
- max-width: calc(100% + 1rem);
-}
-.max-w-\[var\(--width\)\] {
- max-width: var(--width);
-}
-.flex-\[var\(--flex\)\] {
- flex: var(--flex);
-}
-.flex-shrink-\[var\(--shrink\)\],
-.shrink-\[var\(--shrink\)\] {
- flex-shrink: var(--shrink);
-}
-.flex-grow-\[var\(--grow\)\],
-.grow-\[var\(--grow\)\] {
- flex-grow: var(--grow);
-}
-.basis-\[var\(--basis\)\] {
- flex-basis: var(--basis);
-}
-.origin-\[50px_50px\] {
- transform-origin: 50px 50px;
-}
-.translate-x-\[12\%\] {
- --tw-translate-x: 12%;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.translate-x-\[var\(--value\)\] {
- --tw-translate-x: var(--value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.translate-y-\[12\%\] {
- --tw-translate-y: 12%;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.translate-y-\[var\(--value\)\] {
- --tw-translate-y: var(--value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.rotate-\[1\.5turn\] {
- --tw-rotate: 1.5turn;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.rotate-\[2\.3rad\] {
- --tw-rotate: 131.78deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.rotate-\[23deg\] {
- --tw-rotate: 23deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.rotate-\[401grad\] {
- --tw-rotate: 401grad;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.skew-x-\[3px\] {
- --tw-skew-x: 3px;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.skew-x-\[var\(--value\)\] {
- --tw-skew-x: var(--value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.skew-y-\[3px\] {
- --tw-skew-y: 3px;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.skew-y-\[var\(--value\)\] {
- --tw-skew-y: var(--value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.scale-\[0\.7\] {
- --tw-scale-x: 0.7;
- --tw-scale-y: 0.7;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.scale-\[var\(--value\)\] {
- --tw-scale-x: var(--value);
- --tw-scale-y: var(--value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.scale-x-\[0\.7\] {
- --tw-scale-x: 0.7;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.scale-x-\[var\(--value\)\] {
- --tw-scale-x: var(--value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.scale-y-\[0\.7\] {
- --tw-scale-y: 0.7;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.scale-y-\[var\(--value\)\] {
- --tw-scale-y: var(--value);
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.animate-\[pong_1s_cubic-bezier\(0\,0\,0\.2\,1\)_infinite\] {
- animation: 1s cubic-bezier(0, 0, 0.2, 1) infinite pong;
-}
-.animate-\[var\(--value\)\] {
- animation: var(--value);
-}
-.cursor-\[pointer\] {
- cursor: pointer;
-}
-.cursor-\[url\(\'\.\/path_to_hand\.cur\'\)_2_2\,pointer\] {
- cursor: url('./path_to_hand.cur') 2 2, pointer;
-}
-.cursor-\[url\(hand\.cur\)_2_2\,pointer\] {
- cursor: url('hand.cur') 2 2, pointer;
-}
-.cursor-\[var\(--value\)\] {
- cursor: var(--value);
-}
-.scroll-m-\[7px\] {
- scroll-margin: 7px;
-}
-.scroll-mx-\[7px\] {
- scroll-margin-left: 7px;
- scroll-margin-right: 7px;
-}
-.scroll-my-\[7px\] {
- scroll-margin-top: 7px;
- scroll-margin-bottom: 7px;
-}
-.scroll-mb-\[7px\] {
- scroll-margin-bottom: 7px;
-}
-.scroll-ml-\[7px\] {
- scroll-margin-left: 7px;
-}
-.scroll-mr-\[7px\] {
- scroll-margin-right: 7px;
-}
-.scroll-mt-\[7px\] {
- scroll-margin-top: 7px;
-}
-.scroll-mt-\[var\(--scroll-margin\)\] {
- scroll-margin-top: var(--scroll-margin);
-}
-.scroll-p-\[7px\] {
- scroll-padding: 7px;
-}
-.scroll-px-\[7px\] {
- scroll-padding-left: 7px;
- scroll-padding-right: 7px;
-}
-.scroll-py-\[7px\] {
- scroll-padding-top: 7px;
- scroll-padding-bottom: 7px;
-}
-.scroll-pb-\[7px\] {
- scroll-padding-bottom: 7px;
-}
-.scroll-pl-\[7px\] {
- scroll-padding-left: 7px;
-}
-.scroll-pr-\[7px\] {
- scroll-padding-right: 7px;
-}
-.scroll-pt-\[7px\] {
- scroll-padding-top: 7px;
-}
-.scroll-pt-\[var\(--scroll-padding\)\] {
- scroll-padding-top: var(--scroll-padding);
-}
-.list-\[\'\\1f44d\'\] {
- list-style-type: '👍';
-}
-.list-\[var\(--value\)\] {
- list-style-type: var(--value);
-}
-.list-image-\[url\(\.\/my-image\.png\)\] {
- list-style-image: url('./my-image.png');
-}
-.list-image-\[var\(--value\)\] {
- list-style-image: var(--value);
-}
-.columns-\[20\] {
- columns: 20;
-}
-.columns-\[var\(--columns\)\] {
- columns: var(--columns);
-}
-.auto-cols-\[minmax\(10px\,auto\)\] {
- grid-auto-columns: minmax(10px, auto);
-}
-.auto-rows-\[minmax\(10px\,auto\)\] {
- grid-auto-rows: minmax(10px, auto);
-}
-.grid-cols-\[200px\,repeat\(auto-fill\,minmax\(15\%\,100px\)\)\,300px\] {
- grid-template-columns: 200px repeat(auto-fill, minmax(15%, 100px)) 300px;
-}
-.grid-cols-\[\[linename\]\,1fr\,auto\] {
- grid-template-columns: [linename] 1fr auto;
-}
-.grid-rows-\[200px\,repeat\(auto-fill\,minmax\(15\%\,100px\)\)\,300px\] {
- grid-template-rows: 200px repeat(auto-fill, minmax(15%, 100px)) 300px;
-}
-.gap-\[20px\] {
- gap: 20px;
-}
-.gap-\[var\(--value\)\] {
- gap: var(--value);
-}
-.gap-x-\[20px\] {
- column-gap: 20px;
-}
-.gap-x-\[var\(--value\)\] {
- column-gap: var(--value);
-}
-.gap-y-\[20px\] {
- row-gap: 20px;
-}
-.gap-y-\[var\(--value\)\] {
- row-gap: var(--value);
-}
-.space-x-\[20cm\] > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-inline-start: calc(20cm * calc(1 - var(--tw-space-x-reverse)));
- margin-inline-end: calc(20cm * var(--tw-space-x-reverse));
-}
-.space-x-\[calc\(20\%-1cm\)\] > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-inline-start: calc(calc(20% - 1cm) * calc(1 - var(--tw-space-x-reverse)));
- margin-inline-end: calc(calc(20% - 1cm) * var(--tw-space-x-reverse));
-}
-.space-y-\[20cm\] > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(20cm * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(20cm * var(--tw-space-y-reverse));
-}
-.space-y-\[calc\(20\%-1cm\)\] > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(calc(20% - 1cm) * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(calc(20% - 1cm) * var(--tw-space-y-reverse));
-}
-.divide-x-\[20cm\] > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-x-reverse: 0;
- border-inline-end-width: calc(20cm * var(--tw-divide-x-reverse));
- border-inline-start-width: calc(20cm * calc(1 - var(--tw-divide-x-reverse)));
-}
-.divide-x-\[calc\(20\%-1cm\)\] > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-x-reverse: 0;
- border-inline-end-width: calc(calc(20% - 1cm) * var(--tw-divide-x-reverse));
- border-inline-start-width: calc(calc(20% - 1cm) * calc(1 - var(--tw-divide-x-reverse)));
-}
-.divide-y-\[20cm\] > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(20cm * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(20cm * var(--tw-divide-y-reverse));
-}
-.divide-y-\[calc\(20\%-1cm\)\] > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(calc(20% - 1cm) * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(calc(20% - 1cm) * var(--tw-divide-y-reverse));
-}
-.divide-\[black\] > :not([hidden]) ~ :not([hidden]) {
- border-color: #000;
-}
-.divide-\[var\(--value\)\] > :not([hidden]) ~ :not([hidden]) {
- border-color: var(--value);
-}
-.rounded-\[11px\] {
- border-radius: 11px;
-}
-.rounded-b-\[var\(--radius\)\] {
- border-bottom-right-radius: var(--radius);
- border-bottom-left-radius: var(--radius);
-}
-.rounded-l-\[var\(--radius\)\] {
- border-top-left-radius: var(--radius);
- border-bottom-left-radius: var(--radius);
-}
-.rounded-r-\[var\(--radius\)\] {
- border-top-right-radius: var(--radius);
- border-bottom-right-radius: var(--radius);
-}
-.rounded-t-\[var\(--radius\)\] {
- border-top-left-radius: var(--radius);
- border-top-right-radius: var(--radius);
-}
-.rounded-bl-\[var\(--radius\)\] {
- border-bottom-left-radius: var(--radius);
-}
-.rounded-br-\[var\(--radius\)\] {
- border-bottom-right-radius: var(--radius);
-}
-.rounded-tl-\[var\(--radius\)\] {
- border-top-left-radius: var(--radius);
-}
-.rounded-tr-\[var\(--radius\)\] {
- border-top-right-radius: var(--radius);
-}
-.border-\[2\.5px\] {
- border-width: 2.5px;
-}
-.border-\[length\:var\(--value\)\] {
- border-width: var(--value);
-}
-.border-b-\[2\.5px\] {
- border-bottom-width: 2.5px;
-}
-.border-b-\[length\:var\(--value\)\] {
- border-bottom-width: var(--value);
-}
-.border-l-\[2\.5px\] {
- border-left-width: 2.5px;
-}
-.border-l-\[length\:var\(--value\)\] {
- border-left-width: var(--value);
-}
-.border-r-\[2\.5px\] {
- border-right-width: 2.5px;
-}
-.border-r-\[length\:var\(--value\)\] {
- border-right-width: var(--value);
-}
-.border-t-\[2\.5px\] {
- border-top-width: 2.5px;
-}
-.border-t-\[length\:var\(--value\)\] {
- border-top-width: var(--value);
-}
-.border-\[\#f00\] {
- border-color: red;
-}
-.border-\[color\:var\(--value\)\] {
- border-color: var(--value);
-}
-.border-\[red_black\] {
- border-color: red #000;
-}
-.border-b-\[\#f00\] {
- border-bottom-color: red;
-}
-.border-b-\[color\:var\(--value\)\] {
- border-bottom-color: var(--value);
-}
-.border-l-\[\#f00\] {
- border-left-color: red;
-}
-.border-l-\[color\:var\(--value\)\] {
- border-left-color: var(--value);
-}
-.border-r-\[\#f00\] {
- border-right-color: red;
-}
-.border-r-\[color\:var\(--value\)\] {
- border-right-color: var(--value);
-}
-.border-t-\[\#f00\] {
- border-top-color: red;
-}
-.border-t-\[color\:var\(--value\)\] {
- border-top-color: var(--value);
-}
-.bg-\[\#0000ffcc\] {
- background-color: #00fc;
-}
-.bg-\[\#0f0\] {
- background-color: #0f0;
-}
-.bg-\[\#0f0_var\(--value\)\] {
- background-color: #0f0 var(--value);
-}
-.bg-\[\#ff0000\] {
- background-color: red;
-}
-.bg-\[color\:var\(--value1\)_var\(--value2\)\] {
- background-color: var(--value1) var(--value2);
-}
-.bg-\[hsl\(0\,100\%\,50\%\)\],
-.bg-\[hsl\(0rad\,100\%\,50\%\)\] {
- background-color: red;
-}
-.bg-\[hsla\(0\,100\%\,50\%\,0\.3\)\],
-.bg-\[hsla\(0turn\,100\%\,50\%\,0\.3\)\] {
- background-color: #ff00004d;
-}
-.bg-\[rgb\(123\,123\,123\)\] {
- background-color: #7b7b7b;
-}
-.bg-\[rgb\(123\,_456\,_123\)_black\] {
- background-color: #7bff7b black;
-}
-.bg-\[rgb\(123_456_789\)\] {
- background-color: #7bffff;
-}
-.bg-\[rgba\(123\,123\,123\,0\.5\)\] {
- background-color: #7b7b7b80;
-}
-.bg-\[var\(--value\)\,var\(--value\)\] {
- background-color: var(--value), var(--value);
-}
-.bg-\[var\(--value1\)_var\(--value2\)\] {
- background-color: var(--value1) var(--value2);
-}
-.bg-\[image\(\)\,var\(--value\)\] {
- background-image: image(), var(--value);
-}
-.bg-\[image\:var\(--value\)\,var\(--value\)\] {
- background-image: var(--value), var(--value);
-}
-.bg-\[linear-gradient\(\#eee\,\#fff\)\,conic-gradient\(red\,orange\,yellow\,green\,blue\)\] {
- background-image: linear-gradient(#eee, #fff), conic-gradient(red, orange, #ff0, green, #00f);
-}
-.bg-\[linear-gradient\(\#eee\,\#fff\)\] {
- background-image: linear-gradient(#eee, #fff);
-}
-.bg-\[linear-gradient\(to_left\,rgb\(var\(--green\)\)\,blue\)\] {
- background-image: linear-gradient(to left, rgb(var(--green)), blue);
-}
-.bg-\[url\(\'\/path-to-image\.png\'\)\] {
- background-image: url('/path-to-image.png');
-}
-.bg-\[url\:var\(--url\)\] {
- background-image: var(--url);
-}
-.from-\[\#da5b66\] {
- --tw-gradient-from: #da5b66 var(--tw-gradient-from-position);
- --tw-gradient-to: #da5b6600 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
-}
-.from-\[var\(--color\)\] {
- --tw-gradient-from: var(--color) var(--tw-gradient-from-position);
- --tw-gradient-to: #fff0 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
-}
-.via-\[\#da5b66\] {
- --tw-gradient-to: #da5b6600 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), #da5b66 var(--tw-gradient-via-position),
- var(--tw-gradient-to);
-}
-.via-\[var\(--color\)\] {
- --tw-gradient-to: #fff0 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--color) var(--tw-gradient-via-position),
- var(--tw-gradient-to);
-}
-.to-\[\#da5b66\] {
- --tw-gradient-to: #da5b66 var(--tw-gradient-to-position);
-}
-.to-\[var\(--color\)\] {
- --tw-gradient-to: var(--color) var(--tw-gradient-to-position);
-}
-.bg-\[length\:200px_100px\] {
- background-size: 200px 100px;
-}
-.bg-\[length\:var\(--value\)\] {
- background-size: var(--value);
-}
-.bg-\[center_top_1rem\] {
- background-position: 50% 1rem;
-}
-.bg-\[position\:200px_100px\] {
- background-position: 200px 100px;
-}
-.bg-\[position\:var\(--value\)\] {
- background-position: var(--value);
-}
-.fill-\[\#da5b66\] {
- fill: #da5b66;
-}
-.fill-\[url\(\#icon-gradient\)\] {
- fill: url('#icon-gradient');
-}
-.fill-\[var\(--value\)\] {
- fill: var(--value);
-}
-.stroke-\[\#da5b66\] {
- stroke: #da5b66;
-}
-.stroke-\[color\:var\(--value\)\] {
- stroke: var(--value);
-}
-.stroke-\[url\(\#icon-gradient\)\] {
- stroke: url('#icon-gradient');
-}
-.stroke-\[20px\] {
- stroke-width: 20px;
-}
-.stroke-\[length\:var\(--value\)\] {
- stroke-width: var(--value);
-}
-.object-\[50\%\,50\%\] {
- object-position: 50% 50%;
-}
-.object-\[top\,right\] {
- object-position: top right;
-}
-.object-\[var\(--position\)\] {
- object-position: var(--position);
-}
-.p-\[7px\] {
- padding: 7px;
-}
-.px-\[7px\] {
- padding-left: 7px;
- padding-right: 7px;
-}
-.py-\[7px\] {
- padding-top: 7px;
- padding-bottom: 7px;
-}
-.pb-\[7px\] {
- padding-bottom: 7px;
-}
-.pl-\[7px\] {
- padding-left: 7px;
-}
-.pr-\[7px\] {
- padding-right: 7px;
-}
-.pt-\[7px\] {
- padding-top: 7px;
-}
-.pt-\[clamp\(30px\,100px\)\] {
- padding-top: clamp(30px, 100px);
-}
-.indent-\[50\%\] {
- text-indent: 50%;
-}
-.indent-\[var\(--indent\)\] {
- text-indent: var(--indent);
-}
-.align-\[10em\] {
- vertical-align: 10em;
-}
-.font-\[\'Gill_Sans\'\] {
- font-family: Gill Sans;
-}
-.font-\[\'Some_Font\'\,\'Some_Other_Font\'\] {
- font-family: Some Font, Some Other Font;
-}
-.font-\[\'Some_Font\'\,sans-serif\] {
- font-family: Some Font, sans-serif;
-}
-.font-\[\'Some_Font\'\,var\(--other-font\)\] {
- font-family: 'Some Font', var(--other-font);
-}
-.font-\[Georgia\,serif\] {
- font-family: Georgia, serif;
-}
-.font-\[family-name\:var\(--value\)\] {
- font-family: var(--value);
-}
-.font-\[sans-serif\,serif\] {
- font-family: sans-serif, serif;
-}
-.font-\[serif\,var\(--value\)\] {
- font-family: serif, var(--value);
-}
-.text-\[0\] {
- font-size: 0;
-}
-.text-\[2\.23rem\] {
- font-size: 2.23rem;
-}
-.text-\[4cqw\] {
- font-size: 4cqw;
-}
-.text-\[length\:var\(--font-size\)\] {
- font-size: var(--font-size);
-}
-.text-\[min\(10vh\,100px\)\] {
- font-size: min(10vh, 100px);
-}
-.font-\[300\] {
- font-weight: 300;
-}
-.font-\[number\:lighter\] {
- font-weight: lighter;
-}
-.font-\[number\:var\(--value\)\] {
- font-weight: var(--value);
-}
-.leading-\[var\(--leading\)\] {
- line-height: var(--leading);
-}
-.tracking-\[var\(--tracking\)\] {
- letter-spacing: var(--tracking);
-}
-.text-\[black\] {
- color: #000;
-}
-.text-\[color\:var\(--color\)\] {
- color: var(--color);
-}
-.text-\[rgb\(123\,123\,123\)\],
-.text-\[rgb\(123\,_123\,_123\)\],
-.text-\[rgb\(123_123_123\)\] {
- color: #7b7b7b;
-}
-.decoration-\[black\] {
- text-decoration-color: #000;
-}
-.decoration-\[color\:var\(--color\)\] {
- text-decoration-color: var(--color);
-}
-.decoration-\[rgb\(123\,123\,123\)\],
-.decoration-\[rgb\(123\,_123\,_123\)\],
-.decoration-\[rgb\(123_123_123\)\] {
- text-decoration-color: #7b7b7b;
-}
-.decoration-\[length\:10px\] {
- text-decoration-thickness: 10px;
-}
-.underline-offset-\[10px\] {
- text-underline-offset: 10px;
-}
-.placeholder-\[var\(--placeholder\)\]::placeholder {
- color: var(--placeholder);
-}
-.caret-\[black\] {
- caret-color: #000;
-}
-.caret-\[var\(--value\)\] {
- caret-color: var(--value);
-}
-.accent-\[\#bada55\] {
- accent-color: #bada55;
-}
-.accent-\[var\(--accent-color\)\] {
- accent-color: var(--accent-color);
-}
-.opacity-\[0\.8\] {
- opacity: 0.8;
-}
-.opacity-\[var\(--opacity\)\] {
- opacity: var(--opacity);
-}
-.shadow-\[0px_1px_2px_black\] {
- --tw-shadow: 0px 1px 2px black;
- --tw-shadow-colored: 0px 1px 2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.shadow-\[shadow\:var\(--value\)\] {
- --tw-shadow: var(--value);
- --tw-shadow-colored: var(--value);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.outline-\[10px\] {
- outline-width: 10px;
-}
-.outline-\[length\:var\(--outline\)\] {
- outline-width: var(--outline);
-}
-.outline-offset-\[10px\] {
- outline-offset: 10px;
-}
-.outline-\[black\] {
- outline-color: #000;
-}
-.outline-\[color\:var\(--outline\)\] {
- outline-color: var(--outline);
-}
-.ring-\[10px\] {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(10px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.ring-\[length\:\(var\(--value\)\)\] {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc((var(--value)) + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.ring-\[\#76ad65\] {
- --tw-ring-color: #76ad65;
-}
-.ring-\[color\:var\(--value\)\] {
- --tw-ring-color: var(--value);
-}
-.ring-offset-\[19rem\] {
- --tw-ring-offset-width: 19rem;
-}
-.ring-offset-\[length\:var\(--value\)\] {
- --tw-ring-offset-width: var(--value);
-}
-.ring-offset-\[\#76ad65\] {
- --tw-ring-offset-color: #76ad65;
-}
-.ring-offset-\[\#ad672f\] {
- --tw-ring-offset-color: #ad672f;
-}
-.ring-offset-\[color\:var\(--value\)\] {
- --tw-ring-offset-color: var(--value);
-}
-.blur-\[15px\] {
- --tw-blur: blur(15px);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.brightness-\[300\%\] {
- --tw-brightness: brightness(300%);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.contrast-\[2\.4\] {
- --tw-contrast: contrast(2.4);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.drop-shadow-\[0px_1px_2px_black\] {
- --tw-drop-shadow: drop-shadow(0px 1px 2px black);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.grayscale-\[0\.55\] {
- --tw-grayscale: grayscale(0.55);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.hue-rotate-\[0\.8turn\] {
- --tw-hue-rotate: hue-rotate(0.8turn);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.invert-\[0\.75\] {
- --tw-invert: invert(0.75);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.saturate-\[180\%\] {
- --tw-saturate: saturate(180%);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.sepia-\[0\.2\] {
- --tw-sepia: sepia(0.2);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.backdrop-blur-\[11px\] {
- --tw-backdrop-blur: blur(11px);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-brightness-\[1\.23\] {
- --tw-backdrop-brightness: brightness(1.23);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-contrast-\[0\.87\] {
- --tw-backdrop-contrast: contrast(0.87);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-grayscale-\[0\.42\] {
- --tw-backdrop-grayscale: grayscale(0.42);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-hue-rotate-\[1\.57rad\] {
- --tw-backdrop-hue-rotate: hue-rotate(89.9544deg);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-invert-\[0\.66\] {
- --tw-backdrop-invert: invert(0.66);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-opacity-\[22\%\] {
- --tw-backdrop-opacity: opacity(22%);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-saturate-\[144\%\] {
- --tw-backdrop-saturate: saturate(144%);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-sepia-\[0\.38\] {
- --tw-backdrop-sepia: sepia(0.38);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.transition-\[opacity\,width\] {
- transition-property: opacity, width;
- transition-duration: 0.15s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-.delay-\[var\(--delay\)\] {
- transition-delay: var(--delay);
-}
-.duration-\[2s\] {
- transition-duration: 2s;
-}
-.duration-\[var\(--app-duration\)\] {
- transition-duration: var(--app-duration);
-}
-.will-change-\[top\,left\] {
- will-change: top, left;
-}
-.will-change-\[var\(--will-change\)\] {
- will-change: var(--will-change);
-}
-.content-\[\'\>\'\] {
- --tw-content: '>';
- content: var(--tw-content);
-}
-.content-\[\'hello\'\] {
- --tw-content: 'hello';
- content: var(--tw-content);
-}
-.content-\[attr\(content-before\)\] {
- --tw-content: attr(content-before);
- content: var(--tw-content);
-}
-@media (min-width: 1024px) {
- .lg\:grid-cols-\[200px\,repeat\(auto-fill\,minmax\(15\%\,100px\)\)\,300px\] {
- grid-template-columns: 200px repeat(auto-fill, minmax(15%, 100px)) 300px;
- }
-}
diff --git a/tests/arbitrary-values.test.css b/tests/arbitrary-values.test.css
index dee766991..e7da7b718 100644
--- a/tests/arbitrary-values.test.css
+++ b/tests/arbitrary-values.test.css
@@ -134,13 +134,13 @@
min-height: var(--height);
}
.w-\[\'\)\(\)\'\] {
- width: ')()';
+ width: ")()";
}
.w-\[\'\]\[\]\'\] {
- width: '][]';
+ width: "][]";
}
.w-\[\'\}\{\}\'\] {
- width: '}{}';
+ width: "}{}";
}
.w-\[\(\(\)\)\] {
width: (());
@@ -175,17 +175,11 @@
.w-\[var\(--width\,calc\(100\%\+1rem\)\)\] {
width: var(--width, calc(100% + 1rem));
}
-.w-\[\{\{\}\}\] {
- width: {{}}
-}
-.w-\[\{\}\] {
- width: {}
-}
.min-w-\[3\.23rem\] {
min-width: 3.23rem;
}
.min-w-\[calc\(1-\(\(12-3\)\*0\.5\)\)\] {
- min-width: calc(1 - ((12 - 3) * 0.5));
+ min-width: -3.5;
}
.min-w-\[calc\(1-\(var\(--something\)\*0\.5\)\)\] {
min-width: calc(1 - (var(--something) * 0.5));
@@ -345,10 +339,10 @@
cursor: pointer;
}
.cursor-\[url\(\'\.\/path_to_hand\.cur\'\)_2_2\,pointer\] {
- cursor: url('./path_to_hand.cur') 2 2, pointer;
+ cursor: url("./path_to_hand.cur") 2 2, pointer;
}
.cursor-\[url\(hand\.cur\)_2_2\,pointer\] {
- cursor: url('hand.cur') 2 2, pointer;
+ cursor: url("hand.cur") 2 2, pointer;
}
.cursor-\[var\(--value\)\] {
cursor: var(--value);
@@ -406,13 +400,13 @@
scroll-padding-top: var(--scroll-padding);
}
.list-\[\'\\1f44d\'\] {
- list-style-type: '👍';
+ list-style-type: "👍";
}
.list-\[var\(--value\)\] {
list-style-type: var(--value);
}
.list-image-\[url\(\.\/my-image\.png\)\] {
- list-style-image: url('./my-image.png');
+ list-style-image: url("./my-image.png");
}
.list-image-\[var\(--value\)\] {
list-style-image: var(--value);
@@ -681,8 +675,11 @@
.bg-\[linear-gradient\(to_left\,rgb\(var\(--green\)\)\,blue\)\] {
background-image: linear-gradient(to left, rgb(var(--green)), blue);
}
+.bg-\[repeating-conic-gradient\(\#F8F9FA_0\%_25\%\,_white_0\%_50\%\)\] {
+ background-image: repeating-conic-gradient(#f8f9fa 0% 25%, #fff 0% 50%);
+}
.bg-\[url\(\'\/path-to-image\.png\'\)\] {
- background-image: url('/path-to-image.png');
+ background-image: url("/path-to-image.png");
}
.bg-\[url\:var\(--url\)\] {
background-image: var(--url);
@@ -732,7 +729,7 @@
fill: #da5b66;
}
.fill-\[url\(\#icon-gradient\)\] {
- fill: url('#icon-gradient');
+ fill: url("#icon-gradient");
}
.fill-\[var\(--value\)\] {
fill: var(--value);
@@ -744,7 +741,7 @@
stroke: var(--value);
}
.stroke-\[url\(\#icon-gradient\)\] {
- stroke: url('#icon-gradient');
+ stroke: url("#icon-gradient");
}
.stroke-\[20px\] {
stroke-width: 20px;
@@ -806,7 +803,7 @@
font-family: Some Font, sans-serif;
}
.font-\[\'Some_Font\'\,var\(--other-font\)\] {
- font-family: 'Some Font', var(--other-font);
+ font-family: "Some Font", var(--other-font);
}
.font-\[Georgia\,serif\] {
font-family: Georgia, serif;
@@ -873,6 +870,7 @@
text-decoration-color: #000;
}
.decoration-\[color\:var\(--color\)\] {
+ -webkit-text-decoration-color: var(--color);
text-decoration-color: var(--color);
}
.decoration-\[rgb\(123\,123\,123\)\],
@@ -1023,54 +1021,90 @@
}
.backdrop-blur-\[11px\] {
--tw-backdrop-blur: blur(11px);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-brightness-\[1\.23\] {
--tw-backdrop-brightness: brightness(1.23);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-contrast-\[0\.87\] {
--tw-backdrop-contrast: contrast(0.87);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-grayscale-\[0\.42\] {
--tw-backdrop-grayscale: grayscale(0.42);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-hue-rotate-\[1\.57rad\] {
--tw-backdrop-hue-rotate: hue-rotate(89.9544deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-invert-\[0\.66\] {
--tw-backdrop-invert: invert(0.66);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-opacity-\[22\%\] {
--tw-backdrop-opacity: opacity(22%);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-saturate-\[144\%\] {
--tw-backdrop-saturate: saturate(144%);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-sepia-\[0\.38\] {
--tw-backdrop-sepia: sepia(0.38);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
@@ -1096,11 +1130,11 @@
will-change: var(--will-change);
}
.content-\[\'\>\'\] {
- --tw-content: '>';
+ --tw-content: ">";
content: var(--tw-content);
}
.content-\[\'hello\'\] {
- --tw-content: 'hello';
+ --tw-content: "hello";
content: var(--tw-content);
}
.content-\[attr\(content-before\)\] {
@@ -1112,3 +1146,4 @@
grid-template-columns: 200px repeat(auto-fill, minmax(15%, 100px)) 300px;
}
}
+
diff --git a/tests/arbitrary-values.test.html b/tests/arbitrary-values.test.html
index 7e65dbf45..440a98d26 100644
--- a/tests/arbitrary-values.test.html
+++ b/tests/arbitrary-values.test.html
@@ -206,6 +206,7 @@
+
@@ -367,10 +368,6 @@
-
-
-
-
diff --git a/tests/arbitrary-values.test.js b/tests/arbitrary-values.test.js
index 774b4db40..d0c827614 100644
--- a/tests/arbitrary-values.test.js
+++ b/tests/arbitrary-values.test.js
@@ -1,655 +1,683 @@
import fs from 'fs'
import path from 'path'
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(({ stable, oxide }) => {
- test('arbitrary values', () => {
- let config = {
- content: [path.resolve(__dirname, './arbitrary-values.test.html')],
- }
+test('arbitrary values', () => {
+ let config = {
+ content: [path.resolve(__dirname, './arbitrary-values.test.html')],
+ }
- return run('@tailwind utilities', config).then((result) => {
- stable
- .expect(result.css)
- .toMatchFormattedCss(
- fs.readFileSync(path.resolve(__dirname, './arbitrary-values.test.css'), 'utf8')
- )
- oxide
- .expect(result.css)
- .toMatchFormattedCss(
- fs.readFileSync(path.resolve(__dirname, './arbitrary-values.oxide.test.css'), 'utf8')
- )
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(
+ fs.readFileSync(path.resolve(__dirname, './arbitrary-values.test.css'), 'utf8')
+ )
})
+})
- oxide.test.todo(
- 'should only detect classes with arbitrary values that are properly terminated after the arbitrary value'
- )
- stable.test(
- 'should only detect classes with arbitrary values that are properly terminated after the arbitrary value',
- () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
+// TODO: Currently Lightning CSS will throw an error when trying to print the invalid CSS, whereas
+// before it generated invalid CSS without throwing an error.
+//
+// In perfect world, we would not generate anything, and potentially show a warning.
+test('arbitrary values that result in invalid CSS should not be generated', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ }
+
+ // NOTE: The version with braces are invalid and therefore produce nothing
+ return run('@tailwind utilities', config).then((result) => {
+ // Required because it tries to reformat the {}
+ // prettier-ignore
+ return expect(result.css).toMatchFormattedCss(css`
+ .w-full {
+ width: 100%;
}
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css``)
- })
- }
- )
-
- it('should be possible to differentiate between decoration utilities', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .decoration-\[\#ccc\] {
- text-decoration-color: #ccc;
- }
- .decoration-\[3px\] {
- text-decoration-thickness: 3px;
- }
- `)
- })
+ .\[--custom\:\{\}\] {
+ --custom: {}
+ }
+ `)
})
+})
- it('should support modifiers for arbitrary values that contain the separator', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- }
+test('should only detect classes with arbitrary values that are properly terminated after the arbitrary value', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ }
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .hover\:bg-\[url\(\'https\:\/\/github\.com\/tailwindlabs\.png\'\)\]:hover {
- background-image: url('https://github.com/tailwindlabs.png');
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css``)
})
+})
- it('should support arbitrary values for various background utilities', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
+it('should be possible to differentiate between decoration utilities', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ }
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .bg-\[\#ff0000\] {
- --tw-bg-opacity: 1;
- background-color: rgb(255 0 0 / var(--tw-bg-opacity));
- }
- .bg-\[color\:var\(--bg-color\)\] {
- background-color: var(--bg-color);
- }
- .bg-\[hsl\(var\(--bg-color\)\)\] {
- background-color: hsl(var(--bg-color));
- }
- .bg-\[rgb\(var\(--bg-color\)\)\] {
- background-color: rgb(var(--bg-color));
- }
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .bg-\[url\(\'\/image-1-0\.png\'\)\] {
- background-image: url('/image-1-0.png');
- }
- .bg-\[url\:var\(--image-url\)\] {
- background-image: var(--image-url);
- }
- .bg-gradient-to-r {
- background-image: linear-gradient(to right, var(--tw-gradient-stops));
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .bg-\[\#ff0000\] {
- background-color: red;
- }
- .bg-\[color\:var\(--bg-color\)\] {
- background-color: var(--bg-color);
- }
- .bg-\[hsl\(var\(--bg-color\)\)\] {
- background-color: hsl(var(--bg-color));
- }
- .bg-\[rgb\(var\(--bg-color\)\)\] {
- background-color: rgb(var(--bg-color));
- }
- .bg-red-500 {
- background-color: #ef4444;
- }
- .bg-\[url\(\'\/image-1-0\.png\'\)\] {
- background-image: url('/image-1-0.png');
- }
- .bg-\[url\:var\(--image-url\)\] {
- background-image: var(--image-url);
- }
- .bg-gradient-to-r {
- background-image: linear-gradient(to right, var(--tw-gradient-stops));
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .decoration-\[\#ccc\] {
+ text-decoration-color: #ccc;
+ }
+ .decoration-\[3px\] {
+ text-decoration-thickness: 3px;
+ }
+ `)
})
+})
- it('should not generate any css if an unknown typehint is used', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- }
+it('should support modifiers for arbitrary values that contain the separator', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ }
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css``)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .hover\:bg-\[url\(\'https\:\/\/github\.com\/tailwindlabs\.png\'\)\]:hover {
+ background-image: url('https://github.com/tailwindlabs.png');
+ }
+ `)
})
+})
- it('should handle unknown typehints', () => {
- let config = { content: [{ raw: html`
` }] }
+it('should support arbitrary values for various background utilities', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .w-\[length\:12px\] {
- width: 12px;
- }
- `)
- })
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-\[\#ff0000\] {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 0 0 / var(--tw-bg-opacity));
+ }
+ .bg-\[color\:var\(--bg-color\)\] {
+ background-color: var(--bg-color);
+ }
+ .bg-\[hsl\(var\(--bg-color\)\)\] {
+ background-color: hsl(var(--bg-color));
+ }
+ .bg-\[rgb\(var\(--bg-color\)\)\] {
+ background-color: rgb(var(--bg-color));
+ }
+ .bg-red-500 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(239 68 68 / var(--tw-bg-opacity));
+ }
+ .bg-\[url\(\'\/image-1-0\.png\'\)\] {
+ background-image: url('/image-1-0.png');
+ }
+ .bg-\[url\:var\(--image-url\)\] {
+ background-image: var(--image-url);
+ }
+ .bg-gradient-to-r {
+ background-image: linear-gradient(to right, var(--tw-gradient-stops));
+ }
+ `)
})
+})
- it('should convert _ to spaces', () => {
- // Using custom css function here, because otherwise with String.raw, we run
- // into an issue with `\2c ` escapes. If we use `\2c ` then JS complains
- // about strict mode. But `\\2c ` is not what it expected.
- function css(templates) {
- return templates.join('')
- }
+it('should not generate any css if an unknown typehint is used', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ }
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .col-\\[span_3_\\/_span_8\\] {
- grid-column: span 3 / span 8;
- }
- .row-\\[span_3_\\/_span_8\\] {
- grid-row: span 3 / span 8;
- }
- .m-\\[8px_4px\\] {
- margin: 8px 4px;
- }
- .flex-\\[1_1_100\\%\\] {
- flex: 100%;
- }
- .auto-cols-\\[minmax\\(0\\,_1fr\\)\\] {
- grid-auto-columns: minmax(0, 1fr);
- }
- .grid-cols-\\[200px_repeat\\(auto-fill\\,minmax\\(15\\%\\,100px\\)\\)_300px\\] {
- grid-template-columns: 200px repeat(auto-fill, minmax(15%, 100px)) 300px;
- }
- .grid-rows-\\[200px_repeat\\(auto-fill\\,minmax\\(15\\%\\,100px\\)\\)_300px\\] {
- grid-template-rows: 200px repeat(auto-fill, minmax(15%, 100px)) 300px;
- }
- .rounded-\\[0px_4px_4px_0px\\] {
- border-radius: 0 4px 4px 0;
- }
- .p-\\[8px_4px\\] {
- padding: 8px 4px;
- }
- .shadow-\\[0px_0px_4px_black\\] {
- --tw-shadow: 0px 0px 4px black;
- --tw-shadow-colored: 0px 0px 4px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- .drop-shadow-\\[0px_1px_3px_black\\] {
- --tw-drop-shadow: drop-shadow(0px 1px 3px black);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
- var(--tw-drop-shadow);
- }
- .content-\\[\\'__hello__world__\\'\\] {
- --tw-content: ' hello world ';
- content: var(--tw-content);
- }
- .content-\\[___abc____\\] {
- --tw-content: abc;
- content: var(--tw-content);
- }
- .content-\\[_hello_world_\\] {
- --tw-content: hello world;
- content: var(--tw-content);
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css``)
})
+})
- it('should not convert escaped underscores with spaces', () => {
- let config = {
- content: [{ raw: `
` }],
- corePlugins: { preflight: false },
- }
+it('should handle unknown typehints', () => {
+ let config = { content: [{ raw: html`
` }] }
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .content-\[\'snake\\_case\'\] {
- --tw-content: 'snake_case';
- content: var(--tw-content);
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .w-\[length\:12px\] {
+ width: 12px;
+ }
+ `)
})
+})
- it('should pick the fallback plugin when arbitrary values collide', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- }
+it('should convert _ to spaces', () => {
+ // Using custom css function here, because otherwise with String.raw, we run
+ // into an issue with `\2c ` escapes. If we use `\2c ` then JS complains
+ // about strict mode. But `\\2c ` is not what it expected.
+ function css(templates) {
+ return templates.join('')
+ }
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .bg-\[var\(--unknown\)\] {
- background-color: var(--unknown);
- }
- .bg-\[200px_100px\] {
- background-position: 200px 100px;
- }
- `)
- })
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .col-\\[span_3_\\/_span_8\\] {
+ grid-column: span 3 / span 8;
+ }
+ .row-\\[span_3_\\/_span_8\\] {
+ grid-row: span 3 / span 8;
+ }
+ .m-\\[8px_4px\\] {
+ margin: 8px 4px;
+ }
+ .flex-\\[1_1_100\\%\\] {
+ flex: 100%;
+ }
+ .auto-cols-\\[minmax\\(0\\,_1fr\\)\\] {
+ grid-auto-columns: minmax(0, 1fr);
+ }
+ .grid-cols-\\[200px_repeat\\(auto-fill\\,minmax\\(15\\%\\,100px\\)\\)_300px\\] {
+ grid-template-columns: 200px repeat(auto-fill, minmax(15%, 100px)) 300px;
+ }
+ .grid-rows-\\[200px_repeat\\(auto-fill\\,minmax\\(15\\%\\,100px\\)\\)_300px\\] {
+ grid-template-rows: 200px repeat(auto-fill, minmax(15%, 100px)) 300px;
+ }
+ .rounded-\\[0px_4px_4px_0px\\] {
+ border-radius: 0 4px 4px 0;
+ }
+ .p-\\[8px_4px\\] {
+ padding: 8px 4px;
+ }
+ .shadow-\\[0px_0px_4px_black\\] {
+ --tw-shadow: 0px 0px 4px black;
+ --tw-shadow-colored: 0px 0px 4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
+ var(--tw-shadow);
+ }
+ .drop-shadow-\\[0px_1px_3px_black\\] {
+ --tw-drop-shadow: drop-shadow(0px 1px 3px black);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
+ var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia)
+ var(--tw-drop-shadow);
+ }
+ .content-\\[\\'__hello__world__\\'\\] {
+ --tw-content: ' hello world ';
+ content: var(--tw-content);
+ }
+ .content-\\[___abc____\\] {
+ --tw-content: abc;
+ content: var(--tw-content);
+ }
+ .content-\\[_hello_world_\\] {
+ --tw-content: hello world;
+ content: var(--tw-content);
+ }
+ `)
})
+})
- it('should pick the fallback plugin when arbitrary values collide and can not be inferred', () => {
- let config = {
- content: [{ raw: html`
` }],
- }
+it('should not convert escaped underscores with spaces', () => {
+ let config = {
+ content: [{ raw: `
` }],
+ corePlugins: { preflight: false },
+ }
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .bg-\[var\(--tw-unknown\)\] {
- background-color: var(--tw-unknown);
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .content-\[\'snake\\_case\'\] {
+ --tw-content: 'snake_case';
+ content: var(--tw-content);
+ }
+ `)
})
+})
- it('should warn and not generate if arbitrary values are ambiguous (without fallback)', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities({ foo: (value) => ({ value }) }, { type: ['position'] })
- matchUtilities({ foo: (value) => ({ value }) }, { type: ['size'] })
- },
- ],
- }
+it('should pick the fallback plugin when arbitrary values collide', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ }
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css``)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .bg-\[var\(--unknown\)\] {
+ background-color: var(--unknown);
+ }
+ .bg-\[200px_100px\] {
+ background-position: 200px 100px;
+ }
+ `)
})
+})
- it('should support colons in URLs', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- }
+it('should pick the fallback plugin when arbitrary values collide and can not be inferred', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .bg-\[url\(\'https\:\/\/www\.spacejam\.com\/1996\/img\/bg_stars\.gif\'\)\] {
- background-image: url('https://www.spacejam.com/1996/img/bg_stars.gif');
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .bg-\[var\(--tw-unknown\)\] {
+ background-color: var(--tw-unknown);
+ }
+ `)
})
+})
- it('should support unescaped underscores in URLs', () => {
- let config = {
- content: [
- { raw: html`
` },
- ],
- }
+it('should warn and not generate if arbitrary values are ambiguous (without fallback)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities({ foo: (value) => ({ value }) }, { type: ['position'] })
+ matchUtilities({ foo: (value) => ({ value }) }, { type: ['size'] })
+ },
+ ],
+ }
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(`
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css``)
+ })
+})
+
+it('should support colons in URLs', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .bg-\[url\(\'https\:\/\/www\.spacejam\.com\/1996\/img\/bg_stars\.gif\'\)\] {
+ background-image: url('https://www.spacejam.com/1996/img/bg_stars.gif');
+ }
+ `)
+ })
+})
+
+it('should support unescaped underscores in URLs', () => {
+ let config = {
+ content: [
+ { raw: html`
` },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(`
.bg-\\[url\\(\\'brown_potato\\.jpg\\'\\)\\,_url\\(\\'red_tomato\\.png\\'\\)\\] {
background-image: url('brown_potato.jpg'), url('red_tomato.png');
}
`)
- })
- })
-
- it('should be possible to read theme values in arbitrary values (without quotes)', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- spacing: {
- 0.5: 'calc(.5 * .25rem)',
- 1: 'calc(1 * .25rem)',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .w-\[theme\(spacing\.1\)\] {
- width: 0.25rem;
- }
- .w-\[theme\(spacing\[0\.5\]\)\] {
- width: 0.125rem;
- }
- `)
- })
- })
-
- it('should be possible to read theme values in arbitrary values (with quotes)', () => {
- let config = {
- content: [
- { raw: html`
` },
- ],
- theme: {
- spacing: {
- 0.5: 'calc(.5 * .25rem)',
- 1: 'calc(1 * .25rem)',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .w-\[theme\(\'spacing\.1\'\)\] {
- width: 0.25rem;
- }
- .w-\[theme\(\'spacing\[0\.5\]\'\)\] {
- width: 0.125rem;
- }
- `)
- })
- })
-
- it('should be possible to read theme values in arbitrary values (with quotes) when inside calc or similar functions', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- theme: {
- spacing: {
- 0.5: 'calc(.5 * .25rem)',
- 1: 'calc(1 * .25rem)',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .w-\[calc\(100\%-theme\(\'spacing\.1\'\)\)\] {
- width: calc(100% - 0.25rem);
- }
- .w-\[calc\(100\%-theme\(\'spacing\[0\.5\]\'\)\)\] {
- width: calc(100% - 0.125rem);
- }
- `)
- })
- })
-
- it('should not output unparsable arbitrary CSS values', () => {
- let config = {
- content: [
- {
- raw: 'let classes = `w-[${sizes.width}]`',
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(``)
- })
- })
-
- // Issue: https://github.com/tailwindlabs/tailwindcss/issues/7997
- // `top_right_50%` was a valid percentage before introducing this change
- it('should correctly validate each part when checking for `percentage` data types', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-\[top_right_50\%\] {
- background-position: right 50% top;
- }
- `)
- })
- })
-
- it('should correctly validate background size', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-\[auto_auto\,cover\,_contain\,10px\,10px_10\%\] {
- background-size: auto, cover, contain, 10px, 10px 10%;
- }
- `)
- })
- })
-
- it('should correctly validate combination of percentage and length', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-\[50\%_10\%\] {
- background-position: 50% 10%;
- }
- .bg-\[50px_10\%\] {
- background-position: 50px 10%;
- }
- .bg-\[50px_10px\] {
- background-position: 50px 10px;
- }
- `)
- })
- })
-
- it('can explicitly specify type for percentage and length', () => {
- let config = {
- content: [
- { raw: html`
` },
- ],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-\[size\:50px_10\%\] {
- background-size: 50px 10%;
- }
- .bg-\[50px_10px\] {
- background-position: 50px 10px;
- }
- .bg-\[position\:50\%_10\%\] {
- background-position: 50% 10%;
- }
- `)
- })
- })
-
- it('can use CSS variables as arbitrary values without `var()`', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .w-\[--width-var\] {
- width: var(--width-var);
- }
- .bg-\[--color-var\,\#000\] {
- background-color: var(--color-var, #000);
- }
- .bg-\[--color-var\] {
- background-color: var(--color-var);
- }
- .bg-\[length\:--size-var\] {
- background-size: var(--size-var);
- }
- .text-\[length\:--size-var\,12px\] {
- font-size: var(--size-var, 12px);
- }
- `)
- })
- })
-
- it('can use CSS variables as arbitrary modifiers without `var()`', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-red-500\/\[--opacity\] {
- background-color: rgb(239 68 68 / var(--opacity));
- }
- .text-sm\/\[--line-height\] {
- font-size: 0.875rem;
- line-height: var(--line-height);
- }
- `)
- })
- })
-
- it('should support underscores in arbitrary modifiers', () => {
- let config = {
- content: [{ raw: html`
` }],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .text-lg\/\[calc\(50px_\*_2\)\] {
- font-size: 1.125rem;
- line-height: calc(50px * 2);
- }
- `)
- })
+ })
+})
+
+it('should be possible to read theme values in arbitrary values (without quotes)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ spacing: {
+ 0.5: 'calc(.5 * .25rem)',
+ 1: 'calc(1 * .25rem)',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .w-\[theme\(spacing\.1\)\] {
+ width: 0.25rem;
+ }
+ .w-\[theme\(spacing\[0\.5\]\)\] {
+ width: 0.125rem;
+ }
+ `)
+ })
+})
+
+it('should be possible to read theme values in arbitrary values (with quotes)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ spacing: {
+ 0.5: 'calc(.5 * .25rem)',
+ 1: 'calc(1 * .25rem)',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .w-\[theme\(\'spacing\.1\'\)\] {
+ width: 0.25rem;
+ }
+ .w-\[theme\(\'spacing\[0\.5\]\'\)\] {
+ width: 0.125rem;
+ }
+ `)
+ })
+})
+
+it('should be possible to read theme values in arbitrary values (with quotes) when inside calc or similar functions', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ theme: {
+ spacing: {
+ 0.5: 'calc(.5 * .25rem)',
+ 1: 'calc(1 * .25rem)',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .w-\[calc\(100\%-theme\(\'spacing\.1\'\)\)\] {
+ width: calc(100% - 0.25rem);
+ }
+ .w-\[calc\(100\%-theme\(\'spacing\[0\.5\]\'\)\)\] {
+ width: calc(100% - 0.125rem);
+ }
+ `)
+ })
+})
+
+it('should not output unparsable arbitrary CSS values', () => {
+ let config = {
+ content: [
+ {
+ raw: 'let classes = `w-[${sizes.width}]`',
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(``)
+ })
+})
+
+// Issue: https://github.com/tailwindlabs/tailwindcss/issues/7997
+// `top_right_50%` was a valid percentage before introducing this change
+it('should correctly validate each part when checking for `percentage` data types', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-\[top_right_50\%\] {
+ background-position: right 50% top;
+ }
+ `)
+ })
+})
+
+it('should correctly validate background size', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-\[auto_auto\,cover\,_contain\,10px\,10px_10\%\] {
+ background-size: auto, cover, contain, 10px, 10px 10%;
+ }
+ `)
+ })
+})
+
+it('should correctly validate combination of percentage and length', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-\[50\%_10\%\] {
+ background-position: 50% 10%;
+ }
+ .bg-\[50px_10\%\] {
+ background-position: 50px 10%;
+ }
+ .bg-\[50px_10px\] {
+ background-position: 50px 10px;
+ }
+ `)
+ })
+})
+
+it('can explicitly specify type for percentage and length', () => {
+ let config = {
+ content: [
+ { raw: html`
` },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-\[size\:50px_10\%\] {
+ background-size: 50px 10%;
+ }
+ .bg-\[50px_10px\] {
+ background-position: 50px 10px;
+ }
+ .bg-\[position\:50\%_10\%\] {
+ background-position: 50% 10%;
+ }
+ `)
+ })
+})
+
+it('can use CSS variables as arbitrary values without `var()`', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .w-\[--width-var\] {
+ width: var(--width-var);
+ }
+ .bg-\[--color-var\,\#000\] {
+ background-color: var(--color-var, #000);
+ }
+ .bg-\[--color-var\] {
+ background-color: var(--color-var);
+ }
+ .bg-\[length\:--size-var\] {
+ background-size: var(--size-var);
+ }
+ .text-\[length\:--size-var\,12px\] {
+ font-size: var(--size-var, 12px);
+ }
+ `)
+ })
+})
+
+it('can use CSS variables as arbitrary modifiers without `var()`', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-red-500\/\[--opacity\] {
+ background-color: rgb(239 68 68 / var(--opacity));
+ }
+ .text-sm\/\[--line-height\] {
+ font-size: 0.875rem;
+ line-height: var(--line-height);
+ }
+ `)
+ })
+})
+
+it('should support underscores in arbitrary modifiers', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .text-lg\/\[calc\(50px_\*_2\)\] {
+ font-size: 1.125rem;
+ line-height: 100px;
+ }
+ `)
+ })
+})
+
+it('should support slashes in arbitrary modifiers', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .text-lg\/\[calc\(50px\/1rem\)\] {
+ font-size: 1.125rem;
+ line-height: calc(50px / 1rem);
+ }
+ `)
+ })
+})
+
+it('should not insert spaces around operators inside `env()`', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .grid-cols-\[calc\(env\(safe-area-inset-bottom\)\+1px\)\] {
+ grid-template-columns: calc(env(safe-area-inset-bottom) + 1px);
+ }
+ `)
+ })
+})
+
+it('should not insert spaces around `-` in arbitrary values that use `max-content`', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .grid-cols-\[repeat\(3\,_minmax\(0\,_max-content\)\)\] {
+ grid-template-columns: repeat(3, minmax(0, max-content));
+ }
+ `)
})
})
diff --git a/tests/arbitrary-variants.test.js b/tests/arbitrary-variants.test.js
index b210bdc77..ed8e9388c 100644
--- a/tests/arbitrary-variants.test.js
+++ b/tests/arbitrary-variants.test.js
@@ -1,377 +1,373 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
+import { flagEnabled } from '../src/featureFlags'
-crosscheck(({ stable, oxide }) => {
- test('basic arbitrary variants', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
+test('basic arbitrary variants', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[\&\>\*\]\:underline > * {
- text-decoration-line: underline;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[\&\>\*\]\:underline > * {
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- test('spaces in selector (using _)', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
+test('spaces in selector (using _)', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .a.b .\[\.a\.b_\&\]\:underline {
- text-decoration-line: underline;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .a.b .\[\.a\.b_\&\]\:underline {
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- test('arbitrary variants with modifiers', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
+test('arbitrary variants with modifiers', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- @media (prefers-color-scheme: dark) {
- @media (min-width: 1024px) {
- .dark\:lg\:hover\:\[\&\>\*\]\:underline > :hover {
- text-decoration-line: underline;
- }
- }
- }
- `)
- })
- })
-
- test('variants without & or an at-rule are ignored', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- `)
- })
- })
-
- test('arbitrary variants are sorted after other variants', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .underline {
- text-decoration-line: underline;
- }
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ @media (prefers-color-scheme: dark) {
@media (min-width: 1024px) {
- .lg\:underline {
+ .dark\:lg\:hover\:\[\&\>\*\]\:underline > :hover {
text-decoration-line: underline;
}
}
- .\[\&\>\*\]\:underline > * {
+ }
+ `)
+ })
+})
+
+test('variants without & or an at-rule are ignored', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ `)
+ })
+})
+
+test('arbitrary variants are sorted after other variants', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .underline {
+ text-decoration-line: underline;
+ }
+ @media (min-width: 1024px) {
+ .lg\:underline {
text-decoration-line: underline;
}
- `)
- })
+ }
+ .\[\&\>\*\]\:underline > * {
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- test('using the important modifier', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
+test('using the important modifier', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[\&\>\*\]\:\!underline > * {
- text-decoration-line: underline !important;
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[\&\>\*\]\:\!underline > * {
+ text-decoration-line: underline !important;
+ }
+ `)
+ })
+})
+
+test('at-rules', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ @supports (what: ever) {
+ .\[\@supports\(what\:ever\)\]\:underline {
+ text-decoration-line: underline;
}
- `)
- })
+ }
+ `)
})
+})
- test('at-rules', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
+test('nested at-rules', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- @supports (what: ever) {
- .\[\@supports\(what\:ever\)\]\:underline {
- text-decoration-line: underline;
- }
- }
- `)
- })
- })
-
- test('nested at-rules', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- @media screen {
- @media (hover: hover) {
- .\[\@media_screen\{\@media\(hover\:hover\)\}\]\:underline {
- text-decoration-line: underline;
- }
- }
- }
- `)
- })
- })
-
- test('at-rules with selector modifications', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ @media screen {
@media (hover: hover) {
- .\[\@media\(hover\:hover\)\{\&\:hover\}\]\:underline:hover {
+ .\[\@media_screen\{\@media\(hover\:hover\)\}\]\:underline {
text-decoration-line: underline;
}
}
- `)
- })
+ }
+ `)
})
+})
- test('nested at-rules with selector modifications', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
+test('at-rules with selector modifications', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- @media screen {
- @media (hover: hover) {
- .\[\@media_screen\{\@media\(hover\:hover\)\{\&\:hover\}\}\]\:underline:hover {
- text-decoration-line: underline;
- }
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ @media (hover: hover) {
+ .\[\@media\(hover\:hover\)\{\&\:hover\}\]\:underline:hover {
+ text-decoration-line: underline;
+ }
+ }
+ `)
+ })
+})
+
+test('nested at-rules with selector modifications', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ @media screen {
+ @media (hover: hover) {
+ .\[\@media_screen\{\@media\(hover\:hover\)\{\&\:hover\}\}\]\:underline:hover {
+ text-decoration-line: underline;
}
}
- `)
- })
+ }
+ `)
})
+})
- test('attribute selectors', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
+test('attribute selectors', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[\&\[data-open\]\]\:underline[data-open] {
- text-decoration-line: underline;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[\&\[data-open\]\]\:underline[data-open] {
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- test('multiple attribute selectors', () => {
- let config = {
- content: [
- { raw: html`
` },
- ],
- corePlugins: { preflight: false },
- }
+test('multiple attribute selectors', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[\&\[data-foo\]\[data-bar\]\:not\(\[data-baz\]\)\]\:underline[data-foo][data-bar]:not([data-baz]) {
- text-decoration-line: underline;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[\&\[data-foo\]\[data-bar\]\:not\(\[data-baz\]\)\]\:underline[data-foo][data-bar]:not([data-baz]) {
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- oxide.test.todo('multiple attribute selectors with custom separator (1)')
- stable.test('multiple attribute selectors with custom separator (1)', () => {
- let config = {
- separator: '__',
- content: [
- { raw: html`
` },
- ],
- corePlugins: { preflight: false },
- }
+test('multiple attribute selectors with custom separator (1)', () => {
+ let config = {
+ separator: '__',
+ content: [
+ { raw: html`
` },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[\&\[data-foo\]\[data-bar\]\:not\(\[data-baz\]\)\]__underline[data-foo][data-bar]:not([data-baz]) {
- text-decoration-line: underline;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[\&\[data-foo\]\[data-bar\]\:not\(\[data-baz\]\)\]__underline[data-foo][data-bar]:not([data-baz]) {
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- oxide.test.todo('multiple attribute selectors with custom separator (2)')
- stable.test('multiple attribute selectors with custom separator (2)', () => {
- let config = {
- separator: '_@',
- content: [
- { raw: html`
` },
- ],
- corePlugins: { preflight: false },
- }
+test('multiple attribute selectors with custom separator (2)', () => {
+ let config = {
+ separator: '_@',
+ content: [
+ { raw: html`
` },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[\&\[data-foo\]\[data-bar\]\:not\(\[data-baz\]\)\]_\@underline[data-foo][data-bar]:not([data-baz]) {
- text-decoration-line: underline;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[\&\[data-foo\]\[data-bar\]\:not\(\[data-baz\]\)\]_\@underline[data-foo][data-bar]:not([data-baz]) {
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- test('with @apply', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
+test('with @apply', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = `
+ let input = `
@tailwind base;
@tailwind components;
@tailwind utilities;
@@ -381,138 +377,138 @@ crosscheck(({ stable, oxide }) => {
}
`
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- @media screen {
- @media (hover: hover) {
- .foo:hover {
- text-decoration-line: underline;
- }
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ @media screen {
+ @media (hover: hover) {
+ .foo:hover {
+ text-decoration-line: underline;
}
}
- `)
- })
+ }
+ `)
})
+})
- test('keeps escaped underscores', () => {
- let config = {
- content: [
- {
- raw: '
',
- },
- ],
- corePlugins: { preflight: false },
- }
+test('keeps escaped underscores', () => {
+ let config = {
+ content: [
+ {
+ raw: '
',
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[\&_\.foo\\_\\_bar\]\:underline .foo__bar {
- text-decoration-line: underline;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[\&_\.foo\\_\\_bar\]\:underline .foo__bar {
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- test('keeps escaped underscores with multiple arbitrary variants', () => {
- let config = {
- content: [
- {
- raw: '
',
- },
- ],
- corePlugins: { preflight: false },
- }
+test('keeps escaped underscores with multiple arbitrary variants', () => {
+ let config = {
+ content: [
+ {
+ raw: '
',
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[\&_\.foo\\_\\_bar\]\:\[\&_\.bar\\_\\_baz\]\:underline .bar__baz .foo__bar {
- text-decoration-line: underline;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[\&_\.foo\\_\\_bar\]\:\[\&_\.bar\\_\\_baz\]\:underline .bar__baz .foo__bar {
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- test('keeps escaped underscores in arbitrary variants mixed with normal variants', () => {
- let config = {
- content: [
- {
- raw: `
+test('keeps escaped underscores in arbitrary variants mixed with normal variants', () => {
+ let config = {
+ content: [
+ {
+ raw: `
`,
- },
- ],
- corePlugins: { preflight: false },
- }
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[\&_\.foo\\_\\_bar\]\:hover\:underline:hover .foo__bar,
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[\&_\.foo\\_\\_bar\]\:hover\:underline:hover .foo__bar,
.hover\:\[\&_\.foo\\_\\_bar\]\:underline .foo__bar:hover {
- text-decoration-line: underline;
- }
- `)
- })
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- test('allows attribute variants with quotes', () => {
- let config = {
- content: [
- {
- raw: `
+test('allows attribute variants with quotes', () => {
+ let config = {
+ content: [
+ {
+ raw: `
`,
- },
- ],
- corePlugins: { preflight: false },
- }
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .\[\&\[data-test\=\"2\"\]\]\:underline[data-test='2'],
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\[\&\[data-test\=\"2\"\]\]\:underline[data-test='2'],
.\[\&\[data-test\=\'2\'\]\]\:underline[data-test='2'] {
- text-decoration-line: underline;
- }
- `)
- })
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- test('classes in arbitrary variants should not be prefixed', () => {
- let config = {
- prefix: 'tw-',
- content: [
- {
- raw: `
+test('classes in arbitrary variants should not be prefixed', () => {
+ let config = {
+ prefix: 'tw-',
+ content: [
+ {
+ raw: `
should not be red
should be red
@@ -530,731 +526,828 @@ crosscheck(({ stable, oxide }) => {
should be red
`,
- },
- ],
- corePlugins: { preflight: false },
- }
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .\[\&_\.foo\]\:tw-text-red-400 .foo,
- .\[\&_\.foo\]\:hover\:tw-text-red-400:hover .foo,
- .hover\:\[\&_\.foo\]\:tw-text-red-400 .foo:hover,
- .foo .\[\.foo_\&\]\:tw-text-red-400 {
- --tw-text-opacity: 1;
- color: rgb(248 113 113 / var(--tw-text-opacity));
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .\[\&_\.foo\]\:tw-text-red-400 .foo,
- .\[\&_\.foo\]\:hover\:tw-text-red-400:hover .foo,
- .hover\:\[\&_\.foo\]\:tw-text-red-400 .foo:hover,
- .foo .\[\.foo_\&\]\:tw-text-red-400 {
- color: #f87171;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .\[\&_\.foo\]\:tw-text-red-400 .foo,
+ .\[\&_\.foo\]\:hover\:tw-text-red-400:hover .foo,
+ .hover\:\[\&_\.foo\]\:tw-text-red-400 .foo:hover,
+ .foo .\[\.foo_\&\]\:tw-text-red-400 {
+ --tw-text-opacity: 1;
+ color: rgb(248 113 113 / var(--tw-text-opacity));
+ }
+ `)
})
+})
- test('classes in the same arbitrary variant should not be prefixed', () => {
- let config = {
- prefix: 'tw-',
- content: [
- {
- raw: `
- should not be red
+test('classes in the same arbitrary variant should not be prefixed', () => {
+ let config = {
+ prefix: 'tw-',
+ content: [
+ {
+ raw: `
+ should not be red
-
should be red
+
should be red
-
+
should not be red
should be red
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .\[\&_\.foo\]\:tw-bg-white .foo {
- --tw-bg-opacity: 1;
- background-color: rgb(255 255 255 / var(--tw-bg-opacity));
- }
- .\[\&_\.foo\]\:tw-text-red-400 .foo {
- --tw-text-opacity: 1;
- color: rgb(248 113 113 / var(--tw-text-opacity));
- }
- .foo .\[\.foo_\&\]\:tw-bg-white {
- --tw-bg-opacity: 1;
- background-color: rgb(255 255 255 / var(--tw-bg-opacity));
- }
- .foo .\[\.foo_\&\]\:tw-text-red-400 {
- --tw-text-opacity: 1;
- color: rgb(248 113 113 / var(--tw-text-opacity));
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .\[\&_\.foo\]\:tw-bg-white .foo {
- background-color: #fff;
- }
- .\[\&_\.foo\]\:tw-text-red-400 .foo {
- color: #f87171;
- }
- .foo .\[\.foo_\&\]\:tw-bg-white {
- background-color: #fff;
- }
- .foo .\[\.foo_\&\]\:tw-text-red-400 {
- color: #f87171;
- }
- `)
- })
- })
-
- it('should support aria variants', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .underline,
- .aria-checked\:underline[aria-checked='true'],
- .aria-\[labelledby\=\'a_b\'\]\:underline[aria-labelledby='a b'],
- .aria-\[sort\=ascending\]\:underline[aria-sort='ascending'],
- .group\/foo[aria-checked='true'] .group-aria-checked\/foo\:underline,
- .group[aria-checked='true'] .group-aria-checked\:underline,
- .group[aria-labelledby='a b'] .group-aria-\[labelledby\=\'a_b\'\]\:underline,
- .group\/foo[aria-sort='ascending'] .group-aria-\[sort\=ascending\]\/foo\:underline,
- .group[aria-sort='ascending'] .group-aria-\[sort\=ascending\]\:underline,
- .peer\/foo[aria-checked='true'] ~ .peer-aria-checked\/foo\:underline,
- .peer[aria-checked='true'] ~ .peer-aria-checked\:underline,
- .peer[aria-labelledby='a b'] ~ .peer-aria-\[labelledby\=\'a_b\'\]\:underline,
- .peer\/foo[aria-sort='ascending'] ~ .peer-aria-\[sort\=ascending\]\/foo\:underline,
- .peer[aria-sort='ascending'] ~ .peer-aria-\[sort\=ascending\]\:underline {
- text-decoration-line: underline;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .aria-checked\:underline[aria-checked='true'],
- .aria-\[labelledby\=\'a_b\'\]\:underline[aria-labelledby='a b'],
- .aria-\[sort\=ascending\]\:underline[aria-sort='ascending'],
- .group\/foo[aria-checked='true'] .group-aria-checked\/foo\:underline,
- .group[aria-checked='true'] .group-aria-checked\:underline,
- .group[aria-labelledby='a b'] .group-aria-\[labelledby\=\'a_b\'\]\:underline,
- .group\/foo[aria-sort='ascending'] .group-aria-\[sort\=ascending\]\/foo\:underline,
- .group[aria-sort='ascending'] .group-aria-\[sort\=ascending\]\:underline,
- .peer\/foo[aria-checked='true'] ~ .peer-aria-checked\/foo\:underline,
- .peer[aria-checked='true'] ~ .peer-aria-checked\:underline,
- .peer[aria-labelledby='a b'] ~ .peer-aria-\[labelledby\=\'a_b\'\]\:underline,
- .peer\/foo[aria-sort='ascending'] ~ .peer-aria-\[sort\=ascending\]\/foo\:underline,
- .peer[aria-sort='ascending'] ~ .peer-aria-\[sort\=ascending\]\:underline {
- text-decoration-line: underline;
- }
- `)
- })
- })
-
- it('should support data variants', () => {
- let config = {
- theme: {
- data: {
- checked: 'ui~="checked"',
- },
},
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .underline,
- .data-checked\:underline[data-ui~='checked'],
- .data-\[foo\=\'bar_baz\'\]\:underline[data-foo='bar baz'],
- .data-\[position\=top\]\:underline[data-position='top'],
- .group\/foo[data-ui~='checked'] .group-data-checked\/foo\:underline,
- .group[data-ui~='checked'] .group-data-checked\:underline,
- .group[data-foo='bar baz'] .group-data-\[foo\=\'bar_baz\'\]\:underline,
- .group\/foo[data-position='top'] .group-data-\[position\=top\]\/foo\:underline,
- .group[data-position='top'] .group-data-\[position\=top\]\:underline,
- .peer\/foo[data-ui~='checked'] ~ .peer-data-checked\/foo\:underline,
- .peer[data-ui~='checked'] ~ .peer-data-checked\:underline,
- .peer[data-foo='bar baz'] ~ .peer-data-\[foo\=\'bar_baz\'\]\:underline,
- .peer\/foo[data-position='top'] ~ .peer-data-\[position\=top\]\/foo\:underline,
- .peer[data-position='top'] ~ .peer-data-\[position\=top\]\:underline {
- text-decoration-line: underline;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .data-checked\:underline[data-ui~='checked'],
- .data-\[foo\=\'bar_baz\'\]\:underline[data-foo='bar baz'],
- .data-\[position\=top\]\:underline[data-position='top'],
- .group\/foo[data-ui~='checked'] .group-data-checked\/foo\:underline,
- .group[data-ui~='checked'] .group-data-checked\:underline,
- .group[data-foo='bar baz'] .group-data-\[foo\=\'bar_baz\'\]\:underline,
- .group\/foo[data-position='top'] .group-data-\[position\=top\]\/foo\:underline,
- .group[data-position='top'] .group-data-\[position\=top\]\:underline,
- .peer\/foo[data-ui~='checked'] ~ .peer-data-checked\/foo\:underline,
- .peer[data-ui~='checked'] ~ .peer-data-checked\:underline,
- .peer[data-foo='bar baz'] ~ .peer-data-\[foo\=\'bar_baz\'\]\:underline,
- .peer\/foo[data-position='top'] ~ .peer-data-\[position\=top\]\/foo\:underline,
- .peer[data-position='top'] ~ .peer-data-\[position\=top\]\:underline {
- text-decoration-line: underline;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .\[\&_\.foo\]\:tw-font-bold .foo,
+ .foo .\[\.foo_\&\]\:tw-font-bold {
+ font-weight: 700;
+ }
+ `)
})
+})
- it('should support supports', () => {
- let config = {
- theme: {
- supports: {
- grid: 'display: grid',
- },
+it('should support aria variants', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
},
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @supports (display: grid) {
- .supports-grid\:underline {
- text-decoration-line: underline;
- }
- .supports-\[display\:grid\]\:grid {
- display: grid;
- }
- }
- @supports (foo: bar) and (bar: baz) {
- .supports-\[\(foo\:bar\)and\(bar\:baz\)\]\:underline {
- text-decoration-line: underline;
- }
- }
- @supports (foo: bar) or (bar: baz) {
- .supports-\[\(foo\:bar\)or\(bar\:baz\)\]\:underline {
- text-decoration-line: underline;
- }
- }
- @supports (container-type: var(--tw)) {
- .supports-\[container-type\]\:underline {
- text-decoration-line: underline;
- }
- }
- @supports not (foo: bar) {
- .supports-\[not\(foo\:bar\)\]\:underline {
- text-decoration-line: underline;
- }
- }
- @supports selector(A > B) {
- .supports-\[selector\(A_\>_B\)\]\:underline {
- text-decoration-line: underline;
- }
- }
- @supports (transform-origin: 5% 5%) {
- .supports-\[transform-origin\:5\%_5\%\]\:underline {
- text-decoration-line: underline;
- }
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(
+ flagEnabled(config, 'oxideParser')
+ ? css`
+ .aria-checked\:underline[aria-checked='true'],
+ .aria-\[labelledby\=\'a_b\'\]\:underline[aria-labelledby='a b'],
+ .aria-\[sort\=ascending\]\:underline[aria-sort='ascending'],
+ .group\/foo[aria-checked='true'] .group-aria-checked\/foo\:underline,
+ .group[aria-checked='true'] .group-aria-checked\:underline,
+ .group[aria-labelledby='a b'] .group-aria-\[labelledby\=\'a_b\'\]\:underline,
+ .group\/foo[aria-sort='ascending'] .group-aria-\[sort\=ascending\]\/foo\:underline,
+ .group[aria-sort='ascending'] .group-aria-\[sort\=ascending\]\:underline,
+ .peer\/foo[aria-checked='true'] ~ .peer-aria-checked\/foo\:underline,
+ .peer[aria-checked='true'] ~ .peer-aria-checked\:underline,
+ .peer[aria-labelledby='a b'] ~ .peer-aria-\[labelledby\=\'a_b\'\]\:underline,
+ .peer\/foo[aria-sort='ascending'] ~ .peer-aria-\[sort\=ascending\]\/foo\:underline,
+ .peer[aria-sort='ascending'] ~ .peer-aria-\[sort\=ascending\]\:underline {
+ text-decoration-line: underline;
+ }
+ `
+ : css`
+ .underline,
+ .aria-checked\:underline[aria-checked='true'],
+ .aria-\[labelledby\=\'a_b\'\]\:underline[aria-labelledby='a b'],
+ .aria-\[sort\=ascending\]\:underline[aria-sort='ascending'],
+ .group\/foo[aria-checked='true'] .group-aria-checked\/foo\:underline,
+ .group[aria-checked='true'] .group-aria-checked\:underline,
+ .group[aria-labelledby='a b'] .group-aria-\[labelledby\=\'a_b\'\]\:underline,
+ .group\/foo[aria-sort='ascending'] .group-aria-\[sort\=ascending\]\/foo\:underline,
+ .group[aria-sort='ascending'] .group-aria-\[sort\=ascending\]\:underline,
+ .peer\/foo[aria-checked='true'] ~ .peer-aria-checked\/foo\:underline,
+ .peer[aria-checked='true'] ~ .peer-aria-checked\:underline,
+ .peer[aria-labelledby='a b'] ~ .peer-aria-\[labelledby\=\'a_b\'\]\:underline,
+ .peer\/foo[aria-sort='ascending'] ~ .peer-aria-\[sort\=ascending\]\/foo\:underline,
+ .peer[aria-sort='ascending'] ~ .peer-aria-\[sort\=ascending\]\:underline {
+ text-decoration-line: underline;
+ }
+ `
+ )
})
+})
- it('should be possible to use modifiers and arbitrary groups', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
+it('should support data variants', () => {
+ let config = {
+ theme: {
+ data: {
+ checked: 'ui~="checked"',
+ },
+ },
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
-
-
-
-
-
+ let input = css`
+ @tailwind utilities;
+ `
-
-
-
-
-
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(
+ flagEnabled(config, 'oxideParser')
+ ? css`
+ .data-checked\:underline[data-ui~='checked'],
+ .data-\[foo\=\'bar_baz\'\]\:underline[data-foo='bar baz'],
+ .data-\[position\=top\]\:underline[data-position='top'],
+ .group\/foo[data-ui~='checked'] .group-data-checked\/foo\:underline,
+ .group[data-ui~='checked'] .group-data-checked\:underline,
+ .group[data-foo='bar baz'] .group-data-\[foo\=\'bar_baz\'\]\:underline,
+ .group\/foo[data-position='top'] .group-data-\[position\=top\]\/foo\:underline,
+ .group[data-position='top'] .group-data-\[position\=top\]\:underline,
+ .peer\/foo[data-ui~='checked'] ~ .peer-data-checked\/foo\:underline,
+ .peer[data-ui~='checked'] ~ .peer-data-checked\:underline,
+ .peer[data-foo='bar baz'] ~ .peer-data-\[foo\=\'bar_baz\'\]\:underline,
+ .peer\/foo[data-position='top'] ~ .peer-data-\[position\=top\]\/foo\:underline,
+ .peer[data-position='top'] ~ .peer-data-\[position\=top\]\:underline {
+ text-decoration-line: underline;
+ }
+ `
+ : css`
+ .underline,
+ .data-checked\:underline[data-ui~='checked'],
+ .data-\[foo\=\'bar_baz\'\]\:underline[data-foo='bar baz'],
+ .data-\[position\=top\]\:underline[data-position='top'],
+ .group\/foo[data-ui~='checked'] .group-data-checked\/foo\:underline,
+ .group[data-ui~='checked'] .group-data-checked\:underline,
+ .group[data-foo='bar baz'] .group-data-\[foo\=\'bar_baz\'\]\:underline,
+ .group\/foo[data-position='top'] .group-data-\[position\=top\]\/foo\:underline,
+ .group[data-position='top'] .group-data-\[position\=top\]\:underline,
+ .peer\/foo[data-ui~='checked'] ~ .peer-data-checked\/foo\:underline,
+ .peer[data-ui~='checked'] ~ .peer-data-checked\:underline,
+ .peer[data-foo='bar baz'] ~ .peer-data-\[foo\=\'bar_baz\'\]\:underline,
+ .peer\/foo[data-position='top'] ~ .peer-data-\[position\=top\]\/foo\:underline,
+ .peer[data-position='top'] ~ .peer-data-\[position\=top\]\:underline {
+ text-decoration-line: underline;
+ }
+ `
+ )
+ })
+})
-
-
-
-
-
-
+it('should support supports', () => {
+ let config = {
+ theme: {
+ supports: {
+ grid: 'display: grid',
+ },
+ },
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
-
-
-
+ let input = css`
+ @tailwind utilities;
+ `
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .group\/foo:hover .group-hover\/foo\:underline,
- .group:hover .group-hover\:underline,
- .group\/foo:focus .group-\[\&\:focus\]\/foo\:underline,
- .group:focus .group-\[\&\:focus\]\:underline,
- .group\/foo[data-open] .group-\[\&\[data-open\]\]\/foo\:underline,
- .group[data-open] .group-\[\&\[data-open\]\]\:underline,
- .group\/foo.in-foo .group-\[\.in-foo\]\/foo\:underline,
- .group.in-foo .group-\[\.in-foo\]\:underline,
- .in-foo .group\/foo .group-\[\.in-foo_\&\]\/foo\:underline,
- .in-foo .group .group-\[\.in-foo_\&\]\:underline,
- .group\/foo:hover .group-\[\:hover\]\/foo\:underline,
- .group:hover .group-\[\:hover\]\:underline,
- .group\/foo[data-open] .group-\[\[data-open\]\]\/foo\:underline,
- .group[data-open] .group-\[\[data-open\]\]\:underline {
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @supports (display: grid) {
+ .supports-grid\:underline {
text-decoration-line: underline;
}
- `)
- })
+ .supports-\[display\:grid\]\:grid {
+ display: grid;
+ }
+ }
+ @supports (foo: bar) and (bar: baz) {
+ .supports-\[\(foo\:bar\)and\(bar\:baz\)\]\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ @supports (foo: bar) or (bar: baz) {
+ .supports-\[\(foo\:bar\)or\(bar\:baz\)\]\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ @supports (container-type: var(--tw)) {
+ .supports-\[container-type\]\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ @supports not (foo: bar) {
+ .supports-\[not\(foo\:bar\)\]\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ @supports selector(A > B) {
+ .supports-\[selector\(A_\>_B\)\]\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ @supports (transform-origin: 5% 5%) {
+ .supports-\[transform-origin\:5\%_5\%\]\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ `)
})
+})
- it('should be possible to use modifiers and arbitrary peers', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
+test('has-* variants with arbitrary values', () => {
+ let config = {
+ theme: {},
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
-
-
+ let input = css`
+ @tailwind utilities;
+ `
-
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .has-\[\.foo\:hover\]\:block:has(.foo:hover) {
+ display: block;
+ }
+ .has-\[figcaption\]\:inline-block:has(figcaption) {
+ display: inline-block;
+ }
+ .has-\[\[data-active\]\]\:inline:has([data-active]) {
+ display: inline;
+ }
+ .has-\[\.foo\]\:flex:has(.foo) {
+ display: flex;
+ }
+ .has-\[\>_\.potato\]\:table:has(> .potato) {
+ display: table;
+ }
+ .has-\[\+_h2\]\:grid:has(+ h2) {
+ display: grid;
+ }
+ .has-\[\>_h1_\+_h2\]\:contents:has(> h1 + h2) {
+ display: contents;
+ }
+ .has-\[h2\]\:has-\[\.banana\]\:hidden:has(.banana):has(h2) {
+ display: none;
+ }
+ `)
+ })
+})
+
+test('group-has-* variants with arbitrary values', () => {
+ let config = {
+ theme: {},
+ content: [
+ {
+ raw: html`
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .group:has(> h1 + .foo) .group-has-\[\>_h1_\+_\.foo\]\:block {
+ display: block;
+ }
+ .group\/two:has(> h1 + .foo) .group-has-\[\>_h1_\+_\.foo\]\/two\:flex {
+ display: flex;
+ }
+ `)
+ })
+})
+
+test('peer-has-* variants with arbitrary values', () => {
+ let config = {
+ theme: {},
+ content: [
+ {
+ raw: html`
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .peer:has(> h1 + .foo) ~ .peer-has-\[\>_h1_\+_\.foo\]\:block {
+ display: block;
+ }
+ .peer\/two:has(> h1 + .foo) ~ .peer-has-\[\>_h1_\+_\.foo\]\/two\:flex {
+ display: flex;
+ }
+ `)
+ })
+})
+
+it('should be possible to use modifiers and arbitrary groups', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
- let input = css`
- @tailwind utilities;
- `
+
+
+
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .peer\/foo:hover ~ .peer-hover\/foo\:underline,
- .peer:hover ~ .peer-hover\:underline,
- .peer\/foo:focus ~ .peer-\[\&\:focus\]\/foo\:underline,
- .peer:focus ~ .peer-\[\&\:focus\]\:underline,
- .peer\/foo[data-open] ~ .peer-\[\&\[data-open\]\]\/foo\:underline,
- .peer[data-open] ~ .peer-\[\&\[data-open\]\]\:underline,
- .peer\/foo.in-foo ~ .peer-\[\.in-foo\]\/foo\:underline,
- .peer.in-foo ~ .peer-\[\.in-foo\]\:underline,
- .in-foo .peer\/foo ~ .peer-\[\.in-foo_\&\]\/foo\:underline,
- .in-foo .peer ~ .peer-\[\.in-foo_\&\]\:underline,
- .peer\/foo:hover ~ .peer-\[\:hover\]\/foo\:underline,
- .peer:hover ~ .peer-\[\:hover\]\:underline,
- .peer\/foo[data-open] ~ .peer-\[\[data-open\]\]\/foo\:underline,
- .peer[data-open] ~ .peer-\[\[data-open\]\]\:underline {
- text-decoration-line: underline;
- }
- `)
- })
- })
+
+
- it('Arbitrary variants are ordered alphabetically', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .\[\&\:\:a\]\:underline::a {
- text-decoration-line: underline;
- }
- .\[\&\:\:b\]\:underline::b {
- text-decoration-line: underline;
- }
- .\[\&\:\:c\]\:underline::c {
- text-decoration-line: underline;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .group\/foo:hover .group-hover\/foo\:underline,
+ .group:hover .group-hover\:underline,
+ .group\/foo:focus .group-\[\&\:focus\]\/foo\:underline,
+ .group:focus .group-\[\&\:focus\]\:underline,
+ .group\/foo[data-open] .group-\[\&\[data-open\]\]\/foo\:underline,
+ .group[data-open] .group-\[\&\[data-open\]\]\:underline,
+ .group\/foo.in-foo .group-\[\.in-foo\]\/foo\:underline,
+ .group.in-foo .group-\[\.in-foo\]\:underline,
+ .in-foo .group\/foo .group-\[\.in-foo_\&\]\/foo\:underline,
+ .in-foo .group .group-\[\.in-foo_\&\]\:underline,
+ .group\/foo:hover .group-\[\:hover\]\/foo\:underline,
+ .group:hover .group-\[\:hover\]\:underline,
+ .group\/foo[data-open] .group-\[\[data-open\]\]\/foo\:underline,
+ .group[data-open] .group-\[\[data-open\]\]\:underline {
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- it('Arbitrary variants support multiple attribute selectors', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
+it('should be possible to use modifiers and arbitrary peers', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
- let input = css`
- @tailwind utilities;
- `
+
+
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- [data-foo='bar'][data-baz] .\[\[data-foo\=\'bar\'\]\[data-baz\]_\&\]\:underline {
- text-decoration-line: underline;
- }
- `)
- })
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .peer\/foo:hover ~ .peer-hover\/foo\:underline,
+ .peer:hover ~ .peer-hover\:underline,
+ .peer\/foo:focus ~ .peer-\[\&\:focus\]\/foo\:underline,
+ .peer:focus ~ .peer-\[\&\:focus\]\:underline,
+ .peer\/foo[data-open] ~ .peer-\[\&\[data-open\]\]\/foo\:underline,
+ .peer[data-open] ~ .peer-\[\&\[data-open\]\]\:underline,
+ .peer\/foo.in-foo ~ .peer-\[\.in-foo\]\/foo\:underline,
+ .peer.in-foo ~ .peer-\[\.in-foo\]\:underline,
+ .in-foo .peer\/foo ~ .peer-\[\.in-foo_\&\]\/foo\:underline,
+ .in-foo .peer ~ .peer-\[\.in-foo_\&\]\:underline,
+ .peer\/foo:hover ~ .peer-\[\:hover\]\/foo\:underline,
+ .peer:hover ~ .peer-\[\:hover\]\:underline,
+ .peer\/foo[data-open] ~ .peer-\[\[data-open\]\]\/foo\:underline,
+ .peer[data-open] ~ .peer-\[\[data-open\]\]\:underline {
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- it('Invalid arbitrary variants selectors should produce nothing instead of failing', () => {
- let config = {
- content: [
- {
- raw: html`
+it('Arbitrary variants are ordered alphabetically', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .\[\&\:\:a\]\:underline::a {
+ text-decoration-line: underline;
+ }
+ .\[\&\:\:b\]\:underline::b {
+ text-decoration-line: underline;
+ }
+ .\[\&\:\:c\]\:underline::c {
+ text-decoration-line: underline;
+ }
+ `)
+ })
+})
+
+it('Arbitrary variants support multiple attribute selectors', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ [data-foo='bar'][data-baz] .\[\[data-foo\=\'bar\'\]\[data-baz\]_\&\]\:underline {
+ text-decoration-line: underline;
+ }
+ `)
+ })
+})
+
+it('Invalid arbitrary variants selectors should produce nothing instead of failing', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css``)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css``)
})
+})
- it('should output responsive variants + stacked variants in the right order', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
+it('should output responsive variants + stacked variants in the right order', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 1280px) {
- .xl\:p-1 {
- padding: 0.25rem;
- }
- }
- .\[\&_ul\]\:flex ul {
- display: flex;
- }
- .\[\&_ul\]\:flex-col ul {
- flex-direction: column;
- }
- @media (min-width: 768px) {
- .md\:\[\&_ul\]\:flex-row ul {
- flex-direction: row;
- }
- }
- `)
- })
- })
-
- it('it should discard arbitrary variants with multiple selectors', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- {
- // escaped commas are a-ok
- // This is separate because prettier complains about `\,` in the template string
- raw: '
',
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .p-1,
- .span\,div .hover\:\[\.span\\\,div_\&\]\:p-1:hover,
- :is(span, div) .hover\:\[\:is\(span\,div\)_\&\]\:p-1:hover,
- div .\[div_\&\]\:p-1,
- div .hover\:\[div_\&\]\:p-1:hover {
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 1280px) {
+ .xl\:p-1 {
padding: 0.25rem;
}
- `)
- })
+ }
+ .\[\&_ul\]\:flex ul {
+ display: flex;
+ }
+ .\[\&_ul\]\:flex-col ul {
+ flex-direction: column;
+ }
+ @media (min-width: 768px) {
+ .md\:\[\&_ul\]\:flex-row ul {
+ flex-direction: row;
+ }
+ }
+ `)
})
+})
- it('should sort multiple variant fns with normal variants between them', () => {
- /** @type {string[]} */
- let lines = []
+it('it should discard arbitrary variants with multiple selectors', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ {
+ // escaped commas are a-ok
+ // This is separate because prettier complains about `\,` in the template string
+ raw: '
',
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- for (let a of [1, 2]) {
- for (let b of [2, 1]) {
- for (let c of [1, 2]) {
- for (let d of [2, 1]) {
- for (let e of [1, 2]) {
- lines.push(`
`)
- }
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .p-1,
+ .span\,div .hover\:\[\.span\\\,div_\&\]\:p-1:hover,
+ :is(span, div) .hover\:\[\:is\(span\,div\)_\&\]\:p-1:hover,
+ div .\[div_\&\]\:p-1,
+ div .hover\:\[div_\&\]\:p-1:hover {
+ padding: 0.25rem;
+ }
+ `)
+ })
+})
+
+it('should sort multiple variant fns with normal variants between them', () => {
+ /** @type {string[]} */
+ let lines = []
+
+ for (let a of [1, 2]) {
+ for (let b of [2, 1]) {
+ for (let c of [1, 2]) {
+ for (let d of [2, 1]) {
+ for (let e of [1, 2]) {
+ lines.push(`
`)
}
}
}
}
+ }
- // Fisher-Yates shuffle
- for (let i = lines.length - 1; i > 0; i--) {
- let j = Math.floor(Math.random() * i)
- ;[lines[i], lines[j]] = [lines[j], lines[i]]
- }
+ // Fisher-Yates shuffle
+ for (let i = lines.length - 1; i > 0; i--) {
+ let j = Math.floor(Math.random() * i)
+ ;[lines[i], lines[j]] = [lines[j], lines[i]]
+ }
- let config = {
- content: [
- {
- raw: lines.join('\n'),
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- function ({ addVariant, matchVariant }) {
- addVariant('foo1', "&[data-foo='1']")
- addVariant('foo2', "&[data-foo='2']")
+ let config = {
+ content: [
+ {
+ raw: lines.join('\n'),
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ function ({ addVariant, matchVariant }) {
+ addVariant('foo1', "&[data-foo='1']")
+ addVariant('foo2', "&[data-foo='2']")
- matchVariant('bar', (value) => `&[data-bar='${value}']`, {
- sort: (a, b) => b.value - a.value,
- })
+ matchVariant('bar', (value) => `&[data-bar='${value}']`, {
+ sort: (a, b) => b.value - a.value,
+ })
- addVariant('baz1', "&[data-baz='1']")
- addVariant('baz2', "&[data-baz='2']")
+ addVariant('baz1', "&[data-baz='1']")
+ addVariant('baz2', "&[data-baz='2']")
- matchVariant('qux', (value) => `&[data-qux='${value}']`, {
- sort: (a, b) => b.value - a.value,
- })
+ matchVariant('qux', (value) => `&[data-qux='${value}']`, {
+ sort: (a, b) => b.value - a.value,
+ })
- addVariant('fred1', "&[data-fred='1']")
- addVariant('fred2', "&[data-fred='2']")
- },
- ],
- }
+ addVariant('fred1', "&[data-fred='1']")
+ addVariant('fred2', "&[data-fred='2']")
+ },
+ ],
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .fred1\:qux-\[2\]\:baz1\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='1'][data-qux='2'][data-fred='1'],
- .fred1\:qux-\[2\]\:baz1\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='1'][data-qux='2'][data-fred='1'],
- .fred1\:qux-\[2\]\:baz1\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='1'][data-qux='2'][data-fred='1'],
- .fred1\:qux-\[2\]\:baz1\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='1'][data-qux='2'][data-fred='1'],
- .fred1\:qux-\[2\]\:baz2\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='2'][data-qux='2'][data-fred='1'],
- .fred1\:qux-\[2\]\:baz2\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='2'][data-qux='2'][data-fred='1'],
- .fred1\:qux-\[2\]\:baz2\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='2'][data-qux='2'][data-fred='1'],
- .fred1\:qux-\[2\]\:baz2\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='2'][data-qux='2'][data-fred='1'],
- .fred1\:qux-\[1\]\:baz1\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='1'][data-qux='1'][data-fred='1'],
- .fred1\:qux-\[1\]\:baz1\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='1'][data-qux='1'][data-fred='1'],
- .fred1\:qux-\[1\]\:baz1\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='1'][data-qux='1'][data-fred='1'],
- .fred1\:qux-\[1\]\:baz1\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='1'][data-qux='1'][data-fred='1'],
- .fred1\:qux-\[1\]\:baz2\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='2'][data-qux='1'][data-fred='1'],
- .fred1\:qux-\[1\]\:baz2\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='2'][data-qux='1'][data-fred='1'],
- .fred1\:qux-\[1\]\:baz2\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='2'][data-qux='1'][data-fred='1'],
- .fred1\:qux-\[1\]\:baz2\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='2'][data-qux='1'][data-fred='1'],
- .fred2\:qux-\[2\]\:baz1\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='1'][data-qux='2'][data-fred='2'],
- .fred2\:qux-\[2\]\:baz1\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='1'][data-qux='2'][data-fred='2'],
- .fred2\:qux-\[2\]\:baz1\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='1'][data-qux='2'][data-fred='2'],
- .fred2\:qux-\[2\]\:baz1\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='1'][data-qux='2'][data-fred='2'],
- .fred2\:qux-\[2\]\:baz2\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='2'][data-qux='2'][data-fred='2'],
- .fred2\:qux-\[2\]\:baz2\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='2'][data-qux='2'][data-fred='2'],
- .fred2\:qux-\[2\]\:baz2\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='2'][data-qux='2'][data-fred='2'],
- .fred2\:qux-\[2\]\:baz2\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='2'][data-qux='2'][data-fred='2'],
- .fred2\:qux-\[1\]\:baz1\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='1'][data-qux='1'][data-fred='2'],
- .fred2\:qux-\[1\]\:baz1\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='1'][data-qux='1'][data-fred='2'],
- .fred2\:qux-\[1\]\:baz1\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='1'][data-qux='1'][data-fred='2'],
- .fred2\:qux-\[1\]\:baz1\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='1'][data-qux='1'][data-fred='2'],
- .fred2\:qux-\[1\]\:baz2\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='2'][data-qux='1'][data-fred='2'],
- .fred2\:qux-\[1\]\:baz2\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='2'][data-qux='1'][data-fred='2'],
- .fred2\:qux-\[1\]\:baz2\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='2'][data-qux='1'][data-fred='2'],
- .fred2\:qux-\[1\]\:baz2\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='2'][data-qux='1'][data-fred='2'] {
- padding: 0.25rem;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .fred1\:qux-\[2\]\:baz1\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='1'][data-qux='2'][data-fred='1'],
+ .fred1\:qux-\[2\]\:baz1\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='1'][data-qux='2'][data-fred='1'],
+ .fred1\:qux-\[2\]\:baz1\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='1'][data-qux='2'][data-fred='1'],
+ .fred1\:qux-\[2\]\:baz1\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='1'][data-qux='2'][data-fred='1'],
+ .fred1\:qux-\[2\]\:baz2\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='2'][data-qux='2'][data-fred='1'],
+ .fred1\:qux-\[2\]\:baz2\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='2'][data-qux='2'][data-fred='1'],
+ .fred1\:qux-\[2\]\:baz2\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='2'][data-qux='2'][data-fred='1'],
+ .fred1\:qux-\[2\]\:baz2\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='2'][data-qux='2'][data-fred='1'],
+ .fred1\:qux-\[1\]\:baz1\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='1'][data-qux='1'][data-fred='1'],
+ .fred1\:qux-\[1\]\:baz1\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='1'][data-qux='1'][data-fred='1'],
+ .fred1\:qux-\[1\]\:baz1\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='1'][data-qux='1'][data-fred='1'],
+ .fred1\:qux-\[1\]\:baz1\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='1'][data-qux='1'][data-fred='1'],
+ .fred1\:qux-\[1\]\:baz2\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='2'][data-qux='1'][data-fred='1'],
+ .fred1\:qux-\[1\]\:baz2\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='2'][data-qux='1'][data-fred='1'],
+ .fred1\:qux-\[1\]\:baz2\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='2'][data-qux='1'][data-fred='1'],
+ .fred1\:qux-\[1\]\:baz2\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='2'][data-qux='1'][data-fred='1'],
+ .fred2\:qux-\[2\]\:baz1\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='1'][data-qux='2'][data-fred='2'],
+ .fred2\:qux-\[2\]\:baz1\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='1'][data-qux='2'][data-fred='2'],
+ .fred2\:qux-\[2\]\:baz1\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='1'][data-qux='2'][data-fred='2'],
+ .fred2\:qux-\[2\]\:baz1\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='1'][data-qux='2'][data-fred='2'],
+ .fred2\:qux-\[2\]\:baz2\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='2'][data-qux='2'][data-fred='2'],
+ .fred2\:qux-\[2\]\:baz2\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='2'][data-qux='2'][data-fred='2'],
+ .fred2\:qux-\[2\]\:baz2\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='2'][data-qux='2'][data-fred='2'],
+ .fred2\:qux-\[2\]\:baz2\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='2'][data-qux='2'][data-fred='2'],
+ .fred2\:qux-\[1\]\:baz1\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='1'][data-qux='1'][data-fred='2'],
+ .fred2\:qux-\[1\]\:baz1\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='1'][data-qux='1'][data-fred='2'],
+ .fred2\:qux-\[1\]\:baz1\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='1'][data-qux='1'][data-fred='2'],
+ .fred2\:qux-\[1\]\:baz1\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='1'][data-qux='1'][data-fred='2'],
+ .fred2\:qux-\[1\]\:baz2\:bar-\[2\]\:foo1\:p-1[data-foo='1'][data-bar='2'][data-baz='2'][data-qux='1'][data-fred='2'],
+ .fred2\:qux-\[1\]\:baz2\:bar-\[2\]\:foo2\:p-1[data-foo='2'][data-bar='2'][data-baz='2'][data-qux='1'][data-fred='2'],
+ .fred2\:qux-\[1\]\:baz2\:bar-\[1\]\:foo1\:p-1[data-foo='1'][data-bar='1'][data-baz='2'][data-qux='1'][data-fred='2'],
+ .fred2\:qux-\[1\]\:baz2\:bar-\[1\]\:foo2\:p-1[data-foo='2'][data-bar='1'][data-baz='2'][data-qux='1'][data-fred='2'] {
+ padding: 0.25rem;
+ }
+ `)
})
})
diff --git a/tests/basic-usage.oxide.test.css b/tests/basic-usage.oxide.test.css
deleted file mode 100644
index 6a01dc045..000000000
--- a/tests/basic-usage.oxide.test.css
+++ /dev/null
@@ -1,1028 +0,0 @@
-*,
-:before,
-:after,
-::backdrop {
- --tw-border-spacing-x: 0;
- --tw-border-spacing-y: 0;
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- --tw-pan-x: ;
- --tw-pan-y: ;
- --tw-pinch-zoom: ;
- --tw-scroll-snap-strictness: proximity;
- --tw-gradient-from-position: ;
- --tw-gradient-via-position: ;
- --tw-gradient-to-position: ;
- --tw-ordinal: ;
- --tw-slashed-zero: ;
- --tw-numeric-figure: ;
- --tw-numeric-spacing: ;
- --tw-numeric-fraction: ;
- --tw-ring-inset: ;
- --tw-ring-offset-width: 0px;
- --tw-ring-offset-color: #fff;
- --tw-ring-color: #3b82f680;
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-ring-shadow: 0 0 #0000;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- --tw-blur: ;
- --tw-brightness: ;
- --tw-contrast: ;
- --tw-grayscale: ;
- --tw-hue-rotate: ;
- --tw-invert: ;
- --tw-saturate: ;
- --tw-sepia: ;
- --tw-drop-shadow: ;
- --tw-backdrop-blur: ;
- --tw-backdrop-brightness: ;
- --tw-backdrop-contrast: ;
- --tw-backdrop-grayscale: ;
- --tw-backdrop-hue-rotate: ;
- --tw-backdrop-invert: ;
- --tw-backdrop-opacity: ;
- --tw-backdrop-saturate: ;
- --tw-backdrop-sepia: ;
-}
-.container {
- width: 100%;
-}
-@media (min-width: 640px) {
- .container {
- max-width: 640px;
- }
-}
-@media (min-width: 768px) {
- .container {
- max-width: 768px;
- }
-}
-@media (min-width: 1024px) {
- .container {
- max-width: 1024px;
- }
-}
-@media (min-width: 1280px) {
- .container {
- max-width: 1280px;
- }
-}
-@media (min-width: 1536px) {
- .container {
- max-width: 1536px;
- }
-}
-.sr-only {
- width: 1px;
- height: 1px;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border-width: 0;
- margin: -1px;
- padding: 0;
- position: absolute;
- overflow: hidden;
-}
-.pointer-events-none {
- pointer-events: none;
-}
-.invisible {
- visibility: hidden;
-}
-.collapse {
- visibility: collapse;
-}
-.absolute {
- position: absolute;
-}
-.inset-0 {
- inset: 0;
-}
-.inset-x-2 {
- left: 0.5rem;
- right: 0.5rem;
-}
-.inset-y-4 {
- top: 1rem;
- bottom: 1rem;
-}
-.bottom-12 {
- bottom: 3rem;
-}
-.left-16 {
- left: 4rem;
-}
-.right-8 {
- right: 2rem;
-}
-.top-6 {
- top: 1.5rem;
-}
-.isolate {
- isolation: isolate;
-}
-.isolation-auto {
- isolation: auto;
-}
-.z-30 {
- z-index: 30;
-}
-.order-2 {
- order: 2;
-}
-.order-last {
- order: 9999;
-}
-.col-span-3 {
- grid-column: span 3 / span 3;
-}
-.col-start-1 {
- grid-column-start: 1;
-}
-.col-end-4 {
- grid-column-end: 4;
-}
-.row-span-2 {
- grid-row: span 2 / span 2;
-}
-.row-start-3 {
- grid-row-start: 3;
-}
-.row-end-5 {
- grid-row-end: 5;
-}
-.float-right {
- float: right;
-}
-.clear-left {
- clear: left;
-}
-.m-4 {
- margin: 1rem;
-}
-.mx-auto {
- margin-left: auto;
- margin-right: auto;
-}
-.my-2 {
- margin-top: 0.5rem;
- margin-bottom: 0.5rem;
-}
-.mb-3 {
- margin-bottom: 0.75rem;
-}
-.ml-4 {
- margin-left: 1rem;
-}
-.mr-1 {
- margin-right: 0.25rem;
-}
-.mt-0 {
- margin-top: 0;
-}
-.box-border {
- box-sizing: border-box;
-}
-.inline-grid {
- display: inline-grid;
-}
-.hidden {
- display: none;
-}
-.aspect-square {
- aspect-ratio: 1 / 1;
-}
-.aspect-video {
- aspect-ratio: 16 / 9;
-}
-.h-16 {
- height: 4rem;
-}
-.max-h-screen {
- max-height: 100vh;
-}
-.min-h-0 {
- min-height: 0;
-}
-.w-12 {
- width: 3rem;
-}
-.min-w-min {
- min-width: min-content;
-}
-.max-w-full {
- max-width: 100%;
-}
-.flex-1 {
- flex: 1;
-}
-.flex-shrink {
- flex-shrink: 1;
-}
-.flex-shrink-0 {
- flex-shrink: 0;
-}
-.shrink {
- flex-shrink: 1;
-}
-.shrink-0 {
- flex-shrink: 0;
-}
-.flex-grow {
- flex-grow: 1;
-}
-.flex-grow-0 {
- flex-grow: 0;
-}
-.grow {
- flex-grow: 1;
-}
-.grow-0 {
- flex-grow: 0;
-}
-.basis-7 {
- flex-basis: 1.75rem;
-}
-.basis-auto {
- flex-basis: auto;
-}
-.table-fixed {
- table-layout: fixed;
-}
-.caption-top {
- caption-side: top;
-}
-.caption-bottom {
- caption-side: bottom;
-}
-.border-collapse {
- border-collapse: collapse;
-}
-.border-spacing-4 {
- --tw-border-spacing-x: 1rem;
- --tw-border-spacing-y: 1rem;
- border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
-}
-.border-spacing-x-6 {
- --tw-border-spacing-x: 1.5rem;
- border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
-}
-.border-spacing-y-8 {
- --tw-border-spacing-y: 2rem;
- border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
-}
-.origin-top-right {
- transform-origin: 100% 0;
-}
-.-translate-x-3 {
- --tw-translate-x: -0.75rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.-translate-x-4 {
- --tw-translate-x: -1rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.translate-x-5 {
- --tw-translate-x: 1.25rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.translate-y-6 {
- --tw-translate-y: 1.5rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.rotate-3 {
- --tw-rotate: 3deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.skew-x-12 {
- --tw-skew-x: 12deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.skew-y-12 {
- --tw-skew-y: 12deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.scale-95 {
- --tw-scale-x: 0.95;
- --tw-scale-y: 0.95;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.-scale-x-100 {
- --tw-scale-x: -1;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.transform {
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.transform-gpu {
- transform: translate3d(var(--tw-translate-x), var(--tw-translate-y), 0) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.transform-none {
- transform: none;
-}
-.animate-none {
- animation: none;
-}
-@keyframes spin {
- to {
- transform: rotate(360deg);
- }
-}
-.animate-spin {
- animation: 1s linear infinite spin;
-}
-.cursor-pointer {
- cursor: pointer;
-}
-.touch-pan-x {
- --tw-pan-x: pan-x;
- touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
-}
-.touch-pan-y {
- --tw-pan-y: pan-y;
- touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
-}
-.touch-pan-up {
- --tw-pan-y: pan-up;
- touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
-}
-.touch-pinch-zoom {
- --tw-pinch-zoom: pinch-zoom;
- touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
-}
-.touch-manipulation {
- touch-action: manipulation;
-}
-.select-none {
- user-select: none;
-}
-.resize-none {
- resize: none;
-}
-.snap-x {
- scroll-snap-type: x var(--tw-scroll-snap-strictness);
-}
-.snap-mandatory {
- --tw-scroll-snap-strictness: mandatory;
-}
-.snap-center {
- scroll-snap-align: center;
-}
-.snap-always {
- scroll-snap-stop: always;
-}
-.scroll-mt-6 {
- scroll-margin-top: 1.5rem;
-}
-.scroll-p-6 {
- scroll-padding: 1.5rem;
-}
-.list-inside {
- list-style-position: inside;
-}
-.list-disc {
- list-style-type: disc;
-}
-.list-image-none {
- list-style-image: none;
-}
-.appearance-none {
- appearance: none;
-}
-.columns-1 {
- columns: 1;
-}
-.columns-md {
- columns: 28rem;
-}
-.break-before-page {
- break-before: page;
-}
-.break-inside-avoid-column {
- break-inside: avoid-column;
-}
-.break-after-auto {
- break-after: auto;
-}
-.auto-cols-min {
- grid-auto-columns: min-content;
-}
-.grid-flow-row {
- grid-auto-flow: row;
-}
-.auto-rows-max {
- grid-auto-rows: max-content;
-}
-.grid-cols-4 {
- grid-template-columns: repeat(4, minmax(0, 1fr));
-}
-.grid-rows-3 {
- grid-template-rows: repeat(3, minmax(0, 1fr));
-}
-.flex-row-reverse {
- flex-direction: row-reverse;
-}
-.flex-wrap {
- flex-wrap: wrap;
-}
-.place-content-start {
- place-content: start;
-}
-.place-items-end {
- place-items: end;
-}
-.content-center {
- align-content: center;
-}
-.items-start {
- align-items: flex-start;
-}
-.justify-center {
- justify-content: center;
-}
-.justify-items-end {
- justify-items: end;
-}
-.gap-4 {
- gap: 1rem;
-}
-.gap-x-2 {
- column-gap: 0.5rem;
-}
-.gap-y-3 {
- row-gap: 0.75rem;
-}
-.space-x-4 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-inline-start: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
- margin-inline-end: calc(1rem * var(--tw-space-x-reverse));
-}
-.space-y-3 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
-}
-.space-y-reverse > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 1;
-}
-.space-x-reverse > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 1;
-}
-.divide-x-0 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-x-reverse: 0;
- border-inline-end-width: calc(0px * var(--tw-divide-x-reverse));
- border-inline-start-width: calc(0px * calc(1 - var(--tw-divide-x-reverse)));
-}
-.divide-x-2 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-x-reverse: 0;
- border-inline-end-width: calc(2px * var(--tw-divide-x-reverse));
- border-inline-start-width: calc(2px * calc(1 - var(--tw-divide-x-reverse)));
-}
-.divide-y-0 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(0px * var(--tw-divide-y-reverse));
-}
-.divide-y-4 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(4px * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(4px * var(--tw-divide-y-reverse));
-}
-.divide-dotted > :not([hidden]) ~ :not([hidden]) {
- border-style: dotted;
-}
-.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {
- border-color: #e5e7eb;
-}
-.place-self-center {
- place-self: center;
-}
-.self-end {
- align-self: flex-end;
-}
-.justify-self-start {
- justify-self: start;
-}
-.overflow-hidden {
- overflow: hidden;
-}
-.overscroll-contain {
- overscroll-behavior: contain;
-}
-.truncate {
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden;
-}
-.overflow-ellipsis {
- text-overflow: ellipsis;
-}
-.whitespace-nowrap {
- white-space: nowrap;
-}
-.break-words {
- overflow-wrap: break-word;
-}
-.rounded-md {
- border-radius: 0.375rem;
-}
-.border {
- border-width: 1px;
-}
-.border-2 {
- border-width: 2px;
-}
-.border-x-4 {
- border-left-width: 4px;
- border-right-width: 4px;
-}
-.border-y-4 {
- border-top-width: 4px;
- border-bottom-width: 4px;
-}
-.border-b-4 {
- border-bottom-width: 4px;
-}
-.border-t {
- border-top-width: 1px;
-}
-.border-solid {
- border-style: solid;
-}
-.border-hidden {
- border-style: hidden;
-}
-.border-black {
- border-color: #000;
-}
-.border-x-black {
- border-left-color: #000;
- border-right-color: #000;
-}
-.border-y-black {
- border-top-color: #000;
- border-bottom-color: #000;
-}
-.border-b-black {
- border-bottom-color: #000;
-}
-.border-l-black {
- border-left-color: #000;
-}
-.border-r-black {
- border-right-color: #000;
-}
-.border-t-black {
- border-top-color: #000;
-}
-.bg-green-500 {
- background-color: #22c55e;
-}
-.bg-gradient-to-r {
- background-image: linear-gradient(to right, var(--tw-gradient-stops));
-}
-.from-red-300 {
- --tw-gradient-from: #fca5a5 var(--tw-gradient-from-position);
- --tw-gradient-to: #fca5a500 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
-}
-.via-purple-200 {
- --tw-gradient-to: #e9d5ff00 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), #e9d5ff var(--tw-gradient-via-position),
- var(--tw-gradient-to);
-}
-.to-blue-400 {
- --tw-gradient-to: #60a5fa var(--tw-gradient-to-position);
-}
-.decoration-slice {
- -webkit-box-decoration-break: slice;
- box-decoration-break: slice;
-}
-.decoration-clone {
- -webkit-box-decoration-break: clone;
- box-decoration-break: clone;
-}
-.box-decoration-slice {
- -webkit-box-decoration-break: slice;
- box-decoration-break: slice;
-}
-.box-decoration-clone {
- -webkit-box-decoration-break: clone;
- box-decoration-break: clone;
-}
-.bg-cover {
- background-size: cover;
-}
-.bg-local {
- background-attachment: local;
-}
-.bg-clip-border {
- background-clip: border-box;
-}
-.bg-top {
- background-position: top;
-}
-.bg-no-repeat {
- background-repeat: no-repeat;
-}
-.bg-origin-border {
- background-origin: border-box;
-}
-.bg-origin-padding {
- background-origin: padding-box;
-}
-.bg-origin-content {
- background-origin: content-box;
-}
-.fill-current {
- fill: currentColor;
-}
-.stroke-current {
- stroke: currentColor;
-}
-.stroke-2 {
- stroke-width: 2px;
-}
-.object-cover {
- object-fit: cover;
-}
-.object-bottom {
- object-position: bottom;
-}
-.p-4 {
- padding: 1rem;
-}
-.px-3 {
- padding-left: 0.75rem;
- padding-right: 0.75rem;
-}
-.py-2 {
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
-}
-.pb-3 {
- padding-bottom: 0.75rem;
-}
-.pl-4 {
- padding-left: 1rem;
-}
-.pr-2 {
- padding-right: 0.5rem;
-}
-.pt-1 {
- padding-top: 0.25rem;
-}
-.text-center {
- text-align: center;
-}
-.-indent-12 {
- text-indent: -3rem;
-}
-.indent-6 {
- text-indent: 1.5rem;
-}
-.align-middle {
- vertical-align: middle;
-}
-.font-sans {
- font-family: 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;
-}
-.text-2xl {
- font-size: 1.5rem;
- line-height: 2rem;
-}
-.font-medium {
- font-weight: 500;
-}
-.uppercase {
- text-transform: uppercase;
-}
-.not-italic {
- font-style: normal;
-}
-.ordinal {
- --tw-ordinal: ordinal;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
-}
-.tabular-nums {
- --tw-numeric-spacing: tabular-nums;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
-}
-.diagonal-fractions {
- --tw-numeric-fraction: diagonal-fractions;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
-}
-.leading-5 {
- line-height: 1.25rem;
-}
-.leading-relaxed {
- line-height: 1.625;
-}
-.tracking-tight {
- letter-spacing: -0.025em;
-}
-.text-indigo-500 {
- color: #6366f1;
-}
-.underline {
- text-decoration-line: underline;
-}
-.decoration-red-600 {
- text-decoration-color: #dc2626;
-}
-.decoration-solid {
- text-decoration-style: solid;
-}
-.decoration-1 {
- text-decoration-thickness: 1px;
-}
-.decoration-2 {
- text-decoration-thickness: 2px;
-}
-.underline-offset-1 {
- text-underline-offset: 1px;
-}
-.underline-offset-2 {
- text-underline-offset: 2px;
-}
-.antialiased {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-.placeholder-green-300::placeholder {
- color: #86efac;
-}
-.caret-red-600 {
- caret-color: #dc2626;
-}
-.accent-red-600 {
- accent-color: #dc2626;
-}
-.opacity-90 {
- opacity: 0.9;
-}
-.bg-blend-darken {
- background-blend-mode: darken;
-}
-.bg-blend-difference {
- background-blend-mode: difference;
-}
-.mix-blend-multiply {
- mix-blend-mode: multiply;
-}
-.mix-blend-saturation {
- mix-blend-mode: saturation;
-}
-.shadow {
- --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.shadow-lg {
- --tw-shadow: 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;
- --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color),
- 0 4px 6px -4px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.shadow-black {
- --tw-shadow-color: #000;
- --tw-shadow: var(--tw-shadow-colored);
-}
-.shadow-blue-100\/10 {
- --tw-shadow-color: #dbeafe1a;
- --tw-shadow: var(--tw-shadow-colored);
-}
-.shadow-red-500\/25 {
- --tw-shadow-color: #ef444440;
- --tw-shadow: var(--tw-shadow-colored);
-}
-.outline-none {
- outline-offset: 2px;
- outline: 2px solid #0000;
-}
-.outline {
- outline-style: solid;
-}
-.outline-dashed {
- outline-style: dashed;
-}
-.outline-4 {
- outline-width: 4px;
-}
-.-outline-offset-2 {
- outline-offset: -2px;
-}
-.outline-offset-2 {
- outline-offset: 2px;
-}
-.outline-black {
- outline-color: #000;
-}
-.ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.ring-4 {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.ring-white {
- --tw-ring-color: #fff;
-}
-.ring-offset-2 {
- --tw-ring-offset-width: 2px;
-}
-.ring-offset-blue-300 {
- --tw-ring-offset-color: #93c5fd;
-}
-.blur-md {
- --tw-blur: blur(12px);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.brightness-150 {
- --tw-brightness: brightness(1.5);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.contrast-50 {
- --tw-contrast: contrast(0.5);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.drop-shadow-md {
- --tw-drop-shadow: drop-shadow(0 4px 3px #00000012) drop-shadow(0 2px 2px #0000000f);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.grayscale {
- --tw-grayscale: grayscale(100%);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.hue-rotate-60 {
- --tw-hue-rotate: hue-rotate(60deg);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.invert {
- --tw-invert: invert(100%);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.saturate-200 {
- --tw-saturate: saturate(2);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.sepia {
- --tw-sepia: sepia(100%);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.filter {
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.filter-none {
- filter: none;
-}
-.backdrop-blur-lg {
- --tw-backdrop-blur: blur(16px);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-brightness-50 {
- --tw-backdrop-brightness: brightness(0.5);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-contrast-0 {
- --tw-backdrop-contrast: contrast(0);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-grayscale {
- --tw-backdrop-grayscale: grayscale(100%);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-hue-rotate-90 {
- --tw-backdrop-hue-rotate: hue-rotate(90deg);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-invert {
- --tw-backdrop-invert: invert(100%);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-opacity-75 {
- --tw-backdrop-opacity: opacity(0.75);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-saturate-150 {
- --tw-backdrop-saturate: saturate(1.5);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-sepia {
- --tw-backdrop-sepia: sepia(100%);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-filter {
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-filter-none {
- backdrop-filter: none;
-}
-.transition {
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke,
- opacity, box-shadow, transform, filter, backdrop-filter;
- transition-duration: 0.15s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-.transition-all {
- transition-property: all;
- transition-duration: 0.15s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-.delay-300 {
- transition-delay: 0.3s;
-}
-.duration-200 {
- transition-duration: 0.2s;
-}
-.ease-in-out {
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-.will-change-scroll {
- will-change: scroll-position;
-}
-.will-change-transform {
- will-change: transform;
-}
-.content-none {
- --tw-content: none;
- content: var(--tw-content);
-}
diff --git a/tests/basic-usage.test.css b/tests/basic-usage.test.css
deleted file mode 100644
index 720c783e9..000000000
--- a/tests/basic-usage.test.css
+++ /dev/null
@@ -1,1058 +0,0 @@
-*,
-:before,
-:after,
-::backdrop {
- --tw-border-spacing-x: 0;
- --tw-border-spacing-y: 0;
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- --tw-pan-x: ;
- --tw-pan-y: ;
- --tw-pinch-zoom: ;
- --tw-scroll-snap-strictness: proximity;
- --tw-gradient-from-position: ;
- --tw-gradient-via-position: ;
- --tw-gradient-to-position: ;
- --tw-ordinal: ;
- --tw-slashed-zero: ;
- --tw-numeric-figure: ;
- --tw-numeric-spacing: ;
- --tw-numeric-fraction: ;
- --tw-ring-inset: ;
- --tw-ring-offset-width: 0px;
- --tw-ring-offset-color: #fff;
- --tw-ring-color: #3b82f680;
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-ring-shadow: 0 0 #0000;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- --tw-blur: ;
- --tw-brightness: ;
- --tw-contrast: ;
- --tw-grayscale: ;
- --tw-hue-rotate: ;
- --tw-invert: ;
- --tw-saturate: ;
- --tw-sepia: ;
- --tw-drop-shadow: ;
- --tw-backdrop-blur: ;
- --tw-backdrop-brightness: ;
- --tw-backdrop-contrast: ;
- --tw-backdrop-grayscale: ;
- --tw-backdrop-hue-rotate: ;
- --tw-backdrop-invert: ;
- --tw-backdrop-opacity: ;
- --tw-backdrop-saturate: ;
- --tw-backdrop-sepia: ;
-}
-.container {
- width: 100%;
-}
-@media (min-width: 640px) {
- .container {
- max-width: 640px;
- }
-}
-@media (min-width: 768px) {
- .container {
- max-width: 768px;
- }
-}
-@media (min-width: 1024px) {
- .container {
- max-width: 1024px;
- }
-}
-@media (min-width: 1280px) {
- .container {
- max-width: 1280px;
- }
-}
-@media (min-width: 1536px) {
- .container {
- max-width: 1536px;
- }
-}
-.sr-only {
- width: 1px;
- height: 1px;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border-width: 0;
- margin: -1px;
- padding: 0;
- position: absolute;
- overflow: hidden;
-}
-.pointer-events-none {
- pointer-events: none;
-}
-.invisible {
- visibility: hidden;
-}
-.collapse {
- visibility: collapse;
-}
-.absolute {
- position: absolute;
-}
-.inset-0 {
- inset: 0;
-}
-.inset-x-2 {
- left: 0.5rem;
- right: 0.5rem;
-}
-.inset-y-4 {
- top: 1rem;
- bottom: 1rem;
-}
-.bottom-12 {
- bottom: 3rem;
-}
-.left-16 {
- left: 4rem;
-}
-.right-8 {
- right: 2rem;
-}
-.top-6 {
- top: 1.5rem;
-}
-.isolate {
- isolation: isolate;
-}
-.isolation-auto {
- isolation: auto;
-}
-.z-30 {
- z-index: 30;
-}
-.order-2 {
- order: 2;
-}
-.order-last {
- order: 9999;
-}
-.col-span-3 {
- grid-column: span 3 / span 3;
-}
-.col-start-1 {
- grid-column-start: 1;
-}
-.col-end-4 {
- grid-column-end: 4;
-}
-.row-span-2 {
- grid-row: span 2 / span 2;
-}
-.row-start-3 {
- grid-row-start: 3;
-}
-.row-end-5 {
- grid-row-end: 5;
-}
-.float-right {
- float: right;
-}
-.clear-left {
- clear: left;
-}
-.m-4 {
- margin: 1rem;
-}
-.mx-auto {
- margin-left: auto;
- margin-right: auto;
-}
-.my-2 {
- margin-top: 0.5rem;
- margin-bottom: 0.5rem;
-}
-.mb-3 {
- margin-bottom: 0.75rem;
-}
-.ml-4 {
- margin-left: 1rem;
-}
-.mr-1 {
- margin-right: 0.25rem;
-}
-.mt-0 {
- margin-top: 0;
-}
-.box-border {
- box-sizing: border-box;
-}
-.inline-grid {
- display: inline-grid;
-}
-.hidden {
- display: none;
-}
-.aspect-square {
- aspect-ratio: 1 / 1;
-}
-.aspect-video {
- aspect-ratio: 16 / 9;
-}
-.h-16 {
- height: 4rem;
-}
-.max-h-screen {
- max-height: 100vh;
-}
-.min-h-0 {
- min-height: 0;
-}
-.w-12 {
- width: 3rem;
-}
-.min-w-min {
- min-width: min-content;
-}
-.max-w-full {
- max-width: 100%;
-}
-.flex-1 {
- flex: 1;
-}
-.flex-shrink {
- flex-shrink: 1;
-}
-.flex-shrink-0 {
- flex-shrink: 0;
-}
-.shrink {
- flex-shrink: 1;
-}
-.shrink-0 {
- flex-shrink: 0;
-}
-.flex-grow {
- flex-grow: 1;
-}
-.flex-grow-0 {
- flex-grow: 0;
-}
-.grow {
- flex-grow: 1;
-}
-.grow-0 {
- flex-grow: 0;
-}
-.basis-7 {
- flex-basis: 1.75rem;
-}
-.basis-auto {
- flex-basis: auto;
-}
-.table-fixed {
- table-layout: fixed;
-}
-.caption-top {
- caption-side: top;
-}
-.caption-bottom {
- caption-side: bottom;
-}
-.border-collapse {
- border-collapse: collapse;
-}
-.border-spacing-4 {
- --tw-border-spacing-x: 1rem;
- --tw-border-spacing-y: 1rem;
- border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
-}
-.border-spacing-x-6 {
- --tw-border-spacing-x: 1.5rem;
- border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
-}
-.border-spacing-y-8 {
- --tw-border-spacing-y: 2rem;
- border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
-}
-.origin-top-right {
- transform-origin: 100% 0;
-}
-.-translate-x-3 {
- --tw-translate-x: -0.75rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.-translate-x-4 {
- --tw-translate-x: -1rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.translate-x-5 {
- --tw-translate-x: 1.25rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.translate-y-6 {
- --tw-translate-y: 1.5rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.rotate-3 {
- --tw-rotate: 3deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.skew-x-12 {
- --tw-skew-x: 12deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.skew-y-12 {
- --tw-skew-y: 12deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.scale-95 {
- --tw-scale-x: 0.95;
- --tw-scale-y: 0.95;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.-scale-x-100 {
- --tw-scale-x: -1;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.transform {
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.transform-gpu {
- transform: translate3d(var(--tw-translate-x), var(--tw-translate-y), 0) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.transform-none {
- transform: none;
-}
-.animate-none {
- animation: none;
-}
-@keyframes spin {
- to {
- transform: rotate(360deg);
- }
-}
-.animate-spin {
- animation: 1s linear infinite spin;
-}
-.cursor-pointer {
- cursor: pointer;
-}
-.touch-pan-x {
- --tw-pan-x: pan-x;
- touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
-}
-.touch-pan-y {
- --tw-pan-y: pan-y;
- touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
-}
-.touch-pan-up {
- --tw-pan-y: pan-up;
- touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
-}
-.touch-pinch-zoom {
- --tw-pinch-zoom: pinch-zoom;
- touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
-}
-.touch-manipulation {
- touch-action: manipulation;
-}
-.select-none {
- user-select: none;
-}
-.resize-none {
- resize: none;
-}
-.snap-x {
- scroll-snap-type: x var(--tw-scroll-snap-strictness);
-}
-.snap-mandatory {
- --tw-scroll-snap-strictness: mandatory;
-}
-.snap-center {
- scroll-snap-align: center;
-}
-.snap-always {
- scroll-snap-stop: always;
-}
-.scroll-mt-6 {
- scroll-margin-top: 1.5rem;
-}
-.scroll-p-6 {
- scroll-padding: 1.5rem;
-}
-.list-inside {
- list-style-position: inside;
-}
-.list-disc {
- list-style-type: disc;
-}
-.list-image-none {
- list-style-image: none;
-}
-.appearance-none {
- appearance: none;
-}
-.columns-1 {
- columns: 1;
-}
-.columns-md {
- columns: 28rem;
-}
-.break-before-page {
- break-before: page;
-}
-.break-inside-avoid-column {
- break-inside: avoid-column;
-}
-.break-after-auto {
- break-after: auto;
-}
-.auto-cols-min {
- grid-auto-columns: min-content;
-}
-.grid-flow-row {
- grid-auto-flow: row;
-}
-.auto-rows-max {
- grid-auto-rows: max-content;
-}
-.grid-cols-4 {
- grid-template-columns: repeat(4, minmax(0, 1fr));
-}
-.grid-rows-3 {
- grid-template-rows: repeat(3, minmax(0, 1fr));
-}
-.flex-row-reverse {
- flex-direction: row-reverse;
-}
-.flex-wrap {
- flex-wrap: wrap;
-}
-.place-content-start {
- place-content: start;
-}
-.place-items-end {
- place-items: end;
-}
-.content-center {
- align-content: center;
-}
-.items-start {
- align-items: flex-start;
-}
-.justify-center {
- justify-content: center;
-}
-.justify-items-end {
- justify-items: end;
-}
-.gap-4 {
- gap: 1rem;
-}
-.gap-x-2 {
- column-gap: 0.5rem;
-}
-.gap-y-3 {
- row-gap: 0.75rem;
-}
-.space-x-4 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-right: calc(1rem * var(--tw-space-x-reverse));
- margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
-}
-.space-y-3 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
-}
-.space-y-reverse > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 1;
-}
-.space-x-reverse > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 1;
-}
-.divide-x-0 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-x-reverse: 0;
- border-right-width: calc(0px * var(--tw-divide-x-reverse));
- border-left-width: calc(0px * calc(1 - var(--tw-divide-x-reverse)));
-}
-.divide-x-2 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-x-reverse: 0;
- border-right-width: calc(2px * var(--tw-divide-x-reverse));
- border-left-width: calc(2px * calc(1 - var(--tw-divide-x-reverse)));
-}
-.divide-y-0 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(0px * var(--tw-divide-y-reverse));
-}
-.divide-y-4 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(4px * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(4px * var(--tw-divide-y-reverse));
-}
-.divide-dotted > :not([hidden]) ~ :not([hidden]) {
- border-style: dotted;
-}
-.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-opacity: 1;
- border-color: rgb(229 231 235 / var(--tw-divide-opacity));
-}
-.divide-opacity-50 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-opacity: 0.5;
-}
-.place-self-center {
- place-self: center;
-}
-.self-end {
- align-self: flex-end;
-}
-.justify-self-start {
- justify-self: start;
-}
-.overflow-hidden {
- overflow: hidden;
-}
-.overscroll-contain {
- overscroll-behavior: contain;
-}
-.truncate {
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden;
-}
-.overflow-ellipsis {
- text-overflow: ellipsis;
-}
-.whitespace-nowrap {
- white-space: nowrap;
-}
-.break-words {
- overflow-wrap: break-word;
-}
-.rounded-md {
- border-radius: 0.375rem;
-}
-.border {
- border-width: 1px;
-}
-.border-2 {
- border-width: 2px;
-}
-.border-x-4 {
- border-left-width: 4px;
- border-right-width: 4px;
-}
-.border-y-4 {
- border-top-width: 4px;
- border-bottom-width: 4px;
-}
-.border-b-4 {
- border-bottom-width: 4px;
-}
-.border-t {
- border-top-width: 1px;
-}
-.border-solid {
- border-style: solid;
-}
-.border-hidden {
- border-style: hidden;
-}
-.border-black {
- --tw-border-opacity: 1;
- border-color: rgb(0 0 0 / var(--tw-border-opacity));
-}
-.border-x-black {
- --tw-border-opacity: 1;
- border-left-color: rgb(0 0 0 / var(--tw-border-opacity));
- border-right-color: rgb(0 0 0 / var(--tw-border-opacity));
-}
-.border-y-black {
- --tw-border-opacity: 1;
- border-top-color: rgb(0 0 0 / var(--tw-border-opacity));
- border-bottom-color: rgb(0 0 0 / var(--tw-border-opacity));
-}
-.border-b-black {
- --tw-border-opacity: 1;
- border-bottom-color: rgb(0 0 0 / var(--tw-border-opacity));
-}
-.border-l-black {
- --tw-border-opacity: 1;
- border-left-color: rgb(0 0 0 / var(--tw-border-opacity));
-}
-.border-r-black {
- --tw-border-opacity: 1;
- border-right-color: rgb(0 0 0 / var(--tw-border-opacity));
-}
-.border-t-black {
- --tw-border-opacity: 1;
- border-top-color: rgb(0 0 0 / var(--tw-border-opacity));
-}
-.border-opacity-10 {
- --tw-border-opacity: 0.1;
-}
-.bg-green-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(34 197 94 / var(--tw-bg-opacity));
-}
-.bg-opacity-20 {
- --tw-bg-opacity: 0.2;
-}
-.bg-gradient-to-r {
- background-image: linear-gradient(to right, var(--tw-gradient-stops));
-}
-.from-red-300 {
- --tw-gradient-from: #fca5a5 var(--tw-gradient-from-position);
- --tw-gradient-to: #fca5a500 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
-}
-.via-purple-200 {
- --tw-gradient-to: #e9d5ff00 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), #e9d5ff var(--tw-gradient-via-position),
- var(--tw-gradient-to);
-}
-.to-blue-400 {
- --tw-gradient-to: #60a5fa var(--tw-gradient-to-position);
-}
-.decoration-slice {
- -webkit-box-decoration-break: slice;
- box-decoration-break: slice;
-}
-.decoration-clone {
- -webkit-box-decoration-break: clone;
- box-decoration-break: clone;
-}
-.box-decoration-slice {
- -webkit-box-decoration-break: slice;
- box-decoration-break: slice;
-}
-.box-decoration-clone {
- -webkit-box-decoration-break: clone;
- box-decoration-break: clone;
-}
-.bg-cover {
- background-size: cover;
-}
-.bg-local {
- background-attachment: local;
-}
-.bg-clip-border {
- background-clip: border-box;
-}
-.bg-top {
- background-position: top;
-}
-.bg-no-repeat {
- background-repeat: no-repeat;
-}
-.bg-origin-border {
- background-origin: border-box;
-}
-.bg-origin-padding {
- background-origin: padding-box;
-}
-.bg-origin-content {
- background-origin: content-box;
-}
-.fill-current {
- fill: currentColor;
-}
-.stroke-current {
- stroke: currentColor;
-}
-.stroke-2 {
- stroke-width: 2px;
-}
-.object-cover {
- object-fit: cover;
-}
-.object-bottom {
- object-position: bottom;
-}
-.p-4 {
- padding: 1rem;
-}
-.px-3 {
- padding-left: 0.75rem;
- padding-right: 0.75rem;
-}
-.py-2 {
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
-}
-.pb-3 {
- padding-bottom: 0.75rem;
-}
-.pl-4 {
- padding-left: 1rem;
-}
-.pr-2 {
- padding-right: 0.5rem;
-}
-.pt-1 {
- padding-top: 0.25rem;
-}
-.text-center {
- text-align: center;
-}
-.-indent-12 {
- text-indent: -3rem;
-}
-.indent-6 {
- text-indent: 1.5rem;
-}
-.align-middle {
- vertical-align: middle;
-}
-.font-sans {
- font-family: 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;
-}
-.text-2xl {
- font-size: 1.5rem;
- line-height: 2rem;
-}
-.font-medium {
- font-weight: 500;
-}
-.uppercase {
- text-transform: uppercase;
-}
-.not-italic {
- font-style: normal;
-}
-.ordinal {
- --tw-ordinal: ordinal;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
-}
-.tabular-nums {
- --tw-numeric-spacing: tabular-nums;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
-}
-.diagonal-fractions {
- --tw-numeric-fraction: diagonal-fractions;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
-}
-.leading-5 {
- line-height: 1.25rem;
-}
-.leading-relaxed {
- line-height: 1.625;
-}
-.tracking-tight {
- letter-spacing: -0.025em;
-}
-.text-indigo-500 {
- --tw-text-opacity: 1;
- color: rgb(99 102 241 / var(--tw-text-opacity));
-}
-.text-opacity-10 {
- --tw-text-opacity: 0.1;
-}
-.underline {
- text-decoration-line: underline;
-}
-.decoration-red-600 {
- text-decoration-color: #dc2626;
-}
-.decoration-solid {
- text-decoration-style: solid;
-}
-.decoration-1 {
- text-decoration-thickness: 1px;
-}
-.decoration-2 {
- text-decoration-thickness: 2px;
-}
-.underline-offset-1 {
- text-underline-offset: 1px;
-}
-.underline-offset-2 {
- text-underline-offset: 2px;
-}
-.antialiased {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-.placeholder-green-300::placeholder {
- --tw-placeholder-opacity: 1;
- color: rgb(134 239 172 / var(--tw-placeholder-opacity));
-}
-.placeholder-opacity-60::placeholder {
- --tw-placeholder-opacity: 0.6;
-}
-.caret-red-600 {
- caret-color: #dc2626;
-}
-.accent-red-600 {
- accent-color: #dc2626;
-}
-.opacity-90 {
- opacity: 0.9;
-}
-.bg-blend-darken {
- background-blend-mode: darken;
-}
-.bg-blend-difference {
- background-blend-mode: difference;
-}
-.mix-blend-multiply {
- mix-blend-mode: multiply;
-}
-.mix-blend-saturation {
- mix-blend-mode: saturation;
-}
-.shadow {
- --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.shadow-lg {
- --tw-shadow: 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;
- --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color),
- 0 4px 6px -4px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.shadow-black {
- --tw-shadow-color: #000;
- --tw-shadow: var(--tw-shadow-colored);
-}
-.shadow-blue-100\/10 {
- --tw-shadow-color: #dbeafe1a;
- --tw-shadow: var(--tw-shadow-colored);
-}
-.shadow-red-500\/25 {
- --tw-shadow-color: #ef444440;
- --tw-shadow: var(--tw-shadow-colored);
-}
-.outline-none {
- outline-offset: 2px;
- outline: 2px solid #0000;
-}
-.outline {
- outline-style: solid;
-}
-.outline-dashed {
- outline-style: dashed;
-}
-.outline-4 {
- outline-width: 4px;
-}
-.-outline-offset-2 {
- outline-offset: -2px;
-}
-.outline-offset-2 {
- outline-offset: 2px;
-}
-.outline-black {
- outline-color: #000;
-}
-.ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.ring-4 {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.ring-white {
- --tw-ring-opacity: 1;
- --tw-ring-color: rgb(255 255 255 / var(--tw-ring-opacity));
-}
-.ring-opacity-40 {
- --tw-ring-opacity: 0.4;
-}
-.ring-offset-2 {
- --tw-ring-offset-width: 2px;
-}
-.ring-offset-blue-300 {
- --tw-ring-offset-color: #93c5fd;
-}
-.blur-md {
- --tw-blur: blur(12px);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.brightness-150 {
- --tw-brightness: brightness(1.5);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.contrast-50 {
- --tw-contrast: contrast(0.5);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.drop-shadow-md {
- --tw-drop-shadow: drop-shadow(0 4px 3px #00000012) drop-shadow(0 2px 2px #0000000f);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.grayscale {
- --tw-grayscale: grayscale(100%);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.hue-rotate-60 {
- --tw-hue-rotate: hue-rotate(60deg);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.invert {
- --tw-invert: invert(100%);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.saturate-200 {
- --tw-saturate: saturate(2);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.sepia {
- --tw-sepia: sepia(100%);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.filter {
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.filter-none {
- filter: none;
-}
-.backdrop-blur-lg {
- --tw-backdrop-blur: blur(16px);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-brightness-50 {
- --tw-backdrop-brightness: brightness(0.5);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-contrast-0 {
- --tw-backdrop-contrast: contrast(0);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-grayscale {
- --tw-backdrop-grayscale: grayscale(100%);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-hue-rotate-90 {
- --tw-backdrop-hue-rotate: hue-rotate(90deg);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-invert {
- --tw-backdrop-invert: invert(100%);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-opacity-75 {
- --tw-backdrop-opacity: opacity(0.75);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-saturate-150 {
- --tw-backdrop-saturate: saturate(1.5);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-sepia {
- --tw-backdrop-sepia: sepia(100%);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-filter {
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-filter-none {
- backdrop-filter: none;
-}
-.transition {
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke,
- opacity, box-shadow, transform, filter, backdrop-filter;
- transition-duration: 0.15s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-.transition-all {
- transition-property: all;
- transition-duration: 0.15s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-.delay-300 {
- transition-delay: 0.3s;
-}
-.duration-200 {
- transition-duration: 0.2s;
-}
-.ease-in-out {
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-.will-change-scroll {
- will-change: scroll-position;
-}
-.will-change-transform {
- will-change: transform;
-}
-.content-none {
- --tw-content: none;
- content: var(--tw-content);
-}
diff --git a/tests/basic-usage.test.js b/tests/basic-usage.test.js
index 53c2a4418..1cc249d96 100644
--- a/tests/basic-usage.test.js
+++ b/tests/basic-usage.test.js
@@ -1,1020 +1,837 @@
-import fs from 'fs'
-import path from 'path'
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
+import { flagEnabled } from '../src/featureFlags'
-crosscheck(({ stable, oxide }) => {
- test('basic usage', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- stable
- .expect(result.css)
- .toMatchFormattedCss(
- fs.readFileSync(path.resolve(__dirname, './basic-usage.test.css'), 'utf8')
- )
- oxide
- .expect(result.css)
- .toMatchFormattedCss(
- fs.readFileSync(path.resolve(__dirname, './basic-usage.oxide.test.css'), 'utf8')
- )
- })
- })
-
- test('all plugins are executed that match a candidate', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- colors: {
- green: {
- light: 'green',
- },
+test('all plugins are executed that match a candidate', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ colors: {
+ green: {
+ light: 'green',
},
},
- corePlugins: { preflight: false },
+ },
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ .bg-green {
+ /* Empty on purpose */
}
+ `
- let input = css`
- @tailwind utilities;
-
- .bg-green {
- /* Empty on purpose */
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-green-light {
+ --tw-bg-opacity: 1;
+ background-color: rgb(0 128 0 / var(--tw-bg-opacity));
}
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .bg-green-light {
- --tw-bg-opacity: 1;
- background-color: rgb(0 128 0 / var(--tw-bg-opacity));
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .bg-green-light {
- background-color: green;
- }
- `)
- })
+ `)
})
+})
- test('per-plugin colors with the same key can differ when using a custom colors object', () => {
- let config = {
- content: [
- {
- raw: html`
-
This should be green text on red background.
- `,
+test('per-plugin colors with the same key can differ when using a custom colors object', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
This should be green text on red background.
+ `,
+ },
+ ],
+ theme: {
+ // colors & theme MUST be plain objects
+ // If they're functions here the test passes regardless
+ colors: {
+ theme: {
+ bg: 'red',
+ text: 'green',
},
- ],
- theme: {
- // colors & theme MUST be plain objects
- // If they're functions here the test passes regardless
- colors: {
+ },
+ extend: {
+ textColor: {
theme: {
- bg: 'red',
- text: 'green',
+ DEFAULT: 'green',
},
},
- extend: {
- textColor: {
- theme: {
- DEFAULT: 'green',
- },
- },
- backgroundColor: {
- theme: {
- DEFAULT: 'red',
- },
+ backgroundColor: {
+ theme: {
+ DEFAULT: 'red',
},
},
},
- corePlugins: { preflight: false },
- }
+ },
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .bg-theme {
- --tw-bg-opacity: 1;
- background-color: rgb(255 0 0 / var(--tw-bg-opacity));
- }
- .text-theme {
- --tw-text-opacity: 1;
- color: rgb(0 128 0 / var(--tw-text-opacity));
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .bg-theme {
- background-color: red;
- }
- .text-theme {
- color: green;
- }
- `)
- })
- })
-
- test('default ring color can be a function', () => {
- function color(variable) {
- return function ({ opacityVariable, opacityValue }) {
- if (opacityValue !== undefined) {
- return `rgba(${variable}, ${opacityValue})`
- }
- if (opacityVariable !== undefined) {
- return `rgba(${variable}, var(${opacityVariable}, 1))`
- }
- return `rgb(${variable})`
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-theme {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 0 0 / var(--tw-bg-opacity));
}
+ .text-theme {
+ --tw-text-opacity: 1;
+ color: rgb(0 128 0 / var(--tw-text-opacity));
+ }
+ `)
+ })
+})
+
+test('default ring color can be a function', () => {
+ function color(variable) {
+ return function ({ opacityVariable, opacityValue }) {
+ if (opacityValue !== undefined) {
+ return `rgba(${variable}, ${opacityValue})`
+ }
+ if (opacityVariable !== undefined) {
+ return `rgba(${variable}, var(${opacityVariable}, 1))`
+ }
+ return `rgb(${variable})`
}
+ }
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
- theme: {
- extend: {
- ringColor: {
- DEFAULT: color('var(--red)'),
- },
+ theme: {
+ extend: {
+ ringColor: {
+ DEFAULT: color('var(--red)'),
},
},
- plugins: [],
- corePlugins: { preflight: false },
- }
+ },
+ plugins: [],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults({ defaultRingColor: 'rgba(var(--red), 0.5)' })}
- .ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
- var(--tw-shadow, 0 0 #0000);
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults({ defaultRingColor: 'rgba(var(--red), 0.5)' })}
+ .ring {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
+ var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
+ var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+ }
+ `)
})
+})
- it('falsy config values still work', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- inset: {
- 0: 0,
- },
+it('falsy config values still work', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ inset: {
+ 0: 0,
},
- plugins: [],
- corePlugins: { preflight: false },
- }
+ },
+ plugins: [],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .inset-0 {
- inset: 0;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .inset-0 {
+ inset: 0;
+ }
+ `)
})
+})
- it('shadows support values without a leading zero', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- boxShadow: {
- one: '0.5rem 0.5rem 0.5rem #0005',
- two: '.5rem .5rem .5rem #0005',
- },
+it('shadows support values without a leading zero', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ boxShadow: {
+ one: '0.5rem 0.5rem 0.5rem #0005',
+ two: '.5rem .5rem .5rem #0005',
},
- plugins: [],
- corePlugins: { preflight: false },
- }
+ },
+ plugins: [],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .shadow-one,
- .shadow-two {
- --tw-shadow: 0.5rem 0.5rem 0.5rem #0005;
- --tw-shadow-colored: 0.5rem 0.5rem 0.5rem var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .shadow-one,
+ .shadow-two {
+ --tw-shadow: 0.5rem 0.5rem 0.5rem #0005;
+ --tw-shadow-colored: 0.5rem 0.5rem 0.5rem var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
+ var(--tw-shadow);
+ }
+ `)
})
+})
- it('can scan extremely long classes without crashing', () => {
- let val = 'cols-' + '-a'.repeat(65536)
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
+it('can scan extremely long classes without crashing', () => {
+ let val = 'cols-' + '-a'.repeat(65536)
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css``)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css``)
})
+})
- it('does not produce duplicate output when seeing variants preceding a wildcard (*)', () => {
- let config = {
- content: [{ raw: html`underline focus:*` }],
- corePlugins: { preflight: false },
+it('does not produce duplicate output when seeing variants preceding a wildcard (*)', () => {
+ let config = {
+ content: [{ raw: html`underline focus:*` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+
+ * {
+ color: red;
}
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
+ .combined,
+ * {
+ text-align: center;
+ }
+ @layer base {
* {
- color: red;
+ color: blue;
}
+ .combined,
+ * {
+ color: red;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .combined,
+ * {
+ color: red;
+ }
+ ${defaults}
+ .underline {
+ text-decoration-line: underline;
+ }
+ * {
+ color: red;
+ }
.combined,
* {
text-align: center;
}
+ `)
+ })
+})
- @layer base {
- * {
- color: blue;
- }
+it('can parse box shadows with variables', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ boxShadow: {
+ lg: 'var(--a, 0 35px 60px -15px rgba(0, 0, 0)), 0 0 1px rgb(0, 0, 0)',
+ },
+ },
+ corePlugins: { preflight: false },
+ }
- .combined,
- * {
- color: red;
- }
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .shadow-lg {
+ --tw-shadow: var(--a, 0 35px 60px -15px #000), 0 0 1px #000;
+ --tw-shadow-colored: 0 35px 60px -15px var(--tw-shadow-color),
+ 0 0 1px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
+ var(--tw-shadow);
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- * {
- color: #00f;
- }
- .combined,
- * {
- color: red;
- }
- ${defaults}
- .underline {
- text-decoration-line: underline;
- }
- * {
- color: red;
- }
- .combined,
- * {
- text-align: center;
- }
- `)
- })
+ `)
})
+})
- it('can parse box shadows with variables', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- boxShadow: {
- lg: 'var(--a, 0 35px 60px -15px rgba(0, 0, 0)), 0 0 1px rgb(0, 0, 0)',
- },
- },
- corePlugins: { preflight: false },
- }
+it('should generate styles using :not(.unknown-class) even if `.unknown-class` does not exist', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind components;
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .shadow-lg {
- --tw-shadow: var(--a, 0 35px 60px -15px #000), 0 0 1px #000;
- --tw-shadow-colored: 0 35px 60px -15px var(--tw-shadow-color),
- 0 0 1px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- `)
- })
- })
-
- it('should generate styles using :not(.unknown-class) even if `.unknown-class` does not exist', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind components;
-
- @layer components {
- div:not(.unknown-class) {
- color: red;
- }
+ @layer components {
+ div:not(.unknown-class) {
+ color: red;
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- div:not(.unknown-class) {
- color: red;
- }
- `)
- })
- })
-
- it('supports multiple backgrounds as arbitrary values even if only some are quoted', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
}
+ `
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-\[url\(\'\/images\/one-two-three\.png\'\)\,linear-gradient\(to_right\,_\#eeeeee\,_\#000000\)\] {
- background-image: url('/images/one-two-three.png'), linear-gradient(to right, #eee, #000);
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ div:not(.unknown-class) {
+ color: red;
+ }
+ `)
})
+})
- it('The "default" ring opacity is used by the default ring color when not using respectDefaultRingColorOpacity (1)', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults({ defaultRingColor: '#3b82f680' })}
- .ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
- var(--tw-shadow, 0 0 #0000);
- }
- `)
- })
- })
-
- it('The "default" ring opacity is used by the default ring color when not using respectDefaultRingColorOpacity (2)', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- theme: {
- ringOpacity: {
- DEFAULT: 0.75,
- },
+it('supports multiple backgrounds as arbitrary values even if only some are quoted', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
},
- }
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults({ defaultRingColor: '#3b82f6bf' })}
- .ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
- var(--tw-shadow, 0 0 #0000);
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-\[url\(\'\/images\/one-two-three\.png\'\)\,linear-gradient\(to_right\,_\#eeeeee\,_\#000000\)\] {
+ background-image: url('/images/one-two-three.png'), linear-gradient(to right, #eee, #000);
+ }
+ `)
})
+})
- it('Customizing the default ring color uses the "default" opacity when not using respectDefaultRingColorOpacity (1)', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- theme: {
- ringColor: {
- DEFAULT: '#ff7f7f',
- },
+it('The "default" ring opacity is used by the default ring color when not using respectDefaultRingColorOpacity (1)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults({ defaultRingColor: '#3b82f680' })}
+ .ring {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
+ var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
+ var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+ }
+ `)
+ })
+})
+
+it('The "default" ring opacity is used by the default ring color when not using respectDefaultRingColorOpacity (2)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ theme: {
+ ringOpacity: {
+ DEFAULT: 0.75,
},
- }
+ },
+ }
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults({ defaultRingColor: '#ff7f7f80' })}
- .ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
- var(--tw-shadow, 0 0 #0000);
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults({ defaultRingColor: '#3b82f6bf' })}
+ .ring {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
+ var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
+ var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+ }
+ `)
})
+})
- it('Customizing the default ring color uses the "default" opacity when not using respectDefaultRingColorOpacity (2)', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- theme: {
- ringColor: {
- DEFAULT: '#ff7f7f00',
- },
+it('Customizing the default ring color uses the "default" opacity when not using respectDefaultRingColorOpacity (1)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ theme: {
+ ringColor: {
+ DEFAULT: '#ff7f7f',
},
- }
+ },
+ }
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults({ defaultRingColor: '#ff7f7f80' })}
- .ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
- var(--tw-shadow, 0 0 #0000);
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults({ defaultRingColor: '#ff7f7f80' })}
+ .ring {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
+ var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
+ var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+ }
+ `)
})
+})
- it('The "default" ring color ignores the default opacity when using respectDefaultRingColorOpacity (1)', () => {
- let config = {
- future: { respectDefaultRingColorOpacity: true },
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults({ defaultRingColor: '#3b82f67f' })}
- .ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
- var(--tw-shadow, 0 0 #0000);
- }
- `)
- })
- })
-
- it('The "default" ring color ignores the default opacity when using respectDefaultRingColorOpacity (2)', () => {
- let config = {
- future: { respectDefaultRingColorOpacity: true },
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- theme: {
- ringOpacity: {
- DEFAULT: 0.75,
- },
+it('Customizing the default ring color uses the "default" opacity when not using respectDefaultRingColorOpacity (2)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ theme: {
+ ringColor: {
+ DEFAULT: '#ff7f7f00',
},
- }
+ },
+ }
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults({ defaultRingColor: '#3b82f67f' })}
- .ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
- var(--tw-shadow, 0 0 #0000);
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults({ defaultRingColor: '#ff7f7f80' })}
+ .ring {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
+ var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
+ var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+ }
+ `)
})
+})
- it('Customizing the default ring color preserves its opacity when using respectDefaultRingColorOpacity (1)', () => {
- let config = {
- future: { respectDefaultRingColorOpacity: true },
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- theme: {
- ringColor: {
- DEFAULT: '#ff7f7f',
- },
- },
- }
+it('The "default" ring color ignores the default opacity when using respectDefaultRingColorOpacity (1)', () => {
+ let config = {
+ future: { respectDefaultRingColorOpacity: true },
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults({ defaultRingColor: '#ff7f7f' })}
- .ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
- var(--tw-shadow, 0 0 #0000);
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults({ defaultRingColor: '#3b82f67f' })}
+ .ring {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
+ var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
+ var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+ }
+ `)
})
+})
- it('Customizing the default ring color preserves its opacity when using respectDefaultRingColorOpacity (2)', () => {
- let config = {
- future: { respectDefaultRingColorOpacity: true },
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- theme: {
- ringColor: {
- DEFAULT: '#ff7f7f00',
- },
+it('The "default" ring color ignores the default opacity when using respectDefaultRingColorOpacity (2)', () => {
+ let config = {
+ future: { respectDefaultRingColorOpacity: true },
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ theme: {
+ ringOpacity: {
+ DEFAULT: 0.75,
},
- }
+ },
+ }
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults({ defaultRingColor: '#ff7f7f00' })}
- .ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
- var(--tw-shadow, 0 0 #0000);
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults({ defaultRingColor: '#3b82f67f' })}
+ .ring {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
+ var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
+ var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+ }
+ `)
})
+})
- it('A bare ring-opacity utility is not supported when not using respectDefaultRingColorOpacity', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- theme: {
- ringOpacity: {
- DEFAULT: '0.33',
- },
+it('Customizing the default ring color preserves its opacity when using respectDefaultRingColorOpacity (1)', () => {
+ let config = {
+ future: { respectDefaultRingColorOpacity: true },
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ theme: {
+ ringColor: {
+ DEFAULT: '#ff7f7f',
},
- }
+ },
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults({ defaultRingColor: '#ff7f7f' })}
+ .ring {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
+ var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
+ var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+ }
+ `)
+ })
+})
+
+it('Customizing the default ring color preserves its opacity when using respectDefaultRingColorOpacity (2)', () => {
+ let config = {
+ future: { respectDefaultRingColorOpacity: true },
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ theme: {
+ ringColor: {
+ DEFAULT: '#ff7f7f00',
+ },
+ },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults({ defaultRingColor: '#ff7f7f00' })}
+ .ring {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
+ var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
+ var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+ }
+ `)
+ })
+})
+
+it('A bare ring-opacity utility is not supported when not using respectDefaultRingColorOpacity', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ theme: {
+ ringOpacity: {
+ DEFAULT: '0.33',
+ },
+ },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css``)
+ })
+})
+
+test('A bare ring-opacity utility is supported when using respectDefaultRingColorOpacity', () => {
+ let config = {
+ future: { respectDefaultRingColorOpacity: true },
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ theme: {
+ ringOpacity: {
+ DEFAULT: '0.33',
+ },
+ },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .ring-opacity {
+ --tw-ring-opacity: 0.33;
+ }
+ `)
+ })
+})
+
+it('Ring color utilities are generated when using respectDefaultRingColorOpacity', () => {
+ let config = {
+ future: { respectDefaultRingColorOpacity: true },
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .ring {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
+ var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
+ var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+ }
+ .ring-blue-500 {
+ --tw-ring-opacity: 1;
+ --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
+ }
+ `)
+ })
+})
+
+test('should not crash when group names contain special characters', () => {
+ let config = {
+ future: { respectDefaultRingColorOpacity: true },
+ content: [
+ {
+ raw: '
',
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ if (flagEnabled(config, 'oxideParser')) {
expect(result.css).toMatchFormattedCss(css``)
- })
- })
-
- test('A bare ring-opacity utility is supported when using respectDefaultRingColorOpacity', () => {
- let config = {
- future: { respectDefaultRingColorOpacity: true },
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- theme: {
- ringOpacity: {
- DEFAULT: '0.33',
- },
- },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .ring-opacity {
- --tw-ring-opacity: 0.33;
- }
- `)
- // The opacity plugins are disabled by default in the `oxide` engine
- oxide.expect(result.css).toMatchFormattedCss(css``)
- })
- })
-
- it('Ring color utilities are generated when using respectDefaultRingColorOpacity', () => {
- let config = {
- future: { respectDefaultRingColorOpacity: true },
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
- var(--tw-shadow, 0 0 #0000);
- }
- .ring-blue-500 {
- --tw-ring-opacity: 1;
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
- var(--tw-shadow, 0 0 #0000);
- }
- .ring-blue-500 {
- --tw-ring-color: #3b82f6;
- }
- `)
- })
- })
-
- oxide.test.todo('should not crash when group names contain special characters')
- stable.test('should not crash when group names contain special characters', () => {
- let config = {
- future: { respectDefaultRingColorOpacity: true },
- content: [
- {
- raw: '
',
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
+ } else {
expect(result.css).toMatchFormattedCss(css`
.group\/\$\{id\}:hover .group-hover\/\$\{id\}\:visible {
visibility: visible;
}
`)
- })
- })
-
- it('should not crash when matching variants where utility classes are doubled up', () => {
- let config = {
- content: [
- {
- raw: '
',
- },
- ],
}
-
- let input = css`
- @tailwind utilities;
- @layer utilities {
- .foo.foo {
- text-decoration-line: underline;
- }
- }
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .hover\:foo:hover.hover\:foo:hover {
- text-decoration-line: underline;
- }
- `)
- })
})
+})
- test('detects quoted arbitrary values containing a slash', async () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
+it('should not crash when matching variants where utility classes are doubled up', () => {
+ let config = {
+ content: [
+ {
+ raw: '
',
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
+ .foo.foo {
+ text-decoration-line: underline;
+ }
}
+ `
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- oxide.expect(result.css).toMatchFormattedCss(css`
- .group[href^='/'] .group-\[\[href\^\=\'\/\'\]\]\:hidden {
- display: none;
- }
- `)
-
- stable.expect(result.css).toMatchFormattedCss(css`
- .hidden,
- .group[href^='/'] .group-\[\[href\^\=\'\/\'\]\]\:hidden {
- display: none;
- }
- `)
- })
-
- test('handled quoted arbitrary values containing escaped spaces', async () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- oxide.expect(result.css).toMatchFormattedCss(css`
- .group[href^=' bar'] .group-\[\[href\^\=\'_bar\'\]\]\:hidden {
- display: none;
- }
- `)
-
- stable.expect(result.css).toMatchFormattedCss(css`
- .hidden,
- .group[href^=' bar'] .group-\[\[href\^\=\'_bar\'\]\]\:hidden {
- display: none;
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .hover\:foo:hover.hover\:foo:hover {
+ text-decoration-line: underline;
}
`)
})
})
+
+test('detects quoted arbitrary values containing a slash', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(
+ flagEnabled(config, 'oxideParser')
+ ? css`
+ .group[href^='/'] .group-\[\[href\^\=\'\/\'\]\]\:hidden {
+ display: none;
+ }
+ `
+ : css`
+ .hidden,
+ .group[href^='/'] .group-\[\[href\^\=\'\/\'\]\]\:hidden {
+ display: none;
+ }
+ `
+ )
+})
+
+test('handled quoted arbitrary values containing escaped spaces', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(
+ flagEnabled(config, 'oxideParser')
+ ? css`
+ .group[href^=' bar'] .group-\[\[href\^\=\'_bar\'\]\]\:hidden {
+ display: none;
+ }
+ `
+ : css`
+ .hidden,
+ .group[href^=' bar'] .group-\[\[href\^\=\'_bar\'\]\]\:hidden {
+ display: none;
+ }
+ `
+ )
+})
+
+test('Skips classes inside :not() when nested inside an at-rule', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ function ({ addUtilities }) {
+ addUtilities({
+ '.hand:not(.disabled)': {
+ '@supports (cursor: pointer)': {
+ cursor: 'pointer',
+ },
+ },
+ })
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ // We didn't find the hand class therefore
+ // nothing should be generated
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css``)
+})
+
+test('Irrelevant rules are removed when applying variants', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ function ({ addUtilities }) {
+ addUtilities({
+ '@supports (foo: bar)': {
+ // This doesn't contain `w-full` so it should not exist in the output
+ '.outer': { color: 'red' },
+ '.outer:is(.w-full)': { color: 'green' },
+ },
+ })
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ // We didn't find the hand class therefore
+ // nothing should be generated
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 768px) {
+ .md\:w-full {
+ width: 100%;
+ }
+ @supports (foo: bar) {
+ .outer.md\:w-full {
+ color: green;
+ }
+ }
+ }
+ `)
+})
diff --git a/tests/blocklist.test.js b/tests/blocklist.test.js
index 3642aa376..e9915350f 100644
--- a/tests/blocklist.test.js
+++ b/tests/blocklist.test.js
@@ -1,126 +1,107 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(({ stable, oxide }) => {
- it('can block classes matched literally', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- blocklist: ['font', 'uppercase', 'hover:text-sm', 'bg-red-500/50', 'my-custom-class'],
+it('can block classes matched literally', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ blocklist: ['font', 'uppercase', 'hover:text-sm', 'bg-red-500/50', 'my-custom-class'],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ .my-custom-class {
+ color: red;
}
+ `
- let input = css`
- @tailwind utilities;
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .font-bold {
+ font-weight: 700;
+ }
.my-custom-class {
color: red;
}
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .font-bold {
- font-weight: 700;
+ @media (min-width: 640px) {
+ .sm\:hover\:text-sm:hover {
+ font-size: 0.875rem;
+ line-height: 1.25rem;
}
- .my-custom-class {
- color: red;
- }
- @media (min-width: 640px) {
- .sm\:hover\:text-sm:hover {
- font-size: 0.875rem;
- line-height: 1.25rem;
- }
- }
- `)
- })
- })
-
- it('can block classes inside @layer', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- blocklist: ['my-custom-class'],
- }
-
- let input = css`
- @tailwind utilities;
- @layer utilities {
- .my-custom-class {
- color: red;
- }
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .font-bold {
- font-weight: 700;
- }
- `)
- })
- })
-
- it('blocklists do NOT support regexes', async () => {
- let config = {
- content: [{ raw: html`
` }],
- blocklist: [/^bg-\[[^]+\]$/],
- }
-
- let result = await run('@tailwind utilities', config)
-
- stable.expect(result.css).toMatchFormattedCss(css`
- .bg-\[\#f00d1e\] {
- --tw-bg-opacity: 1;
- background-color: rgb(240 13 30 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
}
`)
-
- oxide.expect(result.css).toMatchFormattedCss(css`
- .bg-\[\#f00d1e\] {
- background-color: #f00d1e;
- }
- .font-bold {
- font-weight: 700;
- }
- `)
-
- expect().toHaveBeenWarnedWith(['blocklist-invalid'])
- })
-
- it('can block classes generated by the safelist', () => {
- let config = {
- content: [{ raw: html`
` }],
- safelist: [{ pattern: /^bg-red-(400|500)$/ }],
- blocklist: ['bg-red-500'],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .bg-red-400 {
- --tw-bg-opacity: 1;
- background-color: rgb(248 113 113 / var(--tw-bg-opacity));
- }
- .font-bold {
- font-weight: 700;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .bg-red-400 {
- background-color: #f87171;
- }
- .font-bold {
- font-weight: 700;
- }
- `)
- })
+ })
+})
+
+it('can block classes inside @layer', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ blocklist: ['my-custom-class'],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
+ .my-custom-class {
+ color: red;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .font-bold {
+ font-weight: 700;
+ }
+ `)
+ })
+})
+
+it('blocklists do NOT support regexes', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ blocklist: [/^bg-\[[^]+\]$/],
+ }
+
+ let result = await run('@tailwind utilities', config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-\[\#f00d1e\] {
+ --tw-bg-opacity: 1;
+ background-color: rgb(240 13 30 / var(--tw-bg-opacity));
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ `)
+
+ expect().toHaveBeenWarnedWith(['blocklist-invalid'])
+})
+
+it('can block classes generated by the safelist', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ safelist: [{ pattern: /^bg-red-(400|500)$/ }],
+ blocklist: ['bg-red-500'],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-red-400 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(248 113 113 / var(--tw-bg-opacity));
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ `)
})
})
diff --git a/tests/collapse-adjacent-rules.test.js b/tests/collapse-adjacent-rules.test.js
index 4dbaab769..69c471686 100644
--- a/tests/collapse-adjacent-rules.test.js
+++ b/tests/collapse-adjacent-rules.test.js
@@ -1,114 +1,119 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(({ stable, oxide }) => {
- test('collapse adjacent rules', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {},
- plugins: [
- function ({ addVariant }) {
- addVariant('foo-bar', '@supports (foo: bar)')
- },
- ],
+test('collapse adjacent rules', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {},
+ plugins: [
+ function ({ addVariant }) {
+ addVariant('foo-bar', '@supports (foo: bar)')
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind base;
+ @font-face {
+ font-family: 'Inter';
+ src: url('/fonts/Inter.woff2') format('woff2'), url('/fonts/Inter.woff') format('woff');
}
-
- let input = css`
- @tailwind base;
+ @font-face {
+ font-family: 'Gilroy';
+ src: url('/fonts/Gilroy.woff2') format('woff2'), url('/fonts/Gilroy.woff') format('woff');
+ }
+ @page {
+ margin: 1cm;
+ }
+ @tailwind components;
+ @tailwind utilities;
+ @layer base {
@font-face {
- font-family: 'Inter';
+ font-family: 'Poppins';
+ src: url('/fonts/Poppins.woff2') format('woff2'), url('/fonts/Poppins.woff') format('woff');
+ }
+ @font-face {
+ font-family: 'Proxima Nova';
+ src: url('/fonts/ProximaNova.woff2') format('woff2'),
+ url('/fonts/ProximaNova.woff') format('woff');
+ }
+ }
+ .foo,
+ .bar {
+ color: black;
+ }
+ .foo,
+ .bar {
+ font-weight: 700;
+ }
+ .some-apply-thing {
+ @apply foo-bar:md:text-black foo-bar:md:font-bold foo-bar:text-black foo-bar:font-bold md:font-bold md:text-black;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @font-face {
+ font-family: Poppins;
+ src: url('/fonts/Poppins.woff2') format('woff2'), url('/fonts/Poppins.woff') format('woff');
+ }
+ @font-face {
+ font-family: Proxima Nova;
+ src: url('/fonts/ProximaNova.woff2') format('woff2'),
+ url('/fonts/ProximaNova.woff') format('woff');
+ }
+ ${defaults}
+ @font-face {
+ font-family: Inter;
src: url('/fonts/Inter.woff2') format('woff2'), url('/fonts/Inter.woff') format('woff');
}
@font-face {
- font-family: 'Gilroy';
+ font-family: Gilroy;
src: url('/fonts/Gilroy.woff2') format('woff2'), url('/fonts/Gilroy.woff') format('woff');
}
@page {
margin: 1cm;
}
- @tailwind components;
- @tailwind utilities;
- @layer base {
- @font-face {
- font-family: 'Poppins';
- src: url('/fonts/Poppins.woff2') format('woff2'),
- url('/fonts/Poppins.woff') format('woff');
- }
- @font-face {
- font-family: 'Proxima Nova';
- src: url('/fonts/ProximaNova.woff2') format('woff2'),
- url('/fonts/ProximaNova.woff') format('woff');
- }
- }
- .foo,
- .bar {
- color: black;
- }
- .foo,
- .bar {
+ .font-bold {
font-weight: 700;
}
- .some-apply-thing {
- @apply foo-bar:md:text-black foo-bar:md:font-bold foo-bar:text-black foo-bar:font-bold md:font-bold md:text-black;
+ .foo,
+ .bar {
+ color: #000;
+ font-weight: 700;
}
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- @font-face {
- font-family: Poppins;
- src: url('/fonts/Poppins.woff2') format('woff2'),
- url('/fonts/Poppins.woff') format('woff');
- }
- @font-face {
- font-family: Proxima Nova;
- src: url('/fonts/ProximaNova.woff2') format('woff2'),
- url('/fonts/ProximaNova.woff') format('woff');
- }
- ${defaults}
- @font-face {
- font-family: Inter;
- src: url('/fonts/Inter.woff2') format('woff2'), url('/fonts/Inter.woff') format('woff');
- }
- @font-face {
- font-family: Gilroy;
- src: url('/fonts/Gilroy.woff2') format('woff2'), url('/fonts/Gilroy.woff') format('woff');
- }
- @page {
- margin: 1cm;
- }
- .font-bold {
+ @supports (foo: bar) {
+ .some-apply-thing {
+ --tw-text-opacity: 1;
+ color: rgb(0 0 0 / var(--tw-text-opacity));
font-weight: 700;
}
- .foo,
- .bar {
- color: #000;
+ }
+ @media (min-width: 768px) {
+ .some-apply-thing {
+ --tw-text-opacity: 1;
+ color: rgb(0 0 0 / var(--tw-text-opacity));
font-weight: 700;
}
- @supports (foo: bar) {
- .some-apply-thing {
- --tw-text-opacity: 1;
- color: rgb(0 0 0 / var(--tw-text-opacity));
- font-weight: 700;
- }
- }
+ }
+ @supports (foo: bar) {
@media (min-width: 768px) {
.some-apply-thing {
--tw-text-opacity: 1;
@@ -116,134 +121,49 @@ crosscheck(({ stable, oxide }) => {
font-weight: 700;
}
}
- @supports (foo: bar) {
- @media (min-width: 768px) {
- .some-apply-thing {
- --tw-text-opacity: 1;
- color: rgb(0 0 0 / var(--tw-text-opacity));
- font-weight: 700;
- }
- }
+ }
+ @media (min-width: 640px) {
+ .sm\:text-center {
+ text-align: center;
}
- @media (min-width: 640px) {
- .sm\:text-center {
- text-align: center;
- }
- .sm\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 768px) {
- .md\:text-center {
- text-align: center;
- }
- .md\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 1024px) {
- .lg\:text-center {
- text-align: center;
- }
- .lg\:font-bold {
- font-weight: 700;
- }
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- @font-face {
- font-family: Poppins;
- src: url('/fonts/Poppins.woff2') format('woff2'),
- url('/fonts/Poppins.woff') format('woff');
- }
- @font-face {
- font-family: Proxima Nova;
- src: url('/fonts/ProximaNova.woff2') format('woff2'),
- url('/fonts/ProximaNova.woff') format('woff');
- }
- ${defaults}
- @font-face {
- font-family: Inter;
- src: url('/fonts/Inter.woff2') format('woff2'), url('/fonts/Inter.woff') format('woff');
- }
- @font-face {
- font-family: Gilroy;
- src: url('/fonts/Gilroy.woff2') format('woff2'), url('/fonts/Gilroy.woff') format('woff');
- }
- @page {
- margin: 1cm;
- }
- .font-bold {
+ .sm\:font-bold {
font-weight: 700;
}
- .foo,
- .bar {
- color: #000;
+ }
+ @media (min-width: 768px) {
+ .md\:text-center {
+ text-align: center;
+ }
+ .md\:font-bold {
font-weight: 700;
}
- @supports (foo: bar) {
- .some-apply-thing {
- color: #000;
- font-weight: 700;
- }
+ }
+ @media (min-width: 1024px) {
+ .lg\:text-center {
+ text-align: center;
}
- @media (min-width: 768px) {
- .some-apply-thing {
- color: #000;
- font-weight: 700;
- }
+ .lg\:font-bold {
+ font-weight: 700;
}
- @supports (foo: bar) {
- @media (min-width: 768px) {
- .some-apply-thing {
- color: #000;
- font-weight: 700;
- }
- }
- }
- @media (min-width: 640px) {
- .sm\:text-center {
- text-align: center;
- }
- .sm\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 768px) {
- .md\:text-center {
- text-align: center;
- }
- .md\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 1024px) {
- .lg\:text-center {
- text-align: center;
- }
- .lg\:font-bold {
- font-weight: 700;
- }
- }
- `)
- })
- })
-
- test('duplicate url imports does not break rule collapsing', () => {
- let config = {
- content: [{ raw: html`` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @import url('https://example.com');
- @import url('https://example.com');
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @import 'https://example.com';
- `)
- })
+ }
+ `)
+ })
+})
+
+test('duplicate url imports does not break rule collapsing', () => {
+ let config = {
+ content: [{ raw: html`` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @import url('https://example.com');
+ @import url('https://example.com');
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @import 'https://example.com';
+ `)
})
})
diff --git a/tests/collapse-duplicate-declarations.test.js b/tests/collapse-duplicate-declarations.test.js
index 128eb9bef..7c5506895 100644
--- a/tests/collapse-duplicate-declarations.test.js
+++ b/tests/collapse-duplicate-declarations.test.js
@@ -1,177 +1,174 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- it('should collapse duplicate declarations with the same units (px)', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [],
- }
+it('should collapse duplicate declarations with the same units (px)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ plugins: [],
+ }
- let input = css`
- @tailwind utilities;
+ let input = css`
+ @tailwind utilities;
- @layer utilities {
- .example {
- height: 100px;
- height: 200px;
- }
+ @layer utilities {
+ .example {
+ height: 100px;
+ height: 200px;
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .example {
- height: 200px;
- }
- `)
- })
- })
-
- it('should collapse duplicate declarations with the same units (no unit)', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [],
}
+ `
- let input = css`
- @tailwind utilities;
-
- @layer utilities {
- .example {
- line-height: 3;
- line-height: 2;
- }
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .example {
+ height: 200px;
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .example {
- line-height: 2;
- }
- `)
- })
- })
-
- it('should not collapse duplicate declarations with the different units', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
-
- @layer utilities {
- .example {
- height: 100px;
- height: 50%;
- }
- }
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .example {
- height: 100px;
- height: 50%;
- }
- `)
- })
- })
-
- it('should collapse the duplicate declarations with the same unit, but leave the ones with different units', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
-
- @layer utilities {
- .example {
- height: 100px;
- height: 50%;
- height: 20vh;
- height: 200px;
- height: 100%;
- height: 30vh;
- }
- }
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .example {
- height: 200px;
- height: 100%;
- height: 30vh;
- }
- `)
- })
- })
-
- it('should collapse the duplicate declarations with the exact same value', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
-
- @layer utilities {
- .example {
- height: var(--value);
- color: blue;
- height: var(--value);
- }
- }
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .example {
- color: #00f;
- height: var(--value);
- }
- `)
- })
- })
-
- it('should work on a real world example', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
-
- @layer utilities {
- .h-available {
- height: 100%;
- height: 100vh;
- height: -webkit-fill-available;
- }
- }
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .h-available {
- height: 100%;
- height: 100vh;
- height: -webkit-fill-available;
- }
- `)
- })
+ `)
+ })
+})
+
+it('should collapse duplicate declarations with the same units (no unit)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ @layer utilities {
+ .example {
+ line-height: 3;
+ line-height: 2;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .example {
+ line-height: 2;
+ }
+ `)
+ })
+})
+
+it('should not collapse duplicate declarations with the different units', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ @layer utilities {
+ .example {
+ height: 100px;
+ height: 50%;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .example {
+ height: 50%;
+ }
+ `)
+ })
+})
+
+it('should collapse the duplicate declarations with the same unit, but leave the ones with different units', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ @layer utilities {
+ .example {
+ height: 100px;
+ height: 50%;
+ height: 20vh;
+ height: 200px;
+ height: 100%;
+ height: 30vh;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .example {
+ height: 30vh;
+ }
+ `)
+ })
+})
+
+it('should collapse the duplicate declarations with the exact same value', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ @layer utilities {
+ .example {
+ height: var(--value);
+ color: blue;
+ height: var(--value);
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .example {
+ color: #00f;
+ height: var(--value);
+ }
+ `)
+ })
+})
+
+it('should work on a real world example', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ @layer utilities {
+ .h-available {
+ height: 100%;
+ height: 100vh;
+ height: -moz-available;
+ height: -webkit-fill-available;
+ }
+ }
+ `
+
+ // TODO: This seems like a bug with compat data
+ // `-moz-available` should still be listed
+ // and most like `100vh` as well
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .h-available {
+ height: -webkit-fill-available;
+ }
+ `)
})
})
diff --git a/tests/color-opacity-modifiers.test.js b/tests/color-opacity-modifiers.test.js
index 8da4d38c2..a4600a495 100644
--- a/tests/color-opacity-modifiers.test.js
+++ b/tests/color-opacity-modifiers.test.js
@@ -1,264 +1,234 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(({ stable, oxide }) => {
- test('basic color opacity modifier', async () => {
- let config = {
- content: [{ raw: html`
` }],
- }
+test('basic color opacity modifier', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-red-500\/50 {
- background-color: #ef444480;
- }
- `)
- })
- })
-
- test('colors with slashes are matched first', async () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- extend: {
- colors: {
- 'red-500/50': '#ff0000',
- },
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .bg-red-500\/50 {
- --tw-bg-opacity: 1;
- background-color: rgb(255 0 0 / var(--tw-bg-opacity));
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .bg-red-500\/50 {
- background-color: red;
- }
- `)
- })
- })
-
- test('arbitrary color opacity modifier', async () => {
- let config = {
- content: [{ raw: html`
` }],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-red-500\/\[var\(--opacity\)\] {
- background-color: rgb(239 68 68 / var(--opacity));
- }
- `)
- })
- })
-
- test('missing alpha generates nothing', async () => {
- let config = {
- content: [{ raw: html`
` }],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(``)
- })
- })
-
- test('arbitrary color with opacity from scale', async () => {
- let config = {
- content: [{ raw: 'bg-[wheat]/50' }],
- theme: {},
- plugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-\[wheat\]\/50 {
- background-color: #f5deb380;
- }
- `)
- })
- })
-
- test('arbitrary color with arbitrary opacity', async () => {
- let config = {
- content: [{ raw: 'bg-[#bada55]/[0.2]' }],
- theme: {},
- plugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-\[\#bada55\]\/\[0\.2\] {
- background-color: #bada5533;
- }
- `)
- })
- })
-
- test('undefined theme color with opacity from scale', async () => {
- let config = {
- content: [{ raw: 'bg-garbage/50' }],
- theme: {},
- plugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(``)
- })
- })
-
- test('values not in the opacity config are ignored', async () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- opacity: {
- 0: '0',
- 25: '0.25',
- 5: '0.5',
- 75: '0.75',
- 100: '1',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(``)
- })
- })
-
- test('function colors are supported', async () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- colors: {
- blue: ({ opacityValue }) => {
- return `rgba(var(--colors-blue), ${opacityValue})`
- },
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-blue\/50 {
- background-color: rgba(var(--colors-blue), 0.5);
- }
- `)
- })
- })
-
- test('utilities that support any type are supported', async () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
- `,
- },
- ],
- theme: {
- extend: {
- fill: (theme) => theme('colors'),
- },
- },
- plugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .from-red-500\/50 {
- --tw-gradient-from: #ef444480 var(--tw-gradient-from-position);
- --tw-gradient-to: #ef444400 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
- }
- .fill-red-500\/25 {
- fill: #ef444440;
- }
- .placeholder-red-500\/75::placeholder {
- color: #ef4444bf;
- }
- `)
- })
- })
-
- test('opacity modifier in combination with partial custom properties', async () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .bg-\[hsl\(123\,50\%\,var\(--foo\)\)\] {
- --tw-bg-opacity: 1;
- background-color: hsl(123 50% var(--foo) / var(--tw-bg-opacity));
- }
- .bg-\[hsl\(123\,50\%\,var\(--foo\)\)\]\/50 {
- background-color: hsl(123 50% var(--foo) / 0.5);
- }
- .bg-\[hsl\(123\,var\(--foo\)\,50\%\)\] {
- --tw-bg-opacity: 1;
- background-color: hsl(123 var(--foo) 50% / var(--tw-bg-opacity));
- }
- .bg-\[hsl\(123\,var\(--foo\)\,50\%\)\]\/50 {
- background-color: hsl(123 var(--foo) 50% / 0.5);
- }
- .bg-\[hsl\(var\(--foo\)\,50\%\,50\%\)\] {
- --tw-bg-opacity: 1;
- background-color: hsl(var(--foo) 50% 50% / var(--tw-bg-opacity));
- }
- .bg-\[hsl\(var\(--foo\)\,50\%\,50\%\)\]\/50 {
- background-color: hsl(var(--foo) 50% 50% / 0.5);
- }
- .bg-\[hsl\(var\(--foo\)\,var\(--bar\)\,var\(--baz\)\)\]\/50 {
- background-color: hsl(var(--foo) var(--bar) var(--baz) / 0.5);
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .bg-\[hsl\(123\,50\%\,var\(--foo\)\)\] {
- background-color: hsl(123, 50%, var(--foo));
- }
- .bg-\[hsl\(123\,50\%\,var\(--foo\)\)\]\/50 {
- background-color: hsl(123 50% var(--foo) / 0.5);
- }
- .bg-\[hsl\(123\,var\(--foo\)\,50\%\)\] {
- background-color: hsl(123, var(--foo), 50%);
- }
- .bg-\[hsl\(123\,var\(--foo\)\,50\%\)\]\/50 {
- background-color: hsl(123 var(--foo) 50% / 0.5);
- }
- .bg-\[hsl\(var\(--foo\)\,50\%\,50\%\)\] {
- background-color: hsl(var(--foo), 50%, 50%);
- }
- .bg-\[hsl\(var\(--foo\)\,50\%\,50\%\)\]\/50 {
- background-color: hsl(var(--foo) 50% 50% / 0.5);
- }
- .bg-\[hsl\(var\(--foo\)\,var\(--bar\)\,var\(--baz\)\)\]\/50 {
- background-color: hsl(var(--foo) var(--bar) var(--baz) / 0.5);
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-red-500\/50 {
+ background-color: #ef444480;
+ }
+ `)
+ })
+})
+
+test('colors with slashes are matched first', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ extend: {
+ colors: {
+ 'red-500/50': '#ff0000',
+ },
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-red-500\/50 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 0 0 / var(--tw-bg-opacity));
+ }
+ `)
+ })
+})
+
+test('arbitrary color opacity modifier', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-red-500\/\[var\(--opacity\)\] {
+ background-color: rgb(239 68 68 / var(--opacity));
+ }
+ `)
+ })
+})
+
+test('missing alpha generates nothing', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(``)
+ })
+})
+
+test('arbitrary color with opacity from scale', async () => {
+ let config = {
+ content: [{ raw: 'bg-[wheat]/50' }],
+ theme: {},
+ plugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-\[wheat\]\/50 {
+ background-color: #f5deb380;
+ }
+ `)
+ })
+})
+
+test('arbitrary color with arbitrary opacity', async () => {
+ let config = {
+ content: [{ raw: 'bg-[#bada55]/[0.2]' }],
+ theme: {},
+ plugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-\[\#bada55\]\/\[0\.2\] {
+ background-color: #bada5533;
+ }
+ `)
+ })
+})
+
+test('undefined theme color with opacity from scale', async () => {
+ let config = {
+ content: [{ raw: 'bg-garbage/50' }],
+ theme: {},
+ plugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(``)
+ })
+})
+
+test('values not in the opacity config are ignored', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ opacity: {
+ 0: '0',
+ 25: '0.25',
+ 5: '0.5',
+ 75: '0.75',
+ 100: '1',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(``)
+ })
+})
+
+test('function colors are supported', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ colors: {
+ blue: ({ opacityValue }) => {
+ return `rgba(var(--colors-blue), ${opacityValue})`
+ },
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-blue\/50 {
+ background-color: rgba(var(--colors-blue), 0.5);
+ }
+ `)
+ })
+})
+
+test('utilities that support any type are supported', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+ `,
+ },
+ ],
+ theme: {
+ extend: {
+ fill: (theme) => theme('colors'),
+ },
+ },
+ plugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .from-red-500\/50 {
+ --tw-gradient-from: #ef444480 var(--tw-gradient-from-position);
+ --tw-gradient-to: #ef444400 var(--tw-gradient-to-position);
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+ }
+ .fill-red-500\/25 {
+ fill: #ef444440;
+ }
+ .placeholder-red-500\/75::placeholder {
+ color: #ef4444bf;
+ }
+ `)
+ })
+})
+
+test('opacity modifier in combination with partial custom properties', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-\[hsl\(123\,50\%\,var\(--foo\)\)\] {
+ --tw-bg-opacity: 1;
+ background-color: hsl(123 50% var(--foo) / var(--tw-bg-opacity));
+ }
+ .bg-\[hsl\(123\,50\%\,var\(--foo\)\)\]\/50 {
+ background-color: hsl(123 50% var(--foo) / 0.5);
+ }
+ .bg-\[hsl\(123\,var\(--foo\)\,50\%\)\] {
+ --tw-bg-opacity: 1;
+ background-color: hsl(123 var(--foo) 50% / var(--tw-bg-opacity));
+ }
+ .bg-\[hsl\(123\,var\(--foo\)\,50\%\)\]\/50 {
+ background-color: hsl(123 var(--foo) 50% / 0.5);
+ }
+ .bg-\[hsl\(var\(--foo\)\,50\%\,50\%\)\] {
+ --tw-bg-opacity: 1;
+ background-color: hsl(var(--foo) 50% 50% / var(--tw-bg-opacity));
+ }
+ .bg-\[hsl\(var\(--foo\)\,50\%\,50\%\)\]\/50 {
+ background-color: hsl(var(--foo) 50% 50% / 0.5);
+ }
+ .bg-\[hsl\(var\(--foo\)\,var\(--bar\)\,var\(--baz\)\)\]\/50 {
+ background-color: hsl(var(--foo) var(--bar) var(--baz) / 0.5);
+ }
+ `)
})
})
diff --git a/tests/color.test.js b/tests/color.test.js
index be1d85924..0b0c6dd0f 100644
--- a/tests/color.test.js
+++ b/tests/color.test.js
@@ -1,96 +1,93 @@
import { parseColor, formatColor } from '../src/util/color'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- describe('parseColor', () => {
- it.each`
- color | output
- ${'black'} | ${{ mode: 'rgb', color: ['0', '0', '0'], alpha: undefined }}
- ${'#0088cc'} | ${{ mode: 'rgb', color: ['0', '136', '204'], alpha: undefined }}
- ${'#08c'} | ${{ mode: 'rgb', color: ['0', '136', '204'], alpha: undefined }}
- ${'#0088cc99'} | ${{ mode: 'rgb', color: ['0', '136', '204'], alpha: '0.6' }}
- ${'#08c9'} | ${{ mode: 'rgb', color: ['0', '136', '204'], alpha: '0.6' }}
- ${'rgb(0, 30, 60)'} | ${{ mode: 'rgb', color: ['0', '30', '60'], alpha: undefined }}
- ${'rgba(0, 30, 60, 0.5)'} | ${{ mode: 'rgba', color: ['0', '30', '60'], alpha: '0.5' }}
- ${'rgb(0 30 60)'} | ${{ mode: 'rgb', color: ['0', '30', '60'], alpha: undefined }}
- ${'rgb(0 30 60 / 0.5)'} | ${{ mode: 'rgb', color: ['0', '30', '60'], alpha: '0.5' }}
- ${'rgb(var(--foo), 30, 60)'} | ${{ mode: 'rgb', color: ['var(--foo)', '30', '60'], alpha: undefined }}
- ${'rgb(0, var(--foo), 60)'} | ${{ mode: 'rgb', color: ['0', 'var(--foo)', '60'], alpha: undefined }}
- ${'rgb(0, 30, var(--foo))'} | ${{ mode: 'rgb', color: ['0', '30', 'var(--foo)'], alpha: undefined }}
- ${'rgb(0, 30, var(--foo), 0.5)'} | ${{ mode: 'rgb', color: ['0', '30', 'var(--foo)'], alpha: '0.5' }}
- ${'rgb(var(--foo), 30, var(--bar))'} | ${{ mode: 'rgb', color: ['var(--foo)', '30', 'var(--bar)'], alpha: undefined }}
- ${'rgb(var(--foo), var(--bar), var(--baz))'} | ${{ mode: 'rgb', color: ['var(--foo)', 'var(--bar)', 'var(--baz)'], alpha: undefined }}
- ${'rgb(var(--foo) 30 60)'} | ${{ mode: 'rgb', color: ['var(--foo)', '30', '60'], alpha: undefined }}
- ${'rgb(0 var(--foo) 60)'} | ${{ mode: 'rgb', color: ['0', 'var(--foo)', '60'], alpha: undefined }}
- ${'rgb(0 30 var(--foo))'} | ${{ mode: 'rgb', color: ['0', '30', 'var(--foo)'], alpha: undefined }}
- ${'rgb(0 30 var(--foo) / 0.5)'} | ${{ mode: 'rgb', color: ['0', '30', 'var(--foo)'], alpha: '0.5' }}
- ${'rgb(var(--foo) 30 var(--bar))'} | ${{ mode: 'rgb', color: ['var(--foo)', '30', 'var(--bar)'], alpha: undefined }}
- ${'rgb(var(--foo) var(--bar) var(--baz))'} | ${{ mode: 'rgb', color: ['var(--foo)', 'var(--bar)', 'var(--baz)'], alpha: undefined }}
- ${'hsl(0, 30%, 60%)'} | ${{ mode: 'hsl', color: ['0', '30%', '60%'], alpha: undefined }}
- ${'hsl(0deg, 30%, 60%)'} | ${{ mode: 'hsl', color: ['0deg', '30%', '60%'], alpha: undefined }}
- ${'hsl(0rad, 30%, 60%)'} | ${{ mode: 'hsl', color: ['0rad', '30%', '60%'], alpha: undefined }}
- ${'hsl(0grad, 30%, 60%)'} | ${{ mode: 'hsl', color: ['0grad', '30%', '60%'], alpha: undefined }}
- ${'hsl(0turn, 30%, 60%)'} | ${{ mode: 'hsl', color: ['0turn', '30%', '60%'], alpha: undefined }}
- ${'hsla(0, 30%, 60%, 0.5)'} | ${{ mode: 'hsla', color: ['0', '30%', '60%'], alpha: '0.5' }}
- ${'hsla(0deg, 30%, 60%, 0.5)'} | ${{ mode: 'hsla', color: ['0deg', '30%', '60%'], alpha: '0.5' }}
- ${'hsla(0rad, 30%, 60%, 0.5)'} | ${{ mode: 'hsla', color: ['0rad', '30%', '60%'], alpha: '0.5' }}
- ${'hsla(0grad, 30%, 60%, 0.5)'} | ${{ mode: 'hsla', color: ['0grad', '30%', '60%'], alpha: '0.5' }}
- ${'hsla(0turn, 30%, 60%, 0.5)'} | ${{ mode: 'hsla', color: ['0turn', '30%', '60%'], alpha: '0.5' }}
- ${'hsl(0 30% 60%)'} | ${{ mode: 'hsl', color: ['0', '30%', '60%'], alpha: undefined }}
- ${'hsl(0deg 30% 60%)'} | ${{ mode: 'hsl', color: ['0deg', '30%', '60%'], alpha: undefined }}
- ${'hsl(0rad 30% 60%)'} | ${{ mode: 'hsl', color: ['0rad', '30%', '60%'], alpha: undefined }}
- ${'hsl(0grad 30% 60%)'} | ${{ mode: 'hsl', color: ['0grad', '30%', '60%'], alpha: undefined }}
- ${'hsl(0turn 30% 60%)'} | ${{ mode: 'hsl', color: ['0turn', '30%', '60%'], alpha: undefined }}
- ${'hsl(0 30% 60% / 0.5)'} | ${{ mode: 'hsl', color: ['0', '30%', '60%'], alpha: '0.5' }}
- ${'hsl(0deg 30% 60% / 0.5)'} | ${{ mode: 'hsl', color: ['0deg', '30%', '60%'], alpha: '0.5' }}
- ${'hsl(0rad 30% 60% / 0.5)'} | ${{ mode: 'hsl', color: ['0rad', '30%', '60%'], alpha: '0.5' }}
- ${'hsl(0grad 30% 60% / 0.5)'} | ${{ mode: 'hsl', color: ['0grad', '30%', '60%'], alpha: '0.5' }}
- ${'hsl(0turn 30% 60% / 0.5)'} | ${{ mode: 'hsl', color: ['0turn', '30%', '60%'], alpha: '0.5' }}
- ${'hsl(var(--foo), 30%, 60%)'} | ${{ mode: 'hsl', color: ['var(--foo)', '30%', '60%'], alpha: undefined }}
- ${'hsl(0, var(--foo), 60%)'} | ${{ mode: 'hsl', color: ['0', 'var(--foo)', '60%'], alpha: undefined }}
- ${'hsl(0, 30%, var(--foo))'} | ${{ mode: 'hsl', color: ['0', '30%', 'var(--foo)'], alpha: undefined }}
- ${'hsl(0, 30%, var(--foo), 0.5)'} | ${{ mode: 'hsl', color: ['0', '30%', 'var(--foo)'], alpha: '0.5' }}
- ${'hsl(var(--foo), 30%, var(--bar))'} | ${{ mode: 'hsl', color: ['var(--foo)', '30%', 'var(--bar)'], alpha: undefined }}
- ${'hsl(var(--foo), var(--bar), var(--baz))'} | ${{ mode: 'hsl', color: ['var(--foo)', 'var(--bar)', 'var(--baz)'], alpha: undefined }}
- ${'hsl(var(--foo) 30% 60%)'} | ${{ mode: 'hsl', color: ['var(--foo)', '30%', '60%'], alpha: undefined }}
- ${'hsl(0 var(--foo) 60%)'} | ${{ mode: 'hsl', color: ['0', 'var(--foo)', '60%'], alpha: undefined }}
- ${'hsl(0 30% var(--foo))'} | ${{ mode: 'hsl', color: ['0', '30%', 'var(--foo)'], alpha: undefined }}
- ${'hsl(0 30% var(--foo) / 0.5)'} | ${{ mode: 'hsl', color: ['0', '30%', 'var(--foo)'], alpha: '0.5' }}
- ${'hsl(var(--foo) 30% var(--bar))'} | ${{ mode: 'hsl', color: ['var(--foo)', '30%', 'var(--bar)'], alpha: undefined }}
- ${'hsl(var(--foo) var(--bar) var(--baz))'} | ${{ mode: 'hsl', color: ['var(--foo)', 'var(--bar)', 'var(--baz)'], alpha: undefined }}
- ${'rgba(var(--foo), 0.1)'} | ${{ mode: 'rgba', color: ['var(--foo)'], alpha: '0.1' }}
- ${'rgba(var(--foo), var(--alpha))'} | ${{ mode: 'rgba', color: ['var(--foo)'], alpha: 'var(--alpha)' }}
- ${'hsla(var(--foo), 0.1)'} | ${{ mode: 'hsla', color: ['var(--foo)'], alpha: '0.1' }}
- ${'hsla(var(--foo), var(--alpha))'} | ${{ mode: 'hsla', color: ['var(--foo)'], alpha: 'var(--alpha)' }}
- ${'transparent'} | ${{ mode: 'rgb', color: ['0', '0', '0'], alpha: '0' }}
- `('should parse "$color" to the correct value', ({ color, output }) => {
- expect(parseColor(color)).toEqual(output)
- })
-
- it.each`
- color
- ${'var(--my-color)'}
- ${'currentColor'}
- ${'inherit'}
- ${'initial'}
- ${'revert'}
- ${'unset'}
- `('should return `null` for unparseable color "$color"', ({ color }) => {
- expect(parseColor(color)).toBe(null)
- })
+describe('parseColor', () => {
+ it.each`
+ color | output
+ ${'black'} | ${{ mode: 'rgb', color: ['0', '0', '0'], alpha: undefined }}
+ ${'#0088cc'} | ${{ mode: 'rgb', color: ['0', '136', '204'], alpha: undefined }}
+ ${'#08c'} | ${{ mode: 'rgb', color: ['0', '136', '204'], alpha: undefined }}
+ ${'#0088cc99'} | ${{ mode: 'rgb', color: ['0', '136', '204'], alpha: '0.6' }}
+ ${'#08c9'} | ${{ mode: 'rgb', color: ['0', '136', '204'], alpha: '0.6' }}
+ ${'rgb(0, 30, 60)'} | ${{ mode: 'rgb', color: ['0', '30', '60'], alpha: undefined }}
+ ${'rgba(0, 30, 60, 0.5)'} | ${{ mode: 'rgba', color: ['0', '30', '60'], alpha: '0.5' }}
+ ${'rgb(0 30 60)'} | ${{ mode: 'rgb', color: ['0', '30', '60'], alpha: undefined }}
+ ${'rgb(0 30 60 / 0.5)'} | ${{ mode: 'rgb', color: ['0', '30', '60'], alpha: '0.5' }}
+ ${'rgb(var(--foo), 30, 60)'} | ${{ mode: 'rgb', color: ['var(--foo)', '30', '60'], alpha: undefined }}
+ ${'rgb(0, var(--foo), 60)'} | ${{ mode: 'rgb', color: ['0', 'var(--foo)', '60'], alpha: undefined }}
+ ${'rgb(0, 30, var(--foo))'} | ${{ mode: 'rgb', color: ['0', '30', 'var(--foo)'], alpha: undefined }}
+ ${'rgb(0, 30, var(--foo), 0.5)'} | ${{ mode: 'rgb', color: ['0', '30', 'var(--foo)'], alpha: '0.5' }}
+ ${'rgb(var(--foo), 30, var(--bar))'} | ${{ mode: 'rgb', color: ['var(--foo)', '30', 'var(--bar)'], alpha: undefined }}
+ ${'rgb(var(--foo), var(--bar), var(--baz))'} | ${{ mode: 'rgb', color: ['var(--foo)', 'var(--bar)', 'var(--baz)'], alpha: undefined }}
+ ${'rgb(var(--foo) 30 60)'} | ${{ mode: 'rgb', color: ['var(--foo)', '30', '60'], alpha: undefined }}
+ ${'rgb(0 var(--foo) 60)'} | ${{ mode: 'rgb', color: ['0', 'var(--foo)', '60'], alpha: undefined }}
+ ${'rgb(0 30 var(--foo))'} | ${{ mode: 'rgb', color: ['0', '30', 'var(--foo)'], alpha: undefined }}
+ ${'rgb(0 30 var(--foo) / 0.5)'} | ${{ mode: 'rgb', color: ['0', '30', 'var(--foo)'], alpha: '0.5' }}
+ ${'rgb(var(--foo) 30 var(--bar))'} | ${{ mode: 'rgb', color: ['var(--foo)', '30', 'var(--bar)'], alpha: undefined }}
+ ${'rgb(var(--foo) var(--bar) var(--baz))'} | ${{ mode: 'rgb', color: ['var(--foo)', 'var(--bar)', 'var(--baz)'], alpha: undefined }}
+ ${'hsl(0, 30%, 60%)'} | ${{ mode: 'hsl', color: ['0', '30%', '60%'], alpha: undefined }}
+ ${'hsl(0deg, 30%, 60%)'} | ${{ mode: 'hsl', color: ['0deg', '30%', '60%'], alpha: undefined }}
+ ${'hsl(0rad, 30%, 60%)'} | ${{ mode: 'hsl', color: ['0rad', '30%', '60%'], alpha: undefined }}
+ ${'hsl(0grad, 30%, 60%)'} | ${{ mode: 'hsl', color: ['0grad', '30%', '60%'], alpha: undefined }}
+ ${'hsl(0turn, 30%, 60%)'} | ${{ mode: 'hsl', color: ['0turn', '30%', '60%'], alpha: undefined }}
+ ${'hsla(0, 30%, 60%, 0.5)'} | ${{ mode: 'hsla', color: ['0', '30%', '60%'], alpha: '0.5' }}
+ ${'hsla(0deg, 30%, 60%, 0.5)'} | ${{ mode: 'hsla', color: ['0deg', '30%', '60%'], alpha: '0.5' }}
+ ${'hsla(0rad, 30%, 60%, 0.5)'} | ${{ mode: 'hsla', color: ['0rad', '30%', '60%'], alpha: '0.5' }}
+ ${'hsla(0grad, 30%, 60%, 0.5)'} | ${{ mode: 'hsla', color: ['0grad', '30%', '60%'], alpha: '0.5' }}
+ ${'hsla(0turn, 30%, 60%, 0.5)'} | ${{ mode: 'hsla', color: ['0turn', '30%', '60%'], alpha: '0.5' }}
+ ${'hsl(0 30% 60%)'} | ${{ mode: 'hsl', color: ['0', '30%', '60%'], alpha: undefined }}
+ ${'hsl(0deg 30% 60%)'} | ${{ mode: 'hsl', color: ['0deg', '30%', '60%'], alpha: undefined }}
+ ${'hsl(0rad 30% 60%)'} | ${{ mode: 'hsl', color: ['0rad', '30%', '60%'], alpha: undefined }}
+ ${'hsl(0grad 30% 60%)'} | ${{ mode: 'hsl', color: ['0grad', '30%', '60%'], alpha: undefined }}
+ ${'hsl(0turn 30% 60%)'} | ${{ mode: 'hsl', color: ['0turn', '30%', '60%'], alpha: undefined }}
+ ${'hsl(0 30% 60% / 0.5)'} | ${{ mode: 'hsl', color: ['0', '30%', '60%'], alpha: '0.5' }}
+ ${'hsl(0deg 30% 60% / 0.5)'} | ${{ mode: 'hsl', color: ['0deg', '30%', '60%'], alpha: '0.5' }}
+ ${'hsl(0rad 30% 60% / 0.5)'} | ${{ mode: 'hsl', color: ['0rad', '30%', '60%'], alpha: '0.5' }}
+ ${'hsl(0grad 30% 60% / 0.5)'} | ${{ mode: 'hsl', color: ['0grad', '30%', '60%'], alpha: '0.5' }}
+ ${'hsl(0turn 30% 60% / 0.5)'} | ${{ mode: 'hsl', color: ['0turn', '30%', '60%'], alpha: '0.5' }}
+ ${'hsl(var(--foo), 30%, 60%)'} | ${{ mode: 'hsl', color: ['var(--foo)', '30%', '60%'], alpha: undefined }}
+ ${'hsl(0, var(--foo), 60%)'} | ${{ mode: 'hsl', color: ['0', 'var(--foo)', '60%'], alpha: undefined }}
+ ${'hsl(0, 30%, var(--foo))'} | ${{ mode: 'hsl', color: ['0', '30%', 'var(--foo)'], alpha: undefined }}
+ ${'hsl(0, 30%, var(--foo), 0.5)'} | ${{ mode: 'hsl', color: ['0', '30%', 'var(--foo)'], alpha: '0.5' }}
+ ${'hsl(var(--foo), 30%, var(--bar))'} | ${{ mode: 'hsl', color: ['var(--foo)', '30%', 'var(--bar)'], alpha: undefined }}
+ ${'hsl(var(--foo), var(--bar), var(--baz))'} | ${{ mode: 'hsl', color: ['var(--foo)', 'var(--bar)', 'var(--baz)'], alpha: undefined }}
+ ${'hsl(var(--foo) 30% 60%)'} | ${{ mode: 'hsl', color: ['var(--foo)', '30%', '60%'], alpha: undefined }}
+ ${'hsl(0 var(--foo) 60%)'} | ${{ mode: 'hsl', color: ['0', 'var(--foo)', '60%'], alpha: undefined }}
+ ${'hsl(0 30% var(--foo))'} | ${{ mode: 'hsl', color: ['0', '30%', 'var(--foo)'], alpha: undefined }}
+ ${'hsl(0 30% var(--foo) / 0.5)'} | ${{ mode: 'hsl', color: ['0', '30%', 'var(--foo)'], alpha: '0.5' }}
+ ${'hsl(var(--foo) 30% var(--bar))'} | ${{ mode: 'hsl', color: ['var(--foo)', '30%', 'var(--bar)'], alpha: undefined }}
+ ${'hsl(var(--foo) var(--bar) var(--baz))'} | ${{ mode: 'hsl', color: ['var(--foo)', 'var(--bar)', 'var(--baz)'], alpha: undefined }}
+ ${'rgba(var(--foo), 0.1)'} | ${{ mode: 'rgba', color: ['var(--foo)'], alpha: '0.1' }}
+ ${'rgba(var(--foo), var(--alpha))'} | ${{ mode: 'rgba', color: ['var(--foo)'], alpha: 'var(--alpha)' }}
+ ${'hsla(var(--foo), 0.1)'} | ${{ mode: 'hsla', color: ['var(--foo)'], alpha: '0.1' }}
+ ${'hsla(var(--foo), var(--alpha))'} | ${{ mode: 'hsla', color: ['var(--foo)'], alpha: 'var(--alpha)' }}
+ ${'transparent'} | ${{ mode: 'rgb', color: ['0', '0', '0'], alpha: '0' }}
+ `('should parse "$color" to the correct value', ({ color, output }) => {
+ expect(parseColor(color)).toEqual(output)
})
- describe('formatColor', () => {
- it.each`
- color | output
- ${{ mode: 'rgb', color: ['0', '0', '0'], alpha: undefined }} | ${'rgb(0 0 0)'}
- ${{ mode: 'rgb', color: ['0', '136', '204'], alpha: undefined }} | ${'rgb(0 136 204)'}
- ${{ mode: 'rgb', color: ['0', '136', '204'], alpha: '0.6' }} | ${'rgb(0 136 204 / 0.6)'}
- ${{ mode: 'hsl', color: ['0', '0%', '0%'], alpha: undefined }} | ${'hsl(0 0% 0%)'}
- ${{ mode: 'hsl', color: ['0', '136%', '204%'], alpha: undefined }} | ${'hsl(0 136% 204%)'}
- ${{ mode: 'hsl', color: ['0', '136%', '204%'], alpha: '0.6' }} | ${'hsl(0 136% 204% / 0.6)'}
- `('should format the color pieces into a proper "$output"', ({ color, output }) => {
- expect(formatColor(color)).toEqual(output)
- })
+ it.each`
+ color
+ ${'var(--my-color)'}
+ ${'currentColor'}
+ ${'inherit'}
+ ${'initial'}
+ ${'revert'}
+ ${'unset'}
+ `('should return `null` for unparsable color "$color"', ({ color }) => {
+ expect(parseColor(color)).toBe(null)
+ })
+})
+
+describe('formatColor', () => {
+ it.each`
+ color | output
+ ${{ mode: 'rgb', color: ['0', '0', '0'], alpha: undefined }} | ${'rgb(0 0 0)'}
+ ${{ mode: 'rgb', color: ['0', '136', '204'], alpha: undefined }} | ${'rgb(0 136 204)'}
+ ${{ mode: 'rgb', color: ['0', '136', '204'], alpha: '0.6' }} | ${'rgb(0 136 204 / 0.6)'}
+ ${{ mode: 'hsl', color: ['0', '0%', '0%'], alpha: undefined }} | ${'hsl(0 0% 0%)'}
+ ${{ mode: 'hsl', color: ['0', '136%', '204%'], alpha: undefined }} | ${'hsl(0 136% 204%)'}
+ ${{ mode: 'hsl', color: ['0', '136%', '204%'], alpha: '0.6' }} | ${'hsl(0 136% 204% / 0.6)'}
+ `('should format the color pieces into a proper "$output"', ({ color, output }) => {
+ expect(formatColor(color)).toEqual(output)
})
})
diff --git a/tests/combined-selectors.test.js b/tests/combined-selectors.test.js
index 51aa0a8ce..b3e8a333f 100644
--- a/tests/combined-selectors.test.js
+++ b/tests/combined-selectors.test.js
@@ -1,76 +1,74 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(() => {
- it('should generate the partial selector, if only a partial is used (base layer)', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
+it('should generate the partial selector, if only a partial is used (base layer)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
+ let input = css`
+ @tailwind base;
- @layer base {
- :root {
- font-weight: bold;
- }
-
- /* --- */
-
- :root,
- .a {
- color: black;
- }
+ @layer base {
+ :root {
+ font-weight: bold;
}
- `
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- :root {
- font-weight: bold;
- }
- :root,
- .a {
- color: #000;
- }
- ${defaults}
- `)
- })
- })
+ /* --- */
- it('should generate the partial selector, if only a partial is used (utilities layer)', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
-
- @layer utilities {
- :root {
- font-weight: bold;
- }
-
- /* --- */
-
- :root,
- .a {
- color: black;
- }
+ :root,
+ .a {
+ color: black;
}
- `
+ }
+ `
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- :root {
- font-weight: bold;
- }
- :root,
- .a {
- color: #000;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ :root {
+ font-weight: bold;
+ }
+ :root,
+ .a {
+ color: #000;
+ }
+ ${defaults}
+ `)
+ })
+})
+
+it('should generate the partial selector, if only a partial is used (utilities layer)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ @layer utilities {
+ :root {
+ font-weight: bold;
+ }
+
+ /* --- */
+
+ :root,
+ .a {
+ color: black;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ :root {
+ font-weight: bold;
+ }
+ :root,
+ .a {
+ color: #000;
+ }
+ `)
})
})
diff --git a/tests/configurePlugins.test.js b/tests/configurePlugins.test.js
index 367ab223f..490cddc03 100644
--- a/tests/configurePlugins.test.js
+++ b/tests/configurePlugins.test.js
@@ -1,28 +1,25 @@
import configurePlugins from '../src/util/configurePlugins'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- test('setting a plugin to false removes it', () => {
- const plugins = ['fontSize', 'display', 'backgroundPosition']
+test('setting a plugin to false removes it', () => {
+ const plugins = ['fontSize', 'display', 'backgroundPosition']
- const configuredPlugins = configurePlugins({ display: false }, plugins)
+ const configuredPlugins = configurePlugins({ display: false }, plugins)
- expect(configuredPlugins).toEqual(['fontSize', 'backgroundPosition'])
- })
-
- test('passing only false removes all plugins', () => {
- const plugins = ['fontSize', 'display', 'backgroundPosition']
-
- const configuredPlugins = configurePlugins(false, plugins)
-
- expect(configuredPlugins).toEqual([])
- })
-
- test('passing an array safelists plugins', () => {
- const plugins = ['fontSize', 'display', 'backgroundPosition']
-
- const configuredPlugins = configurePlugins(['display'], plugins)
-
- expect(configuredPlugins).toEqual(['display'])
- })
+ expect(configuredPlugins).toEqual(['fontSize', 'backgroundPosition'])
+})
+
+test('passing only false removes all plugins', () => {
+ const plugins = ['fontSize', 'display', 'backgroundPosition']
+
+ const configuredPlugins = configurePlugins(false, plugins)
+
+ expect(configuredPlugins).toEqual([])
+})
+
+test('passing an array safelists plugins', () => {
+ const plugins = ['fontSize', 'display', 'backgroundPosition']
+
+ const configuredPlugins = configurePlugins(['display'], plugins)
+
+ expect(configuredPlugins).toEqual(['display'])
})
diff --git a/tests/containerPlugin.test.js b/tests/containerPlugin.test.js
deleted file mode 100644
index 428a807d0..000000000
--- a/tests/containerPlugin.test.js
+++ /dev/null
@@ -1,347 +0,0 @@
-import { crosscheck, run, html, css } from './util/run'
-
-crosscheck(({}) => {
- test('options are not required', () => {
- let config = { content: [{ raw: html`
` }] }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .container {
- width: 100%;
- }
- @media (min-width: 640px) {
- .container {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .container {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .container {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .container {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .container {
- max-width: 1536px;
- }
- }
- `)
- })
- })
-
- test('screens can be passed explicitly', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- container: {
- screens: ['400px', '500px'],
- },
- },
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .container {
- width: 100%;
- }
- @media (min-width: 400px) {
- .container {
- max-width: 400px;
- }
- }
- @media (min-width: 500px) {
- .container {
- max-width: 500px;
- }
- }
- `)
- })
- })
-
- test('screens are ordered ascending by min-width', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- container: {
- screens: ['500px', '400px'],
- },
- },
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .container {
- width: 100%;
- }
- @media (min-width: 400px) {
- .container {
- max-width: 400px;
- }
- }
- @media (min-width: 500px) {
- .container {
- max-width: 500px;
- }
- }
- `)
- })
- })
-
- test('screens are deduplicated by min-width', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- container: {
- screens: {
- sm: '576px',
- md: '768px',
- 'sm-only': { min: '576px', max: '767px' },
- },
- },
- },
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .container {
- width: 100%;
- }
- @media (min-width: 576px) {
- .container {
- max-width: 576px;
- }
- }
- @media (min-width: 768px) {
- .container {
- max-width: 768px;
- }
- }
- `)
- })
- })
-
- test('the container can be centered by default', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- container: {
- center: true,
- },
- },
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .container {
- width: 100%;
- margin-left: auto;
- margin-right: auto;
- }
- @media (min-width: 640px) {
- .container {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .container {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .container {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .container {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .container {
- max-width: 1536px;
- }
- }
- `)
- })
- })
-
- test('horizontal padding can be included by default', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- container: {
- padding: '2rem',
- },
- },
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .container {
- width: 100%;
- padding-left: 2rem;
- padding-right: 2rem;
- }
- @media (min-width: 640px) {
- .container {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .container {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .container {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .container {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .container {
- max-width: 1536px;
- }
- }
- `)
- })
- })
-
- test('responsive horizontal padding can be included by default', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- screens: {
- sm: '576px',
- md: { min: '768px' },
- lg: { 'min-width': '992px' },
- xl: { min: '1200px', max: '1600px' },
- },
- container: {
- padding: {
- DEFAULT: '1rem',
- sm: '2rem',
- lg: '4rem',
- xl: '5rem',
- },
- },
- },
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .container {
- width: 100%;
- padding-left: 1rem;
- padding-right: 1rem;
- }
- @media (min-width: 576px) {
- .container {
- max-width: 576px;
- padding-left: 2rem;
- padding-right: 2rem;
- }
- }
- @media (min-width: 768px) {
- .container {
- max-width: 768px;
- }
- }
- @media (min-width: 992px) {
- .container {
- max-width: 992px;
- padding-left: 4rem;
- padding-right: 4rem;
- }
- }
- @media (min-width: 1200px) {
- .container {
- max-width: 1200px;
- padding-left: 5rem;
- padding-right: 5rem;
- }
- }
- `)
- })
- })
-
- test('setting all options at once', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- container: {
- screens: ['400px', '500px'],
- center: true,
- padding: '2rem',
- },
- },
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .container {
- width: 100%;
- margin-left: auto;
- margin-right: auto;
- padding-left: 2rem;
- padding-right: 2rem;
- }
- @media (min-width: 400px) {
- .container {
- max-width: 400px;
- }
- }
- @media (min-width: 500px) {
- .container {
- max-width: 500px;
- }
- }
- `)
- })
- })
-
- test('container can use variants', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- container: {
- screens: ['400px', '500px'],
- },
- },
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 1024px) {
- .lg\:hover\:container:hover {
- width: 100%;
- }
- @media (min-width: 400px) {
- .lg\:hover\:container:hover {
- max-width: 400px;
- }
- }
- @media (min-width: 500px) {
- .lg\:hover\:container:hover {
- max-width: 500px;
- }
- }
- }
- `)
- })
- })
-})
diff --git a/tests/context-reuse.test.js b/tests/context-reuse.test.js
index 4ead43fd4..7cd006cde 100644
--- a/tests/context-reuse.test.js
+++ b/tests/context-reuse.test.js
@@ -1,4 +1,4 @@
-import { crosscheck, css } from './util/run'
+import { css } from './util/run'
const fs = require('fs')
const path = require('path')
@@ -7,126 +7,122 @@ const tailwind = require('../src/index.js')
const sharedState = require('../src/lib/sharedState.js')
const configPath = path.resolve(__dirname, './context-reuse.tailwind.config.js')
-crosscheck(({ stable, oxide }) => {
- function run(input, config = {}, from = null) {
- let { currentTestName } = expect.getState()
+function run(input, config = {}, from = null) {
+ let { currentTestName } = expect.getState()
- from = `${path.resolve(__filename)}?test=${currentTestName}&${from}`
+ from = `${path.resolve(__filename)}?test=${currentTestName}&${from}`
- return postcss(tailwind(config)).process(input, { from })
+ return postcss(tailwind(config)).process(input, { from })
+}
+
+beforeEach(async () => {
+ let config = {
+ content: [path.resolve(__dirname, './context-reuse.test.html')],
+ corePlugins: { preflight: false },
}
- beforeEach(async () => {
- let config = {
- content: [path.resolve(__dirname, './context-reuse.test.html')],
- corePlugins: { preflight: false },
+ await fs.promises.writeFile(configPath, `module.exports = ${JSON.stringify(config)};`)
+})
+
+afterEach(async () => {
+ await fs.promises.unlink(configPath)
+})
+
+test('re-uses the context across multiple files with the same config', async () => {
+ let results = [
+ await run(`@tailwind utilities;`, configPath, `id=1`),
+
+ // Using @apply directives should still re-use the context
+ // They depend on the config but do not the other way around
+ await run(`body { @apply bg-blue-400; }`, configPath, `id=2`),
+ await run(`body { @apply text-red-400; }`, configPath, `id=3`),
+ await run(`body { @apply mb-4; }`, configPath, `id=4`),
+ ]
+
+ let dependencies = results.map((result) => {
+ return result.messages
+ .filter((message) => message.type === 'dependency')
+ .map((message) => message.file)
+ })
+
+ // The content files don't have any utilities in them so this should be empty
+ expect(results[0].css).toMatchFormattedCss(css``)
+
+ // However, @apply is being used so we want to verify that they're being inlined into the CSS rules
+ expect(results[1].css).toMatchFormattedCss(css`
+ body {
+ --tw-bg-opacity: 1;
+ background-color: rgb(96 165 250 / var(--tw-bg-opacity));
}
+ `)
- await fs.promises.writeFile(configPath, `module.exports = ${JSON.stringify(config)};`)
- })
+ expect(results[2].css).toMatchFormattedCss(css`
+ body {
+ --tw-text-opacity: 1;
+ color: rgb(248 113 113 / var(--tw-text-opacity));
+ }
+ `)
- afterEach(async () => {
- await fs.promises.unlink(configPath)
- })
+ expect(results[3].css).toMatchFormattedCss(css`
+ body {
+ margin-bottom: 1rem;
+ }
+ `)
- oxide.test.todo('re-uses the context across multiple files with the same config')
- stable.test('re-uses the context across multiple files with the same config', async () => {
- let results = [
- await run(`@tailwind utilities;`, configPath, `id=1`),
+ // Files with @tailwind directives depends on the PostCSS tree, config, AND any content files
+ expect(dependencies[0]).toEqual([
+ path.resolve(__dirname, 'context-reuse.test.html'),
+ path.resolve(__dirname, 'context-reuse.tailwind.config.js'),
+ ])
- // Using @apply directives should still re-use the context
- // They depend on the config but do not the other way around
- await run(`body { @apply bg-blue-400; }`, configPath, `id=2`),
- await run(`body { @apply text-red-400; }`, configPath, `id=3`),
- await run(`body { @apply mb-4; }`, configPath, `id=4`),
- ]
+ // @apply depends only on the containing PostCSS tree *and* the config file but no content files
+ // as they cannot affect the outcome of the @apply directives
+ expect(dependencies[1]).toEqual([path.resolve(__dirname, 'context-reuse.tailwind.config.js')])
- let dependencies = results.map((result) => {
- return result.messages
- .filter((message) => message.type === 'dependency')
- .map((message) => message.file)
- })
+ expect(dependencies[2]).toEqual([path.resolve(__dirname, 'context-reuse.tailwind.config.js')])
- // The content files don't have any utilities in them so this should be empty
- expect(results[0].css).toMatchFormattedCss(css``)
+ expect(dependencies[3]).toEqual([path.resolve(__dirname, 'context-reuse.tailwind.config.js')])
- // However, @apply is being used so we want to verify that they're being inlined into the CSS rules
- expect(results[1].css).toMatchFormattedCss(css`
- body {
- --tw-bg-opacity: 1;
- background-color: rgb(96 165 250 / var(--tw-bg-opacity));
- }
- `)
+ // And none of this should have resulted in multiple contexts being created
+ expect(sharedState.contextSourcesMap.size).toBe(1)
+})
- expect(results[2].css).toMatchFormattedCss(css`
- body {
- --tw-text-opacity: 1;
- color: rgb(248 113 113 / var(--tw-text-opacity));
- }
- `)
+test('updates layers when any CSS containing @tailwind directives changes', async () => {
+ let result
- expect(results[3].css).toMatchFormattedCss(css`
- body {
- margin-bottom: 1rem;
- }
- `)
-
- // Files with @tailwind directives depends on the PostCSS tree, config, AND any content files
- expect(dependencies[0]).toEqual([
- path.resolve(__dirname, 'context-reuse.test.html'),
- path.resolve(__dirname, 'context-reuse.tailwind.config.js'),
- ])
-
- // @apply depends only on the containing PostCSS tree *and* the config file but no content files
- // as they cannot affect the outcome of the @apply directives
- expect(dependencies[1]).toEqual([path.resolve(__dirname, 'context-reuse.tailwind.config.js')])
-
- expect(dependencies[2]).toEqual([path.resolve(__dirname, 'context-reuse.tailwind.config.js')])
-
- expect(dependencies[3]).toEqual([path.resolve(__dirname, 'context-reuse.tailwind.config.js')])
-
- // And none of this should have resulted in multiple contexts being created
- expect(sharedState.contextSourcesMap.size).toBe(1)
- })
-
- oxide.test.todo('updates layers when any CSS containing @tailwind directives changes')
- stable.test('updates layers when any CSS containing @tailwind directives changes', async () => {
- let result
-
- // Compile the initial version once
- let input = css`
- @tailwind utilities;
- @layer utilities {
- .custom-utility {
- color: orange;
- }
- }
- `
-
- result = await run(input, configPath, `id=1`)
-
- expect(result.css).toMatchFormattedCss(css`
- .only\:custom-utility:only-child {
+ // Compile the initial version once
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
+ .custom-utility {
color: orange;
}
- `)
+ }
+ `
- // Save the file with a change
- input = css`
- @tailwind utilities;
- @layer utilities {
- .custom-utility {
- color: blue;
- }
+ result = await run(input, configPath, `id=1`)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .only\:custom-utility:only-child {
+ color: orange;
+ }
+ `)
+
+ // Save the file with a change
+ input = css`
+ @tailwind utilities;
+ @layer utilities {
+ .custom-utility {
+ color: blue;
}
- `
+ }
+ `
- result = await run(input, configPath, `id=1`)
+ result = await run(input, configPath, `id=1`)
- expect(result.css).toMatchFormattedCss(css`
- .only\:custom-utility:only-child {
- color: #00f;
- }
- `)
- })
+ expect(result.css).toMatchFormattedCss(css`
+ .only\:custom-utility:only-child {
+ color: #00f;
+ }
+ `)
})
diff --git a/tests/custom-extractors.test.js b/tests/custom-extractors.test.js
index 089084e77..f5933b7a5 100644
--- a/tests/custom-extractors.test.js
+++ b/tests/custom-extractors.test.js
@@ -1,4 +1,4 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
function customExtractor(content) {
let matches = content.match(/class="([^"]+)"/)
@@ -21,117 +21,109 @@ let expected = css`
}
`
-crosscheck(({ stable, oxide }) => {
- describe('modern', () => {
- oxide.test.todo('extract.DEFAULT')
- stable.test('extract.DEFAULT', () => {
- let config = {
- content: {
- files: [{ raw: sharedHtml }],
- extract: {
- DEFAULT: customExtractor,
- },
+describe('modern', () => {
+ test('extract.DEFAULT', () => {
+ let config = {
+ content: {
+ files: [{ raw: sharedHtml }],
+ extract: {
+ DEFAULT: customExtractor,
},
- }
+ },
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(expected)
- })
- })
-
- oxide.test.todo('extract.{extension}')
- stable.test('extract.{extension}', () => {
- let config = {
- content: {
- files: [{ raw: sharedHtml }],
- extract: {
- html: customExtractor,
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(expected)
- })
- })
-
- oxide.test.todo('extract function')
- stable.test('extract function', () => {
- let config = {
- content: {
- files: [{ raw: sharedHtml }],
- extract: customExtractor,
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(expected)
- })
- })
-
- oxide.test.todo('raw content with extension')
- stable.test('raw content with extension', () => {
- let config = {
- content: {
- files: [
- {
- raw: sharedHtml,
- extension: 'html',
- },
- ],
- extract: {
- html: () => ['invisible'],
- },
- },
- corePlugins: { preflight: false },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .invisible {
- visibility: hidden;
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(expected)
})
})
- describe('legacy', () => {
- oxide.test.todo('defaultExtractor')
- stable.test('defaultExtractor', () => {
- let config = {
- content: {
- files: [{ raw: sharedHtml }],
- options: {
- defaultExtractor: customExtractor,
- },
+ test('extract.{extension}', () => {
+ let config = {
+ content: {
+ files: [{ raw: sharedHtml }],
+ extract: {
+ html: customExtractor,
},
- }
+ },
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(expected)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(expected)
})
+ })
- oxide.test.todo('extractors array')
- stable.test('extractors array', () => {
- let config = {
- content: {
- files: [{ raw: sharedHtml }],
- options: {
- extractors: [
- {
- extractor: customExtractor,
- extensions: ['html'],
- },
- ],
+ test('extract function', () => {
+ let config = {
+ content: {
+ files: [{ raw: sharedHtml }],
+ extract: customExtractor,
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(expected)
+ })
+ })
+
+ test('raw content with extension', () => {
+ let config = {
+ content: {
+ files: [
+ {
+ raw: sharedHtml,
+ extension: 'html',
},
+ ],
+ extract: {
+ html: () => ['invisible'],
},
- }
+ },
+ corePlugins: { preflight: false },
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(expected)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .invisible {
+ visibility: hidden;
+ }
+ `)
+ })
+ })
+})
+
+describe('legacy', () => {
+ test('defaultExtractor', () => {
+ let config = {
+ content: {
+ files: [{ raw: sharedHtml }],
+ options: {
+ defaultExtractor: customExtractor,
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(expected)
+ })
+ })
+
+ test('extractors array', () => {
+ let config = {
+ content: {
+ files: [{ raw: sharedHtml }],
+ options: {
+ extractors: [
+ {
+ extractor: customExtractor,
+ extensions: ['html'],
+ },
+ ],
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(expected)
})
})
})
diff --git a/tests/custom-plugins.test.js b/tests/custom-plugins.test.js
index d91843199..0eeaabed9 100644
--- a/tests/custom-plugins.test.js
+++ b/tests/custom-plugins.test.js
@@ -1,18 +1,1132 @@
import createPlugin from '../src/public/create-plugin'
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(() => {
- test('plugins can create utilities with object syntax', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addUtilities }) {
+test('plugins can create utilities with object syntax', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addUtilities }) {
+ addUtilities({
+ '.custom-object-fill': {
+ 'object-fit': 'fill',
+ },
+ '.custom-object-contain': {
+ 'object-fit': 'contain',
+ },
+ '.custom-object-cover': {
+ 'object-fit': 'cover',
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .custom-object-fill {
+ object-fit: fill;
+ }
+ .custom-object-contain {
+ object-fit: contain;
+ }
+ .custom-object-cover {
+ object-fit: cover;
+ }
+ `)
+ })
+})
+
+test('plugins can create utilities with arrays of objects', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addUtilities }) {
+ addUtilities([
+ {
+ '.custom-object-fill': {
+ 'object-fit': 'fill',
+ },
+ '.custom-object-contain': {
+ 'object-fit': 'contain',
+ },
+ '.custom-object-cover': {
+ 'object-fit': 'cover',
+ },
+ },
+ ])
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .custom-object-fill {
+ object-fit: fill;
+ }
+ .custom-object-contain {
+ object-fit: contain;
+ }
+ .custom-object-cover {
+ object-fit: cover;
+ }
+ `)
+ })
+})
+
+test('plugins can create utilities with raw PostCSS nodes', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addUtilities, postcss }) {
+ addUtilities([
+ postcss.rule({ selector: '.custom-object-fill' }).append([
+ postcss.decl({
+ prop: 'object-fit',
+ value: 'fill',
+ }),
+ ]),
+ postcss.rule({ selector: '.custom-object-contain' }).append([
+ postcss.decl({
+ prop: 'object-fit',
+ value: 'contain',
+ }),
+ ]),
+ postcss.rule({ selector: '.custom-object-cover' }).append([
+ postcss.decl({
+ prop: 'object-fit',
+ value: 'cover',
+ }),
+ ]),
+ ])
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .custom-object-fill {
+ object-fit: fill;
+ }
+ .custom-object-contain {
+ object-fit: contain;
+ }
+ .custom-object-cover {
+ object-fit: cover;
+ }
+ `)
+ })
+})
+
+test('plugins can create utilities with mixed object styles and PostCSS nodes', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addUtilities, postcss }) {
+ addUtilities([
+ {
+ '.custom-object-fill': {
+ objectFit: 'fill',
+ },
+ },
+ postcss.rule({ selector: '.custom-object-contain' }).append([
+ postcss.decl({
+ prop: 'object-fit',
+ value: 'contain',
+ }),
+ ]),
+ postcss.rule({ selector: '.custom-object-cover' }).append([
+ postcss.decl({
+ prop: 'object-fit',
+ value: 'cover',
+ }),
+ ]),
+ ])
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .custom-object-fill {
+ object-fit: fill;
+ }
+ .custom-object-contain {
+ object-fit: contain;
+ }
+ .custom-object-cover {
+ object-fit: cover;
+ }
+ `)
+ })
+})
+
+test('plugins can create components with object syntax', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addComponents }) {
+ addComponents({
+ '.btn-blue': {
+ backgroundColor: 'blue',
+ color: 'white',
+ padding: '.5rem 1rem',
+ borderRadius: '.25rem',
+ },
+ '.btn-blue:hover': {
+ backgroundColor: 'darkblue',
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .btn-blue {
+ color: #fff;
+ background-color: #00f;
+ border-radius: 0.25rem;
+ padding: 0.5rem 1rem;
+ }
+ .btn-blue:hover {
+ background-color: #00008b;
+ }
+ `)
+ })
+})
+
+test('plugins can add base styles with object syntax', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addBase }) {
+ addBase({
+ img: {
+ maxWidth: '100%',
+ },
+ button: {
+ fontFamily: 'inherit',
+ },
+ })
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ return run('@tailwind base', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ img {
+ max-width: 100%;
+ }
+ button {
+ font-family: inherit;
+ }
+ ${defaults}
+ `)
+ })
+})
+
+test('plugins can add base styles with raw PostCSS nodes', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addBase, postcss }) {
+ addBase([
+ postcss.rule({ selector: 'img' }).append([
+ postcss.decl({
+ prop: 'max-width',
+ value: '100%',
+ }),
+ ]),
+ postcss.rule({ selector: 'button' }).append([
+ postcss.decl({
+ prop: 'font-family',
+ value: 'inherit',
+ }),
+ ]),
+ ])
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ return run('@tailwind base', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ img {
+ max-width: 100%;
+ }
+ button {
+ font-family: inherit;
+ }
+ ${defaults}
+ `)
+ })
+})
+
+test('plugins can create components with raw PostCSS nodes', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addComponents, postcss }) {
+ addComponents([
+ postcss.rule({ selector: '.btn-blue' }).append([
+ postcss.decl({
+ prop: 'background-color',
+ value: 'blue',
+ }),
+ postcss.decl({
+ prop: 'color',
+ value: 'white',
+ }),
+ postcss.decl({
+ prop: 'padding',
+ value: '.5rem 1rem',
+ }),
+ postcss.decl({
+ prop: 'border-radius',
+ value: '.25rem',
+ }),
+ ]),
+ postcss.rule({ selector: '.btn-blue:hover' }).append([
+ postcss.decl({
+ prop: 'background-color',
+ value: 'darkblue',
+ }),
+ ]),
+ ])
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .btn-blue {
+ color: #fff;
+ background-color: #00f;
+ border-radius: 0.25rem;
+ padding: 0.5rem 1rem;
+ }
+ .btn-blue:hover {
+ background-color: #00008b;
+ }
+ `)
+ })
+})
+
+test('plugins can create components with mixed object styles and raw PostCSS nodes', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addComponents, postcss }) {
+ addComponents([
+ postcss.rule({ selector: '.btn-blue' }).append([
+ postcss.decl({
+ prop: 'background-color',
+ value: 'blue',
+ }),
+ postcss.decl({
+ prop: 'color',
+ value: 'white',
+ }),
+ postcss.decl({
+ prop: 'padding',
+ value: '.5rem 1rem',
+ }),
+ postcss.decl({
+ prop: 'border-radius',
+ value: '.25rem',
+ }),
+ ]),
+ {
+ '.btn-blue:hover': {
+ backgroundColor: 'darkblue',
+ },
+ },
+ ])
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .btn-blue {
+ color: #fff;
+ background-color: #00f;
+ border-radius: 0.25rem;
+ padding: 0.5rem 1rem;
+ }
+ .btn-blue:hover {
+ background-color: #00008b;
+ }
+ `)
+ })
+})
+
+test('plugins can create components with media queries with object syntax', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addComponents }) {
+ addComponents({
+ '.custom-container': {
+ width: '100%',
+ },
+ '@media (min-width: 100px)': {
+ '.custom-container': {
+ maxWidth: '100px',
+ },
+ },
+ '@media (min-width: 200px)': {
+ '.custom-container': {
+ maxWidth: '200px',
+ },
+ },
+ '@media (min-width: 300px)': {
+ '.custom-container': {
+ maxWidth: '300px',
+ },
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .custom-container {
+ width: 100%;
+ }
+ @media (min-width: 100px) {
+ .custom-container {
+ max-width: 100px;
+ }
+ }
+ @media (min-width: 200px) {
+ .custom-container {
+ max-width: 200px;
+ }
+ }
+ @media (min-width: 300px) {
+ .custom-container {
+ max-width: 300px;
+ }
+ }
+ `)
+ })
+})
+
+test('media queries can be defined multiple times using objects-in-array syntax', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
`,
+ },
+ ],
+ plugins: [
+ function ({ addComponents }) {
+ addComponents([
+ {
+ '.custom-container': {
+ width: '100%',
+ },
+ '@media (min-width: 100px)': {
+ '.custom-container': {
+ maxWidth: '100px',
+ },
+ },
+ },
+ {
+ '.btn': {
+ padding: '1rem .5rem',
+ display: 'block',
+ },
+ '@media (min-width: 100px)': {
+ '.btn': {
+ display: 'inline-block',
+ },
+ },
+ },
+ ])
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .custom-container {
+ width: 100%;
+ }
+ @media (min-width: 100px) {
+ .custom-container {
+ max-width: 100px;
+ }
+ }
+ .btn {
+ padding: 1rem 0.5rem;
+ display: block;
+ }
+ @media (min-width: 100px) {
+ .btn {
+ display: inline-block;
+ }
+ }
+ `)
+ })
+})
+
+test('plugins can create nested rules', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addComponents }) {
+ addComponents({
+ '.btn-blue': {
+ backgroundColor: 'blue',
+ color: 'white',
+ padding: '.5rem 1rem',
+ borderRadius: '.25rem',
+ '&:hover': {
+ backgroundColor: 'darkblue',
+ },
+ '@media (min-width: 500px)': {
+ '&:hover': {
+ backgroundColor: 'orange',
+ },
+ },
+ '> a': {
+ color: 'red',
+ },
+ 'h1 &': {
+ color: 'purple',
+ },
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .btn-blue {
+ color: #fff;
+ background-color: #00f;
+ border-radius: 0.25rem;
+ padding: 0.5rem 1rem;
+ }
+ .btn-blue:hover {
+ background-color: #00008b;
+ }
+ @media (min-width: 500px) {
+ .btn-blue:hover {
+ background-color: orange;
+ }
+ }
+ .btn-blue > a {
+ color: red;
+ }
+ h1 .btn-blue {
+ color: purple;
+ }
+ `)
+ })
+})
+
+test('plugins can create rules with escaped selectors', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ e, addUtilities }) {
+ addUtilities({
+ [`.${e('custom-top-1/4')}`]: {
+ top: '25%',
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .custom-top-1\/4 {
+ top: 25%;
+ }
+ `)
+ })
+})
+
+test('plugins can access the current config', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addComponents, config }) {
+ let containerClasses = [
+ {
+ '.custom-container': {
+ width: '100%',
+ },
+ },
+ ]
+
+ for (let maxWidth of Object.values(config('theme.customScreens'))) {
+ containerClasses.push({
+ [`@media (min-width: ${maxWidth})`]: {
+ '.custom-container': { maxWidth },
+ },
+ })
+ }
+
+ addComponents(containerClasses)
+ },
+ ],
+ theme: {
+ customScreens: {
+ sm: '576px',
+ md: '768px',
+ lg: '992px',
+ xl: '1200px',
+ },
+ },
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .custom-container {
+ width: 100%;
+ }
+ @media (min-width: 576px) {
+ .custom-container {
+ max-width: 576px;
+ }
+ }
+ @media (min-width: 768px) {
+ .custom-container {
+ max-width: 768px;
+ }
+ }
+ @media (min-width: 992px) {
+ .custom-container {
+ max-width: 992px;
+ }
+ }
+ @media (min-width: 1200px) {
+ .custom-container {
+ max-width: 1200px;
+ }
+ }
+ `)
+ })
+})
+
+test('plugins can check if corePlugins are enabled', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addUtilities, corePlugins }) {
+ addUtilities({
+ '.test': {
+ 'text-color': corePlugins('textColor') ? 'true' : 'false',
+ opacity: corePlugins('opacity') ? 'true' : 'false',
+ },
+ })
+ },
+ ],
+ corePlugins: { textColor: false },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test {
+ text-color: false;
+ opacity: true;
+ }
+ `)
+ })
+})
+
+test('plugins can check if corePlugins are enabled when using array white-listing', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addUtilities, corePlugins }) {
+ addUtilities({
+ '.test': {
+ 'text-color': corePlugins('textColor') ? 'true' : 'false',
+ opacity: corePlugins('opacity') ? 'true' : 'false',
+ },
+ })
+ },
+ ],
+ corePlugins: ['textColor'],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test {
+ text-color: true;
+ opacity: false;
+ }
+ `)
+ })
+})
+
+test('plugins can provide fallbacks to keys missing from the config', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addComponents, config }) {
+ addComponents({
+ '.btn': {
+ borderRadius: config('borderRadius.default', '.25rem'),
+ },
+ })
+ },
+ ],
+ theme: {
+ borderRadius: {
+ 1: '1px',
+ 2: '2px',
+ 4: '4px',
+ 8: '8px',
+ },
+ },
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .btn {
+ border-radius: 0.25rem;
+ }
+ `)
+ })
+})
+
+test('plugins can add multiple sets of utilities and components', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
`,
+ },
+ ],
+ plugins: [
+ function ({ addUtilities, addComponents }) {
+ addComponents({
+ '.card': {
+ padding: '1rem',
+ borderRadius: '.25rem',
+ },
+ })
+
+ addUtilities({
+ '.custom-skew-12deg': {
+ transform: 'skewY(-12deg)',
+ },
+ })
+
+ addComponents({
+ '.btn': {
+ padding: '1rem .5rem',
+ display: 'inline-block',
+ },
+ })
+
+ addUtilities({
+ '.custom-border-collapse': {
+ borderCollapse: 'collapse',
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components; @tailwind utilities;', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .card {
+ border-radius: 0.25rem;
+ padding: 1rem;
+ }
+ .btn {
+ padding: 1rem 0.5rem;
+ display: inline-block;
+ }
+ .custom-skew-12deg {
+ transform: skewY(-12deg);
+ }
+ .custom-border-collapse {
+ border-collapse: collapse;
+ }
+ `)
+ })
+})
+
+test('plugins respect prefix and important options by default when adding utilities', () => {
+ let config = {
+ prefix: 'tw-',
+ important: true,
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addUtilities }) {
+ addUtilities({
+ '.custom-rotate-90': {
+ transform: 'rotate(90deg)',
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .tw-custom-rotate-90 {
+ transform: rotate(90deg) !important;
+ }
+ `)
+ })
+})
+
+test('when important is a selector it is used to scope utilities instead of adding !important', () => {
+ let config = {
+ prefix: 'tw-',
+ important: '#app',
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addUtilities }) {
+ addUtilities({
+ '.custom-rotate-90': {
+ transform: 'rotate(90deg)',
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ #app .tw-custom-rotate-90 {
+ transform: rotate(90deg);
+ }
+ `)
+ })
+})
+
+test('when important is a selector it scopes all selectors in a rule, even though defining utilities like this is stupid', () => {
+ let config = {
+ important: '#app',
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addUtilities }) {
+ addUtilities({
+ '.custom-rotate-90, .custom-rotate-1\\/4': {
+ transform: 'rotate(90deg)',
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ #app .custom-rotate-90,
+ #app .custom-rotate-1\/4 {
+ transform: rotate(90deg);
+ }
+ `)
+ })
+})
+
+test('important utilities are not made double important when important option is used', () => {
+ let config = {
+ important: true,
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addUtilities }) {
+ addUtilities({
+ '.custom-rotate-90': {
+ transform: 'rotate(90deg) !important',
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .custom-rotate-90 {
+ transform: rotate(90deg) !important;
+ }
+ `)
+ })
+})
+
+test("component declarations respect the 'prefix' option by default", () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addComponents }) {
+ addComponents({
+ '.btn-blue': {
+ backgroundColor: 'blue',
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .tw-btn-blue {
+ background-color: #00f;
+ }
+ `)
+ })
+})
+
+test('all selectors in a rule are prefixed', () => {
+ let config = {
+ prefix: 'tw-',
+ content: [
+ {
+ raw: html`
+
`,
+ },
+ ],
+ plugins: [
+ function ({ addUtilities, addComponents }) {
+ addUtilities({
+ '.custom-rotate-90, .custom-rotate-1\\/4': {
+ transform: 'rotate(90deg)',
+ },
+ })
+ addComponents({
+ '.btn-blue, .btn-red': {
+ padding: '10px',
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .tw-btn-blue,
+ .tw-btn-red {
+ padding: 10px;
+ }
+ `)
+ })
+})
+
+test("component declarations can optionally ignore 'prefix' option", () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addComponents }) {
+ addComponents(
+ {
+ '.btn-blue': {
+ backgroundColor: 'blue',
+ },
+ },
+ { respectPrefix: false }
+ )
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .btn-blue {
+ background-color: #00f;
+ }
+ `)
+ })
+})
+
+test("component declarations are not affected by the 'important' option", () => {
+ let config = {
+ important: true,
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addComponents }) {
+ addComponents({
+ '.btn-blue': {
+ backgroundColor: 'blue',
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .btn-blue {
+ background-color: #00f;
+ }
+ `)
+ })
+})
+
+test("plugins can apply the user's chosen prefix to components manually", () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addComponents, prefix }) {
+ addComponents(
+ {
+ [prefix('.btn-blue')]: {
+ backgroundColor: 'blue',
+ },
+ },
+ { respectPrefix: false }
+ )
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .tw-btn-blue {
+ background-color: #00f;
+ }
+ `)
+ })
+})
+
+test('prefix can optionally be ignored for utilities', () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addUtilities }) {
+ addUtilities(
+ {
+ '.custom-rotate-90': {
+ transform: 'rotate(90deg)',
+ },
+ },
+ { respectPrefix: false }
+ )
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .custom-rotate-90 {
+ transform: rotate(90deg);
+ }
+ `)
+ })
+})
+
+test('important can optionally be ignored for utilities', () => {
+ let config = {
+ important: true,
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addUtilities }) {
+ addUtilities(
+ {
+ '.custom-rotate-90': {
+ transform: 'rotate(90deg)',
+ },
+ },
+ { respectImportant: false }
+ )
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .custom-rotate-90 {
+ transform: rotate(90deg);
+ }
+ `)
+ })
+})
+
+test('prefix will prefix all classes in a selector', () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`
` }],
+ plugins: [
+ function ({ addComponents, prefix }) {
+ addComponents(
+ {
+ [prefix('.btn-blue .w-1\\/4 > h1.text-xl + a .bar')]: {
+ backgroundColor: 'blue',
+ },
+ },
+ { respectPrefix: false }
+ )
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .tw-btn-blue .tw-w-1\/4 > h1.tw-text-xl + a .tw-bar {
+ background-color: #00f;
+ }
+ `)
+ })
+})
+
+test('plugins can be provided as an object with a handler function', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ {
+ handler({ addUtilities }) {
addUtilities({
'.custom-object-fill': {
'object-fit': 'fill',
@@ -25,1273 +1139,95 @@ crosscheck(() => {
},
})
},
- ],
- }
+ },
+ ],
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .custom-object-fill {
- object-fit: fill;
- }
- .custom-object-contain {
- object-fit: contain;
- }
- .custom-object-cover {
- object-fit: cover;
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .custom-object-fill {
+ object-fit: fill;
+ }
+ .custom-object-contain {
+ object-fit: contain;
+ }
+ .custom-object-cover {
+ object-fit: cover;
+ }
+ `)
})
+})
- test('plugins can create utilities with arrays of objects', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addUtilities }) {
- addUtilities([
- {
- '.custom-object-fill': {
- 'object-fit': 'fill',
- },
- '.custom-object-contain': {
- 'object-fit': 'contain',
- },
- '.custom-object-cover': {
- 'object-fit': 'cover',
- },
- },
- ])
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .custom-object-fill {
- object-fit: fill;
- }
- .custom-object-contain {
- object-fit: contain;
- }
- .custom-object-cover {
- object-fit: cover;
- }
- `)
- })
- })
-
- test('plugins can create utilities with raw PostCSS nodes', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addUtilities, postcss }) {
- addUtilities([
- postcss.rule({ selector: '.custom-object-fill' }).append([
- postcss.decl({
- prop: 'object-fit',
- value: 'fill',
- }),
- ]),
- postcss.rule({ selector: '.custom-object-contain' }).append([
- postcss.decl({
- prop: 'object-fit',
- value: 'contain',
- }),
- ]),
- postcss.rule({ selector: '.custom-object-cover' }).append([
- postcss.decl({
- prop: 'object-fit',
- value: 'cover',
- }),
- ]),
- ])
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .custom-object-fill {
- object-fit: fill;
- }
- .custom-object-contain {
- object-fit: contain;
- }
- .custom-object-cover {
- object-fit: cover;
- }
- `)
- })
- })
-
- test('plugins can create utilities with mixed object styles and PostCSS nodes', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addUtilities, postcss }) {
- addUtilities([
- {
- '.custom-object-fill': {
- objectFit: 'fill',
- },
- },
- postcss.rule({ selector: '.custom-object-contain' }).append([
- postcss.decl({
- prop: 'object-fit',
- value: 'contain',
- }),
- ]),
- postcss.rule({ selector: '.custom-object-cover' }).append([
- postcss.decl({
- prop: 'object-fit',
- value: 'cover',
- }),
- ]),
- ])
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .custom-object-fill {
- object-fit: fill;
- }
- .custom-object-contain {
- object-fit: contain;
- }
- .custom-object-cover {
- object-fit: cover;
- }
- `)
- })
- })
-
- test('plugins can create components with object syntax', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addComponents }) {
- addComponents({
- '.btn-blue': {
- backgroundColor: 'blue',
- color: 'white',
- padding: '.5rem 1rem',
- borderRadius: '.25rem',
- },
- '.btn-blue:hover': {
- backgroundColor: 'darkblue',
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .btn-blue {
- color: #fff;
- background-color: #00f;
- border-radius: 0.25rem;
- padding: 0.5rem 1rem;
- }
- .btn-blue:hover {
- background-color: #00008b;
- }
- `)
- })
- })
-
- test('plugins can add base styles with object syntax', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addBase }) {
- addBase({
- img: {
- maxWidth: '100%',
- },
- button: {
- fontFamily: 'inherit',
- },
- })
- },
- ],
- corePlugins: { preflight: false },
- }
-
- return run('@tailwind base', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- img {
- max-width: 100%;
- }
- button {
- font-family: inherit;
- }
- ${defaults}
- `)
- })
- })
-
- test('plugins can add base styles with raw PostCSS nodes', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addBase, postcss }) {
- addBase([
- postcss.rule({ selector: 'img' }).append([
- postcss.decl({
- prop: 'max-width',
- value: '100%',
- }),
- ]),
- postcss.rule({ selector: 'button' }).append([
- postcss.decl({
- prop: 'font-family',
- value: 'inherit',
- }),
- ]),
- ])
- },
- ],
- corePlugins: { preflight: false },
- }
-
- return run('@tailwind base', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- img {
- max-width: 100%;
- }
- button {
- font-family: inherit;
- }
- ${defaults}
- `)
- })
- })
-
- test('plugins can create components with raw PostCSS nodes', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addComponents, postcss }) {
- addComponents([
- postcss.rule({ selector: '.btn-blue' }).append([
- postcss.decl({
- prop: 'background-color',
- value: 'blue',
- }),
- postcss.decl({
- prop: 'color',
- value: 'white',
- }),
- postcss.decl({
- prop: 'padding',
- value: '.5rem 1rem',
- }),
- postcss.decl({
- prop: 'border-radius',
- value: '.25rem',
- }),
- ]),
- postcss.rule({ selector: '.btn-blue:hover' }).append([
- postcss.decl({
- prop: 'background-color',
- value: 'darkblue',
- }),
- ]),
- ])
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .btn-blue {
- color: #fff;
- background-color: #00f;
- border-radius: 0.25rem;
- padding: 0.5rem 1rem;
- }
- .btn-blue:hover {
- background-color: #00008b;
- }
- `)
- })
- })
-
- test('plugins can create components with mixed object styles and raw PostCSS nodes', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addComponents, postcss }) {
- addComponents([
- postcss.rule({ selector: '.btn-blue' }).append([
- postcss.decl({
- prop: 'background-color',
- value: 'blue',
- }),
- postcss.decl({
- prop: 'color',
- value: 'white',
- }),
- postcss.decl({
- prop: 'padding',
- value: '.5rem 1rem',
- }),
- postcss.decl({
- prop: 'border-radius',
- value: '.25rem',
- }),
- ]),
- {
- '.btn-blue:hover': {
- backgroundColor: 'darkblue',
- },
- },
- ])
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .btn-blue {
- color: #fff;
- background-color: #00f;
- border-radius: 0.25rem;
- padding: 0.5rem 1rem;
- }
- .btn-blue:hover {
- background-color: #00008b;
- }
- `)
- })
- })
-
- test('plugins can create components with media queries with object syntax', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addComponents }) {
- addComponents({
- '.custom-container': {
- width: '100%',
- },
- '@media (min-width: 100px)': {
- '.custom-container': {
- maxWidth: '100px',
- },
- },
- '@media (min-width: 200px)': {
- '.custom-container': {
- maxWidth: '200px',
- },
- },
- '@media (min-width: 300px)': {
- '.custom-container': {
- maxWidth: '300px',
- },
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .custom-container {
- width: 100%;
- }
- @media (min-width: 100px) {
- .custom-container {
- max-width: 100px;
- }
- }
- @media (min-width: 200px) {
- .custom-container {
- max-width: 200px;
- }
- }
- @media (min-width: 300px) {
- .custom-container {
- max-width: 300px;
- }
- }
- `)
- })
- })
-
- test('media queries can be defined multiple times using objects-in-array syntax', () => {
- let config = {
- content: [
- {
- raw: html`
-
`,
- },
- ],
- plugins: [
- function ({ addComponents }) {
- addComponents([
- {
- '.custom-container': {
- width: '100%',
- },
- '@media (min-width: 100px)': {
- '.custom-container': {
- maxWidth: '100px',
- },
- },
- },
- {
- '.btn': {
- padding: '1rem .5rem',
- display: 'block',
- },
- '@media (min-width: 100px)': {
- '.btn': {
- display: 'inline-block',
- },
- },
- },
- ])
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .custom-container {
- width: 100%;
- }
- @media (min-width: 100px) {
- .custom-container {
- max-width: 100px;
- }
- }
- .btn {
- padding: 1rem 0.5rem;
- display: block;
- }
- @media (min-width: 100px) {
- .btn {
- display: inline-block;
- }
- }
- `)
- })
- })
-
- test('plugins can create nested rules', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addComponents }) {
- addComponents({
- '.btn-blue': {
- backgroundColor: 'blue',
- color: 'white',
- padding: '.5rem 1rem',
- borderRadius: '.25rem',
- '&:hover': {
- backgroundColor: 'darkblue',
- },
- '@media (min-width: 500px)': {
- '&:hover': {
- backgroundColor: 'orange',
- },
- },
- '> a': {
- color: 'red',
- },
- 'h1 &': {
- color: 'purple',
- },
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .btn-blue {
- color: #fff;
- background-color: #00f;
- border-radius: 0.25rem;
- padding: 0.5rem 1rem;
- }
- .btn-blue:hover {
- background-color: #00008b;
- }
- @media (min-width: 500px) {
- .btn-blue:hover {
- background-color: orange;
- }
- }
- .btn-blue > a {
- color: red;
- }
- h1 .btn-blue {
- color: purple;
- }
- `)
- })
- })
-
- test('plugins can create rules with escaped selectors', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [
- function ({ e, addUtilities }) {
- addUtilities({
- [`.${e('custom-top-1/4')}`]: {
- top: '25%',
- },
- })
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .custom-top-1\/4 {
- top: 25%;
- }
- `)
- })
- })
-
- test('plugins can access the current config', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addComponents, config }) {
- let containerClasses = [
- {
- '.custom-container': {
- width: '100%',
- },
- },
- ]
-
- for (let maxWidth of Object.values(config('theme.customScreens'))) {
- containerClasses.push({
- [`@media (min-width: ${maxWidth})`]: {
- '.custom-container': { maxWidth },
- },
- })
- }
-
- addComponents(containerClasses)
- },
- ],
- theme: {
- customScreens: {
- sm: '576px',
- md: '768px',
- lg: '992px',
- xl: '1200px',
+test('plugins can provide a config but no handler', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ {
+ config: {
+ prefix: 'tw-',
},
},
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .custom-container {
- width: 100%;
- }
- @media (min-width: 576px) {
- .custom-container {
- max-width: 576px;
- }
- }
- @media (min-width: 768px) {
- .custom-container {
- max-width: 768px;
- }
- }
- @media (min-width: 992px) {
- .custom-container {
- max-width: 992px;
- }
- }
- @media (min-width: 1200px) {
- .custom-container {
- max-width: 1200px;
- }
- }
- `)
- })
- })
-
- test('plugins can check if corePlugins are enabled', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addUtilities, corePlugins }) {
+ {
+ handler({ addUtilities }) {
addUtilities({
- '.test': {
- 'text-color': corePlugins('textColor') ? 'true' : 'false',
- opacity: corePlugins('opacity') ? 'true' : 'false',
+ '.custom-object-fill': {
+ 'object-fit': 'fill',
+ },
+ '.custom-object-contain': {
+ 'object-fit': 'contain',
+ },
+ '.custom-object-cover': {
+ 'object-fit': 'cover',
},
})
},
- ],
- corePlugins: { textColor: false },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .test {
- text-color: false;
- opacity: true;
- }
- `)
- })
- })
-
- test('plugins can check if corePlugins are enabled when using array white-listing', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addUtilities, corePlugins }) {
- addUtilities({
- '.test': {
- 'text-color': corePlugins('textColor') ? 'true' : 'false',
- opacity: corePlugins('opacity') ? 'true' : 'false',
- },
- })
- },
- ],
- corePlugins: ['textColor'],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .test {
- text-color: true;
- opacity: false;
- }
- `)
- })
- })
-
- test('plugins can provide fallbacks to keys missing from the config', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addComponents, config }) {
- addComponents({
- '.btn': {
- borderRadius: config('borderRadius.default', '.25rem'),
- },
- })
- },
- ],
- theme: {
- borderRadius: {
- 1: '1px',
- 2: '2px',
- 4: '4px',
- 8: '8px',
- },
},
- }
+ ],
+ }
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .btn {
- border-radius: 0.25rem;
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .tw-custom-object-fill {
+ object-fit: fill;
+ }
+ .tw-custom-object-contain {
+ object-fit: contain;
+ }
+ .tw-custom-object-cover {
+ object-fit: cover;
+ }
+ `)
})
+})
- test('plugins can add multiple sets of utilities and components', () => {
- let config = {
- content: [
- {
- raw: html`
-
`,
- },
- ],
- plugins: [
- function ({ addUtilities, addComponents }) {
- addComponents({
- '.card': {
- padding: '1rem',
- borderRadius: '.25rem',
- },
- })
-
- addUtilities({
- '.custom-skew-12deg': {
- transform: 'skewY(-12deg)',
- },
- })
-
- addComponents({
- '.btn': {
- padding: '1rem .5rem',
- display: 'inline-block',
- },
- })
-
- addUtilities({
- '.custom-border-collapse': {
- borderCollapse: 'collapse',
- },
- })
- },
- ],
- }
-
- return run('@tailwind components; @tailwind utilities;', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .card {
- border-radius: 0.25rem;
- padding: 1rem;
- }
- .btn {
- padding: 1rem 0.5rem;
- display: inline-block;
- }
- .custom-skew-12deg {
- transform: skewY(-12deg);
- }
- .custom-border-collapse {
- border-collapse: collapse;
- }
- `)
- })
- })
-
- test('plugins respect prefix and important options by default when adding utilities', () => {
- let config = {
- prefix: 'tw-',
- important: true,
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addUtilities }) {
- addUtilities({
- '.custom-rotate-90': {
- transform: 'rotate(90deg)',
- },
- })
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .tw-custom-rotate-90 {
- transform: rotate(90deg) !important;
- }
- `)
- })
- })
-
- test('when important is a selector it is used to scope utilities instead of adding !important', () => {
- let config = {
- prefix: 'tw-',
- important: '#app',
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addUtilities }) {
- addUtilities({
- '.custom-rotate-90': {
- transform: 'rotate(90deg)',
- },
- })
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- #app .tw-custom-rotate-90 {
- transform: rotate(90deg);
- }
- `)
- })
- })
-
- test('when important is a selector it scopes all selectors in a rule, even though defining utilities like this is stupid', () => {
- let config = {
- important: '#app',
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addUtilities }) {
- addUtilities({
- '.custom-rotate-90, .custom-rotate-1\\/4': {
- transform: 'rotate(90deg)',
- },
- })
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- #app .custom-rotate-90,
- #app .custom-rotate-1\/4 {
- transform: rotate(90deg);
- }
- `)
- })
- })
-
- test('important utilities are not made double important when important option is used', () => {
- let config = {
- important: true,
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addUtilities }) {
- addUtilities({
- '.custom-rotate-90': {
- transform: 'rotate(90deg) !important',
- },
- })
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .custom-rotate-90 {
- transform: rotate(90deg) !important;
- }
- `)
- })
- })
-
- test("component declarations respect the 'prefix' option by default", () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addComponents }) {
- addComponents({
- '.btn-blue': {
- backgroundColor: 'blue',
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .tw-btn-blue {
- background-color: #00f;
- }
- `)
- })
- })
-
- test('all selectors in a rule are prefixed', () => {
- let config = {
- prefix: 'tw-',
- content: [
- {
- raw: html`
-
`,
- },
- ],
- plugins: [
- function ({ addUtilities, addComponents }) {
- addUtilities({
- '.custom-rotate-90, .custom-rotate-1\\/4': {
- transform: 'rotate(90deg)',
- },
- })
- addComponents({
- '.btn-blue, .btn-red': {
- padding: '10px',
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .tw-btn-blue,
- .tw-btn-red {
- padding: 10px;
- }
- `)
- })
- })
-
- test("component declarations can optionally ignore 'prefix' option", () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addComponents }) {
- addComponents(
- {
- '.btn-blue': {
- backgroundColor: 'blue',
- },
- },
- { respectPrefix: false }
- )
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .btn-blue {
- background-color: #00f;
- }
- `)
- })
- })
-
- test("component declarations are not affected by the 'important' option", () => {
- let config = {
- important: true,
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addComponents }) {
- addComponents({
- '.btn-blue': {
- backgroundColor: 'blue',
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .btn-blue {
- background-color: #00f;
- }
- `)
- })
- })
-
- test("plugins can apply the user's chosen prefix to components manually", () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addComponents, prefix }) {
- addComponents(
- {
- [prefix('.btn-blue')]: {
- backgroundColor: 'blue',
- },
- },
- { respectPrefix: false }
- )
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .tw-btn-blue {
- background-color: #00f;
- }
- `)
- })
- })
-
- test('prefix can optionally be ignored for utilities', () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addUtilities }) {
- addUtilities(
- {
- '.custom-rotate-90': {
- transform: 'rotate(90deg)',
- },
- },
- { respectPrefix: false }
- )
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .custom-rotate-90 {
- transform: rotate(90deg);
- }
- `)
- })
- })
-
- test('important can optionally be ignored for utilities', () => {
- let config = {
- important: true,
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addUtilities }) {
- addUtilities(
- {
- '.custom-rotate-90': {
- transform: 'rotate(90deg)',
- },
- },
- { respectImportant: false }
- )
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .custom-rotate-90 {
- transform: rotate(90deg);
- }
- `)
- })
- })
-
- test('prefix will prefix all classes in a selector', () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`
` }],
- plugins: [
- function ({ addComponents, prefix }) {
- addComponents(
- {
- [prefix('.btn-blue .w-1\\/4 > h1.text-xl + a .bar')]: {
- backgroundColor: 'blue',
- },
- },
- { respectPrefix: false }
- )
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .tw-btn-blue .tw-w-1\/4 > h1.tw-text-xl + a .tw-bar {
- background-color: #00f;
- }
- `)
- })
- })
-
- test('plugins can be provided as an object with a handler function', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- {
- handler({ addUtilities }) {
- addUtilities({
- '.custom-object-fill': {
- 'object-fit': 'fill',
- },
- '.custom-object-contain': {
- 'object-fit': 'contain',
- },
- '.custom-object-cover': {
- 'object-fit': 'cover',
- },
- })
- },
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .custom-object-fill {
- object-fit: fill;
- }
- .custom-object-contain {
- object-fit: contain;
- }
- .custom-object-cover {
- object-fit: cover;
- }
- `)
- })
- })
-
- test('plugins can provide a config but no handler', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- {
- config: {
- prefix: 'tw-',
- },
- },
- {
- handler({ addUtilities }) {
- addUtilities({
- '.custom-object-fill': {
- 'object-fit': 'fill',
- },
- '.custom-object-contain': {
- 'object-fit': 'contain',
- },
- '.custom-object-cover': {
- 'object-fit': 'cover',
- },
- })
- },
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .tw-custom-object-fill {
- object-fit: fill;
- }
- .tw-custom-object-contain {
- object-fit: contain;
- }
- .tw-custom-object-cover {
- object-fit: cover;
- }
- `)
- })
- })
-
- test('plugins can be created using the `createPlugin` function', () => {
- let config = {
- content: [
- { raw: html`
` },
- ],
- corePlugins: [],
- theme: {
- screens: {
- sm: '400px',
- },
+test('plugins can be created using the `createPlugin` function', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ theme: {
+ screens: {
+ sm: '400px',
},
- plugins: [
- createPlugin(
- function ({ addUtilities, theme }) {
- addUtilities(
- Object.fromEntries(
- Object.entries(theme('testPlugin')).map(([k, v]) => [
- `.test-${k}`,
- { testProperty: v },
- ])
- )
- )
- },
- {
- theme: {
- testPlugin: {
- sm: '1rem',
- md: '2rem',
- lg: '3rem',
- },
- },
- }
- ),
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .test-sm {
- test-property: 1rem;
- }
- .test-md {
- test-property: 2rem;
- }
- .test-lg {
- test-property: 3rem;
- }
- .hover\:test-sm:hover {
- test-property: 1rem;
- }
- @media (min-width: 400px) {
- .sm\:test-sm {
- test-property: 1rem;
- }
- }
- `)
- })
- })
-
- test('plugins with extra options can be created using the `createPlugin.withOptions` function', () => {
- let plugin = createPlugin.withOptions(
- function ({ className }) {
- return function ({ addUtilities, theme }) {
+ },
+ plugins: [
+ createPlugin(
+ function ({ addUtilities, theme }) {
addUtilities(
Object.fromEntries(
Object.entries(theme('testPlugin')).map(([k, v]) => [
- `.${className}-${k}`,
+ `.test-${k}`,
{ testProperty: v },
])
)
)
- }
- },
- function () {
- return {
+ },
+ {
theme: {
testPlugin: {
sm: '1rem',
@@ -1300,169 +1236,36 @@ crosscheck(() => {
},
},
}
+ ),
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test-sm {
+ test-property: 1rem;
}
- )
-
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: [],
- theme: {
- screens: {
- sm: '400px',
- },
- },
- plugins: [plugin({ className: 'banana' })],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .banana-sm {
- test-property: 1rem;
- }
- .banana-md {
- test-property: 2rem;
- }
- .banana-lg {
- test-property: 3rem;
- }
- .hover\:banana-sm:hover {
- test-property: 1rem;
- }
- @media (min-width: 400px) {
- .sm\:banana-sm {
- test-property: 1rem;
- }
- }
- `)
- })
- })
-
- test('plugins should cache correctly', () => {
- let plugin = createPlugin.withOptions(
- ({ className = 'banana' } = {}) =>
- ({ addComponents }) => {
- addComponents({ [`.${className}`]: { position: 'absolute' } })
- }
- )
-
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: [],
- theme: {
- screens: {
- sm: '400px',
- },
- },
- }
-
- function internalRun(options = {}) {
- return run('@tailwind components', {
- ...config,
- plugins: [plugin(options)],
- })
- }
-
- return Promise.all([internalRun(), internalRun({ className: 'apple' })]).then(
- ([result1, result2]) => {
- let expected1 = css`
- .banana {
- position: absolute;
- }
- @media (min-width: 400px) {
- .sm\:banana {
- position: absolute;
- }
- }
- `
-
- let expected2 = css`
- .apple {
- position: absolute;
- }
- @media (min-width: 400px) {
- .sm\:apple {
- position: absolute;
- }
- }
- `
-
- expect(result1.css).toMatchCss(expected1)
- expect(result2.css).toMatchCss(expected2)
+ .test-md {
+ test-property: 2rem;
}
- )
- })
-
- test('plugins created using `createPlugin.withOptions` do not need to be invoked if the user wants to use the default options', () => {
- let plugin = createPlugin.withOptions(
- function ({ className } = { className: 'banana' }) {
- return function ({ addUtilities, theme }) {
- addUtilities(
- Object.fromEntries(
- Object.entries(theme('testPlugin')).map(([k, v]) => [
- `.${className}-${k}`,
- { testProperty: v },
- ])
- )
- )
- }
- },
- function () {
- return {
- theme: {
- testPlugin: {
- sm: '1rem',
- md: '2rem',
- lg: '3rem',
- },
- },
+ .test-lg {
+ test-property: 3rem;
+ }
+ .hover\:test-sm:hover {
+ test-property: 1rem;
+ }
+ @media (min-width: 400px) {
+ .sm\:test-sm {
+ test-property: 1rem;
}
}
- )
-
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: [],
- theme: {
- screens: {
- sm: '400px',
- },
- },
- plugins: [plugin],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .banana-sm {
- test-property: 1rem;
- }
- .banana-md {
- test-property: 2rem;
- }
- .banana-lg {
- test-property: 3rem;
- }
- .hover\:banana-sm:hover {
- test-property: 1rem;
- }
- @media (min-width: 400px) {
- .sm\:banana-sm {
- test-property: 1rem;
- }
- }
- `)
- })
+ `)
})
+})
- test('the configFunction parameter is optional when using the `createPlugin.withOptions` function', () => {
- let plugin = createPlugin.withOptions(function ({ className }) {
+test('plugins with extra options can be created using the `createPlugin.withOptions` function', () => {
+ let plugin = createPlugin.withOptions(
+ function ({ className }) {
return function ({ addUtilities, theme }) {
addUtilities(
Object.fromEntries(
@@ -1473,461 +1276,701 @@ crosscheck(() => {
)
)
}
- })
-
- let config = {
- content: [
- {
- raw: html`
`,
+ },
+ function () {
+ return {
+ theme: {
+ testPlugin: {
+ sm: '1rem',
+ md: '2rem',
+ lg: '3rem',
+ },
},
- ],
- corePlugins: [],
- theme: {
- screens: {
- sm: '400px',
- },
- testPlugin: {
- sm: '1px',
- md: '2px',
- lg: '3px',
- },
- },
- plugins: [plugin({ className: 'banana' })],
+ }
}
+ )
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .banana-sm {
- test-property: 1px;
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: [],
+ theme: {
+ screens: {
+ sm: '400px',
+ },
+ },
+ plugins: [plugin({ className: 'banana' })],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .banana-sm {
+ test-property: 1rem;
+ }
+ .banana-md {
+ test-property: 2rem;
+ }
+ .banana-lg {
+ test-property: 3rem;
+ }
+ .hover\:banana-sm:hover {
+ test-property: 1rem;
+ }
+ @media (min-width: 400px) {
+ .sm\:banana-sm {
+ test-property: 1rem;
}
- .banana-md {
- test-property: 2px;
- }
- .banana-lg {
- test-property: 3px;
- }
- .hover\:banana-sm:hover {
- test-property: 1px;
- }
- @media (min-width: 400px) {
- .sm\:banana-sm {
- test-property: 1px;
- }
- }
- `)
- })
+ }
+ `)
+ })
+})
+
+test('plugins should cache correctly', () => {
+ let plugin = createPlugin.withOptions(({ className = 'banana' } = {}) => ({ addComponents }) => {
+ addComponents({ [`.${className}`]: { position: 'absolute' } })
})
- test('keyframes are not escaped', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities({
- foo: (value) => {
- return {
- [`@keyframes ${value}`]: {
- '25.001%': {
- color: 'black',
- },
- },
- animation: `${value} 1s infinite`,
- }
- },
- })
- },
- ],
- }
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ theme: {
+ screens: {
+ sm: '400px',
+ },
+ },
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @keyframes abc {
+ function internalRun(options = {}) {
+ return run('@tailwind components', {
+ ...config,
+ plugins: [plugin(options)],
+ })
+ }
+
+ return Promise.all([internalRun(), internalRun({ className: 'apple' })]).then(
+ ([result1, result2]) => {
+ let expected1 = css`
+ .banana {
+ position: absolute;
+ }
+ @media (min-width: 400px) {
+ .sm\:banana {
+ position: absolute;
+ }
+ }
+ `
+
+ let expected2 = css`
+ .apple {
+ position: absolute;
+ }
+ @media (min-width: 400px) {
+ .sm\:apple {
+ position: absolute;
+ }
+ }
+ `
+
+ expect(result1.css).toMatchFormattedCss(expected1)
+ expect(result2.css).toMatchFormattedCss(expected2)
+ }
+ )
+})
+
+test('plugins created using `createPlugin.withOptions` do not need to be invoked if the user wants to use the default options', () => {
+ let plugin = createPlugin.withOptions(
+ function ({ className } = { className: 'banana' }) {
+ return function ({ addUtilities, theme }) {
+ addUtilities(
+ Object.fromEntries(
+ Object.entries(theme('testPlugin')).map(([k, v]) => [
+ `.${className}-${k}`,
+ { testProperty: v },
+ ])
+ )
+ )
+ }
+ },
+ function () {
+ return {
+ theme: {
+ testPlugin: {
+ sm: '1rem',
+ md: '2rem',
+ lg: '3rem',
+ },
+ },
+ }
+ }
+ )
+
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: [],
+ theme: {
+ screens: {
+ sm: '400px',
+ },
+ },
+ plugins: [plugin],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .banana-sm {
+ test-property: 1rem;
+ }
+ .banana-md {
+ test-property: 2rem;
+ }
+ .banana-lg {
+ test-property: 3rem;
+ }
+ .hover\:banana-sm:hover {
+ test-property: 1rem;
+ }
+ @media (min-width: 400px) {
+ .sm\:banana-sm {
+ test-property: 1rem;
+ }
+ }
+ `)
+ })
+})
+
+test('the configFunction parameter is optional when using the `createPlugin.withOptions` function', () => {
+ let plugin = createPlugin.withOptions(function ({ className }) {
+ return function ({ addUtilities, theme }) {
+ addUtilities(
+ Object.fromEntries(
+ Object.entries(theme('testPlugin')).map(([k, v]) => [
+ `.${className}-${k}`,
+ { testProperty: v },
+ ])
+ )
+ )
+ }
+ })
+
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: [],
+ theme: {
+ screens: {
+ sm: '400px',
+ },
+ testPlugin: {
+ sm: '1px',
+ md: '2px',
+ lg: '3px',
+ },
+ },
+ plugins: [plugin({ className: 'banana' })],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .banana-sm {
+ test-property: 1px;
+ }
+ .banana-md {
+ test-property: 2px;
+ }
+ .banana-lg {
+ test-property: 3px;
+ }
+ .hover\:banana-sm:hover {
+ test-property: 1px;
+ }
+ @media (min-width: 400px) {
+ .sm\:banana-sm {
+ test-property: 1px;
+ }
+ }
+ `)
+ })
+})
+
+test('keyframes are not escaped', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities({
+ foo: (value) => {
+ return {
+ [`@keyframes ${value}`]: {
+ '25.001%': {
+ color: 'black',
+ },
+ },
+ animation: `${value} 1s infinite`,
+ }
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @keyframes abc {
+ 25.001% {
+ color: #000;
+ }
+ }
+ .foo-\[abc\] {
+ animation: 1s infinite abc;
+ }
+ @media (min-width: 768px) {
+ @keyframes def {
25.001% {
color: #000;
}
}
- .foo-\[abc\] {
- animation: 1s infinite abc;
+ .md\:foo-\[def\] {
+ animation: 1s infinite def;
}
- @media (min-width: 768px) {
- @keyframes def {
- 25.001% {
- color: #000;
- }
- }
- .md\:foo-\[def\] {
- animation: 1s infinite def;
- }
- }
- `)
- })
- })
-
- test('font sizes are retrieved without default line-heights or letter-spacing using theme function', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: [],
- theme: {
- fontSize: {
- sm: ['14px', '20px'],
- },
- },
- plugins: [
- function ({ addComponents, theme }) {
- addComponents({
- '.foo': {
- fontSize: theme('fontSize.sm'),
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- font-size: 14px;
- }
- `)
- })
- })
-
- test('outlines are retrieved without outline-offset using theme function', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: [],
- theme: {
- outline: {
- black: ['2px dotted black', '4px'],
- },
- },
- plugins: [
- function ({ addComponents, theme }) {
- addComponents({
- '.foo': {
- outline: theme('outline.black'),
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- outline: 2px dotted #000;
- }
- `)
- })
- })
-
- test('box-shadow values are joined when retrieved using the theme function', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: [],
- theme: {
- boxShadow: {
- lol: ['width', 'height'],
- },
- },
- plugins: [
- function ({ addComponents, theme }) {
- addComponents({
- '.foo': {
- boxShadow: theme('boxShadow.lol'),
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- box-shadow: width, height;
- }
- `)
- })
- })
-
- test('transition-property values are joined when retrieved using the theme function', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: [],
- theme: {
- transitionProperty: {
- lol: ['width', 'height'],
- },
- },
- plugins: [
- function ({ addComponents, theme }) {
- addComponents({
- '.foo': {
- transitionProperty: theme('transitionProperty.lol'),
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- transition-property: width, height;
- }
- `)
- })
- })
-
- test('transition-duration values are joined when retrieved using the theme function', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: [],
- theme: {
- transitionDuration: {
- lol: ['width', 'height'],
- },
- },
- plugins: [
- function ({ addComponents, theme }) {
- addComponents({
- '.foo': {
- transitionDuration: theme('transitionDuration.lol'),
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- transition-duration: width, height;
- }
- `)
- })
- })
-
- test('transition-delay values are joined when retrieved using the theme function', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: [],
- theme: {
- transitionDuration: {
- lol: ['width', 'height'],
- },
- },
- plugins: [
- function ({ addComponents, theme }) {
- addComponents({
- '.foo': {
- transitionDuration: theme('transitionDuration.lol'),
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- transition-duration: width, height;
- }
- `)
- })
- })
-
- test('transition-timing-function values are joined when retrieved using the theme function', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: [],
- theme: {
- transitionTimingFunction: {
- lol: ['width', 'height'],
- },
- },
- plugins: [
- function ({ addComponents, theme }) {
- addComponents({
- '.foo': {
- transitionTimingFunction: theme('transitionTimingFunction.lol'),
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- transition-timing-function: width, height;
- }
- `)
- })
- })
-
- test('background-image values are joined when retrieved using the theme function', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: [],
- theme: {
- backgroundImage: {
- lol: ['width', 'height'],
- },
- },
- plugins: [
- function ({ addComponents, theme }) {
- addComponents({
- '.foo': {
- backgroundImage: theme('backgroundImage.lol'),
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- background-image: width, height;
- }
- `)
- })
- })
-
- test('background-size values are joined when retrieved using the theme function', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: [],
- theme: {
- backgroundSize: {
- lol: ['width', 'height'],
- },
- },
- plugins: [
- function ({ addComponents, theme }) {
- addComponents({
- '.foo': {
- backgroundSize: theme('backgroundSize.lol'),
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- background-size: width, height;
- }
- `)
- })
- })
-
- test('background-color values are joined when retrieved using the theme function', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: [],
- theme: {
- backgroundColor: {
- lol: ['width', 'height'],
- },
- },
- plugins: [
- function ({ addComponents, theme }) {
- addComponents({
- '.foo': {
- backgroundColor: theme('backgroundColor.lol'),
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- background-color: width, height;
- }
- `)
- })
- })
-
- test('cursor values are joined when retrieved using the theme function', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: [],
- theme: {
- cursor: {
- lol: ['width', 'height'],
- },
- },
- plugins: [
- function ({ addComponents, theme }) {
- addComponents({
- '.foo': {
- cursor: theme('cursor.lol'),
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- cursor: width, height;
- }
- `)
- })
- })
-
- test('animation values are joined when retrieved using the theme function', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: [],
- theme: {
- animation: {
- lol: ['width', 'height'],
- },
- },
- plugins: [
- function ({ addComponents, theme }) {
- addComponents({
- '.foo': {
- animation: theme('animation.lol'),
- },
- })
- },
- ],
- }
-
- return run('@tailwind components', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- animation: width, height;
- }
- `)
- })
- })
-
- test('custom properties are not converted to kebab-case when added to base layer', () => {
- let config = {
- content: [],
- plugins: [
- function ({ addBase }) {
- addBase({
- ':root': {
- '--colors-primaryThing-500': '0, 0, 255',
- },
- })
- },
- ],
- }
-
- return run('@tailwind base', config).then((result) => {
- expect(result.css).toContain(`--colors-primaryThing-500: 0, 0, 255;`)
- })
+ }
+ `)
})
})
+
+test('font sizes are retrieved without default line-heights or letter-spacing using theme function', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ theme: {
+ fontSize: {
+ sm: ['14px', '20px'],
+ },
+ },
+ plugins: [
+ function ({ addComponents, theme }) {
+ addComponents({
+ '.foo': {
+ fontSize: theme('fontSize.sm'),
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ font-size: 14px;
+ }
+ `)
+ })
+})
+
+test('outlines are retrieved without outline-offset using theme function', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ theme: {
+ outline: {
+ black: ['2px dotted black', '4px'],
+ },
+ },
+ plugins: [
+ function ({ addComponents, theme }) {
+ addComponents({
+ '.foo': {
+ outline: theme('outline.black'),
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ outline: 2px dotted #000;
+ }
+ `)
+ })
+})
+
+test('box-shadow values are joined when retrieved using the theme function', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ theme: {
+ boxShadow: {
+ lol: ['width', 'height'],
+ },
+ },
+ plugins: [
+ function ({ addComponents, theme }) {
+ addComponents({
+ '.foo': {
+ boxShadow: theme('boxShadow.lol'),
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ box-shadow: width, height;
+ }
+ `)
+ })
+})
+
+test('transition-property values are joined when retrieved using the theme function', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ theme: {
+ transitionProperty: {
+ lol: ['width', 'height'],
+ },
+ },
+ plugins: [
+ function ({ addComponents, theme }) {
+ addComponents({
+ '.foo': {
+ transitionProperty: theme('transitionProperty.lol'),
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ transition-property: width, height;
+ }
+ `)
+ })
+})
+
+test('transition-duration values are joined when retrieved using the theme function', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ theme: {
+ transitionDuration: {
+ lol: ['width', 'height'],
+ },
+ },
+ plugins: [
+ function ({ addComponents, theme }) {
+ addComponents({
+ '.foo': {
+ transitionDuration: theme('transitionDuration.lol'),
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ transition-duration: width, height;
+ }
+ `)
+ })
+})
+
+test('transition-delay values are joined when retrieved using the theme function', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ theme: {
+ transitionDuration: {
+ lol: ['width', 'height'],
+ },
+ },
+ plugins: [
+ function ({ addComponents, theme }) {
+ addComponents({
+ '.foo': {
+ transitionDuration: theme('transitionDuration.lol'),
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ transition-duration: width, height;
+ }
+ `)
+ })
+})
+
+test('transition-timing-function values are joined when retrieved using the theme function', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ theme: {
+ transitionTimingFunction: {
+ lol: ['width', 'height'],
+ },
+ },
+ plugins: [
+ function ({ addComponents, theme }) {
+ addComponents({
+ '.foo': {
+ transitionTimingFunction: theme('transitionTimingFunction.lol'),
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ transition-timing-function: width, height;
+ }
+ `)
+ })
+})
+
+test('background-image values are joined when retrieved using the theme function', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ theme: {
+ backgroundImage: {
+ lol: ['width', 'height'],
+ },
+ },
+ plugins: [
+ function ({ addComponents, theme }) {
+ addComponents({
+ '.foo': {
+ backgroundImage: theme('backgroundImage.lol'),
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ background-image: width, height;
+ }
+ `)
+ })
+})
+
+test('background-size values are joined when retrieved using the theme function', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ theme: {
+ backgroundSize: {
+ lol: ['width', 'height'],
+ },
+ },
+ plugins: [
+ function ({ addComponents, theme }) {
+ addComponents({
+ '.foo': {
+ backgroundSize: theme('backgroundSize.lol'),
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ background-size: width, height;
+ }
+ `)
+ })
+})
+
+test('background-color values are joined when retrieved using the theme function', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ theme: {
+ backgroundColor: {
+ lol: ['width', 'height'],
+ },
+ },
+ plugins: [
+ function ({ addComponents, theme }) {
+ addComponents({
+ '.foo': {
+ backgroundColor: theme('backgroundColor.lol'),
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ background-color: width, height;
+ }
+ `)
+ })
+})
+
+test('cursor values are joined when retrieved using the theme function', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ theme: {
+ cursor: {
+ lol: ['width', 'height'],
+ },
+ },
+ plugins: [
+ function ({ addComponents, theme }) {
+ addComponents({
+ '.foo': {
+ cursor: theme('cursor.lol'),
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ cursor: width, height;
+ }
+ `)
+ })
+})
+
+test('animation values are joined when retrieved using the theme function', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ theme: {
+ animation: {
+ lol: ['width', 'height'],
+ },
+ },
+ plugins: [
+ function ({ addComponents, theme }) {
+ addComponents({
+ '.foo': {
+ animation: theme('animation.lol'),
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ animation: width, height;
+ }
+ `)
+ })
+})
+
+test('custom properties are not converted to kebab-case when added to base layer', () => {
+ let config = {
+ content: [],
+ plugins: [
+ function ({ addBase }) {
+ addBase({
+ ':root': {
+ '--colors-primaryThing-500': '0, 0, 255',
+ },
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind base', config).then((result) => {
+ expect(result.css).toContain(`--colors-primaryThing-500: 0, 0, 255;`)
+ })
+})
+
+test('plugins can loaded by package name / path', async () => {
+ let config = {
+ content: [{ raw: 'example-1' }],
+ plugins: [`${__dirname}/fixtures/plugins/example.cjs`],
+ }
+
+ let result = await run('@tailwind utilities', config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .example-1 {
+ color: red;
+ }
+ `)
+})
+
+test('named plugins can specify options', async () => {
+ let config = {
+ content: [{ raw: 'ex-example-1 example-1' }],
+ plugins: [[`${__dirname}/fixtures/plugins/example.cjs`, { prefix: 'ex-' }]],
+ }
+
+ let result = await run('@tailwind utilities', config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .ex-example-1 {
+ color: red;
+ }
+ `)
+})
+
+test('named plugins resolve default export', async () => {
+ let config = {
+ content: [{ raw: 'example-1' }],
+ plugins: [`${__dirname}/fixtures/plugins/example.default.cjs`],
+ }
+
+ let result = await run('@tailwind utilities', config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .example-1 {
+ color: red;
+ }
+ `)
+})
+
+test('named plugins resolve default export when using options', async () => {
+ let config = {
+ content: [{ raw: 'example-1 ex-example-1' }],
+ plugins: [[`${__dirname}/fixtures/plugins/example.default.cjs`, { prefix: 'ex-' }]],
+ }
+
+ let result = await run('@tailwind utilities', config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .ex-example-1 {
+ color: red;
+ }
+ `)
+})
diff --git a/tests/custom-separator.test.js b/tests/custom-separator.test.js
index adc1d55af..3b1708dfb 100644
--- a/tests/custom-separator.test.js
+++ b/tests/custom-separator.test.js
@@ -1,57 +1,55 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- test('custom separator', () => {
- let config = {
- darkMode: 'class',
- content: [
- {
- raw: html`
-
-
-
-
-
- `,
- },
- ],
- separator: '_',
- }
+test('custom separator', () => {
+ let config = {
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+ `,
+ },
+ ],
+ separator: '_',
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .group:hover .group-hover_focus-within_text-left:focus-within {
- text-align: left;
- }
- :is([dir='rtl'] .rtl_active_text-center:active) {
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .group:hover .group-hover_focus-within_text-left:focus-within {
+ text-align: left;
+ }
+ :is([dir='rtl'] .rtl_active_text-center:active) {
+ text-align: center;
+ }
+ @media (prefers-reduced-motion: no-preference) {
+ .motion-safe_hover_text-center:hover {
text-align: center;
}
- @media (prefers-reduced-motion: no-preference) {
- .motion-safe_hover_text-center:hover {
- text-align: center;
- }
+ }
+ :is(.dark .dark_focus_text-left:focus) {
+ text-align: left;
+ }
+ @media (min-width: 768px) {
+ .md_hover_text-right:hover {
+ text-align: right;
}
- :is(.dark .dark_focus_text-left:focus) {
- text-align: left;
- }
- @media (min-width: 768px) {
- .md_hover_text-right:hover {
- text-align: right;
- }
- }
- `)
- })
- })
-
- test('dash is not supported', () => {
- let config = {
- darkMode: 'class',
- content: [{ raw: 'lg-hover-font-bold' }],
- separator: '-',
- }
-
- return expect(run('@tailwind utilities', config)).rejects.toThrowError(
- "The '-' character cannot be used as a custom separator in JIT mode due to parsing ambiguity. Please use another character like '_' instead."
- )
+ }
+ `)
})
})
+
+test('dash is not supported', () => {
+ let config = {
+ darkMode: 'class',
+ content: [{ raw: 'lg-hover-font-bold' }],
+ separator: '-',
+ }
+
+ return expect(run('@tailwind utilities', config)).rejects.toThrowError(
+ "The '-' character cannot be used as a custom separator in JIT mode due to parsing ambiguity. Please use another character like '_' instead."
+ )
+})
diff --git a/tests/custom-transformers.test.js b/tests/custom-transformers.test.js
index 14e3abac0..2715a7155 100644
--- a/tests/custom-transformers.test.js
+++ b/tests/custom-transformers.test.js
@@ -1,72 +1,67 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
function customTransformer(content) {
return content.replace(/uppercase/g, 'lowercase')
}
-crosscheck(({ stable, oxide }) => {
- oxide.test.todo('transform function')
- stable.test('transform function', () => {
- let config = {
- content: {
- files: [{ raw: html`
` }],
- transform: customTransformer,
- },
- }
+test('transform function', () => {
+ let config = {
+ content: {
+ files: [{ raw: html`
` }],
+ transform: customTransformer,
+ },
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .lowercase {
- text-transform: lowercase;
- }
- `)
- })
- })
-
- oxide.test.todo('transform.DEFAULT')
- stable.test('transform.DEFAULT', () => {
- let config = {
- content: {
- files: [{ raw: html`
` }],
- transform: {
- DEFAULT: customTransformer,
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .lowercase {
- text-transform: lowercase;
- }
- `)
- })
- })
-
- oxide.test.todo('transform.{extension}')
- stable.test('transform.{extension}', () => {
- let config = {
- content: {
- files: [
- { raw: 'blah blah blah', extension: 'html' },
- { raw: 'blah blah blah', extension: 'php' },
- ],
- transform: {
- html: () => 'uppercase',
- php: () => 'lowercase',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .uppercase {
- text-transform: uppercase;
- }
- .lowercase {
- text-transform: lowercase;
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .lowercase {
+ text-transform: lowercase;
+ }
+ `)
+ })
+})
+
+test('transform.DEFAULT', () => {
+ let config = {
+ content: {
+ files: [{ raw: html`
` }],
+ transform: {
+ DEFAULT: customTransformer,
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .lowercase {
+ text-transform: lowercase;
+ }
+ `)
+ })
+})
+
+test('transform.{extension}', () => {
+ let config = {
+ content: {
+ files: [
+ { raw: 'blah blah blah', extension: 'html' },
+ { raw: 'blah blah blah', extension: 'php' },
+ ],
+ transform: {
+ html: () => 'uppercase',
+ php: () => 'lowercase',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .uppercase {
+ text-transform: uppercase;
+ }
+ .lowercase {
+ text-transform: lowercase;
+ }
+ `)
})
})
diff --git a/tests/customConfig.test.js b/tests/customConfig.test.js
index 5b83f9f2e..b8f459144 100644
--- a/tests/customConfig.test.js
+++ b/tests/customConfig.test.js
@@ -2,37 +2,100 @@ import fs from 'fs'
import path from 'path'
import inTempDirectory from '../jest/runInTempDirectory'
-import { crosscheck, run, html, css, javascript } from './util/run'
+import { run, html, css, javascript } from './util/run'
const defaultConfigFile = 'tailwind.config.js'
const cjsConfigFile = 'tailwind.config.cjs'
-crosscheck(() => {
- test('it uses the values from the custom config file', () => {
- let config = require(path.resolve(`${__dirname}/fixtures/custom-config.js`))
+test('it uses the values from the custom config file', () => {
+ let config = require(path.resolve(`${__dirname}/fixtures/custom-config.js`))
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 400px) {
- .mobile\:font-bold {
- font-weight: 700;
- }
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 400px) {
+ .mobile\:font-bold {
+ font-weight: 700;
}
- `)
- })
+ }
+ `)
})
+})
- test('custom config can be passed as an object', () => {
- let config = {
+test('custom config can be passed as an object', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ screens: {
+ mobile: '400px',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 400px) {
+ .mobile\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+ })
+})
+
+test('custom config path can be passed using `config` property in an object', () => {
+ let config = {
+ config: path.resolve(`${__dirname}/fixtures/custom-config.js`),
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 400px) {
+ .mobile\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+ })
+})
+
+test('custom config can be passed under the `config` property', () => {
+ let config = {
+ config: {
content: [{ raw: html`
` }],
theme: {
screens: {
mobile: '400px',
},
},
- }
+ },
+ }
- return run('@tailwind utilities', config).then((result) => {
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 400px) {
+ .mobile\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+ })
+})
+
+test('tailwind.config.cjs is picked up by default', () => {
+ return inTempDirectory(() => {
+ fs.writeFileSync(
+ path.resolve(cjsConfigFile),
+ javascript`module.exports = {
+ content: [{ raw: '
' }],
+ theme: {
+ screens: {
+ mobile: '400px',
+ },
+ },
+ }`
+ )
+
+ return run('@tailwind utilities').then((result) => {
expect(result.css).toMatchFormattedCss(css`
@media (min-width: 400px) {
.mobile\:font-bold {
@@ -42,349 +105,284 @@ crosscheck(() => {
`)
})
})
-
- test('custom config path can be passed using `config` property in an object', () => {
- let config = {
- config: path.resolve(`${__dirname}/fixtures/custom-config.js`),
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 400px) {
- .mobile\:font-bold {
- font-weight: 700;
- }
- }
- `)
- })
- })
-
- test('custom config can be passed under the `config` property', () => {
- let config = {
- config: {
- content: [{ raw: html`
` }],
- theme: {
- screens: {
- mobile: '400px',
- },
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 400px) {
- .mobile\:font-bold {
- font-weight: 700;
- }
- }
- `)
- })
- })
-
- test('tailwind.config.cjs is picked up by default', () => {
- return inTempDirectory(() => {
- fs.writeFileSync(
- path.resolve(cjsConfigFile),
- javascript`module.exports = {
- content: [{ raw: '
' }],
- theme: {
- screens: {
- mobile: '400px',
- },
- },
- }`
- )
-
- return run('@tailwind utilities').then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 400px) {
- .mobile\:font-bold {
- font-weight: 700;
- }
- }
- `)
- })
- })
- })
-
- test('tailwind.config.js is picked up by default', () => {
- return inTempDirectory(() => {
- fs.writeFileSync(
- path.resolve(defaultConfigFile),
- javascript`module.exports = {
- content: [{ raw: '
' }],
- theme: {
- screens: {
- mobile: '400px',
- },
- },
- }`
- )
-
- return run('@tailwind utilities').then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 400px) {
- .mobile\:font-bold {
- font-weight: 700;
- }
- }
- `)
- })
- })
- })
-
- test('tailwind.config.cjs is picked up by default when passing an empty object', () => {
- return inTempDirectory(() => {
- fs.writeFileSync(
- path.resolve(cjsConfigFile),
- javascript`module.exports = {
- content: [{ raw: '
' }],
- theme: {
- screens: {
- mobile: '400px',
- },
- },
- }`
- )
-
- return run('@tailwind utilities', {}).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 400px) {
- .mobile\:font-bold {
- font-weight: 700;
- }
- }
- `)
- })
- })
- })
-
- test('tailwind.config.js is picked up by default when passing an empty object', () => {
- return inTempDirectory(() => {
- fs.writeFileSync(
- path.resolve(defaultConfigFile),
- javascript`module.exports = {
- content: [{ raw: '
' }],
- theme: {
- screens: {
- mobile: '400px',
- },
- },
- }`
- )
-
- return run('@tailwind utilities', {}).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 400px) {
- .mobile\:font-bold {
- font-weight: 700;
- }
- }
- `)
- })
- })
- })
-
- test('the default config can be overridden using the presets key', () => {
- let config = {
- content: [{ raw: html`
` }],
- presets: [
- {
- theme: {
- extend: { minHeight: { secondary: '24px' } },
- },
- },
- ],
- theme: {
- extend: { minHeight: { primary: '48px' } },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .min-h-0 {
- min-height: 0;
- }
- .min-h-primary {
- min-height: 48px;
- }
- .min-h-secondary {
- min-height: 24px;
- }
- `)
- })
- })
-
- test('presets can be functions', () => {
- let config = {
- content: [{ raw: html`
` }],
- presets: [
- () => ({
- theme: {
- extend: { minHeight: { secondary: '24px' } },
- },
- }),
- ],
- theme: {
- extend: { minHeight: { primary: '48px' } },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .min-h-0 {
- min-height: 0;
- }
- .min-h-primary {
- min-height: 48px;
- }
- .min-h-secondary {
- min-height: 24px;
- }
- `)
- })
- })
-
- test('the default config can be removed by using an empty presets key in a preset', () => {
- let config = {
- content: [{ raw: html`
` }],
- presets: [
- {
- presets: [],
- theme: {
- extend: { minHeight: { secondary: '24px' } },
- },
- },
- ],
- theme: {
- extend: { minHeight: { primary: '48px' } },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .min-h-primary {
- min-height: 48px;
- }
- .min-h-secondary {
- min-height: 24px;
- }
- `)
- })
- })
-
- test('presets can have their own presets', () => {
- let config = {
- content: [{ raw: html`
` }],
- presets: [
- {
- presets: [],
- theme: {
- colors: { red: '#dd0000' },
- },
- },
- {
- presets: [
- {
- presets: [],
- theme: {
- colors: {
- transparent: 'transparent',
- red: '#ff0000',
- },
- },
- },
- ],
- theme: {
- extend: {
- colors: {
- black: 'black',
- red: '#ee0000',
- },
- backgroundColor: (theme) => theme('colors'),
- },
- },
- corePlugins: ['backgroundColor'],
- },
- ],
- theme: {
- extend: { colors: { white: 'white' } },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-black {
- background-color: #000;
- }
- .bg-red {
- background-color: #e00;
- }
- .bg-transparent {
- background-color: #0000;
- }
- .bg-white {
- background-color: #fff;
- }
- `)
- })
- })
-
- test('function presets can be mixed with object presets', () => {
- let config = {
- content: [{ raw: html`
` }],
- presets: [
- () => ({
- presets: [],
- theme: {
- colors: { red: '#dd0000' },
- },
- }),
- {
- presets: [
- () => ({
- presets: [],
- theme: {
- colors: {
- transparent: 'transparent',
- red: '#ff0000',
- },
- },
- }),
- ],
- theme: {
- extend: {
- colors: {
- black: 'black',
- red: '#ee0000',
- },
- backgroundColor: (theme) => theme('colors'),
- },
- },
- corePlugins: ['backgroundColor'],
- },
- ],
- theme: {
- extend: { colors: { white: 'white' } },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-black {
- background-color: #000;
- }
- .bg-red {
- background-color: #e00;
- }
- .bg-transparent {
- background-color: #0000;
- }
- .bg-white {
- background-color: #fff;
- }
- `)
- })
- })
+})
+
+test('tailwind.config.js is picked up by default', () => {
+ return inTempDirectory(() => {
+ fs.writeFileSync(
+ path.resolve(defaultConfigFile),
+ javascript`module.exports = {
+ content: [{ raw: '
' }],
+ theme: {
+ screens: {
+ mobile: '400px',
+ },
+ },
+ }`
+ )
+
+ return run('@tailwind utilities').then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 400px) {
+ .mobile\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+ })
+ })
+})
+
+test('tailwind.config.cjs is picked up by default when passing an empty object', () => {
+ return inTempDirectory(() => {
+ fs.writeFileSync(
+ path.resolve(cjsConfigFile),
+ javascript`module.exports = {
+ content: [{ raw: '
' }],
+ theme: {
+ screens: {
+ mobile: '400px',
+ },
+ },
+ }`
+ )
+
+ return run('@tailwind utilities', {}).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 400px) {
+ .mobile\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+ })
+ })
+})
+
+test('tailwind.config.js is picked up by default when passing an empty object', () => {
+ return inTempDirectory(() => {
+ fs.writeFileSync(
+ path.resolve(defaultConfigFile),
+ javascript`module.exports = {
+ content: [{ raw: '
' }],
+ theme: {
+ screens: {
+ mobile: '400px',
+ },
+ },
+ }`
+ )
+
+ return run('@tailwind utilities', {}).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 400px) {
+ .mobile\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+ })
+ })
+})
+
+test('the default config can be overridden using the presets key', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ presets: [
+ {
+ theme: {
+ extend: { minHeight: { secondary: '24px' } },
+ },
+ },
+ ],
+ theme: {
+ extend: { minHeight: { primary: '48px' } },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .min-h-0 {
+ min-height: 0;
+ }
+ .min-h-primary {
+ min-height: 48px;
+ }
+ .min-h-secondary {
+ min-height: 24px;
+ }
+ `)
+ })
+})
+
+test('presets can be functions', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ presets: [
+ () => ({
+ theme: {
+ extend: { minHeight: { secondary: '24px' } },
+ },
+ }),
+ ],
+ theme: {
+ extend: { minHeight: { primary: '48px' } },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .min-h-0 {
+ min-height: 0;
+ }
+ .min-h-primary {
+ min-height: 48px;
+ }
+ .min-h-secondary {
+ min-height: 24px;
+ }
+ `)
+ })
+})
+
+test('the default config can be removed by using an empty presets key in a preset', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ presets: [
+ {
+ presets: [],
+ theme: {
+ extend: { minHeight: { secondary: '24px' } },
+ },
+ },
+ ],
+ theme: {
+ extend: { minHeight: { primary: '48px' } },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .min-h-primary {
+ min-height: 48px;
+ }
+ .min-h-secondary {
+ min-height: 24px;
+ }
+ `)
+ })
+})
+
+test('presets can have their own presets', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ presets: [
+ {
+ presets: [],
+ theme: {
+ colors: { red: '#dd0000' },
+ },
+ },
+ {
+ presets: [
+ {
+ presets: [],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ red: '#ff0000',
+ },
+ },
+ },
+ ],
+ theme: {
+ extend: {
+ colors: {
+ black: 'black',
+ red: '#ee0000',
+ },
+ backgroundColor: (theme) => theme('colors'),
+ },
+ },
+ corePlugins: ['backgroundColor'],
+ },
+ ],
+ theme: {
+ extend: { colors: { white: 'white' } },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-black {
+ background-color: #000;
+ }
+ .bg-red {
+ background-color: #e00;
+ }
+ .bg-transparent {
+ background-color: #0000;
+ }
+ .bg-white {
+ background-color: #fff;
+ }
+ `)
+ })
+})
+
+test('function presets can be mixed with object presets', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ presets: [
+ () => ({
+ presets: [],
+ theme: {
+ colors: { red: '#dd0000' },
+ },
+ }),
+ {
+ presets: [
+ () => ({
+ presets: [],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ red: '#ff0000',
+ },
+ },
+ }),
+ ],
+ theme: {
+ extend: {
+ colors: {
+ black: 'black',
+ red: '#ee0000',
+ },
+ backgroundColor: (theme) => theme('colors'),
+ },
+ },
+ corePlugins: ['backgroundColor'],
+ },
+ ],
+ theme: {
+ extend: { colors: { white: 'white' } },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-black {
+ background-color: #000;
+ }
+ .bg-red {
+ background-color: #e00;
+ }
+ .bg-transparent {
+ background-color: #0000;
+ }
+ .bg-white {
+ background-color: #fff;
+ }
+ `)
+ })
})
diff --git a/tests/dark-mode.test.js b/tests/dark-mode.test.js
index ce06496b2..0c5273991 100644
--- a/tests/dark-mode.test.js
+++ b/tests/dark-mode.test.js
@@ -1,123 +1,121 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(() => {
- it('should be possible to use the darkMode "class" mode', () => {
- let config = {
- darkMode: 'class',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
+it('should be possible to use the darkMode "class" mode', () => {
+ let config = {
+ darkMode: 'class',
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- :is(.dark .dark\:font-bold) {
- font-weight: 700;
- }
- `)
- })
- })
-
- it('should be possible to change the class name', () => {
- let config = {
- darkMode: ['class', '.test-dark'],
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- :is(.test-dark .dark\:font-bold) {
- font-weight: 700;
- }
- `)
- })
- })
-
- it('should be possible to use the darkMode "media" mode', () => {
- let config = {
- darkMode: 'media',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- @media (prefers-color-scheme: dark) {
- .dark\:font-bold {
- font-weight: 700;
- }
- }
- `)
- })
- })
-
- it('should default to the `media` mode when no mode is provided', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- @media (prefers-color-scheme: dark) {
- .dark\:font-bold {
- font-weight: 700;
- }
- }
- `)
- })
- })
-
- it('should default to the `media` mode when mode is set to `false`', () => {
- let config = {
- darkMode: false,
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- @media (prefers-color-scheme: dark) {
- .dark\:font-bold {
- font-weight: 700;
- }
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ :is(.dark .dark\:font-bold) {
+ font-weight: 700;
+ }
+ `)
+ })
+})
+
+it('should be possible to change the class name', () => {
+ let config = {
+ darkMode: ['class', '.test-dark'],
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ :is(.test-dark .dark\:font-bold) {
+ font-weight: 700;
+ }
+ `)
+ })
+})
+
+it('should be possible to use the darkMode "media" mode', () => {
+ let config = {
+ darkMode: 'media',
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ @media (prefers-color-scheme: dark) {
+ .dark\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+ })
+})
+
+it('should default to the `media` mode when no mode is provided', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ @media (prefers-color-scheme: dark) {
+ .dark\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+ })
+})
+
+it('should default to the `media` mode when mode is set to `false`', () => {
+ let config = {
+ darkMode: false,
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ @media (prefers-color-scheme: dark) {
+ .dark\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
})
})
diff --git a/tests/detect-nesting.test.js b/tests/detect-nesting.test.js
index 39af6d422..08eeacf98 100644
--- a/tests/detect-nesting.test.js
+++ b/tests/detect-nesting.test.js
@@ -1,130 +1,128 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- it('should warn when we detect nested css', () => {
- let config = {
- content: [{ raw: html`
` }],
- }
+it('should warn when we detect nested css', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
- let input = css`
- @tailwind utilities;
+ let input = css`
+ @tailwind utilities;
- .nested {
- .example {
- }
+ .nested {
+ .example {
}
- `
-
- return run(input, config).then((result) => {
- expect(result.messages).toHaveLength(1)
- expect(result.messages).toMatchObject([
- {
- type: 'warning',
- text: [
- 'Nested CSS was detected, but CSS nesting has not been configured correctly.',
- 'Please enable a CSS nesting plugin *before* Tailwind in your configuration.',
- 'See how here: https://tailwindcss.com/docs/using-with-preprocessors#nesting',
- ].join('\n'),
- },
- ])
- })
- })
-
- it('should not warn when we detect nested css inside css @layer rules', () => {
- let config = {
- content: [{ raw: html`
` }],
}
+ `
- let input = css`
+ return run(input, config).then((result) => {
+ expect(result.messages).toHaveLength(1)
+ expect(result.messages).toMatchObject([
+ {
+ type: 'warning',
+ text: [
+ 'Nested CSS was detected, but CSS nesting has not been configured correctly.',
+ 'Please enable a CSS nesting plugin *before* Tailwind in your configuration.',
+ 'See how here: https://tailwindcss.com/docs/using-with-preprocessors#nesting',
+ ].join('\n'),
+ },
+ ])
+ })
+})
+
+it('should not warn when we detect nested css inside css @layer rules', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ let input = css`
+ @layer tw-base, tw-components, tw-utilities;
+ @layer tw-utilities {
+ @tailwind utilities;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
@layer tw-base, tw-components, tw-utilities;
@layer tw-utilities {
- @tailwind utilities;
- }
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @layer tw-base, tw-components, tw-utilities;
- @layer tw-utilities {
- .underline {
- text-decoration-line: underline;
- }
- }
- `)
- expect(result.messages).toHaveLength(0)
- })
- })
-
- it('should warn when we detect namespaced @tailwind at rules', () => {
- let config = {
- content: [{ raw: html`
` }],
- }
-
- let input = css`
- .namespace {
- @tailwind utilities;
- }
- `
-
- return run(input, config).then((result) => {
- expect(result.messages).toHaveLength(1)
- expect(result.messages).toMatchObject([
- {
- type: 'warning',
- text: [
- 'Nested @tailwind rules were detected, but are not supported.',
- "Consider using a prefix to scope Tailwind's classes: https://tailwindcss.com/docs/configuration#prefix",
- 'Alternatively, use the important selector strategy: https://tailwindcss.com/docs/configuration#selector-strategy',
- ].join('\n'),
- },
- ])
- })
- })
-
- it('should not warn when nesting a single rule inside a media query', () => {
- let config = {
- content: [{ raw: html`
` }],
- }
-
- let input = css`
- @tailwind utilities;
-
- @media (min-width: 768px) {
- .nested {
+ .underline {
+ text-decoration-line: underline;
}
}
- `
-
- return run(input, config).then((result) => {
- expect(result.messages).toHaveLength(0)
- expect(result.messages).toEqual([])
- })
+ `)
+ expect(result.messages).toHaveLength(0)
})
+})
- it('should only warn for the first detected nesting ', () => {
- let config = {
- content: [{ raw: html`
` }],
- }
+it('should warn when we detect namespaced @tailwind at rules', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
- let input = css`
+ let input = css`
+ .namespace {
@tailwind utilities;
+ }
+ `
+ return run(input, config).then((result) => {
+ expect(result.messages).toHaveLength(1)
+ expect(result.messages).toMatchObject([
+ {
+ type: 'warning',
+ text: [
+ 'Nested @tailwind rules were detected, but are not supported.',
+ "Consider using a prefix to scope Tailwind's classes: https://tailwindcss.com/docs/configuration#prefix",
+ 'Alternatively, use the important selector strategy: https://tailwindcss.com/docs/configuration#selector-strategy',
+ ].join('\n'),
+ },
+ ])
+ })
+})
+
+it('should not warn when nesting a single rule inside a media query', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ @media (min-width: 768px) {
.nested {
- .example {
- }
+ }
+ }
+ `
- .other {
- }
+ return run(input, config).then((result) => {
+ expect(result.messages).toHaveLength(0)
+ expect(result.messages).toEqual([])
+ })
+})
+
+it('should only warn for the first detected nesting ', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ .nested {
+ .example {
}
.other {
- .example {
- }
}
- `
+ }
- return run(input, config).then((result) => {
- expect(result.messages).toHaveLength(1)
- })
+ .other {
+ .example {
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.messages).toHaveLength(1)
})
})
diff --git a/tests/escapeClassName.test.js b/tests/escapeClassName.test.js
index cdd834a79..7a8cd7b7b 100644
--- a/tests/escapeClassName.test.js
+++ b/tests/escapeClassName.test.js
@@ -1,8 +1,5 @@
import escapeClassName from '../src/util/escapeClassName'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- test('invalid characters are escaped', () => {
- expect(escapeClassName('w:_$-1/2')).toEqual('w\\:_\\$-1\\/2')
- })
+test('invalid characters are escaped', () => {
+ expect(escapeClassName('w:_$-1/2')).toEqual('w\\:_\\$-1\\/2')
})
diff --git a/tests/evaluateTailwindFunctions.test.js b/tests/evaluateTailwindFunctions.test.js
index e4085e03e..01ae5f58a 100644
--- a/tests/evaluateTailwindFunctions.test.js
+++ b/tests/evaluateTailwindFunctions.test.js
@@ -2,7 +2,7 @@ import fs from 'fs'
import path from 'path'
import postcss from 'postcss'
import plugin from '../src/lib/evaluateTailwindFunctions'
-import { crosscheck, run as runFull, html, css } from './util/run'
+import { run as runFull, html, css } from './util/run'
function run(input, opts = {}) {
return postcss([
@@ -15,1373 +15,1404 @@ function run(input, opts = {}) {
]).process(input, { from: undefined })
}
-crosscheck(({ stable, oxide }) => {
- test('it looks up values in the theme using dot notation', () => {
- let input = css`
- .banana {
- color: theme('colors.yellow');
- }
- `
-
- let output = css`
- .banana {
- color: #f7cc50;
- }
- `
-
- return run(input, {
- theme: {
- colors: {
- yellow: '#f7cc50',
- },
- },
- }).then((result) => {
- expect(result.css).toEqual(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('it looks up values in the theme using bracket notation', () => {
- let input = css`
- .banana {
- color: theme('colors[yellow]');
- }
- `
-
- let output = css`
- .banana {
- color: #f7cc50;
- }
- `
-
- return run(input, {
- theme: {
- colors: {
- yellow: '#f7cc50',
- },
- },
- }).then((result) => {
- expect(result.css).toEqual(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('it looks up values in the theme using consecutive bracket notation', () => {
- let input = css`
- .banana {
- color: theme('colors[yellow][100]');
- }
- `
-
- let output = css`
- .banana {
- color: #f7cc50;
- }
- `
-
- return run(input, {
- theme: {
- colors: {
- yellow: {
- 100: '#f7cc50',
- },
- },
- },
- }).then((result) => {
- expect(result.css).toEqual(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('it looks up values in the theme using bracket notation that have dots in them', () => {
- let input = css`
- .banana {
- padding-top: theme('spacing[1.5]');
- }
- `
-
- let output = css`
- .banana {
- padding-top: 0.375rem;
- }
- `
-
- return run(input, {
- theme: {
- spacing: {
- '1.5': '0.375rem',
- },
- },
- }).then((result) => {
- expect(result.css).toEqual(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('theme with mismatched brackets throws an error ', async () => {
- let config = {
- theme: {
- spacing: {
- '1.5': '0.375rem',
- },
- },
+test('it looks up values in the theme using dot notation', () => {
+ let input = css`
+ .banana {
+ color: theme('colors.yellow');
}
+ `
- let input = (path) => css`
- .banana {
- padding-top: theme('${path}');
- }
- `
+ let output = css`
+ .banana {
+ color: #f7cc50;
+ }
+ `
- await expect(run(input('spacing[1.5]]'), config)).rejects.toThrowError(
- `Path is invalid. Has unbalanced brackets: spacing[1.5]]`
- )
-
- await expect(run(input('spacing[[1.5]'), config)).rejects.toThrowError(
- `Path is invalid. Has unbalanced brackets: spacing[[1.5]`
- )
-
- await expect(run(input('spacing[a['), config)).rejects.toThrowError(
- `Path is invalid. Has unbalanced brackets: spacing[a[`
- )
- })
-
- test('color can be a function', () => {
- let input = css`
- .backgroundColor {
- color: theme('backgroundColor.fn');
- }
- .borderColor {
- color: theme('borderColor.fn');
- }
- .caretColor {
- color: theme('caretColor.fn');
- }
- .colors {
- color: theme('colors.fn');
- }
- .divideColor {
- color: theme('divideColor.fn');
- }
- .fill {
- color: theme('fill.fn');
- }
- .gradientColorStops {
- color: theme('gradientColorStops.fn');
- }
- .placeholderColor {
- color: theme('placeholderColor.fn');
- }
- .ringColor {
- color: theme('ringColor.fn');
- }
- .ringOffsetColor {
- color: theme('ringOffsetColor.fn');
- }
- .stroke {
- color: theme('stroke.fn');
- }
- .textColor {
- color: theme('textColor.fn');
- }
- `
-
- let output = css`
- .backgroundColor {
- color: #f00;
- }
- .borderColor {
- color: #f00;
- }
- .caretColor {
- color: #f00;
- }
- .colors {
- color: #f00;
- }
- .divideColor {
- color: #f00;
- }
- .fill {
- color: #f00;
- }
- .gradientColorStops {
- color: #f00;
- }
- .placeholderColor {
- color: #f00;
- }
- .ringColor {
- color: #f00;
- }
- .ringOffsetColor {
- color: #f00;
- }
- .stroke {
- color: #f00;
- }
- .textColor {
- color: #f00;
- }
- `
-
- let fn = () => `#f00`
-
- return run(input, {
- theme: {
- backgroundColor: { fn },
- borderColor: { fn },
- caretColor: { fn },
- colors: { fn },
- divideColor: { fn },
- fill: { fn },
- gradientColorStops: { fn },
- placeholderColor: { fn },
- ringColor: { fn },
- ringOffsetColor: { fn },
- stroke: { fn },
- textColor: { fn },
+ return run(input, {
+ theme: {
+ colors: {
+ yellow: '#f7cc50',
},
- }).then((result) => {
- expect(result.css).toEqual(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toEqual(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('quotes are optional around the lookup path', () => {
- let input = css`
- .banana {
- color: theme(colors.yellow);
- }
- `
+test('it looks up values in the theme using bracket notation', () => {
+ let input = css`
+ .banana {
+ color: theme('colors[yellow]');
+ }
+ `
- let output = css`
- .banana {
- color: #f7cc50;
- }
- `
+ let output = css`
+ .banana {
+ color: #f7cc50;
+ }
+ `
- return run(input, {
+ return run(input, {
+ theme: {
+ colors: {
+ yellow: '#f7cc50',
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toEqual(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('it looks up values in the theme using consecutive bracket notation', () => {
+ let input = css`
+ .banana {
+ color: theme('colors[yellow][100]');
+ }
+ `
+
+ let output = css`
+ .banana {
+ color: #f7cc50;
+ }
+ `
+
+ return run(input, {
+ theme: {
+ colors: {
+ yellow: {
+ 100: '#f7cc50',
+ },
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toEqual(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('it looks up values in the theme using bracket notation that have dots in them', () => {
+ let input = css`
+ .banana {
+ padding-top: theme('spacing[1.5]');
+ }
+ `
+
+ let output = css`
+ .banana {
+ padding-top: 0.375rem;
+ }
+ `
+
+ return run(input, {
+ theme: {
+ spacing: {
+ '1.5': '0.375rem',
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toEqual(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('theme with mismatched brackets throws an error ', async () => {
+ let config = {
+ theme: {
+ spacing: {
+ '1.5': '0.375rem',
+ },
+ },
+ }
+
+ let input = (path) => css`
+ .banana {
+ padding-top: theme('${path}');
+ }
+ `
+
+ await expect(run(input('spacing[1.5]]'), config)).rejects.toThrowError(
+ `Path is invalid. Has unbalanced brackets: spacing[1.5]]`
+ )
+
+ await expect(run(input('spacing[[1.5]'), config)).rejects.toThrowError(
+ `Path is invalid. Has unbalanced brackets: spacing[[1.5]`
+ )
+
+ await expect(run(input('spacing[a['), config)).rejects.toThrowError(
+ `Path is invalid. Has unbalanced brackets: spacing[a[`
+ )
+})
+
+test('color can be a function', () => {
+ let input = css`
+ .backgroundColor {
+ color: theme('backgroundColor.fn');
+ }
+ .borderColor {
+ color: theme('borderColor.fn');
+ }
+ .caretColor {
+ color: theme('caretColor.fn');
+ }
+ .colors {
+ color: theme('colors.fn');
+ }
+ .divideColor {
+ color: theme('divideColor.fn');
+ }
+ .fill {
+ color: theme('fill.fn');
+ }
+ .gradientColorStops {
+ color: theme('gradientColorStops.fn');
+ }
+ .placeholderColor {
+ color: theme('placeholderColor.fn');
+ }
+ .ringColor {
+ color: theme('ringColor.fn');
+ }
+ .ringOffsetColor {
+ color: theme('ringOffsetColor.fn');
+ }
+ .stroke {
+ color: theme('stroke.fn');
+ }
+ .textColor {
+ color: theme('textColor.fn');
+ }
+ `
+
+ let output = css`
+ .backgroundColor {
+ color: #f00;
+ }
+ .borderColor {
+ color: #f00;
+ }
+ .caretColor {
+ color: #f00;
+ }
+ .colors {
+ color: #f00;
+ }
+ .divideColor {
+ color: #f00;
+ }
+ .fill {
+ color: #f00;
+ }
+ .gradientColorStops {
+ color: #f00;
+ }
+ .placeholderColor {
+ color: #f00;
+ }
+ .ringColor {
+ color: #f00;
+ }
+ .ringOffsetColor {
+ color: #f00;
+ }
+ .stroke {
+ color: #f00;
+ }
+ .textColor {
+ color: #f00;
+ }
+ `
+
+ let fn = () => `#f00`
+
+ return run(input, {
+ theme: {
+ backgroundColor: { fn },
+ borderColor: { fn },
+ caretColor: { fn },
+ colors: { fn },
+ divideColor: { fn },
+ fill: { fn },
+ gradientColorStops: { fn },
+ placeholderColor: { fn },
+ ringColor: { fn },
+ ringOffsetColor: { fn },
+ stroke: { fn },
+ textColor: { fn },
+ },
+ }).then((result) => {
+ expect(result.css).toEqual(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('quotes are optional around the lookup path', () => {
+ let input = css`
+ .banana {
+ color: theme(colors.yellow);
+ }
+ `
+
+ let output = css`
+ .banana {
+ color: #f7cc50;
+ }
+ `
+
+ return run(input, {
+ theme: {
+ colors: {
+ yellow: '#f7cc50',
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toEqual(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('a default value can be provided', () => {
+ let input = css`
+ .cookieMonster {
+ color: theme('colors.blue', #0000ff);
+ }
+ `
+
+ let output = css`
+ .cookieMonster {
+ color: #0000ff;
+ }
+ `
+
+ return run(input, {
+ theme: {
+ colors: {
+ yellow: '#f7cc50',
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toEqual(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('the default value can use the theme function', () => {
+ let input = css`
+ .cookieMonster {
+ color: theme('colors.blue', theme('colors.yellow'));
+ }
+ `
+
+ let output = css`
+ .cookieMonster {
+ color: #f7cc50;
+ }
+ `
+
+ return run(input, {
+ theme: {
+ colors: {
+ yellow: '#f7cc50',
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toEqual(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('quotes are preserved around default values', () => {
+ let input = css`
+ .heading {
+ font-family: theme('fontFamily.sans', 'Helvetica Neue');
+ }
+ `
+
+ let output = css`
+ .heading {
+ font-family: 'Helvetica Neue';
+ }
+ `
+
+ return run(input, {
+ theme: {
+ fontFamily: {
+ serif: 'Constantia',
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toEqual(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('an unquoted list is valid as a default value', () => {
+ let input = css`
+ .heading {
+ font-family: theme('fontFamily.sans', Helvetica, Arial, sans-serif);
+ }
+ `
+
+ let output = css`
+ .heading {
+ font-family: Helvetica, Arial, sans-serif;
+ }
+ `
+
+ return run(input, {
+ theme: {
+ fontFamily: {
+ serif: 'Constantia',
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toEqual(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('a missing root theme value throws', () => {
+ let input = css`
+ .heading {
+ color: theme('colours.gray.100');
+ }
+ `
+
+ return expect(
+ run(input, {
theme: {
colors: {
yellow: '#f7cc50',
},
},
- }).then((result) => {
- expect(result.css).toEqual(output)
- expect(result.warnings().length).toBe(0)
})
- })
+ ).rejects.toThrowError(
+ `'colours.gray.100' does not exist in your theme config. Your theme has the following top-level keys: 'colors'`
+ )
+})
- test('a default value can be provided', () => {
- let input = css`
- .cookieMonster {
- color: theme('colors.blue', #0000ff);
- }
- `
+test('a missing nested theme property throws', () => {
+ let input = css`
+ .heading {
+ color: theme('colors.red');
+ }
+ `
- let output = css`
- .cookieMonster {
- color: #0000ff;
- }
- `
+ return expect(
+ run(input, {
+ theme: {
+ colors: {
+ blue: 'blue',
+ yellow: '#f7cc50',
+ },
+ },
+ })
+ ).rejects.toThrowError(
+ `'colors.red' does not exist in your theme config. 'colors' has the following valid keys: 'blue', 'yellow'`
+ )
+})
- return run(input, {
+test('a missing nested theme property with a close alternative throws with a suggestion', () => {
+ let input = css`
+ .heading {
+ color: theme('colors.yellw');
+ }
+ `
+
+ return expect(
+ run(input, {
theme: {
colors: {
yellow: '#f7cc50',
},
},
- }).then((result) => {
- expect(result.css).toEqual(output)
- expect(result.warnings().length).toBe(0)
})
- })
+ ).rejects.toThrowError(
+ `'colors.yellw' does not exist in your theme config. Did you mean 'colors.yellow'?`
+ )
+})
- test('the default value can use the theme function', () => {
- let input = css`
- .cookieMonster {
- color: theme('colors.blue', theme('colors.yellow'));
- }
- `
+test('a path through a non-object throws', () => {
+ let input = css`
+ .heading {
+ color: theme('colors.yellow.100');
+ }
+ `
- let output = css`
- .cookieMonster {
- color: #f7cc50;
- }
- `
-
- return run(input, {
+ return expect(
+ run(input, {
theme: {
colors: {
yellow: '#f7cc50',
},
},
- }).then((result) => {
- expect(result.css).toEqual(output)
- expect(result.warnings().length).toBe(0)
})
- })
+ ).rejects.toThrowError(
+ `'colors.yellow.100' does not exist in your theme config. 'colors.yellow' is not an object.`
+ )
+})
- test('quotes are preserved around default values', () => {
- let input = css`
- .heading {
- font-family: theme('fontFamily.sans', 'Helvetica Neue');
- }
- `
+test('a path which exists but is not a string throws', () => {
+ let input = css`
+ .heading {
+ color: theme('colors.yellow');
+ }
+ `
- let output = css`
- .heading {
- font-family: 'Helvetica Neue';
- }
- `
-
- return run(input, {
+ return expect(
+ run(input, {
theme: {
- fontFamily: {
- serif: 'Constantia',
+ colors: {
+ yellow: Symbol(),
},
},
- }).then((result) => {
- expect(result.css).toEqual(output)
- expect(result.warnings().length).toBe(0)
})
- })
+ ).rejects.toThrowError(`'colors.yellow' was found but does not resolve to a string.`)
+})
- test('an unquoted list is valid as a default value', () => {
- let input = css`
- .heading {
- font-family: theme('fontFamily.sans', Helvetica, Arial, sans-serif);
- }
- `
+test('a path which exists but is invalid throws', () => {
+ let input = css`
+ .heading {
+ color: theme('colors');
+ }
+ `
- let output = css`
- .heading {
- font-family: Helvetica, Arial, sans-serif;
- }
- `
-
- return run(input, {
+ return expect(
+ run(input, {
theme: {
- fontFamily: {
- serif: 'Constantia',
+ colors: {},
+ },
+ })
+ ).rejects.toThrowError(`'colors' was found but does not resolve to a string.`)
+})
+
+test('a path which is an object throws with a suggested key', () => {
+ let input = css`
+ .heading {
+ color: theme('colors');
+ }
+ `
+
+ return expect(
+ run(input, {
+ theme: {
+ colors: {
+ yellow: '#f7cc50',
},
},
- }).then((result) => {
- expect(result.css).toEqual(output)
- expect(result.warnings().length).toBe(0)
})
- })
+ ).rejects.toThrowError(
+ `'colors' was found but does not resolve to a string. Did you mean something like 'colors.yellow'?`
+ )
+})
- test('a missing root theme value throws', () => {
- let input = css`
- .heading {
- color: theme('colours.gray.100');
- }
- `
+test('array values are joined by default', () => {
+ let input = css`
+ .heading {
+ font-family: theme('fontFamily.sans');
+ }
+ `
- return expect(
- run(input, {
- theme: {
- colors: {
- yellow: '#f7cc50',
- },
- },
- })
- ).rejects.toThrowError(
- `'colours.gray.100' does not exist in your theme config. Your theme has the following top-level keys: 'colors'`
- )
- })
+ let output = css`
+ .heading {
+ font-family: Inter, Helvetica, sans-serif;
+ }
+ `
- test('a missing nested theme property throws', () => {
- let input = css`
- .heading {
- color: theme('colors.red');
- }
- `
-
- return expect(
- run(input, {
- theme: {
- colors: {
- blue: 'blue',
- yellow: '#f7cc50',
- },
- },
- })
- ).rejects.toThrowError(
- `'colors.red' does not exist in your theme config. 'colors' has the following valid keys: 'blue', 'yellow'`
- )
- })
-
- test('a missing nested theme property with a close alternative throws with a suggestion', () => {
- let input = css`
- .heading {
- color: theme('colors.yellw');
- }
- `
-
- return expect(
- run(input, {
- theme: {
- colors: {
- yellow: '#f7cc50',
- },
- },
- })
- ).rejects.toThrowError(
- `'colors.yellw' does not exist in your theme config. Did you mean 'colors.yellow'?`
- )
- })
-
- test('a path through a non-object throws', () => {
- let input = css`
- .heading {
- color: theme('colors.yellow.100');
- }
- `
-
- return expect(
- run(input, {
- theme: {
- colors: {
- yellow: '#f7cc50',
- },
- },
- })
- ).rejects.toThrowError(
- `'colors.yellow.100' does not exist in your theme config. 'colors.yellow' is not an object.`
- )
- })
-
- test('a path which exists but is not a string throws', () => {
- let input = css`
- .heading {
- color: theme('colors.yellow');
- }
- `
-
- return expect(
- run(input, {
- theme: {
- colors: {
- yellow: Symbol(),
- },
- },
- })
- ).rejects.toThrowError(`'colors.yellow' was found but does not resolve to a string.`)
- })
-
- test('a path which exists but is invalid throws', () => {
- let input = css`
- .heading {
- color: theme('colors');
- }
- `
-
- return expect(
- run(input, {
- theme: {
- colors: {},
- },
- })
- ).rejects.toThrowError(`'colors' was found but does not resolve to a string.`)
- })
-
- test('a path which is an object throws with a suggested key', () => {
- let input = css`
- .heading {
- color: theme('colors');
- }
- `
-
- return expect(
- run(input, {
- theme: {
- colors: {
- yellow: '#f7cc50',
- },
- },
- })
- ).rejects.toThrowError(
- `'colors' was found but does not resolve to a string. Did you mean something like 'colors.yellow'?`
- )
- })
-
- test('array values are joined by default', () => {
- let input = css`
- .heading {
- font-family: theme('fontFamily.sans');
- }
- `
-
- let output = css`
- .heading {
- font-family: Inter, Helvetica, sans-serif;
- }
- `
-
- return run(input, {
- theme: {
- fontFamily: {
- sans: ['Inter', 'Helvetica', 'sans-serif'],
- },
+ return run(input, {
+ theme: {
+ fontFamily: {
+ sans: ['Inter', 'Helvetica', 'sans-serif'],
},
- }).then((result) => {
- expect(result.css).toEqual(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toEqual(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('font sizes are retrieved without default line-heights or letter-spacing', () => {
- let input = css`
- .heading-1 {
- font-size: theme('fontSize.lg');
- }
- .heading-2 {
- font-size: theme('fontSize.xl');
- }
- `
+test('font sizes are retrieved without default line-heights or letter-spacing', () => {
+ let input = css`
+ .heading-1 {
+ font-size: theme('fontSize.lg');
+ }
+ .heading-2 {
+ font-size: theme('fontSize.xl');
+ }
+ `
- let output = css`
- .heading-1 {
- font-size: 20px;
- }
- .heading-2 {
- font-size: 24px;
- }
- `
+ let output = css`
+ .heading-1 {
+ font-size: 20px;
+ }
+ .heading-2 {
+ font-size: 24px;
+ }
+ `
- return run(input, {
- theme: {
- fontSize: {
- lg: ['20px', '28px'],
- xl: ['24px', { lineHeight: '32px', letterSpacing: '-0.01em' }],
- },
+ return run(input, {
+ theme: {
+ fontSize: {
+ lg: ['20px', '28px'],
+ xl: ['24px', { lineHeight: '32px', letterSpacing: '-0.01em' }],
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('outlines are retrieved without default outline-offset', () => {
- let input = css`
+test('outlines are retrieved without default outline-offset', () => {
+ let input = css`
+ .element {
+ outline: theme('outline.black');
+ }
+ `
+
+ return run(input, {
+ theme: {
+ outline: {
+ black: ['2px dotted black', '4px'],
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
.element {
- outline: theme('outline.black');
+ outline: 2px dotted black;
}
- `
-
- let output = css`
- .element {
- outline: 2px dotted #000;
- }
- `
-
- return run(input, {
- theme: {
- outline: {
- black: ['2px dotted black', '4px'],
- },
- },
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ `)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('font-family values are retrieved without font-variation-settings', () => {
- let input = css`
- .heading-1 {
- font-family: theme('fontFamily.sans');
- }
- .heading-2 {
- font-family: theme('fontFamily.serif');
- }
- .heading-3 {
- font-family: theme('fontFamily.mono');
- }
- `
+test('font-family values are retrieved without font-variation-settings', () => {
+ let input = css`
+ .heading-1 {
+ font-family: theme('fontFamily.sans');
+ }
+ .heading-2 {
+ font-family: theme('fontFamily.serif');
+ }
+ .heading-3 {
+ font-family: theme('fontFamily.mono');
+ }
+ `
- let output = css`
- .heading-1 {
- font-family: Inter;
- }
- .heading-2 {
- font-family: Times, serif;
- }
- .heading-3 {
- font-family: Menlo, monospace;
- }
- `
+ let output = css`
+ .heading-1 {
+ font-family: Inter;
+ }
+ .heading-2 {
+ font-family: Times, serif;
+ }
+ .heading-3 {
+ font-family: Menlo, monospace;
+ }
+ `
- return run(input, {
- theme: {
- fontFamily: {
- sans: ['Inter', { fontVariationSettings: '"opsz" 32' }],
- serif: [['Times', 'serif'], { fontVariationSettings: '"opsz" 32' }],
- mono: ['Menlo, monospace', { fontVariationSettings: '"opsz" 32' }],
- },
+ return run(input, {
+ theme: {
+ fontFamily: {
+ sans: ['Inter', { fontVariationSettings: '"opsz" 32' }],
+ serif: [['Times', 'serif'], { fontVariationSettings: '"opsz" 32' }],
+ mono: ['Menlo, monospace', { fontVariationSettings: '"opsz" 32' }],
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('font-variation-settings values can be retrieved', () => {
- let input = css`
- .heading {
- font-family: theme('fontFamily.sans');
- font-variation-settings: theme('fontFamily.sans[1].fontVariationSettings');
- }
- `
+test('font-variation-settings values can be retrieved', () => {
+ let input = css`
+ .heading {
+ font-family: theme('fontFamily.sans');
+ font-variation-settings: theme('fontFamily.sans[1].fontVariationSettings');
+ }
+ `
- let output = css`
+ let output = css`
+ .heading {
+ font-family: Inter;
+ font-variation-settings: 'opsz' 32;
+ }
+ `
+
+ return run(input, {
+ theme: {
+ fontFamily: {
+ sans: ['Inter', { fontVariationSettings: "'opsz' 32" }],
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('font-family values are joined when an array', () => {
+ let input = css`
+ .element {
+ font-family: theme('fontFamily.sans');
+ }
+ `
+
+ let output = css`
+ .element {
+ font-family: Helvetica, Arial, sans-serif;
+ }
+ `
+
+ return run(input, {
+ theme: {
+ fontFamily: {
+ sans: ['Helvetica', 'Arial', 'sans-serif'],
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('font-family values are retrieved without font-feature-settings', () => {
+ let input = css`
+ .heading-1 {
+ font-family: theme('fontFamily.sans');
+ }
+ .heading-2 {
+ font-family: theme('fontFamily.serif');
+ }
+ .heading-3 {
+ font-family: theme('fontFamily.mono');
+ }
+ `
+
+ let output = css`
+ .heading-1 {
+ font-family: Inter;
+ }
+ .heading-2 {
+ font-family: Times, serif;
+ }
+ .heading-3 {
+ font-family: Menlo, monospace;
+ }
+ `
+
+ return run(input, {
+ theme: {
+ fontFamily: {
+ sans: ['Inter', { fontFeatureSettings: '"cv11"' }],
+ serif: [['Times', 'serif'], { fontFeatureSettings: '"cv11"' }],
+ mono: ['Menlo, monospace', { fontFeatureSettings: '"cv11"' }],
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('font-feature-settings values can be retrieved', () => {
+ let input = css`
+ .heading {
+ font-family: theme('fontFamily.sans');
+ font-feature-settings: theme('fontFamily.sans[1].fontFeatureSettings');
+ }
+ `
+
+ return run(input, {
+ theme: {
+ fontFamily: {
+ sans: ['Inter', { fontFeatureSettings: "'cv11'" }],
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
.heading {
font-family: Inter;
- font-variation-settings: 'opsz' 32;
- }
- `
-
- return run(input, {
- theme: {
- fontFamily: {
- sans: ['Inter', { fontVariationSettings: "'opsz' 32" }],
- },
- },
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('font-family values are joined when an array', () => {
- let input = css`
- .element {
- font-family: theme('fontFamily.sans');
- }
- `
-
- let output = css`
- .element {
- font-family: Helvetica, Arial, sans-serif;
- }
- `
-
- return run(input, {
- theme: {
- fontFamily: {
- sans: ['Helvetica', 'Arial', 'sans-serif'],
- },
- },
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('font-family values are retrieved without font-feature-settings', () => {
- let input = css`
- .heading-1 {
- font-family: theme('fontFamily.sans');
- }
- .heading-2 {
- font-family: theme('fontFamily.serif');
- }
- .heading-3 {
- font-family: theme('fontFamily.mono');
- }
- `
-
- let output = css`
- .heading-1 {
- font-family: Inter;
- }
- .heading-2 {
- font-family: Times, serif;
- }
- .heading-3 {
- font-family: Menlo, monospace;
- }
- `
-
- return run(input, {
- theme: {
- fontFamily: {
- sans: ['Inter', { fontFeatureSettings: '"cv11"' }],
- serif: [['Times', 'serif'], { fontFeatureSettings: '"cv11"' }],
- mono: ['Menlo, monospace', { fontFeatureSettings: '"cv11"' }],
- },
- },
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('font-feature-settings values can be retrieved', () => {
- let input = css`
- .heading {
- font-family: theme('fontFamily.sans');
- font-feature-settings: theme('fontFamily.sans[1].fontFeatureSettings');
- }
- `
-
- let output = css`
- .heading {
font-feature-settings: 'cv11';
- font-family: Inter;
}
- `
-
- return run(input, {
- theme: {
- fontFamily: {
- sans: ['Inter', { fontFeatureSettings: "'cv11'" }],
- },
- },
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ `)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('box-shadow values are joined when an array', () => {
- let input = css`
- .element {
- box-shadow: theme('boxShadow.wtf');
- }
- `
+test('box-shadow values are joined when an array', () => {
+ let input = css`
+ .element {
+ box-shadow: theme('boxShadow.wtf');
+ }
+ `
- let output = css`
- .element {
- box-shadow: 0 0 2px #000, 1px 2px 3px #fff;
- }
- `
-
- return run(input, {
- theme: {
- boxShadow: {
- wtf: ['0 0 2px black', '1px 2px 3px white'],
- },
+ return run(input, {
+ theme: {
+ boxShadow: {
+ wtf: ['0 0 2px black', '1px 2px 3px white'],
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .element {
+ box-shadow: 0 0 2px black, 1px 2px 3px white;
+ }
+ `)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('transition-property values are joined when an array', () => {
- let input = css`
- .element {
- transition-property: theme('transitionProperty.colors');
- }
- `
+test('transition-property values are joined when an array', () => {
+ let input = css`
+ .element {
+ transition-property: theme('transitionProperty.colors');
+ }
+ `
- let output = css`
- .element {
- transition-property: color, fill;
- }
- `
+ let output = css`
+ .element {
+ transition-property: color, fill;
+ }
+ `
- return run(input, {
- theme: {
- transitionProperty: {
- colors: ['color', 'fill'],
- },
+ return run(input, {
+ theme: {
+ transitionProperty: {
+ colors: ['color', 'fill'],
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('transition-duration values are joined when an array', () => {
- let input = css`
- .element {
- transition-duration: theme('transitionDuration.lol');
- }
- `
+test('transition-duration values are joined when an array', () => {
+ let input = css`
+ .element {
+ transition-duration: theme('transitionDuration.lol');
+ }
+ `
- let output = css`
- .element {
- transition-duration: 1s, 2s;
- }
- `
+ let output = css`
+ .element {
+ transition-duration: 1s, 2s;
+ }
+ `
- return run(input, {
- theme: {
- transitionDuration: {
- lol: ['1s', '2s'],
- },
+ return run(input, {
+ theme: {
+ transitionDuration: {
+ lol: ['1s', '2s'],
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('basic screen function calls are expanded', () => {
- let input = css`
- @media screen(sm) {
- .foo {
- color: red;
- }
+test('basic screen function calls are expanded', () => {
+ let input = css`
+ @media screen(sm) {
+ .foo {
+ color: red;
}
- `
+ }
+ `
- let output = css`
+ return run(input, {
+ theme: { screens: { sm: '600px' } },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
@media (min-width: 600px) {
.foo {
color: red;
}
}
- `
-
- return run(input, {
- theme: { screens: { sm: '600px' } },
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ `)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('screen function supports max-width screens', () => {
- let input = css`
- @media screen(sm) {
- .foo {
- color: red;
- }
+test('screen function supports max-width screens', () => {
+ let input = css`
+ @media screen(sm) {
+ .foo {
+ color: red;
}
- `
+ }
+ `
- let output = css`
- @media (max-width: 600px) {
- .foo {
- color: red;
- }
+ let output = css`
+ @media (max-width: 600px) {
+ .foo {
+ color: red;
}
- `
+ }
+ `
- return run(input, {
- theme: { screens: { sm: { max: '600px' } } },
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ return run(input, {
+ theme: { screens: { sm: { max: '600px' } } },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('screen function supports min-width screens', () => {
- let input = css`
- @media screen(sm) {
- .foo {
- color: red;
- }
+test('screen function supports min-width screens', () => {
+ let input = css`
+ @media screen(sm) {
+ .foo {
+ color: red;
}
- `
+ }
+ `
- let output = css`
+ return run(input, {
+ theme: { screens: { sm: { min: '600px' } } },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
@media (min-width: 600px) {
.foo {
color: red;
}
}
- `
-
- return run(input, {
- theme: { screens: { sm: { min: '600px' } } },
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ `)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('screen function supports min-width and max-width screens', () => {
- let input = css`
- @media screen(sm) {
- .foo {
- color: red;
- }
+test('screen function supports min-width and max-width screens', () => {
+ let input = css`
+ @media screen(sm) {
+ .foo {
+ color: red;
}
- `
+ }
+ `
- let output = css`
+ return run(input, {
+ theme: { screens: { sm: { min: '600px', max: '700px' } } },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
@media (min-width: 600px) and (max-width: 700px) {
.foo {
color: red;
}
}
- `
-
- return run(input, {
- theme: { screens: { sm: { min: '600px', max: '700px' } } },
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ `)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('screen function supports raw screens', () => {
- let input = css`
- @media screen(mono) {
- .foo {
- color: red;
- }
+test('screen function supports raw screens', () => {
+ let input = css`
+ @media screen(mono) {
+ .foo {
+ color: red;
}
- `
+ }
+ `
- let output = css`
- @media monochrome {
- .foo {
- color: red;
- }
+ let output = css`
+ @media monochrome {
+ .foo {
+ color: red;
}
- `
+ }
+ `
- return run(input, {
- theme: { screens: { mono: { raw: 'monochrome' } } },
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ return run(input, {
+ theme: { screens: { mono: { raw: 'monochrome' } } },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('screen arguments can be quoted', () => {
- let input = css`
- @media screen('sm') {
- .foo {
- color: red;
- }
+test('screen arguments can be quoted', () => {
+ let input = css`
+ @media screen('sm') {
+ .foo {
+ color: red;
}
- `
+ }
+ `
- let output = css`
+ return run(input, {
+ theme: { screens: { sm: '600px' } },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
@media (min-width: 600px) {
.foo {
color: red;
}
}
- `
-
- return run(input, {
- theme: { screens: { sm: '600px' } },
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ `)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('Theme function can extract alpha values for colors (1)', () => {
- let input = css`
+test('Theme function can extract alpha values for colors (1)', () => {
+ let input = css`
+ .foo {
+ color: theme(colors.blue.500 / 50%);
+ }
+ `
+
+ return run(input, {
+ theme: {
+ colors: { blue: { 500: '#3b82f6' } },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
.foo {
- color: theme(colors.blue.500 / 50%);
+ color: rgb(59 130 246 / 50%);
}
- `
+ `)
+ expect(result.warnings().length).toBe(0)
+ })
+})
- let output = css`
+test('Theme function can extract alpha values for colors (2)', () => {
+ let input = css`
+ .foo {
+ color: theme(colors.blue.500 / 0.5);
+ }
+ `
+
+ return run(input, {
+ theme: {
+ colors: { blue: { 500: '#3b82f6' } },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
.foo {
- color: #3b82f680;
+ color: rgb(59 130 246 / 0.5);
}
- `
+ `)
+ expect(result.warnings().length).toBe(0)
+ })
+})
- return run(input, {
- theme: {
- colors: { blue: { 500: '#3b82f6' } },
+test('Theme function can extract alpha values for colors (3)', () => {
+ let input = css`
+ .foo {
+ color: theme(colors.blue.500 / var(--my-alpha));
+ }
+ `
+
+ let output = css`
+ .foo {
+ color: rgb(59 130 246 / var(--my-alpha));
+ }
+ `
+
+ return run(input, {
+ theme: {
+ colors: { blue: { 500: '#3b82f6' } },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('Theme function can extract alpha values for colors (4)', () => {
+ let input = css`
+ .foo {
+ color: theme(colors.blue.500 / 50%);
+ }
+ `
+
+ return run(input, {
+ theme: {
+ colors: {
+ blue: { 500: 'hsl(217, 91%, 60%)' },
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ color: hsl(217 91% 60% / 50%);
+ }
+ `)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('Theme function can extract alpha values for colors (2)', () => {
- let input = css`
- .foo {
- color: theme(colors.blue.500 / 0.5);
- }
- `
+test('Theme function can extract alpha values for colors (5)', () => {
+ let input = css`
+ .foo {
+ color: theme(colors.blue.500 / 0.5);
+ }
+ `
- let output = css`
- .foo {
- color: #3b82f680;
- }
- `
-
- return run(input, {
- theme: {
- colors: { blue: { 500: '#3b82f6' } },
+ return run(input, {
+ theme: {
+ colors: {
+ blue: { 500: 'hsl(217, 91%, 60%)' },
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ color: hsl(217 91% 60% / 0.5);
+ }
+ `)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('Theme function can extract alpha values for colors (3)', () => {
- let input = css`
- .foo {
- color: theme(colors.blue.500 / var(--my-alpha));
- }
- `
+test('Theme function can extract alpha values for colors (6)', () => {
+ let input = css`
+ .foo {
+ color: theme(colors.blue.500 / var(--my-alpha));
+ }
+ `
- let output = css`
- .foo {
- color: rgb(59 130 246 / var(--my-alpha));
- }
- `
+ let output = css`
+ .foo {
+ color: hsl(217 91% 60% / var(--my-alpha));
+ }
+ `
- return run(input, {
- theme: {
- colors: { blue: { 500: '#3b82f6' } },
+ return run(input, {
+ theme: {
+ colors: {
+ blue: { 500: 'hsl(217, 91%, 60%)' },
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('Theme function can extract alpha values for colors (4)', () => {
- let input = css`
- .foo {
- color: theme(colors.blue.500 / 50%);
- }
- `
+test('Theme function can extract alpha values for colors (7)', () => {
+ let input = css`
+ .foo {
+ color: theme(colors.blue.500 / var(--my-alpha));
+ }
+ `
- let output = css`
- .foo {
- color: #3c83f680;
- }
- `
+ let output = css`
+ .foo {
+ color: rgb(var(--foo) / var(--my-alpha));
+ }
+ `
- return run(input, {
- theme: {
- colors: {
- blue: { 500: 'hsl(217, 91%, 60%)' },
+ return runFull(input, {
+ theme: {
+ colors: {
+ blue: {
+ 500: 'rgb(var(--foo) /
)',
},
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('Theme function can extract alpha values for colors (5)', () => {
- let input = css`
- .foo {
- color: theme(colors.blue.500 / 0.5);
- }
- `
+test('Theme function can extract alpha values for colors (8)', () => {
+ let input = css`
+ .foo {
+ color: theme(colors.blue.500 / theme(opacity.myalpha));
+ }
+ `
- let output = css`
- .foo {
- color: #3c83f680;
- }
- `
+ let output = css`
+ .foo {
+ color: rgb(var(--foo) / 50%);
+ }
+ `
- return run(input, {
- theme: {
- colors: {
- blue: { 500: 'hsl(217, 91%, 60%)' },
+ return runFull(input, {
+ theme: {
+ colors: {
+ blue: {
+ 500: 'rgb(var(--foo) / )',
},
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+
+ opacity: {
+ myalpha: '50%',
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('Theme function can extract alpha values for colors (6)', () => {
- let input = css`
- .foo {
- color: theme(colors.blue.500 / var(--my-alpha));
- }
- `
+test('Theme functions replace the alpha value placeholder even with no alpha provided', () => {
+ let input = css`
+ .foo {
+ background: theme(colors.blue.400);
+ color: theme(colors.blue.500);
+ }
+ `
- let output = css`
- .foo {
- color: hsl(217 91% 60% / var(--my-alpha));
- }
- `
+ let output = css`
+ .foo {
+ color: rgb(var(--foo) / 1);
+ background: #00f;
+ }
+ `
- return run(input, {
- theme: {
- colors: {
- blue: { 500: 'hsl(217, 91%, 60%)' },
+ return runFull(input, {
+ theme: {
+ colors: {
+ blue: {
+ 400: 'rgb(0 0 255 / )',
+ 500: 'rgb(var(--foo) / )',
},
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('Theme function can extract alpha values for colors (7)', () => {
- let input = css`
- .foo {
- color: theme(colors.blue.500 / var(--my-alpha));
- }
- `
+test('Theme functions can reference values with slashes in brackets', () => {
+ let input = css`
+ .foo1 {
+ color: theme(colors[a/b]);
+ }
+ .foo2 {
+ color: theme(colors[a/b]/50%);
+ }
+ `
- let output = css`
- .foo {
- color: rgb(var(--foo) / var(--my-alpha));
- }
- `
+ let output = css`
+ .foo1 {
+ color: #000;
+ }
+ .foo2 {
+ color: #00000080;
+ }
+ `
- return runFull(input, {
- theme: {
- colors: {
- blue: {
- 500: 'rgb(var(--foo) / )',
- },
- },
+ return runFull(input, {
+ theme: {
+ colors: {
+ 'a/b': '#000000',
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('Theme function can extract alpha values for colors (8)', () => {
- let input = css`
- .foo {
- color: theme(colors.blue.500 / theme(opacity.myalpha));
- }
- `
+test('Theme functions with alpha value inside quotes', () => {
+ let input = css`
+ .foo {
+ color: theme('colors.yellow / 50%');
+ }
+ `
- let output = css`
- .foo {
- color: rgb(var(--foo) / 50%);
- }
- `
+ let output = css`
+ .foo {
+ color: #f7cc5080;
+ }
+ `
- return runFull(input, {
- theme: {
- colors: {
- blue: {
- 500: 'rgb(var(--foo) / )',
- },
- },
-
- opacity: {
- myalpha: '50%',
- },
+ return runFull(input, {
+ theme: {
+ colors: {
+ yellow: '#f7cc50',
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('Theme functions replace the alpha value placeholder even with no alpha provided', () => {
- let input = css`
- .foo {
- background: theme(colors.blue.400);
- color: theme(colors.blue.500);
- }
- `
+test('Theme functions with alpha with quotes value around color only', () => {
+ let input = css`
+ .foo {
+ color: theme('colors.yellow' / 50%);
+ }
+ `
- let output = css`
- .foo {
- color: rgb(var(--foo) / 1);
- background: #00f;
- }
- `
+ let output = css`
+ .foo {
+ color: #f7cc5080;
+ }
+ `
- return runFull(input, {
- theme: {
- colors: {
- blue: {
- 400: 'rgb(0 0 255 / )',
- 500: 'rgb(var(--foo) / )',
- },
- },
+ return runFull(input, {
+ theme: {
+ colors: {
+ yellow: '#f7cc50',
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
})
+})
- test('Theme functions can reference values with slashes in brackets', () => {
- let input = css`
- .foo1 {
- color: theme(colors[a/b]);
- }
- .foo2 {
- color: theme(colors[a/b]/50%);
- }
- `
+it('can find values with slashes in the theme key while still allowing for alpha values ', () => {
+ let input = css`
+ .foo00 {
+ color: theme(colors.foo-5);
+ }
+ .foo01 {
+ color: theme(colors.foo-5/10);
+ }
+ .foo02 {
+ color: theme(colors.foo-5/10/25);
+ }
+ .foo03 {
+ color: theme(colors.foo-5 / 10);
+ }
+ .foo04 {
+ color: theme(colors.foo-5/10 / 25);
+ }
+ `
- let output = css`
- .foo1 {
- color: #000;
- }
- .foo2 {
- color: #00000080;
- }
- `
-
- return runFull(input, {
- theme: {
- colors: {
- 'a/b': '#000000',
- },
+ return runFull(input, {
+ theme: {
+ colors: {
+ 'foo-5': '#050000',
+ 'foo-5/10': '#051000',
+ 'foo-5/10/25': '#051025',
},
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('Theme functions with alpha value inside quotes', () => {
- let input = css`
- .foo {
- color: theme('colors.yellow / 50%');
- }
- `
-
- let output = css`
- .foo {
- color: #f7cc5080;
- }
- `
-
- return runFull(input, {
- theme: {
- colors: {
- yellow: '#f7cc50',
- },
- },
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('Theme functions with alpha with quotes value around color only', () => {
- let input = css`
- .foo {
- color: theme('colors.yellow' / 50%);
- }
- `
-
- let output = css`
- .foo {
- color: #f7cc5080;
- }
- `
-
- return runFull(input, {
- theme: {
- colors: {
- yellow: '#f7cc50',
- },
- },
- }).then((result) => {
- expect(result.css).toMatchCss(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- it('can find values with slashes in the theme key while still allowing for alpha values ', () => {
- let input = css`
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
.foo00 {
- color: theme(colors.foo-5);
+ color: #050000;
}
.foo01 {
- color: theme(colors.foo-5/10);
+ color: #051000;
}
.foo02 {
- color: theme(colors.foo-5/10/25);
+ color: #051025;
}
.foo03 {
- color: theme(colors.foo-5 / 10);
+ color: #050000;
}
.foo04 {
- color: theme(colors.foo-5/10 / 25);
+ color: #051000;
+ }
+ `)
+ })
+})
+
+describe('context dependent', () => {
+ let configPath = path.resolve(__dirname, './evaluate-tailwind-functions.tailwind.config.js')
+ let filePath = path.resolve(__dirname, './evaluate-tailwind-functions.test.html')
+ let config = {
+ content: [filePath],
+ corePlugins: { preflight: false },
+ }
+
+ // Rebuild the config file for each test
+ beforeEach(() => fs.promises.writeFile(configPath, `module.exports = ${JSON.stringify(config)};`))
+ afterEach(() => fs.promises.unlink(configPath))
+
+ test('should not generate when theme fn doesnt resolve', async () => {
+ await fs.promises.writeFile(
+ filePath,
+ html`
+
+
+ `
+ )
+
+ // TODO: We need a way to reuse the context in our test suite without requiring writing to files
+ // It should be an explicit thing tho — like we create a context and pass it in or something
+ let result = await runFull('@tailwind utilities', configPath)
+
+ // 1. On first run it should work because it's been removed from the class cache
+ expect(result.css).toMatchFormattedCss(css`
+ .underline {
+ text-decoration-line: underline;
+ }
+ `)
+
+ // 2. But we get a warning in the console
+ expect().toHaveBeenWarnedWith(['invalid-theme-key-in-class'])
+
+ // 3. The second run should work fine because it's been removed from the class cache
+ result = await runFull('@tailwind utilities', configPath)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .underline {
+ text-decoration-line: underline;
+ }
+ `)
+
+ // 4. But we've not received any further logs about it
+ expect().toHaveBeenWarnedWith(['invalid-theme-key-in-class'])
+ })
+
+ test('it works mayhaps', async () => {
+ let input = css`
+ .test {
+ /* prettier-ignore */
+ inset: calc(-1 * (2*theme("spacing.4")));
+ /* prettier-ignore */
+ padding: calc(-1 * (2* theme("spacing.4")));
}
`
- return runFull(input, {
+ let output = css`
+ .test {
+ /* prettier-ignore */
+ inset: calc(-1 * (2*1rem));
+ /* prettier-ignore */
+ padding: calc(-1 * (2* 1rem));
+ }
+ `
+
+ return run(input, {
theme: {
- colors: {
- 'foo-5': '#050000',
- 'foo-5/10': '#051000',
- 'foo-5/10/25': '#051025',
+ spacing: {
+ 4: '1rem',
},
},
}).then((result) => {
- expect(result.css).toMatchCss(css`
- .foo00 {
- color: #050000;
- }
- .foo01 {
- color: #051000;
- }
- .foo02 {
- color: #051025;
- }
- .foo03 {
- color: #050000;
- }
- .foo04 {
- color: #051000;
- }
- `)
- })
- })
-
- describe('context dependent', () => {
- let configPath = path.resolve(__dirname, './evaluate-tailwind-functions.tailwind.config.js')
- let filePath = path.resolve(__dirname, './evaluate-tailwind-functions.test.html')
- let config = {
- content: [filePath],
- corePlugins: { preflight: false },
- }
-
- // Rebuild the config file for each test
- beforeEach(() =>
- fs.promises.writeFile(configPath, `module.exports = ${JSON.stringify(config)};`)
- )
- afterEach(() => fs.promises.unlink(configPath))
-
- oxide.test.todo('should not generate when theme fn doesnt resolve')
- stable.test('should not generate when theme fn doesnt resolve', async () => {
- await fs.promises.writeFile(
- filePath,
- html`
-
-
- `
- )
-
- // TODO: We need a way to reuse the context in our test suite without requiring writing to files
- // It should be an explicit thing tho — like we create a context and pass it in or something
- let result = await runFull('@tailwind utilities', configPath)
-
- // 1. On first run it should work because it's been removed from the class cache
- expect(result.css).toMatchCss(css`
- .underline {
- text-decoration-line: underline;
- }
- `)
-
- // 2. But we get a warning in the console
- expect().toHaveBeenWarnedWith(['invalid-theme-key-in-class'])
-
- // 3. The second run should work fine because it's been removed from the class cache
- result = await runFull('@tailwind utilities', configPath)
-
- expect(result.css).toMatchCss(css`
- .underline {
- text-decoration-line: underline;
- }
- `)
-
- // 4. But we've not received any further logs about it
- expect().toHaveBeenWarnedWith(['invalid-theme-key-in-class'])
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
})
})
})
+
+test('it should handle square brackets inside `theme`, inside arbitrary properties', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return runFull(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-\[--color\] {
+ background-color: var(--color);
+ }
+ @media (min-width: 640px) {
+ .sm\:\[--color\:_theme\(colors\.green\[400\]\)\] {
+ --color: #4ade80;
+ }
+ }
+ `)
+ })
+})
diff --git a/tests/experimental.test.js b/tests/experimental.test.js
index 3497783f9..b36141cb0 100644
--- a/tests/experimental.test.js
+++ b/tests/experimental.test.js
@@ -1,197 +1,195 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- test('experimental universal selector improvements (box-shadow)', () => {
- let config = {
- experimental: 'all',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
+test('experimental universal selector improvements (box-shadow)', () => {
+ let config = {
+ experimental: 'all',
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchCss(css`
- .shadow {
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-ring-shadow: 0 0 #0000;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- }
- .resize {
- resize: both;
- }
- .shadow {
- --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
- 0 1px 2px -1px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- `)
- })
- })
-
- test('experimental universal selector improvements (pseudo hover)', () => {
- let config = {
- experimental: 'all',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchCss(css`
- .hover\:shadow {
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-ring-shadow: 0 0 #0000;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- }
- .resize {
- resize: both;
- }
- .hover\:shadow:hover {
- --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
- 0 1px 2px -1px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- `)
- })
- })
-
- test('experimental universal selector improvements (multiple classes: group)', () => {
- let config = {
- experimental: 'all',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchCss(css`
- .group-hover\:shadow {
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-ring-shadow: 0 0 #0000;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- }
- .resize {
- resize: both;
- }
- .group:hover .group-hover\:shadow {
- --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
- 0 1px 2px -1px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- `)
- })
- })
-
- test('experimental universal selector improvements (child selectors: divide-y)', () => {
- let config = {
- experimental: 'all',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchCss(css`
- .resize {
- resize: both;
- }
- .divide-y > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
- }
- `)
- })
- })
-
- test('experimental universal selector improvements (hover:divide-y)', () => {
- let config = {
- experimental: 'all',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchCss(css`
- .resize {
- resize: both;
- }
- .hover\:divide-y:hover > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
- }
- `)
- })
- })
-
- test('experimental universal selector improvements (#app important)', () => {
- let config = {
- experimental: 'all',
- important: '#app',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchCss(css`
- .shadow {
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-ring-shadow: 0 0 #0000;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- }
- #app :is(.resize) {
- resize: both;
- }
- #app :is(.divide-y > :not([hidden]) ~ :not([hidden])) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
- }
- #app :is(.shadow) {
- --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
- 0 1px 2px -1px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .shadow {
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ }
+ .resize {
+ resize: both;
+ }
+ .shadow {
+ --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
+ --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
+ 0 1px 2px -1px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
+ var(--tw-shadow);
+ }
+ `)
+ })
+})
+
+test('experimental universal selector improvements (pseudo hover)', () => {
+ let config = {
+ experimental: 'all',
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .hover\:shadow {
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ }
+ .resize {
+ resize: both;
+ }
+ .hover\:shadow:hover {
+ --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
+ --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
+ 0 1px 2px -1px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
+ var(--tw-shadow);
+ }
+ `)
+ })
+})
+
+test('experimental universal selector improvements (multiple classes: group)', () => {
+ let config = {
+ experimental: 'all',
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .group-hover\:shadow {
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ }
+ .resize {
+ resize: both;
+ }
+ .group:hover .group-hover\:shadow {
+ --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
+ --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
+ 0 1px 2px -1px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
+ var(--tw-shadow);
+ }
+ `)
+ })
+})
+
+test('experimental universal selector improvements (child selectors: divide-y)', () => {
+ let config = {
+ experimental: 'all',
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .resize {
+ resize: both;
+ }
+ .divide-y > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
+ }
+ `)
+ })
+})
+
+test('experimental universal selector improvements (hover:divide-y)', () => {
+ let config = {
+ experimental: 'all',
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .resize {
+ resize: both;
+ }
+ .hover\:divide-y:hover > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
+ }
+ `)
+ })
+})
+
+test('experimental universal selector improvements (#app important)', () => {
+ let config = {
+ experimental: 'all',
+ important: '#app',
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .shadow {
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ }
+ #app .resize {
+ resize: both;
+ }
+ #app :is(.divide-y > :not([hidden]) ~ :not([hidden])) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
+ }
+ #app .shadow {
+ --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
+ --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
+ 0 1px 2px -1px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
+ var(--tw-shadow);
+ }
+ `)
})
})
diff --git a/tests/extractor-edge-cases.test.js b/tests/extractor-edge-cases.test.js
index 412702b35..83ca99e37 100644
--- a/tests/extractor-edge-cases.test.js
+++ b/tests/extractor-edge-cases.test.js
@@ -1,34 +1,32 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- test('PHP arrays', async () => {
- let config = {
- content: [
- {
- raw: html`">Hello world `,
- },
- ],
- }
+test('PHP arrays', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`">Hello world `,
+ },
+ ],
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .max-w-\[16rem\] {
- max-width: 16rem;
- }
- `)
- })
- })
-
- test('arbitrary values with quotes', async () => {
- let config = { content: [{ raw: html`
` }] }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .content-\[\'hello\]\'\] {
- --tw-content: 'hello]';
- content: var(--tw-content);
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .max-w-\[16rem\] {
+ max-width: 16rem;
+ }
+ `)
+ })
+})
+
+test('arbitrary values with quotes', async () => {
+ let config = { content: [{ raw: html`
` }] }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .content-\[\'hello\]\'\] {
+ --tw-content: 'hello]';
+ content: var(--tw-content);
+ }
+ `)
})
})
diff --git a/tests/fixtures/plugins/example.cjs b/tests/fixtures/plugins/example.cjs
new file mode 100644
index 000000000..c94746882
--- /dev/null
+++ b/tests/fixtures/plugins/example.cjs
@@ -0,0 +1,11 @@
+const plugin = require('../../../plugin.js')
+
+module.exports = plugin.withOptions(function ({ prefix = '' } = {}) {
+ return function ({ addUtilities }) {
+ addUtilities({
+ [`.${prefix}example-1`]: {
+ color: 'red',
+ },
+ })
+ }
+})
diff --git a/tests/fixtures/plugins/example.default.cjs b/tests/fixtures/plugins/example.default.cjs
new file mode 100644
index 000000000..499fb8c6d
--- /dev/null
+++ b/tests/fixtures/plugins/example.default.cjs
@@ -0,0 +1,11 @@
+const plugin = require('../../../plugin.js')
+
+module.exports.default = plugin.withOptions(function ({ prefix = '' } = {}) {
+ return function ({ addUtilities }) {
+ addUtilities({
+ [`.${prefix}example-1`]: {
+ color: 'red',
+ },
+ })
+ }
+})
diff --git a/tests/flattenColorPalette.test.js b/tests/flattenColorPalette.test.js
index dae66e806..e8edcd9aa 100644
--- a/tests/flattenColorPalette.test.js
+++ b/tests/flattenColorPalette.test.js
@@ -1,84 +1,81 @@
-import { crosscheck } from './util/run'
import flattenColorPalette from '../src/util/flattenColorPalette'
-crosscheck(() => {
- test('it flattens nested color objects', () => {
- expect(
- flattenColorPalette({
- purple: 'purple',
- white: {
- 25: 'rgba(255,255,255,.25)',
- 50: 'rgba(255,255,255,.5)',
- 75: 'rgba(255,255,255,.75)',
- DEFAULT: '#fff',
- },
- red: {
- 1: 'rgb(33,0,0)',
- 2: 'rgb(67,0,0)',
- 3: 'rgb(100,0,0)',
- },
- green: {
- 1: 'rgb(0,33,0)',
- 2: 'rgb(0,67,0)',
- 3: 'rgb(0,100,0)',
- },
- blue: {
- 1: 'rgb(0,0,33)',
- 2: 'rgb(0,0,67)',
- 3: 'rgb(0,0,100)',
- },
- })
- ).toEqual({
+test('it flattens nested color objects', () => {
+ expect(
+ flattenColorPalette({
purple: 'purple',
- 'white-25': 'rgba(255,255,255,.25)',
- 'white-50': 'rgba(255,255,255,.5)',
- 'white-75': 'rgba(255,255,255,.75)',
- white: '#fff',
- 'red-1': 'rgb(33,0,0)',
- 'red-2': 'rgb(67,0,0)',
- 'red-3': 'rgb(100,0,0)',
- 'green-1': 'rgb(0,33,0)',
- 'green-2': 'rgb(0,67,0)',
- 'green-3': 'rgb(0,100,0)',
- 'blue-1': 'rgb(0,0,33)',
- 'blue-2': 'rgb(0,0,67)',
- 'blue-3': 'rgb(0,0,100)',
+ white: {
+ 25: 'rgba(255,255,255,.25)',
+ 50: 'rgba(255,255,255,.5)',
+ 75: 'rgba(255,255,255,.75)',
+ DEFAULT: '#fff',
+ },
+ red: {
+ 1: 'rgb(33,0,0)',
+ 2: 'rgb(67,0,0)',
+ 3: 'rgb(100,0,0)',
+ },
+ green: {
+ 1: 'rgb(0,33,0)',
+ 2: 'rgb(0,67,0)',
+ 3: 'rgb(0,100,0)',
+ },
+ blue: {
+ 1: 'rgb(0,0,33)',
+ 2: 'rgb(0,0,67)',
+ 3: 'rgb(0,0,100)',
+ },
})
- })
-
- test('it flattens deeply nested color objects', () => {
- expect(
- flattenColorPalette({
- primary: 'purple',
- secondary: {
- DEFAULT: 'blue',
- hover: 'cyan',
- focus: 'red',
- },
- button: {
- primary: {
- DEFAULT: 'magenta',
- hover: 'green',
- focus: {
- DEFAULT: 'yellow',
- variant: 'orange',
- },
- },
- },
- })
- ).toEqual({
- primary: 'purple',
- secondary: 'blue',
- 'secondary-hover': 'cyan',
- 'secondary-focus': 'red',
- 'button-primary': 'magenta',
- 'button-primary-hover': 'green',
- 'button-primary-focus': 'yellow',
- 'button-primary-focus-variant': 'orange',
- })
- })
-
- test('it handles empty objects', () => {
- expect(flattenColorPalette({})).toEqual({})
+ ).toEqual({
+ purple: 'purple',
+ 'white-25': 'rgba(255,255,255,.25)',
+ 'white-50': 'rgba(255,255,255,.5)',
+ 'white-75': 'rgba(255,255,255,.75)',
+ white: '#fff',
+ 'red-1': 'rgb(33,0,0)',
+ 'red-2': 'rgb(67,0,0)',
+ 'red-3': 'rgb(100,0,0)',
+ 'green-1': 'rgb(0,33,0)',
+ 'green-2': 'rgb(0,67,0)',
+ 'green-3': 'rgb(0,100,0)',
+ 'blue-1': 'rgb(0,0,33)',
+ 'blue-2': 'rgb(0,0,67)',
+ 'blue-3': 'rgb(0,0,100)',
})
})
+
+test('it flattens deeply nested color objects', () => {
+ expect(
+ flattenColorPalette({
+ primary: 'purple',
+ secondary: {
+ DEFAULT: 'blue',
+ hover: 'cyan',
+ focus: 'red',
+ },
+ button: {
+ primary: {
+ DEFAULT: 'magenta',
+ hover: 'green',
+ focus: {
+ DEFAULT: 'yellow',
+ variant: 'orange',
+ },
+ },
+ },
+ })
+ ).toEqual({
+ primary: 'purple',
+ secondary: 'blue',
+ 'secondary-hover': 'cyan',
+ 'secondary-focus': 'red',
+ 'button-primary': 'magenta',
+ 'button-primary-hover': 'green',
+ 'button-primary-focus': 'yellow',
+ 'button-primary-focus-variant': 'orange',
+ })
+})
+
+test('it handles empty objects', () => {
+ expect(flattenColorPalette({})).toEqual({})
+})
diff --git a/tests/format-variant-selector.test.js b/tests/format-variant-selector.test.js
index 0cd0b05ff..9ad2c632e 100644
--- a/tests/format-variant-selector.test.js
+++ b/tests/format-variant-selector.test.js
@@ -1,363 +1,361 @@
import { finalizeSelector } from '../src/util/formatVariantSelector'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- it('should be possible to add a simple variant to a simple selector', () => {
- let selector = '.text-center'
- let candidate = 'hover:text-center'
+it('should be possible to add a simple variant to a simple selector', () => {
+ let selector = '.text-center'
+ let candidate = 'hover:text-center'
- let formats = [{ format: '&:hover', isArbitraryVariant: false }]
+ let formats = [{ format: '&:hover', respectPrefix: true }]
- expect(finalizeSelector(selector, formats, { candidate })).toEqual('.hover\\:text-center:hover')
- })
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual('.hover\\:text-center:hover')
+})
- it('should be possible to add a multiple simple variants to a simple selector', () => {
- let selector = '.text-center'
- let candidate = 'focus:hover:text-center'
+it('should be possible to add a multiple simple variants to a simple selector', () => {
+ let selector = '.text-center'
+ let candidate = 'focus:hover:text-center'
- let formats = [
- { format: '&:hover', isArbitraryVariant: false },
- { format: '&:focus', isArbitraryVariant: false },
- ]
+ let formats = [
+ { format: '&:hover', respectPrefix: true },
+ { format: '&:focus', respectPrefix: true },
+ ]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.focus\\:hover\\:text-center:hover:focus'
+ )
+})
+
+it('should be possible to add a simple variant to a selector containing escaped parts', () => {
+ let selector = '.bg-\\[rgba\\(0\\,0\\,0\\)\\]'
+ let candidate = 'hover:bg-[rgba(0,0,0)]'
+
+ let formats = [{ format: '&:hover', respectPrefix: true }]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.hover\\:bg-\\[rgba\\(0\\2c 0\\2c 0\\)\\]:hover'
+ )
+})
+
+it('should be possible to add a simple variant to a selector containing escaped parts (escape is slightly different)', () => {
+ let selector = '.bg-\\[rgba\\(0\\2c 0\\2c 0\\)\\]'
+ let candidate = 'hover:bg-[rgba(0,0,0)]'
+
+ let formats = [{ format: '&:hover', respectPrefix: true }]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.hover\\:bg-\\[rgba\\(0\\2c 0\\2c 0\\)\\]:hover'
+ )
+})
+
+it('should be possible to add a simple variant to a more complex selector', () => {
+ let selector = '.space-x-4 > :not([hidden]) ~ :not([hidden])'
+ let candidate = 'hover:space-x-4'
+
+ let formats = [{ format: '&:hover', respectPrefix: true }]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.hover\\:space-x-4:hover > :not([hidden]) ~ :not([hidden])'
+ )
+})
+
+it('should be possible to add multiple simple variants to a more complex selector', () => {
+ let selector = '.space-x-4 > :not([hidden]) ~ :not([hidden])'
+ let candidate = 'disabled:focus:hover:space-x-4'
+
+ let formats = [
+ { format: '&:hover', respectPrefix: true },
+ { format: '&:focus', respectPrefix: true },
+ { format: '&:disabled', respectPrefix: true },
+ ]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.disabled\\:focus\\:hover\\:space-x-4:hover:focus:disabled > :not([hidden]) ~ :not([hidden])'
+ )
+})
+
+it('should be possible to add a single merge variant to a simple selector', () => {
+ let selector = '.text-center'
+ let candidate = 'group-hover:text-center'
+
+ let formats = [{ format: ':merge(.group):hover &', respectPrefix: true }]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.group:hover .group-hover\\:text-center'
+ )
+})
+
+it('should be possible to add multiple merge variants to a simple selector', () => {
+ let selector = '.text-center'
+ let candidate = 'group-focus:group-hover:text-center'
+
+ let formats = [
+ { format: ':merge(.group):hover &', respectPrefix: true },
+ { format: ':merge(.group):focus &', respectPrefix: true },
+ ]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.group:focus:hover .group-focus\\:group-hover\\:text-center'
+ )
+})
+
+it('should be possible to add a single merge variant to a more complex selector', () => {
+ let selector = '.space-x-4 ~ :not([hidden]) ~ :not([hidden])'
+ let candidate = 'group-hover:space-x-4'
+
+ let formats = [{ format: ':merge(.group):hover &', respectPrefix: true }]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.group:hover .group-hover\\:space-x-4 ~ :not([hidden]) ~ :not([hidden])'
+ )
+})
+
+it('should be possible to add multiple merge variants to a more complex selector', () => {
+ let selector = '.space-x-4 ~ :not([hidden]) ~ :not([hidden])'
+ let candidate = 'group-focus:group-hover:space-x-4'
+
+ let formats = [
+ { format: ':merge(.group):hover &', respectPrefix: true },
+ { format: ':merge(.group):focus &', respectPrefix: true },
+ ]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.group:focus:hover .group-focus\\:group-hover\\:space-x-4 ~ :not([hidden]) ~ :not([hidden])'
+ )
+})
+
+it('should be possible to add multiple unique merge variants to a simple selector', () => {
+ let selector = '.text-center'
+ let candidate = 'peer-focus:group-hover:text-center'
+
+ let formats = [
+ { format: ':merge(.group):hover &', respectPrefix: true },
+ { format: ':merge(.peer):focus ~ &' },
+ ]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.peer:focus ~ .group:hover .peer-focus\\:group-hover\\:text-center'
+ )
+})
+
+it('should be possible to add multiple unique merge variants to a simple selector', () => {
+ let selector = '.text-center'
+ let candidate = 'group-hover:peer-focus:text-center'
+
+ let formats = [
+ { format: ':merge(.peer):focus ~ &', respectPrefix: true },
+ { format: ':merge(.group):hover &', respectPrefix: true },
+ ]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.group:hover .peer:focus ~ .group-hover\\:peer-focus\\:text-center'
+ )
+})
+
+it('should be possible to use multiple :merge() calls with different "arguments"', () => {
+ let selector = '.foo'
+ let candidate = 'peer-focus:group-focus:peer-hover:group-hover:foo'
+
+ let formats = [
+ { format: ':merge(.group):hover &', respectPrefix: true },
+ { format: ':merge(.peer):hover ~ &', respectPrefix: true },
+ { format: ':merge(.group):focus &', respectPrefix: true },
+ { format: ':merge(.peer):focus ~ &', respectPrefix: true },
+ ]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.peer:focus:hover ~ .group:focus:hover .peer-focus\\:group-focus\\:peer-hover\\:group-hover\\:foo'
+ )
+})
+
+it('group hover and prose headings combination', () => {
+ let selector = '.text-center'
+ let candidate = 'group-hover:prose-headings:text-center'
+ let formats = [
+ { format: ':where(&) :is(h1, h2, h3, h4)', respectPrefix: true }, // Prose Headings
+ { format: ':merge(.group):hover &', respectPrefix: true }, // Group Hover
+ ]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.group:hover :where(.group-hover\\:prose-headings\\:text-center) :is(h1, h2, h3, h4)'
+ )
+})
+
+it('group hover and prose headings combination flipped', () => {
+ let selector = '.text-center'
+ let candidate = 'prose-headings:group-hover:text-center'
+ let formats = [
+ { format: ':merge(.group):hover &', respectPrefix: true }, // Group Hover
+ { format: ':where(&) :is(h1, h2, h3, h4)', respectPrefix: true }, // Prose Headings
+ ]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ ':where(.group:hover .prose-headings\\:group-hover\\:text-center) :is(h1, h2, h3, h4)'
+ )
+})
+
+it('should be possible to handle a complex utility', () => {
+ let selector = '.space-x-4 > :not([hidden]) ~ :not([hidden])'
+ let candidate = 'peer-disabled:peer-first-child:group-hover:group-focus:focus:hover:space-x-4'
+ let formats = [
+ { format: '&:hover', respectPrefix: true }, // Hover
+ { format: '&:focus', respectPrefix: true }, // Focus
+ { format: ':merge(.group):focus &', respectPrefix: true }, // Group focus
+ { format: ':merge(.group):hover &', respectPrefix: true }, // Group hover
+ { format: ':merge(.peer):first-child ~ &', respectPrefix: true }, // Peer first-child
+ { format: ':merge(.peer):disabled ~ &', respectPrefix: true }, // Peer disabled
+ ]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.peer:disabled:first-child ~ .group:hover:focus .peer-disabled\\:peer-first-child\\:group-hover\\:group-focus\\:focus\\:hover\\:space-x-4:hover:focus > :not([hidden]) ~ :not([hidden])'
+ )
+})
+
+it('should match base utilities that are prefixed', () => {
+ let context = { tailwindConfig: { prefix: 'tw-' } }
+ let selector = '.tw-text-center'
+ let candidate = 'tw-text-center'
+ let formats = []
+
+ expect(finalizeSelector(selector, formats, { candidate, context })).toEqual('.tw-text-center')
+})
+
+it('should prefix classes from variants', () => {
+ let context = { tailwindConfig: { prefix: 'tw-' } }
+ let selector = '.tw-text-center'
+ let candidate = 'foo:tw-text-center'
+ let formats = [{ format: '.foo &', respectPrefix: true }]
+
+ expect(finalizeSelector(selector, formats, { candidate, context })).toEqual(
+ '.tw-foo .foo\\:tw-text-center'
+ )
+})
+
+it('should not prefix classes from arbitrary variants', () => {
+ let context = { tailwindConfig: { prefix: 'tw-' } }
+ let selector = '.tw-text-center'
+ let candidate = '[.foo_&]:tw-text-center'
+ let formats = [{ format: '.foo &', respectPrefix: false }]
+
+ expect(finalizeSelector(selector, formats, { candidate, context })).toEqual(
+ '.foo .\\[\\.foo_\\&\\]\\:tw-text-center'
+ )
+})
+
+it('Merged selectors with mixed combinators uses the first one', () => {
+ // This isn't explicitly specced behavior but it is how it works today
+
+ let selector = '.text-center'
+ let candidate = 'text-center'
+ let formats = [
+ { format: ':merge(.group):focus > &', respectPrefix: false },
+ { format: ':merge(.group):hover &', respectPrefix: false },
+ ]
+
+ expect(finalizeSelector(selector, formats, { candidate })).toEqual(
+ '.group:hover:focus > .text-center'
+ )
+})
+
+describe('real examples', () => {
+ it('example a', () => {
+ let selector = '.placeholder-red-500::placeholder'
+ let candidate = 'hover:placeholder-red-500'
+
+ let formats = [{ format: '&:hover', respectPrefix: true }]
expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.focus\\:hover\\:text-center:hover:focus'
+ '.hover\\:placeholder-red-500:hover::placeholder'
)
})
- it('should be possible to add a simple variant to a selector containing escaped parts', () => {
- let selector = '.bg-\\[rgba\\(0\\,0\\,0\\)\\]'
- let candidate = 'hover:bg-[rgba(0,0,0)]'
-
- let formats = [{ format: '&:hover', isArbitraryVariant: false }]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.hover\\:bg-\\[rgba\\(0\\2c 0\\2c 0\\)\\]:hover'
- )
- })
-
- it('should be possible to add a simple variant to a selector containing escaped parts (escape is slightly different)', () => {
- let selector = '.bg-\\[rgba\\(0\\2c 0\\2c 0\\)\\]'
- let candidate = 'hover:bg-[rgba(0,0,0)]'
-
- let formats = [{ format: '&:hover', isArbitraryVariant: false }]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.hover\\:bg-\\[rgba\\(0\\2c 0\\2c 0\\)\\]:hover'
- )
- })
-
- it('should be possible to add a simple variant to a more complex selector', () => {
+ it('example b', () => {
let selector = '.space-x-4 > :not([hidden]) ~ :not([hidden])'
- let candidate = 'hover:space-x-4'
-
- let formats = [{ format: '&:hover', isArbitraryVariant: false }]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.hover\\:space-x-4:hover > :not([hidden]) ~ :not([hidden])'
- )
- })
-
- it('should be possible to add multiple simple variants to a more complex selector', () => {
- let selector = '.space-x-4 > :not([hidden]) ~ :not([hidden])'
- let candidate = 'disabled:focus:hover:space-x-4'
+ let candidate = 'group-hover:hover:space-x-4'
let formats = [
- { format: '&:hover', isArbitraryVariant: false },
- { format: '&:focus', isArbitraryVariant: false },
- { format: '&:disabled', isArbitraryVariant: false },
+ { format: '&:hover', respectPrefix: true },
+ { format: ':merge(.group):hover &', respectPrefix: true },
]
expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.disabled\\:focus\\:hover\\:space-x-4:hover:focus:disabled > :not([hidden]) ~ :not([hidden])'
+ '.group:hover .group-hover\\:hover\\:space-x-4:hover > :not([hidden]) ~ :not([hidden])'
)
})
- it('should be possible to add a single merge variant to a simple selector', () => {
+ it('should work for group-hover and class dark mode combinations', () => {
let selector = '.text-center'
- let candidate = 'group-hover:text-center'
+ let candidate = 'dark:group-hover:text-center'
- let formats = [{ format: ':merge(.group):hover &', isArbitraryVariant: false }]
+ let formats = [
+ { format: ':merge(.group):hover &', respectPrefix: true },
+ { format: '.dark &', respectPrefix: true },
+ ]
expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.group:hover .group-hover\\:text-center'
+ '.dark .group:hover .dark\\:group-hover\\:text-center'
)
})
- it('should be possible to add multiple merge variants to a simple selector', () => {
+ it('should work for group-hover and class dark mode combinations (reversed)', () => {
let selector = '.text-center'
- let candidate = 'group-focus:group-hover:text-center'
+ let candidate = 'group-hover:dark:text-center'
- let formats = [
- { format: ':merge(.group):hover &', isArbitraryVariant: false },
- { format: ':merge(.group):focus &', isArbitraryVariant: false },
- ]
+ let formats = [{ format: '.dark &' }, { format: ':merge(.group):hover &', respectPrefix: true }]
expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.group:focus:hover .group-focus\\:group-hover\\:text-center'
+ '.group:hover .dark .group-hover\\:dark\\:text-center'
)
})
- it('should be possible to add a single merge variant to a more complex selector', () => {
- let selector = '.space-x-4 ~ :not([hidden]) ~ :not([hidden])'
- let candidate = 'group-hover:space-x-4'
-
- let formats = [{ format: ':merge(.group):hover &', isArbitraryVariant: false }]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.group:hover .group-hover\\:space-x-4 ~ :not([hidden]) ~ :not([hidden])'
- )
- })
-
- it('should be possible to add multiple merge variants to a more complex selector', () => {
- let selector = '.space-x-4 ~ :not([hidden]) ~ :not([hidden])'
- let candidate = 'group-focus:group-hover:space-x-4'
-
- let formats = [
- { format: ':merge(.group):hover &', isArbitraryVariant: false },
- { format: ':merge(.group):focus &', isArbitraryVariant: false },
- ]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.group:focus:hover .group-focus\\:group-hover\\:space-x-4 ~ :not([hidden]) ~ :not([hidden])'
- )
- })
-
- it('should be possible to add multiple unique merge variants to a simple selector', () => {
- let selector = '.text-center'
- let candidate = 'peer-focus:group-hover:text-center'
-
- let formats = [
- { format: ':merge(.group):hover &', isArbitraryVariant: false },
- { format: ':merge(.peer):focus ~ &' },
- ]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.peer:focus ~ .group:hover .peer-focus\\:group-hover\\:text-center'
- )
- })
-
- it('should be possible to add multiple unique merge variants to a simple selector', () => {
- let selector = '.text-center'
- let candidate = 'group-hover:peer-focus:text-center'
-
- let formats = [
- { format: ':merge(.peer):focus ~ &', isArbitraryVariant: false },
- { format: ':merge(.group):hover &', isArbitraryVariant: false },
- ]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.group:hover .peer:focus ~ .group-hover\\:peer-focus\\:text-center'
- )
- })
-
- it('should be possible to use multiple :merge() calls with different "arguments"', () => {
- let selector = '.foo'
- let candidate = 'peer-focus:group-focus:peer-hover:group-hover:foo'
-
- let formats = [
- { format: ':merge(.group):hover &', isArbitraryVariant: false },
- { format: ':merge(.peer):hover ~ &', isArbitraryVariant: false },
- { format: ':merge(.group):focus &', isArbitraryVariant: false },
- { format: ':merge(.peer):focus ~ &', isArbitraryVariant: false },
- ]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.peer:focus:hover ~ .group:focus:hover .peer-focus\\:group-focus\\:peer-hover\\:group-hover\\:foo'
- )
- })
-
- it('group hover and prose headings combination', () => {
- let selector = '.text-center'
- let candidate = 'group-hover:prose-headings:text-center'
- let formats = [
- { format: ':where(&) :is(h1, h2, h3, h4)', isArbitraryVariant: false }, // Prose Headings
- { format: ':merge(.group):hover &', isArbitraryVariant: false }, // Group Hover
- ]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.group:hover :where(.group-hover\\:prose-headings\\:text-center) :is(h1, h2, h3, h4)'
- )
- })
-
- it('group hover and prose headings combination flipped', () => {
- let selector = '.text-center'
- let candidate = 'prose-headings:group-hover:text-center'
- let formats = [
- { format: ':merge(.group):hover &', isArbitraryVariant: false }, // Group Hover
- { format: ':where(&) :is(h1, h2, h3, h4)', isArbitraryVariant: false }, // Prose Headings
- ]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- ':where(.group:hover .prose-headings\\:group-hover\\:text-center) :is(h1, h2, h3, h4)'
- )
- })
-
- it('should be possible to handle a complex utility', () => {
- let selector = '.space-x-4 > :not([hidden]) ~ :not([hidden])'
- let candidate = 'peer-disabled:peer-first-child:group-hover:group-focus:focus:hover:space-x-4'
- let formats = [
- { format: '&:hover', isArbitraryVariant: false }, // Hover
- { format: '&:focus', isArbitraryVariant: false }, // Focus
- { format: ':merge(.group):focus &', isArbitraryVariant: false }, // Group focus
- { format: ':merge(.group):hover &', isArbitraryVariant: false }, // Group hover
- { format: ':merge(.peer):first-child ~ &', isArbitraryVariant: false }, // Peer first-child
- { format: ':merge(.peer):disabled ~ &', isArbitraryVariant: false }, // Peer disabled
- ]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.peer:disabled:first-child ~ .group:hover:focus .peer-disabled\\:peer-first-child\\:group-hover\\:group-focus\\:focus\\:hover\\:space-x-4:hover:focus > :not([hidden]) ~ :not([hidden])'
- )
- })
-
- it('should match base utilities that are prefixed', () => {
- let context = { tailwindConfig: { prefix: 'tw-' } }
- let selector = '.tw-text-center'
- let candidate = 'tw-text-center'
- let formats = []
-
- expect(finalizeSelector(selector, formats, { candidate, context })).toEqual('.tw-text-center')
- })
-
- it('should prefix classes from variants', () => {
- let context = { tailwindConfig: { prefix: 'tw-' } }
- let selector = '.tw-text-center'
- let candidate = 'foo:tw-text-center'
- let formats = [{ format: '.foo &', isArbitraryVariant: false }]
-
- expect(finalizeSelector(selector, formats, { candidate, context })).toEqual(
- '.tw-foo .foo\\:tw-text-center'
- )
- })
-
- it('should not prefix classes from arbitrary variants', () => {
- let context = { tailwindConfig: { prefix: 'tw-' } }
- let selector = '.tw-text-center'
- let candidate = '[.foo_&]:tw-text-center'
- let formats = [{ format: '.foo &', isArbitraryVariant: true }]
-
- expect(finalizeSelector(selector, formats, { candidate, context })).toEqual(
- '.foo .\\[\\.foo_\\&\\]\\:tw-text-center'
- )
- })
-
- it('Merged selectors with mixed combinators uses the first one', () => {
- // This isn't explicitly specced behavior but it is how it works today
-
- let selector = '.text-center'
- let candidate = 'text-center'
- let formats = [
- { format: ':merge(.group):focus > &', isArbitraryVariant: true },
- { format: ':merge(.group):hover &', isArbitraryVariant: true },
- ]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.group:hover:focus > .text-center'
- )
- })
-
- describe('real examples', () => {
- it('example a', () => {
- let selector = '.placeholder-red-500::placeholder'
- let candidate = 'hover:placeholder-red-500'
-
- let formats = [{ format: '&:hover', isArbitraryVariant: false }]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.hover\\:placeholder-red-500:hover::placeholder'
- )
- })
-
- it('example b', () => {
- let selector = '.space-x-4 > :not([hidden]) ~ :not([hidden])'
- let candidate = 'group-hover:hover:space-x-4'
-
- let formats = [
- { format: '&:hover', isArbitraryVariant: false },
- { format: ':merge(.group):hover &', isArbitraryVariant: false },
- ]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.group:hover .group-hover\\:hover\\:space-x-4:hover > :not([hidden]) ~ :not([hidden])'
- )
- })
-
- it('should work for group-hover and class dark mode combinations', () => {
+ describe('prose-headings', () => {
+ it('should be possible to use hover:prose-headings:text-center', () => {
let selector = '.text-center'
- let candidate = 'dark:group-hover:text-center'
+ let candidate = 'hover:prose-headings:text-center'
- let formats = [
- { format: ':merge(.group):hover &', isArbitraryVariant: false },
- { format: '.dark &', isArbitraryVariant: false },
- ]
+ let formats = [{ format: ':where(&) :is(h1, h2, h3, h4)' }, { format: '&:hover' }]
expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.dark .group:hover .dark\\:group-hover\\:text-center'
+ ':where(.hover\\:prose-headings\\:text-center) :is(h1, h2, h3, h4):hover'
)
})
- it('should work for group-hover and class dark mode combinations (reversed)', () => {
+ it('should be possible to use prose-headings:hover:text-center', () => {
let selector = '.text-center'
- let candidate = 'group-hover:dark:text-center'
+ let candidate = 'prose-headings:hover:text-center'
- let formats = [
- { format: '.dark &' },
- { format: ':merge(.group):hover &', isArbitraryVariant: false },
- ]
+ let formats = [{ format: '&:hover' }, { format: ':where(&) :is(h1, h2, h3, h4)' }]
expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- '.group:hover .dark .group-hover\\:dark\\:text-center'
+ ':where(.prose-headings\\:hover\\:text-center:hover) :is(h1, h2, h3, h4)'
)
})
-
- describe('prose-headings', () => {
- it('should be possible to use hover:prose-headings:text-center', () => {
- let selector = '.text-center'
- let candidate = 'hover:prose-headings:text-center'
-
- let formats = [{ format: ':where(&) :is(h1, h2, h3, h4)' }, { format: '&:hover' }]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- ':where(.hover\\:prose-headings\\:text-center) :is(h1, h2, h3, h4):hover'
- )
- })
-
- it('should be possible to use prose-headings:hover:text-center', () => {
- let selector = '.text-center'
- let candidate = 'prose-headings:hover:text-center'
-
- let formats = [{ format: '&:hover' }, { format: ':where(&) :is(h1, h2, h3, h4)' }]
-
- expect(finalizeSelector(selector, formats, { candidate })).toEqual(
- ':where(.prose-headings\\:hover\\:text-center:hover) :is(h1, h2, h3, h4)'
- )
- })
- })
- })
-
- describe('pseudo elements', () => {
- it.each`
- before | after
- ${'&::before'} | ${'&::before'}
- ${'&::before:hover'} | ${'&:hover::before'}
- ${'&:before:hover'} | ${'&:hover:before'}
- ${'&::file-selector-button:hover'} | ${'&::file-selector-button:hover'}
- ${'&:hover::file-selector-button'} | ${'&:hover::file-selector-button'}
- ${'.parent:hover &'} | ${'.parent:hover &'}
- ${'.parent::before &'} | ${'.parent &::before'}
- ${'.parent::before &:hover'} | ${'.parent &:hover::before'}
- ${':where(&::before) :is(h1, h2, h3, h4)'} | ${':where(&) :is(h1, h2, h3, h4)::before'}
- ${':where(&::file-selector-button) :is(h1, h2, h3, h4)'} | ${':where(&::file-selector-button) :is(h1, h2, h3, h4)'}
- ${'#app :is(.dark &::before)'} | ${'#app :is(.dark &)::before'}
- ${'#app :is(:is(.dark &)::before)'} | ${'#app :is(:is(.dark &))::before'}
- ${'#app :is(.foo::file-selector-button)'} | ${'#app :is(.foo)::file-selector-button'}
- ${'#app :is(.foo::-webkit-progress-bar)'} | ${'#app :is(.foo)::-webkit-progress-bar'}
- `('should translate "$before" into "$after"', ({ before, after }) => {
- let result = finalizeSelector('.a', [{ format: before, isArbitraryVariant: false }], {
- candidate: 'a',
- })
-
- expect(result).toEqual(after.replace('&', '.a'))
- })
+ })
+})
+
+describe('pseudo elements', () => {
+ it.each`
+ before | after
+ ${'&::before'} | ${'&::before'}
+ ${'&::before:hover'} | ${'&:hover::before'}
+ ${'&:before:hover'} | ${'&:hover:before'}
+ ${'&::file-selector-button:hover'} | ${'&::file-selector-button:hover'}
+ ${'&:hover::file-selector-button'} | ${'&:hover::file-selector-button'}
+ ${'.parent:hover &'} | ${'.parent:hover &'}
+ ${'.parent::before &'} | ${'.parent &::before'}
+ ${'.parent::before &:hover'} | ${'.parent &:hover::before'}
+ ${':where(&::before) :is(h1, h2, h3, h4)'} | ${':where(&) :is(h1, h2, h3, h4)::before'}
+ ${':where(&::file-selector-button) :is(h1, h2, h3, h4)'} | ${':where(&::file-selector-button) :is(h1, h2, h3, h4)'}
+ ${'#app :is(.dark &::before)'} | ${'#app :is(.dark &)::before'}
+ ${'#app :is(:is(.dark &)::before)'} | ${'#app :is(:is(.dark &))::before'}
+ ${'#app :is(.foo::file-selector-button)'} | ${'#app :is(.foo)::file-selector-button'}
+ ${'#app :is(.foo::-webkit-progress-bar)'} | ${'#app :is(.foo)::-webkit-progress-bar'}
+ ${'.parent::marker li'} | ${'.parent li::marker'}
+ ${'.parent::selection li'} | ${'.parent li::selection'}
+ ${'.parent::placeholder input'} | ${'.parent input::placeholder'}
+ ${'.parent::backdrop dialog'} | ${'.parent dialog::backdrop'}
+ `('should translate "$before" into "$after"', ({ before, after }) => {
+ let result = finalizeSelector('.a', [{ format: before, respectPrefix: true }], {
+ candidate: 'a',
+ })
+
+ expect(result).toEqual(after.replace('&', '.a'))
})
})
diff --git a/tests/generate-rules.test.js b/tests/generate-rules.test.js
index 3aa8592bc..57740c128 100644
--- a/tests/generate-rules.test.js
+++ b/tests/generate-rules.test.js
@@ -1,48 +1,46 @@
import { generateRules } from '../src/lib/generateRules'
import resolveConfig from '../src/public/resolve-config'
import { createContext } from '../src/lib/setupContextUtils'
-import { crosscheck, css } from './util/run'
+import { css } from './util/run'
-crosscheck(() => {
- it('should not generate rules that are incorrect', () => {
- let config = {
- plugins: [
- ({ matchVariant }) => {
- matchVariant('@', (value) => `@container (min-width: ${value})`)
- },
- ],
+it('should not generate rules that are incorrect', () => {
+ let config = {
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('@', (value) => `@container (min-width: ${value})`)
+ },
+ ],
+ }
+ let context = createContext(resolveConfig(config))
+ let rules = generateRules(
+ new Set([
+ // Invalid, missing `-`
+ 'group[:hover]:underline',
+
+ // Invalid, `-` should not be there
+ '@-[200px]:underline',
+
+ // Valid
+ 'group-[:hover]:underline',
+ '@[200px]:underline',
+ ]),
+ context
+ )
+
+ // Ensure we only have 2 valid rules
+ expect(rules).toHaveLength(2)
+
+ // Ensure we have the correct values
+ expect(rules[0][1].toString()).toMatchFormattedCss(css`
+ .group:hover .group-\[\:hover\]\:underline {
+ text-decoration-line: underline;
}
- let context = createContext(resolveConfig(config))
- let rules = generateRules(
- new Set([
- // Invalid, missing `-`
- 'group[:hover]:underline',
-
- // Invalid, `-` should not be there
- '@-[200px]:underline',
-
- // Valid
- 'group-[:hover]:underline',
- '@[200px]:underline',
- ]),
- context
- )
-
- // Ensure we only have 2 valid rules
- expect(rules).toHaveLength(2)
-
- // Ensure we have the correct values
- expect(rules[0][1].toString()).toMatchFormattedCss(css`
- .group:hover .group-\[\:hover\]\:underline {
+ `)
+ expect(rules[1][1].toString()).toMatchFormattedCss(css`
+ @container (min-width: 200px) {
+ .\@\[200px\]\:underline {
text-decoration-line: underline;
}
- `)
- expect(rules[1][1].toString()).toMatchFormattedCss(css`
- @container (min-width: 200px) {
- .\@\[200px\]\:underline {
- text-decoration-line: underline;
- }
- }
- `)
- })
+ }
+ `)
})
diff --git a/tests/getClassList.test.js b/tests/getClassList.test.js
index 671a767ec..94a790a78 100644
--- a/tests/getClassList.test.js
+++ b/tests/getClassList.test.js
@@ -1,228 +1,231 @@
import resolveConfig from '../src/public/resolve-config'
import plugin from '../src/public/create-plugin'
import { createContext } from '../src/lib/setupContextUtils'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- it('should generate every possible class, without variants', () => {
- let config = {}
+it('should generate every possible class, without variants', () => {
+ let config = {}
- let context = createContext(resolveConfig(config))
- let classes = context.getClassList()
- expect(classes).toBeInstanceOf(Array)
+ let context = createContext(resolveConfig(config))
+ let classes = context.getClassList()
+ expect(classes).toBeInstanceOf(Array)
- // Verify we have a `container` for the 'components' section.
- expect(classes).toContain('container')
+ // Verify we have a `container` for the 'components' section.
+ expect(classes).toContain('container')
- // Verify we handle the DEFAULT case correctly
- expect(classes).toContain('border')
+ // Verify we handle the DEFAULT case correctly
+ expect(classes).toContain('border')
- // Verify we handle negative values correctly
- expect(classes).toContain('-inset-1/4')
- expect(classes).toContain('-m-0')
- expect(classes).not.toContain('-uppercase')
- expect(classes).not.toContain('-opacity-50')
+ // Verify we handle negative values correctly
+ expect(classes).toContain('-inset-1/4')
+ expect(classes).toContain('-m-0')
+ expect(classes).not.toContain('-uppercase')
+ expect(classes).not.toContain('-opacity-50')
- config = { theme: { extend: { margin: { DEFAULT: '5px' } } } }
- context = createContext(resolveConfig(config))
- classes = context.getClassList()
+ config = { theme: { extend: { margin: { DEFAULT: '5px' } } } }
+ context = createContext(resolveConfig(config))
+ classes = context.getClassList()
- expect(classes).not.toContain('-m-DEFAULT')
- })
+ expect(classes).not.toContain('-m-DEFAULT')
+})
- it('should generate every possible class while handling negatives and prefixes', () => {
- let config = { prefix: 'tw-' }
- let context = createContext(resolveConfig(config))
- let classes = context.getClassList()
- expect(classes).toBeInstanceOf(Array)
+it('should generate every possible class while handling negatives and prefixes', () => {
+ let config = { prefix: 'tw-' }
+ let context = createContext(resolveConfig(config))
+ let classes = context.getClassList()
+ expect(classes).toBeInstanceOf(Array)
- // Verify we have a `container` for the 'components' section.
- expect(classes).toContain('tw-container')
+ // Verify we have a `container` for the 'components' section.
+ expect(classes).toContain('tw-container')
- // Verify we handle the DEFAULT case correctly
- expect(classes).toContain('tw-border')
+ // Verify we handle the DEFAULT case correctly
+ expect(classes).toContain('tw-border')
- // Verify we handle negative values correctly
- expect(classes).toContain('-tw-inset-1/4')
- expect(classes).toContain('-tw-m-0')
- expect(classes).not.toContain('-tw-uppercase')
- expect(classes).not.toContain('-tw-opacity-50')
+ // Verify we handle negative values correctly
+ expect(classes).toContain('-tw-inset-1/4')
+ expect(classes).toContain('-tw-m-0')
+ expect(classes).not.toContain('-tw-uppercase')
+ expect(classes).not.toContain('-tw-opacity-50')
- // These utilities do work but there's no reason to generate
- // them alongside the `-{prefix}-{utility}` versions
- expect(classes).not.toContain('tw--inset-1/4')
- expect(classes).not.toContain('tw--m-0')
+ // These utilities do work but there's no reason to generate
+ // them alongside the `-{prefix}-{utility}` versions
+ expect(classes).not.toContain('tw--inset-1/4')
+ expect(classes).not.toContain('tw--m-0')
- config = {
- prefix: 'tw-',
- theme: { extend: { margin: { DEFAULT: '5px' } } },
- }
- context = createContext(resolveConfig(config))
- classes = context.getClassList()
+ config = {
+ prefix: 'tw-',
+ theme: { extend: { margin: { DEFAULT: '5px' } } },
+ }
+ context = createContext(resolveConfig(config))
+ classes = context.getClassList()
- expect(classes).not.toContain('-tw-m-DEFAULT')
- })
+ expect(classes).not.toContain('-tw-m-DEFAULT')
+})
- it('should not generate utilities with opacity by default', () => {
- let config = {}
- let context = createContext(resolveConfig(config))
- let classes = context.getClassList()
+it('should not generate utilities with opacity by default', () => {
+ let config = {}
+ let context = createContext(resolveConfig(config))
+ let classes = context.getClassList()
- expect(classes).not.toContain('bg-red-500/50')
- })
+ expect(classes).not.toContain('bg-red-500/50')
+})
- it('should not include metadata by default', () => {
- let config = {}
- let context = createContext(resolveConfig(config))
- let classes = context.getClassList()
+it('should not include metadata by default', () => {
+ let config = {}
+ let context = createContext(resolveConfig(config))
+ let classes = context.getClassList()
- expect(classes.every((cls) => typeof cls === 'string')).toEqual(true)
+ expect(classes.every((cls) => typeof cls === 'string')).toEqual(true)
- expect(classes).toContain('bg-red-500')
- expect(classes).toContain('text-2xl')
- })
+ expect(classes).toContain('bg-red-500')
+ expect(classes).toContain('text-2xl')
+})
- it('should generate utilities with modifier data when requested', () => {
- let config = {}
- let context = createContext(resolveConfig(config))
- let classes = context.getClassList({ includeMetadata: true })
+it('should generate utilities with modifier data when requested', () => {
+ let config = {}
+ let context = createContext(resolveConfig(config))
+ let classes = context.getClassList({ includeMetadata: true })
- expect(classes).not.toContain('bg-red-500')
- expect(classes).not.toContain('text-2xl')
+ expect(classes).not.toContain('bg-red-500')
+ expect(classes).not.toContain('text-2xl')
- expect(classes).toContainEqual([
- 'bg-red-500',
- {
- modifiers: [
- '0',
- '5',
- '10',
- '20',
- '25',
- '30',
- '40',
- '50',
- '60',
- '70',
- '75',
- '80',
- '90',
- '95',
- '100',
- ],
- },
- ])
- expect(classes).toContainEqual([
- 'text-2xl',
- {
- modifiers: [
- '3',
- '4',
- '5',
- '6',
- '7',
- '8',
- '9',
- '10',
- 'none',
- 'tight',
- 'snug',
- 'normal',
- 'relaxed',
- 'loose',
- ],
- },
- ])
- })
-
- it('should generate plugin-defined utilities with modifier data when requested', () => {
- let config = {
- plugins: [
- plugin(function ({ matchUtilities }) {
- matchUtilities(
- {
- foo: (value) => {
- return { margin: value }
- },
- },
- {
- values: { xl: '32px' },
- modifiers: { bar: 'something' },
- }
- )
- matchUtilities(
- {
- 'foo-negative': (value) => {
- return { margin: value }
- },
- },
- {
- values: { xl: '32px' },
- modifiers: { bar: 'something' },
- supportsNegativeValues: true,
- }
- )
- }),
+ expect(classes).toContainEqual([
+ 'bg-red-500',
+ {
+ modifiers: [
+ '0',
+ '5',
+ '10',
+ '15',
+ '20',
+ '25',
+ '30',
+ '35',
+ '40',
+ '45',
+ '50',
+ '55',
+ '60',
+ '65',
+ '70',
+ '75',
+ '80',
+ '85',
+ '90',
+ '95',
+ '100',
],
- }
- let context = createContext(resolveConfig(config))
- let classes = context.getClassList({ includeMetadata: true })
-
- expect(classes).toContainEqual(['foo-xl', { modifiers: ['bar'] }])
- expect(classes).toContainEqual(['foo-negative-xl', { modifiers: ['bar'] }])
- expect(classes).toContainEqual(['-foo-negative-xl', { modifiers: ['bar'] }])
- expect(classes).not.toContain('foo-xl')
- expect(classes).not.toContain('-foo-xl')
- expect(classes).not.toContainEqual(['-foo-xl', { modifiers: ['bar'] }])
- })
-
- it('should not generate utilities with opacity even if safe-listed', () => {
- let config = {
- safelist: [
- {
- pattern: /^bg-red-(400|500)(\/(40|50))?$/,
- },
+ },
+ ])
+ expect(classes).toContainEqual([
+ 'text-2xl',
+ {
+ modifiers: [
+ '3',
+ '4',
+ '5',
+ '6',
+ '7',
+ '8',
+ '9',
+ '10',
+ 'none',
+ 'tight',
+ 'snug',
+ 'normal',
+ 'relaxed',
+ 'loose',
],
- }
+ },
+ ])
+})
- let context = createContext(resolveConfig(config))
- let classes = context.getClassList()
-
- expect(classes).not.toContain('bg-red-500/50')
- })
-
- it('should not generate utilities that are set to undefined or null to so that they are removed', () => {
- let config = {
- theme: {
- extend: {
- colors: {
- red: null,
- green: undefined,
- blue: {
- 100: null,
- 200: undefined,
+it('should generate plugin-defined utilities with modifier data when requested', () => {
+ let config = {
+ plugins: [
+ plugin(function ({ matchUtilities }) {
+ matchUtilities(
+ {
+ foo: (value) => {
+ return { margin: value }
},
},
+ {
+ values: { xl: '32px' },
+ modifiers: { bar: 'something' },
+ }
+ )
+ matchUtilities(
+ {
+ 'foo-negative': (value) => {
+ return { margin: value }
+ },
+ },
+ {
+ values: { xl: '32px' },
+ modifiers: { bar: 'something' },
+ supportsNegativeValues: true,
+ }
+ )
+ }),
+ ],
+ }
+ let context = createContext(resolveConfig(config))
+ let classes = context.getClassList({ includeMetadata: true })
+
+ expect(classes).toContainEqual(['foo-xl', { modifiers: ['bar'] }])
+ expect(classes).toContainEqual(['foo-negative-xl', { modifiers: ['bar'] }])
+ expect(classes).toContainEqual(['-foo-negative-xl', { modifiers: ['bar'] }])
+ expect(classes).not.toContain('foo-xl')
+ expect(classes).not.toContain('-foo-xl')
+ expect(classes).not.toContainEqual(['-foo-xl', { modifiers: ['bar'] }])
+})
+
+it('should not generate utilities with opacity even if safe-listed', () => {
+ let config = {
+ safelist: [
+ {
+ pattern: /^bg-red-(400|500)(\/(40|50))?$/,
+ },
+ ],
+ }
+
+ let context = createContext(resolveConfig(config))
+ let classes = context.getClassList()
+
+ expect(classes).not.toContain('bg-red-500/50')
+})
+
+it('should not generate utilities that are set to undefined or null to so that they are removed', () => {
+ let config = {
+ theme: {
+ extend: {
+ colors: {
+ red: null,
+ green: undefined,
+ blue: {
+ 100: null,
+ 200: undefined,
+ },
},
},
- safelist: [
- {
- pattern: /^bg-(red|green|blue)-.*$/,
- },
- ],
- }
+ },
+ safelist: [
+ {
+ pattern: /^bg-(red|green|blue)-.*$/,
+ },
+ ],
+ }
- let context = createContext(resolveConfig(config))
- let classes = context.getClassList()
+ let context = createContext(resolveConfig(config))
+ let classes = context.getClassList()
- expect(classes).not.toContain('bg-red-100') // Red is `null`
+ expect(classes).not.toContain('bg-red-100') // Red is `null`
- expect(classes).not.toContain('bg-green-100') // Green is `undefined`
+ expect(classes).not.toContain('bg-green-100') // Green is `undefined`
- expect(classes).not.toContain('bg-blue-100') // Blue.100 is `null`
- expect(classes).not.toContain('bg-blue-200') // Blue.200 is `undefined`
+ expect(classes).not.toContain('bg-blue-100') // Blue.100 is `null`
+ expect(classes).not.toContain('bg-blue-200') // Blue.200 is `undefined`
- expect(classes).toContain('bg-blue-50')
- expect(classes).toContain('bg-blue-300')
- })
+ expect(classes).toContain('bg-blue-50')
+ expect(classes).toContain('bg-blue-300')
})
diff --git a/tests/getSortOrder.test.js b/tests/getSortOrder.test.js
index 4526c4874..b15dc43ae 100644
--- a/tests/getSortOrder.test.js
+++ b/tests/getSortOrder.test.js
@@ -1,7 +1,6 @@
import resolveConfig from '../src/public/resolve-config'
import { createContext } from '../src/lib/setupContextUtils'
import bigSign from '../src/util/bigSign'
-import { crosscheck } from './util/run'
/**
* This is a function that the prettier-plugin-tailwindcss would use. It would
@@ -25,121 +24,196 @@ function defaultSort(arrayOfTuples) {
.join(' ')
}
-crosscheck(() => {
- it('should return a list of tuples with the sort order', () => {
- let input = 'font-bold underline hover:font-medium unknown'
- let config = {}
- let context = createContext(resolveConfig(config))
- expect(context.getClassOrder(input.split(' '))).toEqual([
- ['font-bold', expect.any(BigInt)],
- ['underline', expect.any(BigInt)],
- ['hover:font-medium', expect.any(BigInt)],
+it('should return a list of tuples with the sort order', () => {
+ let input = 'font-bold underline hover:font-medium unknown'
+ let config = {}
+ let context = createContext(resolveConfig(config))
+ expect(context.getClassOrder(input.split(' '))).toEqual([
+ ['font-bold', expect.any(BigInt)],
+ ['underline', expect.any(BigInt)],
+ ['hover:font-medium', expect.any(BigInt)],
- // Unknown values receive `null`
- ['unknown', null],
- ])
- })
+ // Unknown values receive `null`
+ ['unknown', null],
+ ])
+})
- it.each([
- // Utitlies
- ['px-3 p-1 py-3', 'p-1 px-3 py-3'],
+it.each([
+ // Utitlies
+ ['px-3 p-1 py-3', 'p-1 px-3 py-3'],
- // Utitlies and components
- ['px-4 container', 'container px-4'],
+ // Utitlies and components
+ ['px-4 container', 'container px-4'],
- // Utilities with variants
- ['px-3 focus:hover:p-3 hover:p-1 py-3', 'px-3 py-3 hover:p-1 focus:hover:p-3'],
+ // Utilities with variants
+ ['px-3 focus:hover:p-3 hover:p-1 py-3', 'px-3 py-3 hover:p-1 focus:hover:p-3'],
- // Utitlies with important
- ['px-3 !py-4', '!py-4 px-3'],
- ['!py-4 px-3', '!py-4 px-3'],
+ // Utitlies with important
+ ['px-3 !py-4', '!py-4 px-3'],
+ ['!py-4 px-3', '!py-4 px-3'],
- // Components with variants
- ['hover:container container', 'container hover:container'],
+ // Components with variants
+ ['hover:container container', 'container hover:container'],
- // Components and utilities with variants
- [
- 'focus:hover:container hover:underline hover:container p-1',
- 'p-1 hover:container focus:hover:container hover:underline',
- ],
+ // Components and utilities with variants
+ [
+ 'focus:hover:container hover:underline hover:container p-1',
+ 'p-1 hover:container focus:hover:container hover:underline',
+ ],
- // Leave user css order alone, and move to the front
- ['b p-1 a', 'b a p-1'],
- ['hover:b focus:p-1 a', 'hover:b a focus:p-1'],
+ // Leave user css order alone, and move to the front
+ ['b p-1 a', 'b a p-1'],
+ ['hover:b focus:p-1 a', 'hover:b a focus:p-1'],
- // Add special treatment for `group` and `peer`
- ['a peer container underline', 'a peer container underline'],
- ])('should sort "%s" based on the order we generate them in to "%s"', (input, output) => {
- let config = {}
+ // Add special treatment for `group` and `peer`
+ ['a peer container underline', 'a peer container underline'],
+])('should sort "%s" based on the order we generate them in to "%s"', (input, output) => {
+ let config = {}
+ let context = createContext(resolveConfig(config))
+ expect(defaultSort(context.getClassOrder(input.split(' ')))).toEqual(output)
+})
+
+it.each([
+ // Utitlies
+ ['tw-px-3 tw-p-1 tw-py-3', 'tw-p-1 tw-px-3 tw-py-3'],
+
+ // Utitlies and components
+ ['tw-px-4 tw-container', 'tw-container tw-px-4'],
+
+ // Utilities with variants
+ [
+ 'tw-px-3 focus:hover:tw-p-3 hover:tw-p-1 tw-py-3',
+ 'tw-px-3 tw-py-3 hover:tw-p-1 focus:hover:tw-p-3',
+ ],
+
+ // Utitlies with important
+ ['tw-px-3 !tw-py-4', '!tw-py-4 tw-px-3'],
+ ['!tw-py-4 tw-px-3', '!tw-py-4 tw-px-3'],
+
+ // Components with variants
+ ['hover:tw-container tw-container', 'tw-container hover:tw-container'],
+
+ // Components and utilities with variants
+ [
+ 'focus:hover:tw-container hover:tw-underline hover:tw-container tw-p-1',
+ 'tw-p-1 hover:tw-container focus:hover:tw-container hover:tw-underline',
+ ],
+
+ // Leave user css order alone, and move to the front
+ ['b tw-p-1 a', 'b a tw-p-1'],
+ ['hover:b focus:tw-p-1 a', 'hover:b a focus:tw-p-1'],
+
+ // Add special treatment for `group` and `peer`
+ ['a tw-peer tw-container tw-underline', 'a tw-peer tw-container tw-underline'],
+])(
+ 'should sort "%s" with prefixex based on the order we generate them in to "%s"',
+ (input, output) => {
+ let config = { prefix: 'tw-' }
let context = createContext(resolveConfig(config))
expect(defaultSort(context.getClassOrder(input.split(' ')))).toEqual(output)
- })
+ }
+)
- it.each([
- // Utitlies
- ['tw-px-3 tw-p-1 tw-py-3', 'tw-p-1 tw-px-3 tw-py-3'],
-
- // Utitlies and components
- ['tw-px-4 tw-container', 'tw-container tw-px-4'],
-
- // Utilities with variants
+it('sorts classes deterministically across multiple class lists', () => {
+ let classes = [
[
- 'tw-px-3 focus:hover:tw-p-3 hover:tw-p-1 tw-py-3',
- 'tw-px-3 tw-py-3 hover:tw-p-1 focus:hover:tw-p-3',
+ 'a-class px-3 p-1 b-class py-3 bg-red-500 bg-blue-500',
+ 'a-class b-class bg-blue-500 bg-red-500 p-1 px-3 py-3',
],
-
- // Utitlies with important
- ['tw-px-3 !tw-py-4', '!tw-py-4 tw-px-3'],
- ['!tw-py-4 tw-px-3', '!tw-py-4 tw-px-3'],
-
- // Components with variants
- ['hover:tw-container tw-container', 'tw-container hover:tw-container'],
-
- // Components and utilities with variants
[
- 'focus:hover:tw-container hover:tw-underline hover:tw-container tw-p-1',
- 'tw-p-1 hover:tw-container focus:hover:tw-container hover:tw-underline',
+ 'px-3 b-class p-1 py-3 bg-blue-500 a-class bg-red-500',
+ 'b-class a-class bg-blue-500 bg-red-500 p-1 px-3 py-3',
],
+ ]
- // Leave user css order alone, and move to the front
- ['b tw-p-1 a', 'b a tw-p-1'],
- ['hover:b focus:tw-p-1 a', 'hover:b a focus:tw-p-1'],
+ let config = {}
- // Add special treatment for `group` and `peer`
- ['a tw-peer tw-container tw-underline', 'a tw-peer tw-container tw-underline'],
- ])(
- 'should sort "%s" with prefixex based on the order we generate them in to "%s"',
- (input, output) => {
- let config = { prefix: 'tw-' }
- let context = createContext(resolveConfig(config))
- expect(defaultSort(context.getClassOrder(input.split(' ')))).toEqual(output)
- }
- )
+ // Same context, different class lists
+ let context = createContext(resolveConfig(config))
+ for (const [input, output] of classes) {
+ expect(defaultSort(context.getClassOrder(input.split(' ')))).toEqual(output)
+ }
- it('sorts classes deterministically across multiple class lists', () => {
- let classes = [
- [
- 'a-class px-3 p-1 b-class py-3 bg-red-500 bg-blue-500',
- 'a-class b-class bg-blue-500 bg-red-500 p-1 px-3 py-3',
- ],
- [
- 'px-3 b-class p-1 py-3 bg-blue-500 a-class bg-red-500',
- 'b-class a-class bg-blue-500 bg-red-500 p-1 px-3 py-3',
- ],
- ]
-
- let config = {}
-
- // Same context, different class lists
- let context = createContext(resolveConfig(config))
- for (const [input, output] of classes) {
- expect(defaultSort(context.getClassOrder(input.split(' ')))).toEqual(output)
- }
-
- // Different context, different class lists
- for (const [input, output] of classes) {
- context = createContext(resolveConfig(config))
- expect(defaultSort(context.getClassOrder(input.split(' ')))).toEqual(output)
- }
- })
+ // Different context, different class lists
+ for (const [input, output] of classes) {
+ context = createContext(resolveConfig(config))
+ expect(defaultSort(context.getClassOrder(input.split(' ')))).toEqual(output)
+ }
+})
+
+it('sorts based on first occurrence of a candidate / rule', () => {
+ let classes = [
+ ['foo-1 foo', 'foo foo-1'],
+ ['bar', 'bar'],
+ ['foo-1 foo', 'foo foo-1'],
+ ]
+
+ let config = {
+ theme: {},
+ plugins: [
+ function ({ addComponents }) {
+ addComponents({
+ '.foo': { display: 'block' },
+ '.foo-1': { display: 'block' },
+ '.bar': { display: 'block' },
+
+ // This rule matches both the candidate `foo` and `bar`
+ // But when sorting `foo` — we've already got a
+ // position for `foo` so we should use it
+ '.bar .foo': { display: 'block' },
+ })
+ },
+ ],
+ }
+
+ // Same context, different class lists
+ let context = createContext(resolveConfig(config))
+ for (const [input, output] of classes) {
+ expect(defaultSort(context.getClassOrder(input.split(' ')))).toEqual(output)
+ }
+
+ // Different context, different class lists
+ for (const [input, output] of classes) {
+ context = createContext(resolveConfig(config))
+ expect(defaultSort(context.getClassOrder(input.split(' ')))).toEqual(output)
+ }
+})
+
+it('Sorting is unchanged when multiple candidates share the same rule / object', () => {
+ let classes = [
+ ['x y', 'x y'],
+ ['a', 'a'],
+ ['x y', 'x y'],
+ ]
+
+ let config = {
+ theme: {},
+ plugins: [
+ function ({ addComponents }) {
+ addComponents({
+ '.x': { color: 'red' },
+ '.a': { color: 'red' },
+
+ // This rule matches both the candidate `a` and `y`
+ // When sorting x and y first we would keep that sort order
+ // Then sorting `a` we would end up replacing the candidate on the rule
+ // Thus causing `y` to no longer have a sort order causing it to be sorted
+ // first by accident
+ '.y .a': { color: 'red' },
+ })
+ },
+ ],
+ }
+
+ // Same context, different class lists
+ let context = createContext(resolveConfig(config))
+ for (const [input, output] of classes) {
+ expect(defaultSort(context.getClassOrder(input.split(' ')))).toEqual(output)
+ }
+
+ // Different context, different class lists
+ for (const [input, output] of classes) {
+ context = createContext(resolveConfig(config))
+ expect(defaultSort(context.getClassOrder(input.split(' ')))).toEqual(output)
+ }
})
diff --git a/tests/getVariants.test.js b/tests/getVariants.test.js
index 8d79f8243..16f13975f 100644
--- a/tests/getVariants.test.js
+++ b/tests/getVariants.test.js
@@ -2,188 +2,204 @@ import postcss from 'postcss'
import selectorParser from 'postcss-selector-parser'
import resolveConfig from '../src/public/resolve-config'
import { createContext } from '../src/lib/setupContextUtils'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- it('should return a list of variants with meta information about the variant', () => {
- let config = {}
- let context = createContext(resolveConfig(config))
+it('should return a list of variants with meta information about the variant', () => {
+ let config = {}
+ let context = createContext(resolveConfig(config))
- let variants = context.getVariants()
+ let variants = context.getVariants()
- expect(variants).toContainEqual({
- name: 'hover',
- isArbitrary: false,
- hasDash: true,
- values: [],
- selectors: expect.any(Function),
- })
-
- expect(variants).toContainEqual({
- name: 'group',
- isArbitrary: true,
- hasDash: true,
- values: expect.any(Array),
- selectors: expect.any(Function),
- })
-
- // `group-hover` now belongs to the `group` variant. The information exposed for the `group`
- // variant is all you need.
- expect(variants.find((v) => v.name === 'group-hover')).toBeUndefined()
+ expect(variants).toContainEqual({
+ name: 'hover',
+ isArbitrary: false,
+ hasDash: true,
+ values: [],
+ selectors: expect.any(Function),
})
- it('should provide selectors for simple variants', () => {
- let config = {}
- let context = createContext(resolveConfig(config))
-
- let variants = context.getVariants()
-
- let variant = variants.find((v) => v.name === 'hover')
- expect(variant.selectors()).toEqual(['&:hover'])
+ expect(variants).toContainEqual({
+ name: 'group',
+ isArbitrary: true,
+ hasDash: true,
+ values: expect.any(Array),
+ selectors: expect.any(Function),
})
- it('should provide selectors for parallel variants', () => {
- let config = {}
- let context = createContext(resolveConfig(config))
+ // `group-hover` now belongs to the `group` variant. The information exposed for the `group`
+ // variant is all you need.
+ expect(variants.find((v) => v.name === 'group-hover')).toBeUndefined()
+})
- let variants = context.getVariants()
+it('should provide selectors for simple variants', () => {
+ let config = {}
+ let context = createContext(resolveConfig(config))
- let variant = variants.find((v) => v.name === 'marker')
- expect(variant.selectors()).toEqual(['& *::marker', '&::marker'])
- })
+ let variants = context.getVariants()
- it('should provide selectors for complex matchVariant variants like `group`', () => {
- let config = {}
- let context = createContext(resolveConfig(config))
+ let variant = variants.find((v) => v.name === 'hover')
+ expect(variant.selectors()).toEqual(['&:hover'])
+})
- let variants = context.getVariants()
+it('should provide selectors for parallel variants', () => {
+ let config = {}
+ let context = createContext(resolveConfig(config))
- let variant = variants.find((v) => v.name === 'group')
- expect(variant.selectors()).toEqual(['.group &'])
- expect(variant.selectors({})).toEqual(['.group &'])
- expect(variant.selectors({ value: 'hover' })).toEqual(['.group:hover &'])
- expect(variant.selectors({ value: '.foo_&' })).toEqual(['.foo .group &'])
- expect(variant.selectors({ modifier: 'foo', value: 'hover' })).toEqual(['.group\\/foo:hover &'])
- expect(variant.selectors({ modifier: 'foo', value: '.foo_&' })).toEqual(['.foo .group\\/foo &'])
- })
+ let variants = context.getVariants()
- it('should provide selectors for variants with atrules', () => {
- let config = {}
- let context = createContext(resolveConfig(config))
+ let variant = variants.find((v) => v.name === 'marker')
+ expect(variant.selectors()).toEqual(['& *::marker', '&::marker'])
+})
- let variants = context.getVariants()
+it('should provide selectors for complex matchVariant variants like `group`', () => {
+ let config = {}
+ let context = createContext(resolveConfig(config))
- let variant = variants.find((v) => v.name === 'supports')
- expect(variant.selectors({ value: 'display:grid' })).toEqual(['@supports (display:grid)'])
- expect(variant.selectors({ value: 'aspect-ratio' })).toEqual([
- '@supports (aspect-ratio: var(--tw))',
- ])
- })
+ let variants = context.getVariants()
- it('should provide selectors for custom plugins that do a combination of parallel variants with modifiers with arbitrary values and with atrules', () => {
- let config = {
- plugins: [
- function ({ matchVariant }) {
- matchVariant('foo', (value, { modifier }) => {
- return [
- `
+ let variant = variants.find((v) => v.name === 'group')
+ expect(variant.selectors()).toEqual(['.group &'])
+ expect(variant.selectors({})).toEqual(['.group &'])
+ expect(variant.selectors({ value: 'hover' })).toEqual(['.group:hover &'])
+ expect(variant.selectors({ value: '.foo_&' })).toEqual(['.foo .group &'])
+ expect(variant.selectors({ modifier: 'foo', value: 'hover' })).toEqual(['.group\\/foo:hover &'])
+ expect(variant.selectors({ modifier: 'foo', value: '.foo_&' })).toEqual(['.foo .group\\/foo &'])
+})
+
+it('should provide selectors for complex matchVariant variants like `group` (when using a prefix)', () => {
+ let config = { prefix: 'tw-' }
+ let context = createContext(resolveConfig(config))
+
+ let variants = context.getVariants()
+
+ let variant = variants.find((v) => v.name === 'group')
+ expect(variant.selectors()).toEqual(['.tw-group &'])
+ expect(variant.selectors({})).toEqual(['.tw-group &'])
+ expect(variant.selectors({ value: 'hover' })).toEqual(['.tw-group:hover &'])
+ expect(variant.selectors({ value: '.foo_&' })).toEqual(['.foo .tw-group &'])
+ expect(variant.selectors({ modifier: 'foo', value: 'hover' })).toEqual([
+ '.tw-group\\/foo:hover &',
+ ])
+ expect(variant.selectors({ modifier: 'foo', value: '.foo_&' })).toEqual([
+ '.foo .tw-group\\/foo &',
+ ])
+})
+
+it('should provide selectors for variants with atrules', () => {
+ let config = {}
+ let context = createContext(resolveConfig(config))
+
+ let variants = context.getVariants()
+
+ let variant = variants.find((v) => v.name === 'supports')
+ expect(variant.selectors({ value: 'display:grid' })).toEqual(['@supports (display:grid)'])
+ expect(variant.selectors({ value: 'aspect-ratio' })).toEqual([
+ '@supports (aspect-ratio: var(--tw))',
+ ])
+})
+
+it('should provide selectors for custom plugins that do a combination of parallel variants with modifiers with arbitrary values and with atrules', () => {
+ let config = {
+ plugins: [
+ function ({ matchVariant }) {
+ matchVariant('foo', (value, { modifier }) => {
+ return [
+ `
@supports (foo: ${modifier}) {
- @media (width <= 400px) {
+ @media (max-width: 400px) {
&:hover
}
}
`,
- `.${modifier}\\/${value} &:focus`,
- ]
- })
- },
- ],
- }
- let context = createContext(resolveConfig(config))
+ `.${modifier}\\/${value} &:focus`,
+ ]
+ })
+ },
+ ],
+ }
+ let context = createContext(resolveConfig(config))
- let variants = context.getVariants()
+ let variants = context.getVariants()
- let variant = variants.find((v) => v.name === 'foo')
- expect(variant.selectors({ modifier: 'bar', value: 'baz' })).toEqual([
- '@supports (foo: bar) { @media (width <= 400px) { &:hover } }',
- '.bar\\/baz &:focus',
- ])
- })
-
- it('should work for plugins that still use the modifySelectors API', () => {
- let config = {
- plugins: [
- function ({ addVariant }) {
- addVariant('foo', ({ modifySelectors, container }) => {
- // Manually mutating the selector
- modifySelectors(({ selector }) => {
- return selectorParser((selectors) => {
- selectors.walkClasses((classNode) => {
- classNode.value = `foo:${classNode.value}`
- classNode.parent.insertBefore(classNode, selectorParser().astSync(`.foo `))
- })
- }).processSync(selector)
- })
-
- // Manually wrap in supports query
- let wrapper = postcss.atRule({ name: 'supports', params: 'display: grid' })
- let nodes = container.nodes
- container.removeAll()
- wrapper.append(nodes)
- container.append(wrapper)
- })
- },
- ],
- }
- let context = createContext(resolveConfig(config))
-
- let variants = context.getVariants()
-
- let variant = variants.find((v) => v.name === 'foo')
- expect(variant.selectors({})).toEqual(['@supports (display: grid) { .foo .foo\\:& }'])
- })
-
- it('should special case the `@`', () => {
- let config = {
- plugins: [
- ({ matchVariant }) => {
- matchVariant(
- '@',
- (value, { modifier }) => `@container ${modifier ?? ''} (min-width: ${value})`,
- {
- modifiers: 'any',
- values: {
- xs: '20rem',
- sm: '24rem',
- md: '28rem',
- lg: '32rem',
- xl: '36rem',
- '2xl': '42rem',
- '3xl': '48rem',
- '4xl': '56rem',
- '5xl': '64rem',
- '6xl': '72rem',
- '7xl': '80rem',
- },
- }
- )
- },
- ],
- }
- let context = createContext(resolveConfig(config))
-
- let variants = context.getVariants()
-
- let variant = variants.find((v) => v.name === '@')
- expect(variant).toEqual({
- name: '@',
- isArbitrary: true,
- hasDash: false,
- values: expect.any(Array),
- selectors: expect.any(Function),
- })
- expect(variant.selectors({ value: 'xs', modifier: 'foo' })).toEqual([
- '@container foo (min-width: 20rem)',
- ])
- })
+ let variant = variants.find((v) => v.name === 'foo')
+ expect(variant.selectors({ modifier: 'bar', value: 'baz' })).toEqual([
+ '@supports (foo: bar) { @media (max-width: 400px) { &:hover } }',
+ '.bar\\/baz &:focus',
+ ])
+})
+
+it('should work for plugins that still use the modifySelectors API', () => {
+ let config = {
+ plugins: [
+ function ({ addVariant }) {
+ addVariant('foo', ({ modifySelectors, container }) => {
+ // Manually mutating the selector
+ modifySelectors(({ selector }) => {
+ return selectorParser((selectors) => {
+ selectors.walkClasses((classNode) => {
+ classNode.value = `foo:${classNode.value}`
+ classNode.parent.insertBefore(classNode, selectorParser().astSync(`.foo `))
+ })
+ }).processSync(selector)
+ })
+
+ // Manually wrap in supports query
+ let wrapper = postcss.atRule({ name: 'supports', params: 'display: grid' })
+ let nodes = container.nodes
+ container.removeAll()
+ wrapper.append(nodes)
+ container.append(wrapper)
+ })
+ },
+ ],
+ }
+ let context = createContext(resolveConfig(config))
+
+ let variants = context.getVariants()
+
+ let variant = variants.find((v) => v.name === 'foo')
+ expect(variant.selectors({})).toEqual(['@supports (display: grid) { .foo .foo\\:& }'])
+})
+
+it('should special case the `@`', () => {
+ let config = {
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant(
+ '@',
+ (value, { modifier }) => `@container ${modifier ?? ''} (min-width: ${value})`,
+ {
+ modifiers: 'any',
+ values: {
+ xs: '20rem',
+ sm: '24rem',
+ md: '28rem',
+ lg: '32rem',
+ xl: '36rem',
+ '2xl': '42rem',
+ '3xl': '48rem',
+ '4xl': '56rem',
+ '5xl': '64rem',
+ '6xl': '72rem',
+ '7xl': '80rem',
+ },
+ }
+ )
+ },
+ ],
+ }
+ let context = createContext(resolveConfig(config))
+
+ let variants = context.getVariants()
+
+ let variant = variants.find((v) => v.name === '@')
+ expect(variant).toEqual({
+ name: '@',
+ isArbitrary: true,
+ hasDash: false,
+ values: expect.any(Array),
+ selectors: expect.any(Function),
+ })
+ expect(variant.selectors({ value: 'xs', modifier: 'foo' })).toEqual([
+ '@container foo (min-width: 20rem)',
+ ])
})
diff --git a/tests/import-processing-a.css b/tests/import-processing-a.css
new file mode 100644
index 000000000..65dd5f63a
--- /dev/null
+++ b/tests/import-processing-a.css
@@ -0,0 +1 @@
+@tailwind utilities;
diff --git a/tests/import-processing-b.css b/tests/import-processing-b.css
new file mode 100644
index 000000000..69d5390f1
--- /dev/null
+++ b/tests/import-processing-b.css
@@ -0,0 +1,5 @@
+@layer utilities {
+ .foo {
+ color: red;
+ }
+}
diff --git a/tests/import-processing-c.css b/tests/import-processing-c.css
new file mode 100644
index 000000000..508c10fe2
--- /dev/null
+++ b/tests/import-processing-c.css
@@ -0,0 +1,5 @@
+@tailwind utilities;
+
+.foo {
+ color: red;
+}
diff --git a/tests/import-processing-c.js b/tests/import-processing-c.js
new file mode 100644
index 000000000..164503d5e
--- /dev/null
+++ b/tests/import-processing-c.js
@@ -0,0 +1,9 @@
+module.exports = {
+ darkMode: 'class',
+ content: [
+ {
+ raw: `
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+}
diff --git a/tests/import-processing.test.js b/tests/import-processing.test.js
new file mode 100644
index 000000000..ef59be348
--- /dev/null
+++ b/tests/import-processing.test.js
@@ -0,0 +1,76 @@
+import { html, css, run } from './util/run'
+
+describe('import processing', () => {
+ it('should be possible to import another css file', async () => {
+ let config = {
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @import './import-processing-a.css';
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .underline {
+ text-decoration-line: underline;
+ }
+ `)
+ })
+
+ it('should be possible to import another css file after @tailwind directive', async () => {
+ let config = {
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ @import './import-processing-b.css';
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .underline {
+ text-decoration-line: underline;
+ }
+
+ .foo {
+ color: red;
+ }
+ `)
+ })
+
+ it('should be possible to add @config before @import statements', async () => {
+ let input = css`
+ @config "./import-processing-c.js";
+ @import './import-processing-c.css';
+ `
+
+ let result = await run(input)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .underline {
+ text-decoration-line: underline;
+ }
+
+ .foo {
+ color: red;
+ }
+ `)
+ })
+})
diff --git a/tests/import-syntax.test.js b/tests/import-syntax.test.js
index 992ef81d5..99f5163f7 100644
--- a/tests/import-syntax.test.js
+++ b/tests/import-syntax.test.js
@@ -1,129 +1,82 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(({ stable, oxide }) => {
- test('using @import instead of @tailwind', () => {
- let config = {
- content: [
- {
- raw: html`
- Hello world!
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- function ({ addBase }) {
- addBase({
- h1: {
- fontSize: '32px',
- },
- })
- },
- ],
- }
+test('using @import instead of @tailwind', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+ Hello world!
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ function ({ addBase }) {
+ addBase({
+ h1: {
+ fontSize: '32px',
+ },
+ })
+ },
+ ],
+ }
- let input = css`
- @import 'tailwindcss/base';
- @import 'tailwindcss/components';
- @import 'tailwindcss/utilities';
- `
+ let input = css`
+ @import 'tailwindcss/base';
+ @import 'tailwindcss/components';
+ @import 'tailwindcss/utilities';
+ `
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- h1 {
- font-size: 32px;
- }
- ${defaults}
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ h1 {
+ font-size: 32px;
+ }
+ ${defaults}
+ .container {
+ width: 100%;
+ }
+ @media (min-width: 640px) {
.container {
- width: 100%;
+ max-width: 640px;
}
- @media (min-width: 640px) {
- .container {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .container {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .container {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .container {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .container {
- max-width: 1536px;
- }
- }
- .mt-6 {
- margin-top: 1.5rem;
- }
- .bg-black {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- @media (min-width: 768px) {
- .md\:hover\:text-center:hover {
- text-align: center;
- }
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- h1 {
- font-size: 32px;
- }
- ${defaults}
+ }
+ @media (min-width: 768px) {
.container {
- width: 100%;
+ max-width: 768px;
}
- @media (min-width: 640px) {
- .container {
- max-width: 640px;
- }
+ }
+ @media (min-width: 1024px) {
+ .container {
+ max-width: 1024px;
}
- @media (min-width: 768px) {
- .container {
- max-width: 768px;
- }
+ }
+ @media (min-width: 1280px) {
+ .container {
+ max-width: 1280px;
}
- @media (min-width: 1024px) {
- .container {
- max-width: 1024px;
- }
+ }
+ @media (min-width: 1536px) {
+ .container {
+ max-width: 1536px;
}
- @media (min-width: 1280px) {
- .container {
- max-width: 1280px;
- }
+ }
+ .mt-6 {
+ margin-top: 1.5rem;
+ }
+ .bg-black {
+ --tw-bg-opacity: 1;
+ background-color: rgb(0 0 0 / var(--tw-bg-opacity));
+ }
+ @media (min-width: 768px) {
+ .md\:hover\:text-center:hover {
+ text-align: center;
}
- @media (min-width: 1536px) {
- .container {
- max-width: 1536px;
- }
- }
- .mt-6 {
- margin-top: 1.5rem;
- }
- .bg-black {
- background-color: #000;
- }
- @media (min-width: 768px) {
- .md\:hover\:text-center:hover {
- text-align: center;
- }
- }
- `)
- })
+ }
+ `)
})
})
diff --git a/tests/important-boolean.test.js b/tests/important-boolean.test.js
index 895ca053c..d66f21edc 100644
--- a/tests/important-boolean.test.js
+++ b/tests/important-boolean.test.js
@@ -2,230 +2,228 @@ import fs from 'fs'
import path from 'path'
import * as sharedState from '../src/lib/sharedState'
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(() => {
- test('important boolean', () => {
- let config = {
- important: true,
- darkMode: 'class',
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- function ({ addComponents, addUtilities }) {
- addComponents(
- {
- '.btn': {
- button: 'yes',
- },
+test('important boolean', () => {
+ let config = {
+ important: true,
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ function ({ addComponents, addUtilities }) {
+ addComponents(
+ {
+ '.btn': {
+ button: 'yes',
},
- { respectImportant: true }
- )
- addComponents(
- {
- '@font-face': {
- 'font-family': 'Inter',
- },
- '@page': {
- margin: '1cm',
- },
+ },
+ { respectImportant: true }
+ )
+ addComponents(
+ {
+ '@font-face': {
+ 'font-family': 'Inter',
},
- { respectImportant: true }
- )
- addUtilities(
- {
- '.custom-util': {
- button: 'no',
- },
+ '@page': {
+ margin: '1cm',
},
- { respectImportant: false }
- )
- },
- ],
+ },
+ { respectImportant: true }
+ )
+ addUtilities(
+ {
+ '.custom-util': {
+ button: 'no',
+ },
+ },
+ { respectImportant: false }
+ )
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @layer components {
+ .custom-component {
+ @apply font-bold;
+ }
+ .custom-important-component {
+ @apply text-center !important;
+ }
}
+ @tailwind utilities;
+ `
- let input = css`
- @tailwind base;
- @tailwind components;
- @layer components {
- .custom-component {
- @apply font-bold;
- }
- .custom-important-component {
- @apply text-center !important;
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .container {
+ width: 100%;
+ }
+ @media (min-width: 640px) {
+ .container {
+ max-width: 640px;
}
}
+ @media (min-width: 768px) {
+ .container {
+ max-width: 768px;
+ }
+ }
+ @media (min-width: 1024px) {
+ .container {
+ max-width: 1024px;
+ }
+ }
+ @media (min-width: 1280px) {
+ .container {
+ max-width: 1280px;
+ }
+ }
+ @media (min-width: 1536px) {
+ .container {
+ max-width: 1536px;
+ }
+ }
+ .btn {
+ button: yes !important;
+ }
+ @font-face {
+ font-family: Inter;
+ }
+ @page {
+ margin: 1cm;
+ }
+ .custom-component {
+ font-weight: 700;
+ }
+ .custom-important-component {
+ text-align: center !important;
+ }
+ @keyframes spin {
+ to {
+ transform: rotate(360deg);
+ }
+ }
+ .animate-spin {
+ animation: 1s linear infinite spin !important;
+ }
+ .font-bold {
+ font-weight: 700 !important;
+ }
+ .custom-util {
+ button: no;
+ }
+ .group:hover .group-hover\:focus-within\:text-left:focus-within {
+ text-align: left !important;
+ }
+ :is([dir='rtl'] .rtl\:active\:text-center:active) {
+ text-align: center !important;
+ }
+ @media (prefers-reduced-motion: no-preference) {
+ .motion-safe\:hover\:text-center:hover {
+ text-align: center !important;
+ }
+ }
+ :is(.dark .dark\:focus\:text-left:focus) {
+ text-align: left !important;
+ }
+ @media (min-width: 768px) {
+ .md\:hover\:text-right:hover {
+ text-align: right !important;
+ }
+ }
+ `)
+ })
+})
+
+// This is in a describe block so we can use `afterEach` :)
+describe('duplicate elision', () => {
+ let filePath = path.resolve(__dirname, './important-boolean-duplicates.test.html')
+
+ afterEach(async () => await fs.promises.unlink(filePath))
+
+ test('important rules are not duplicated when rebuilding', async () => {
+ let config = {
+ important: true,
+ content: [filePath],
+ }
+
+ await fs.promises.writeFile(
+ config.content[0],
+ html`
+
+
+ `
+ )
+
+ let input = css`
@tailwind utilities;
`
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .container {
- width: 100%;
- }
- @media (min-width: 640px) {
- .container {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .container {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .container {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .container {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .container {
- max-width: 1536px;
- }
- }
- .btn {
- button: yes !important;
- }
- @font-face {
- font-family: Inter;
- }
- @page {
- margin: 1cm;
- }
- .custom-component {
- font-weight: 700;
- }
- .custom-important-component {
- text-align: center !important;
- }
- @keyframes spin {
- to {
- transform: rotate(360deg);
- }
- }
- .animate-spin {
- animation: 1s linear infinite spin !important;
- }
- .font-bold {
- font-weight: 700 !important;
- }
- .custom-util {
- button: no;
- }
- .group:hover .group-hover\:focus-within\:text-left:focus-within {
- text-align: left !important;
- }
- :is([dir='rtl'] .rtl\:active\:text-center:active) {
- text-align: center !important;
- }
- @media (prefers-reduced-motion: no-preference) {
- .motion-safe\:hover\:text-center:hover {
- text-align: center !important;
- }
- }
- :is(.dark .dark\:focus\:text-left:focus) {
- text-align: left !important;
- }
- @media (min-width: 768px) {
- .md\:hover\:text-right:hover {
- text-align: right !important;
- }
- }
- `)
- })
- })
+ let result = await run(input, config)
+ let allContexts = Array.from(sharedState.contextMap.values())
- // This is in a describe block so we can use `afterEach` :)
- describe('duplicate elision', () => {
- let filePath = path.resolve(__dirname, './important-boolean-duplicates.test.html')
+ let context = allContexts[allContexts.length - 1]
- afterEach(async () => await fs.promises.unlink(filePath))
+ let ruleCacheSize1 = context.ruleCache.size
- test('important rules are not duplicated when rebuilding', async () => {
- let config = {
- important: true,
- content: [filePath],
+ expect(result.css).toMatchFormattedCss(css`
+ .ml-2 {
+ margin-left: 0.5rem !important;
}
+ .ml-4 {
+ margin-left: 1rem !important;
+ }
+ `)
- await fs.promises.writeFile(
- config.content[0],
- html`
-
-
- `
- )
-
- let input = css`
- @tailwind utilities;
+ await fs.promises.writeFile(
+ config.content[0],
+ html`
+
+
`
+ )
- let result = await run(input, config)
- let allContexts = Array.from(sharedState.contextMap.values())
+ result = await run(input, config)
- let context = allContexts[allContexts.length - 1]
+ let ruleCacheSize2 = context.ruleCache.size
- let ruleCacheSize1 = context.ruleCache.size
+ expect(result.css).toMatchFormattedCss(css`
+ .ml-2 {
+ margin-left: 0.5rem !important;
+ }
+ .ml-4 {
+ margin-left: 1rem !important;
+ }
+ .ml-6 {
+ margin-left: 1.5rem !important;
+ }
+ `)
- expect(result.css).toMatchFormattedCss(css`
- .ml-2 {
- margin-left: 0.5rem !important;
- }
- .ml-4 {
- margin-left: 1rem !important;
- }
- `)
-
- await fs.promises.writeFile(
- config.content[0],
- html`
-
-
- `
- )
-
- result = await run(input, config)
-
- let ruleCacheSize2 = context.ruleCache.size
-
- expect(result.css).toMatchFormattedCss(css`
- .ml-2 {
- margin-left: 0.5rem !important;
- }
- .ml-4 {
- margin-left: 1rem !important;
- }
- .ml-6 {
- margin-left: 1.5rem !important;
- }
- `)
-
- // The rule cache was effectively doubling in size previously
- // because the rule cache was never de-duped
- // This ensures this behavior doesn't return
- expect(ruleCacheSize2 - ruleCacheSize1).toBeLessThan(10)
- })
+ // The rule cache was effectively doubling in size previously
+ // because the rule cache was never de-duped
+ // This ensures this behavior doesn't return
+ expect(ruleCacheSize2 - ruleCacheSize1).toBeLessThan(10)
})
})
diff --git a/tests/important-modifier-prefix.test.js b/tests/important-modifier-prefix.test.js
index 782ec809e..2c6a8bb62 100644
--- a/tests/important-modifier-prefix.test.js
+++ b/tests/important-modifier-prefix.test.js
@@ -1,79 +1,77 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(() => {
- test('important modifier with prefix', () => {
- let config = {
- important: false,
- prefix: 'tw-',
- darkMode: 'class',
- content: [
- {
- raw: html`
-
-
-
-
-
-
`,
- },
- ],
- corePlugins: { preflight: false },
- }
+test('important modifier with prefix', () => {
+ let config = {
+ important: false,
+ prefix: 'tw-',
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .\!tw-container {
+ width: 100% !important;
+ }
+ @media (min-width: 640px) {
.\!tw-container {
- width: 100% !important;
+ max-width: 640px !important;
}
- @media (min-width: 640px) {
- .\!tw-container {
- max-width: 640px !important;
- }
+ }
+ @media (min-width: 768px) {
+ .\!tw-container {
+ max-width: 768px !important;
}
- @media (min-width: 768px) {
- .\!tw-container {
- max-width: 768px !important;
- }
+ }
+ @media (min-width: 1024px) {
+ .\!tw-container {
+ max-width: 1024px !important;
}
- @media (min-width: 1024px) {
- .\!tw-container {
- max-width: 1024px !important;
- }
+ }
+ @media (min-width: 1280px) {
+ .\!tw-container {
+ max-width: 1280px !important;
}
- @media (min-width: 1280px) {
- .\!tw-container {
- max-width: 1280px !important;
- }
+ }
+ @media (min-width: 1536px) {
+ .\!tw-container {
+ max-width: 1536px !important;
}
- @media (min-width: 1536px) {
- .\!tw-container {
- max-width: 1536px !important;
- }
+ }
+ .\!tw-font-bold {
+ font-weight: 700 !important;
+ }
+ .hover\:\!tw-text-center:hover {
+ text-align: center !important;
+ }
+ @media (min-width: 1024px) {
+ .lg\:\!tw-opacity-50 {
+ opacity: 0.5 !important;
}
- .\!tw-font-bold {
- font-weight: 700 !important;
+ }
+ @media (min-width: 1280px) {
+ .xl\:focus\:disabled\:\!tw-float-right:disabled:focus {
+ float: right !important;
}
- .hover\:\!tw-text-center:hover {
- text-align: center !important;
- }
- @media (min-width: 1024px) {
- .lg\:\!tw-opacity-50 {
- opacity: 0.5 !important;
- }
- }
- @media (min-width: 1280px) {
- .xl\:focus\:disabled\:\!tw-float-right:disabled:focus {
- float: right !important;
- }
- }
- `)
- })
+ }
+ `)
})
})
diff --git a/tests/important-modifier.test.js b/tests/important-modifier.test.js
index 6d30fd0bc..fe4e14b33 100644
--- a/tests/important-modifier.test.js
+++ b/tests/important-modifier.test.js
@@ -1,153 +1,149 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- test('important modifier', () => {
- let config = {
- important: false,
- darkMode: 'class',
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- function ({ theme, matchUtilities, addComponents }) {
- matchUtilities(
- {
- 'custom-parent': (value) => {
- return {
- '.custom-child': {
- margin: value,
- },
- }
- },
+test('important modifier', () => {
+ let config = {
+ important: false,
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ function ({ theme, matchUtilities, addComponents }) {
+ matchUtilities(
+ {
+ 'custom-parent': (value) => {
+ return {
+ '.custom-child': {
+ margin: value,
+ },
+ }
},
- { values: theme('spacing') }
- )
- addComponents({
- '.btn': {
- '&.disabled, &:disabled': {
- color: 'gray',
- },
+ },
+ { values: theme('spacing') }
+ )
+ addComponents({
+ '.btn': {
+ '&.disabled, &:disabled': {
+ color: 'gray',
},
- })
- },
- ],
- }
+ },
+ })
+ },
+ ],
+ }
- let input = css`
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .\!container {
+ width: 100% !important;
+ }
+ @media (min-width: 640px) {
.\!container {
- width: 100% !important;
+ max-width: 640px !important;
}
- @media (min-width: 640px) {
- .\!container {
- max-width: 640px !important;
- }
+ }
+ @media (min-width: 768px) {
+ .\!container {
+ max-width: 768px !important;
}
- @media (min-width: 768px) {
- .\!container {
- max-width: 768px !important;
- }
+ }
+ @media (min-width: 1024px) {
+ .\!container {
+ max-width: 1024px !important;
}
- @media (min-width: 1024px) {
- .\!container {
- max-width: 1024px !important;
- }
+ }
+ @media (min-width: 1280px) {
+ .\!container {
+ max-width: 1280px !important;
}
- @media (min-width: 1280px) {
- .\!container {
- max-width: 1280px !important;
- }
+ }
+ @media (min-width: 1536px) {
+ .\!container {
+ max-width: 1536px !important;
}
- @media (min-width: 1536px) {
- .\!container {
- max-width: 1536px !important;
- }
+ }
+ .btn.disabled,
+ .btn:disabled {
+ color: gray;
+ }
+ .btn.\!disabled {
+ color: gray !important;
+ }
+ .\!font-bold {
+ font-weight: 700 !important;
+ }
+ .\!custom-parent-5 .custom-child {
+ margin: 1.25rem !important;
+ }
+ .hover\:\!text-center:hover {
+ text-align: center !important;
+ }
+ @media (min-width: 1024px) {
+ .lg\:\!opacity-50 {
+ opacity: 0.5 !important;
}
- .btn.disabled,
- .btn:disabled {
- color: gray;
+ }
+ @media (min-width: 1280px) {
+ .xl\:focus\:disabled\:\!float-right:disabled:focus {
+ float: right !important;
}
- .btn.\!disabled {
- color: gray !important;
- }
- .\!font-bold {
- font-weight: 700 !important;
- }
- .\!custom-parent-5 .custom-child {
- margin: 1.25rem !important;
- }
- .hover\:\!text-center:hover {
- text-align: center !important;
- }
- @media (min-width: 1024px) {
- .lg\:\!opacity-50 {
- opacity: 0.5 !important;
- }
- }
- @media (min-width: 1280px) {
- .xl\:focus\:disabled\:\!float-right:disabled:focus {
- float: right !important;
- }
- }
- `)
- })
- })
-
- test('the important modifier works on utilities using :where()', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- function ({ addComponents }) {
- addComponents({
- ':where(.btn)': {
- backgroundColor: '#00f',
- },
- })
- },
- ],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- :where(.\!btn) {
- background-color: #00f !important;
- }
- :where(.btn) {
- background-color: #00f;
- }
- :where(.hover\:btn:hover) {
- background-color: #00f;
- }
- :where(.hover\:focus\:disabled\:\!btn:disabled:focus:hover) {
- background-color: #00f !important;
- }
- `)
- })
+ }
+ `)
+ })
+})
+
+test('the important modifier works on utilities using :where()', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ function ({ addComponents }) {
+ addComponents({
+ ':where(.btn)': {
+ backgroundColor: '#00f',
+ },
+ })
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ :where(.\!btn) {
+ background-color: #00f !important;
+ }
+ :where(.btn),
+ :where(.hover\:btn:hover) {
+ background-color: #00f;
+ }
+ :where(.hover\:focus\:disabled\:\!btn:disabled:focus:hover) {
+ background-color: #00f !important;
+ }
+ `)
})
})
diff --git a/tests/important-selector.test.js b/tests/important-selector.test.js
index 22edafb94..1ec20922c 100644
--- a/tests/important-selector.test.js
+++ b/tests/important-selector.test.js
@@ -1,205 +1,202 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(({ stable, oxide }) => {
- test('important selector', () => {
- let config = {
- important: '#app',
- darkMode: 'class',
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- function ({ addComponents, addUtilities }) {
- addComponents(
- {
- '.btn': {
- button: 'yes',
- },
+test('important selector', () => {
+ let config = {
+ important: '#app',
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ function ({ addComponents, addUtilities }) {
+ addComponents(
+ {
+ '.btn': {
+ button: 'yes',
},
- { respectImportant: true }
- )
- addComponents(
- {
- '@font-face': {
- 'font-family': 'Inter',
- },
- '@page': {
- margin: '1cm',
- },
+ },
+ { respectImportant: true }
+ )
+ addComponents(
+ {
+ '@font-face': {
+ 'font-family': 'Inter',
},
- { respectImportant: true }
- )
- addUtilities(
- {
- '.custom-util': {
- button: 'no',
- },
+ '@page': {
+ margin: '1cm',
},
- { respectImportant: false }
- )
- },
- ],
+ },
+ { respectImportant: true }
+ )
+ addUtilities(
+ {
+ '.custom-util': {
+ button: 'no',
+ },
+ },
+ { respectImportant: false }
+ )
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @layer components {
+ .custom-component {
+ @apply font-bold;
+ }
+ .custom-important-component {
+ @apply text-center !important;
+ }
}
+ @tailwind utilities;
+ `
- let input = css`
- @tailwind base;
- @tailwind components;
- @layer components {
- .custom-component {
- @apply font-bold;
- }
- .custom-important-component {
- @apply text-center !important;
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .container {
+ width: 100%;
+ }
+ @media (min-width: 640px) {
+ .container {
+ max-width: 640px;
}
}
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
+ @media (min-width: 768px) {
.container {
- width: 100%;
+ max-width: 768px;
}
- @media (min-width: 640px) {
- .container {
- max-width: 640px;
- }
+ }
+ @media (min-width: 1024px) {
+ .container {
+ max-width: 1024px;
}
- @media (min-width: 768px) {
- .container {
- max-width: 768px;
- }
+ }
+ @media (min-width: 1280px) {
+ .container {
+ max-width: 1280px;
}
- @media (min-width: 1024px) {
- .container {
- max-width: 1024px;
- }
+ }
+ @media (min-width: 1536px) {
+ .container {
+ max-width: 1536px;
}
- @media (min-width: 1280px) {
- .container {
- max-width: 1280px;
- }
+ }
+ #app .btn {
+ button: yes;
+ }
+ @font-face {
+ font-family: Inter;
+ }
+ @page {
+ margin: 1cm;
+ }
+ .custom-component {
+ font-weight: 700;
+ }
+ .custom-important-component {
+ text-align: center !important;
+ }
+ @keyframes spin {
+ to {
+ transform: rotate(360deg);
}
- @media (min-width: 1536px) {
- .container {
- max-width: 1536px;
- }
- }
- #app .btn {
- button: yes;
- }
- @font-face {
- font-family: Inter;
- }
- @page {
- margin: 1cm;
- }
- .custom-component {
- font-weight: 700;
- }
- .custom-important-component {
- text-align: center !important;
- }
- @keyframes spin {
- to {
- transform: rotate(360deg);
- }
- }
- #app :is(.animate-spin) {
- animation: 1s linear infinite spin;
- }
- #app :is(.font-bold) {
- font-weight: 700;
- }
- .custom-util {
- button: no;
- }
- #app :is(.group:hover .group-hover\:focus-within\:text-left:focus-within) {
- text-align: left;
- }
- #app :is(:is([dir='rtl'] .rtl\:active\:text-center:active)) {
+ }
+ #app .animate-spin {
+ animation: 1s linear infinite spin;
+ }
+ #app .font-bold {
+ font-weight: 700;
+ }
+ .custom-util {
+ button: no;
+ }
+ #app :is(.group:hover .group-hover\:focus-within\:text-left:focus-within) {
+ text-align: left;
+ }
+ #app :is([dir='rtl'] .rtl\:active\:text-center:active) {
+ text-align: center;
+ }
+ @media (prefers-reduced-motion: no-preference) {
+ #app .motion-safe\:hover\:text-center:hover {
text-align: center;
}
- @media (prefers-reduced-motion: no-preference) {
- #app :is(.motion-safe\:hover\:text-center:hover) {
- text-align: center;
- }
+ }
+ #app :is(.dark .dark\:before\:underline):before {
+ content: var(--tw-content);
+ text-decoration-line: underline;
+ }
+ #app :is(.dark .dark\:focus\:text-left:focus) {
+ text-align: left;
+ }
+ @media (min-width: 768px) {
+ #app .md\:hover\:text-right:hover {
+ text-align: right;
}
- #app :is(.dark .dark\:before\:underline):before {
- content: var(--tw-content);
- text-decoration-line: underline;
- }
- #app :is(:is(.dark .dark\:focus\:text-left:focus)) {
- text-align: left;
- }
- @media (min-width: 768px) {
- #app :is(.md\:hover\:text-right:hover) {
- text-align: right;
- }
- }
- #app
- :is(
- [dir='rtl'] :is(.dark .hover\:\[\&\:\:file-selector-button\]\:rtl\:dark\:bg-black\/100)
- )::file-selector-button:hover {
- background-color: #000;
- }
- `)
- })
- })
-
- test('pseudo-elements are appended after the `:is()`', () => {
- let config = {
- important: '#app',
- darkMode: 'class',
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- #app :is(.dark .dark\:before\:bg-black)::before {
- content: var(--tw-content);
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- #app :is(.dark .dark\:before\:bg-black)::before {
- content: var(--tw-content);
- background-color: #000;
- }
- `)
- })
+ }
+ #app
+ :-webkit-any(
+ [dir='rtl']
+ :-webkit-any(.dark .hover\:\[\&\:\:file-selector-button\]\:rtl\:dark\:bg-black\/100)
+ )::-webkit-file-upload-button:hover {
+ background-color: #000;
+ }
+ #app
+ :is(
+ [dir='rtl'] :is(.dark .hover\:\[\&\:\:file-selector-button\]\:rtl\:dark\:bg-black\/100)
+ )::file-selector-button:hover {
+ background-color: #000;
+ }
+ `)
+ })
+})
+
+test('pseudo-elements are appended after the `:-webkit-any()`', () => {
+ let config = {
+ important: '#app',
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ #app :is(.dark .dark\:before\:flex):before {
+ content: var(--tw-content);
+ display: flex;
+ }
+ `)
})
})
diff --git a/tests/kitchen-sink.test.js b/tests/kitchen-sink.test.js
index 3b02c8966..7f64c5c1d 100644
--- a/tests/kitchen-sink.test.js
+++ b/tests/kitchen-sink.test.js
@@ -1,1374 +1,817 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(({ stable, oxide }) => {
- test('it works', () => {
- let config = {
- darkMode: 'class',
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+test('it works', () => {
+ let config = {
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- `,
+ things: Array /* PropType */,
+ },
+ setup: () => {
+ const count = ref(0)
+ // Weird regex-looking stuff that once caused a stack overflow in candidatePermutations
+ const pattern = ' ]-[] '
+ return {
+ count,
+ stuff: [] /* string[] | undefined */,
+ }
+ },
+ })
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ extend: {
+ screens: {
+ range: { min: '1280px', max: '1535px' },
+ multi: [{ min: '640px', max: '767px' }, { max: '868px' }],
},
- ],
- corePlugins: { preflight: false },
- theme: {
- extend: {
- screens: {
- range: { min: '1280px', max: '1535px' },
- multi: [{ min: '640px', max: '767px' }, { max: '868px' }],
- },
- gradientColorStops: {
- foo: '#bada55',
- },
- backgroundImage: {
- 'hero--home-1': "url('/images/homepage-1.jpg')",
- },
+ gradientColorStops: {
+ foo: '#bada55',
+ },
+ backgroundImage: {
+ 'hero--home-1': "url('/images/homepage-1.jpg')",
},
},
- plugins: [
- function ({ addVariant }) {
- addVariant(
- 'foo',
- ({ container }) => {
- container.walkRules((rule) => {
- rule.selector = `.foo\\:${rule.selector.slice(1)}`
- rule.walkDecls((decl) => {
- decl.important = true
- })
+ },
+ plugins: [
+ function ({ addVariant }) {
+ addVariant(
+ 'foo',
+ ({ container }) => {
+ container.walkRules((rule) => {
+ rule.selector = `.foo\\:${rule.selector.slice(1)}`
+ rule.walkDecls((decl) => {
+ decl.important = true
})
+ })
+ },
+ { before: 'sm' }
+ )
+ },
+ function ({ addUtilities, addBase, theme }) {
+ addBase({
+ h1: {
+ fontSize: theme('fontSize.2xl'),
+ fontWeight: theme('fontWeight.bold'),
+ '&:first-child': {
+ marginTop: '0px',
},
- { before: 'sm' }
- )
- },
- function ({ addUtilities, addBase, theme }) {
- addBase({
- h1: {
- fontSize: theme('fontSize.2xl'),
- fontWeight: theme('fontWeight.bold'),
- '&:first-child': {
- marginTop: '0px',
- },
+ },
+ })
+ addUtilities(
+ {
+ '.magic-none': {
+ magic: 'none',
},
- })
- addUtilities(
- {
- '.magic-none': {
- magic: 'none',
- },
- '.magic-tons': {
- magic: 'tons',
- },
+ '.magic-tons': {
+ magic: 'tons',
},
- ['responsive', 'hover']
- )
- },
- ],
- }
+ },
+ ['responsive', 'hover']
+ )
+ },
+ ],
+ }
- let input = css`
- @layer utilities {
- .custom-util {
- background: #abcdef;
- }
- *,
- ::before,
- ::after,
- ::backdrop {
- margin: 10px;
- }
+ let input = css`
+ @layer utilities {
+ .custom-util {
+ background: #abcdef;
}
- @layer components {
- .test-apply-font-variant {
- @apply ordinal tabular-nums;
- }
- .custom-component {
- background: #123456;
- }
- *,
- ::before,
- ::after,
- ::backdrop {
- padding: 5px;
- }
- .foo .bg-black {
- appearance: none;
- }
+ *,
+ ::before,
+ ::after,
+ ::backdrop {
+ margin: 10px;
}
- @layer base {
- div {
- background: #654321;
- }
+ }
+ @layer components {
+ .test-apply-font-variant {
+ @apply ordinal tabular-nums;
}
+ .custom-component {
+ background: #123456;
+ }
+ *,
+ ::before,
+ ::after,
+ ::backdrop {
+ padding: 5px;
+ }
+ .foo .bg-black {
+ appearance: none;
+ }
+ }
+ @layer base {
+ div {
+ background: #654321;
+ }
+ }
+ .theme-test {
+ font-family: theme('fontFamily.sans');
+ color: theme('colors.blue.500');
+ }
+ @screen lg {
+ .screen-test {
+ color: purple;
+ }
+ }
+ .apply-1 {
+ @apply mt-6;
+ }
+ .apply-2 {
+ @apply mt-6;
+ }
+ .apply-test {
+ @apply mt-6 bg-pink-500 hover:font-bold focus:hover:font-bold sm:bg-green-500 sm:focus:even:bg-pink-200;
+ }
+ .apply-components {
+ @apply container mx-auto;
+ }
+ .drop-empty-rules {
+ @apply hover:font-bold;
+ }
+ .apply-group {
+ @apply group-hover:font-bold;
+ }
+ .apply-dark-mode {
+ @apply dark:font-bold;
+ }
+ .apply-with-existing:hover {
+ @apply font-normal sm:bg-green-500;
+ }
+ .multiple,
+ .selectors {
+ @apply font-bold group-hover:font-normal;
+ }
+ .list {
+ @apply space-y-4;
+ }
+ .nested {
+ .example {
+ @apply font-bold hover:font-normal;
+ }
+ }
+ .apply-order-a {
+ @apply m-5 mt-6;
+ }
+ .apply-order-b {
+ @apply m-5 mt-6;
+ }
+ .apply-dark-group-example-a {
+ @apply dark:group-hover:bg-green-500;
+ }
+ .crazy-example {
+ @apply sm:motion-safe:group-active:focus:opacity-10;
+ }
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
.theme-test {
- font-family: theme('fontFamily.sans');
- color: theme('colors.blue.500');
+ color: #3b82f6;
+ font-family: ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji,
+ Segoe UI Symbol, Noto Color Emoji;
}
- @screen lg {
+ @media (min-width: 1024px) {
.screen-test {
color: purple;
}
}
- .apply-1 {
- @apply mt-6;
- }
+ .apply-1,
.apply-2 {
- @apply mt-6;
+ margin-top: 1.5rem;
}
.apply-test {
- @apply mt-6 bg-pink-500 hover:font-bold focus:hover:font-bold sm:bg-green-500 sm:focus:even:bg-pink-200;
+ --tw-bg-opacity: 1;
+ background-color: rgb(236 72 153 / var(--tw-bg-opacity));
+ margin-top: 1.5rem;
+ }
+ .apply-test:hover,
+ .apply-test:hover:focus {
+ font-weight: 700;
+ }
+ @media (min-width: 640px) {
+ .apply-test {
+ --tw-bg-opacity: 1;
+ background-color: rgb(34 197 94 / var(--tw-bg-opacity));
+ }
+ .apply-test:nth-child(2n):focus {
+ --tw-bg-opacity: 1;
+ background-color: rgb(251 207 232 / var(--tw-bg-opacity));
+ }
}
.apply-components {
- @apply container mx-auto;
+ width: 100%;
}
- .drop-empty-rules {
- @apply hover:font-bold;
+ @media (min-width: 640px) {
+ .apply-components {
+ max-width: 640px;
+ }
}
- .apply-group {
- @apply group-hover:font-bold;
+ @media (min-width: 768px) {
+ .apply-components {
+ max-width: 768px;
+ }
}
- .apply-dark-mode {
- @apply dark:font-bold;
+ @media (min-width: 1024px) {
+ .apply-components {
+ max-width: 1024px;
+ }
+ }
+ @media (min-width: 1280px) {
+ .apply-components {
+ max-width: 1280px;
+ }
+ }
+ @media (min-width: 1536px) {
+ .apply-components {
+ max-width: 1536px;
+ }
+ }
+ .apply-components {
+ margin-left: auto;
+ margin-right: auto;
+ }
+ .drop-empty-rules:hover,
+ .group:hover .apply-group,
+ :is(.dark .apply-dark-mode) {
+ font-weight: 700;
}
.apply-with-existing:hover {
- @apply font-normal sm:bg-green-500;
+ font-weight: 400;
+ }
+ @media (min-width: 640px) {
+ .apply-with-existing:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(34 197 94 / var(--tw-bg-opacity));
+ }
}
.multiple,
.selectors {
- @apply font-bold group-hover:font-normal;
+ font-weight: 700;
}
- .list {
- @apply space-y-4;
+ .group:hover .multiple,
+ .group:hover .selectors {
+ font-weight: 400;
}
- .nested {
- .example {
- @apply font-bold hover:font-normal;
- }
+ .list > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1rem * var(--tw-space-y-reverse));
}
- .apply-order-a {
- @apply m-5 mt-6;
+ .nested .example {
+ font-weight: 700;
}
+ .nested .example:hover {
+ font-weight: 400;
+ }
+ .apply-order-a,
.apply-order-b {
- @apply m-5 mt-6;
+ margin: 1.5rem 1.25rem 1.25rem;
}
- .apply-dark-group-example-a {
- @apply dark:group-hover:bg-green-500;
+ :is(.dark .group:hover .apply-dark-group-example-a) {
+ --tw-bg-opacity: 1;
+ background-color: rgb(34 197 94 / var(--tw-bg-opacity));
}
- .crazy-example {
- @apply sm:motion-safe:group-active:focus:opacity-10;
+ @media (min-width: 640px) {
+ @media (prefers-reduced-motion: no-preference) {
+ .group:active .crazy-example:focus {
+ opacity: 0.1;
+ }
+ }
}
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .theme-test {
- color: #3b82f6;
- font-family: 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;
- }
- @media (min-width: 1024px) {
- .screen-test {
- color: purple;
- }
- }
- .apply-1,
- .apply-2 {
- margin-top: 1.5rem;
- }
- .apply-test {
- --tw-bg-opacity: 1;
- background-color: rgb(236 72 153 / var(--tw-bg-opacity));
- margin-top: 1.5rem;
- }
- .apply-test:hover,
- .apply-test:hover:focus {
- font-weight: 700;
- }
- @media (min-width: 640px) {
- .apply-test {
- --tw-bg-opacity: 1;
- background-color: rgb(34 197 94 / var(--tw-bg-opacity));
- }
- .apply-test:nth-child(2n):focus {
- --tw-bg-opacity: 1;
- background-color: rgb(251 207 232 / var(--tw-bg-opacity));
- }
- }
- .apply-components {
- width: 100%;
- }
- @media (min-width: 640px) {
- .apply-components {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .apply-components {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .apply-components {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .apply-components {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .apply-components {
- max-width: 1536px;
- }
- }
- .apply-components {
- margin-left: auto;
- margin-right: auto;
- }
- .drop-empty-rules:hover,
- .group:hover .apply-group,
- :is(.dark .apply-dark-mode) {
- font-weight: 700;
- }
- .apply-with-existing:hover {
- font-weight: 400;
- }
- @media (min-width: 640px) {
- .apply-with-existing:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(34 197 94 / var(--tw-bg-opacity));
- }
- }
- .multiple,
- .selectors {
- font-weight: 700;
- }
- .group:hover .multiple,
- .group:hover .selectors {
- font-weight: 400;
- }
- .list > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(1rem * var(--tw-space-y-reverse));
- }
- .nested .example {
- font-weight: 700;
- }
- .nested .example:hover {
- font-weight: 400;
- }
- .apply-order-a,
- .apply-order-b {
- margin: 1.5rem 1.25rem 1.25rem;
- }
- :is(.dark .group:hover .apply-dark-group-example-a) {
- --tw-bg-opacity: 1;
- background-color: rgb(34 197 94 / var(--tw-bg-opacity));
- }
- @media (min-width: 640px) {
- @media (prefers-reduced-motion: no-preference) {
- .group:active .crazy-example:focus {
- opacity: 0.1;
- }
- }
- }
- h1 {
- font-size: 1.5rem;
- font-weight: 700;
- }
- h1:first-child {
- margin-top: 0;
- }
- div {
- background: #654321;
- }
- ${defaults}
+ h1 {
+ font-size: 1.5rem;
+ font-weight: 700;
+ }
+ h1:first-child {
+ margin-top: 0;
+ }
+ div {
+ background: #654321;
+ }
+ ${defaults}
+ .container {
+ width: 100%;
+ }
+ @media (min-width: 640px) {
.container {
+ max-width: 640px;
+ }
+ }
+ @media (min-width: 768px) {
+ .container {
+ max-width: 768px;
+ }
+ }
+ @media (min-width: 1024px) {
+ .container {
+ max-width: 1024px;
+ }
+ }
+ @media (min-width: 1280px) {
+ .container {
+ max-width: 1280px;
+ }
+ }
+ @media (min-width: 1536px) {
+ .container {
+ max-width: 1536px;
+ }
+ }
+ .test-apply-font-variant {
+ --tw-ordinal: ordinal;
+ --tw-numeric-spacing: tabular-nums;
+ font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
+ var(--tw-numeric-spacing) var(--tw-numeric-fraction);
+ }
+ .custom-component {
+ background: #123456;
+ }
+ *,
+ :before,
+ :after {
+ padding: 5px;
+ }
+ ::backdrop {
+ padding: 5px;
+ }
+ .foo .bg-black {
+ -webkit-appearance: none;
+ appearance: none;
+ }
+ .inset-6 {
+ inset: 1.5rem;
+ }
+ .inset-x-1 {
+ left: 0.25rem;
+ right: 0.25rem;
+ }
+ .end-8 {
+ inset-inline-end: 2rem;
+ }
+ .start-4 {
+ inset-inline-start: 1rem;
+ }
+ .mx-1 {
+ margin-left: 0.25rem;
+ margin-right: 0.25rem;
+ }
+ .me-8 {
+ margin-inline-end: 2rem;
+ }
+ .ms-4 {
+ margin-inline-start: 1rem;
+ }
+ .mt-6 {
+ margin-top: 1.5rem;
+ }
+ .line-clamp-2 {
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ display: -webkit-box;
+ overflow: hidden;
+ }
+ .line-clamp-\[33\] {
+ -webkit-line-clamp: 33;
+ -webkit-box-orient: vertical;
+ display: -webkit-box;
+ overflow: hidden;
+ }
+ .line-clamp-\[var\(--line-clamp-variable\)\] {
+ -webkit-line-clamp: var(--line-clamp-variable);
+ -webkit-box-orient: vertical;
+ display: -webkit-box;
+ overflow: hidden;
+ }
+ .line-clamp-none {
+ -webkit-line-clamp: none;
+ -webkit-box-orient: horizontal;
+ display: block;
+ overflow: visible;
+ }
+ .scale-50 {
+ --tw-scale-x: 0.5;
+ --tw-scale-y: 0.5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .transform {
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .grid-cols-\[200px\,repeat\(auto-fill\,minmax\(15\%\,100px\)\)\,300px\] {
+ grid-template-columns: 200px repeat(auto-fill, minmax(15%, 100px)) 300px;
+ }
+ .rounded-e {
+ border-start-end-radius: 0.25rem;
+ border-end-end-radius: 0.25rem;
+ }
+ .rounded-s {
+ border-start-start-radius: 0.25rem;
+ border-end-start-radius: 0.25rem;
+ }
+ .rounded-es {
+ border-end-start-radius: 0.25rem;
+ }
+ .rounded-ss {
+ border-start-start-radius: 0.25rem;
+ }
+ .border-2 {
+ border-width: 2px;
+ }
+ .border-e-4 {
+ border-inline-end-width: 4px;
+ }
+ .border-s-0 {
+ border-inline-start-width: 0;
+ }
+ .border-black {
+ --tw-border-opacity: 1;
+ border-color: rgb(0 0 0 / var(--tw-border-opacity));
+ }
+ .border-e-red-400 {
+ --tw-border-opacity: 1;
+ border-inline-end-color: rgb(248 113 113 / var(--tw-border-opacity));
+ }
+ .border-s-green-500 {
+ --tw-border-opacity: 1;
+ border-inline-start-color: rgb(34 197 94 / var(--tw-border-opacity));
+ }
+ .bg-black {
+ --tw-bg-opacity: 1;
+ background-color: rgb(0 0 0 / var(--tw-bg-opacity));
+ }
+ .bg-green-500 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(34 197 94 / var(--tw-bg-opacity));
+ }
+ .bg-opacity-50 {
+ --tw-bg-opacity: 0.5;
+ }
+ .bg-gradient-to-r {
+ background-image: linear-gradient(to right, var(--tw-gradient-stops));
+ }
+ .bg-hero--home-1 {
+ background-image: url('/images/homepage-1.jpg');
+ }
+ .from-foo {
+ --tw-gradient-from: #bada55 var(--tw-gradient-from-position);
+ --tw-gradient-to: #bada5500 var(--tw-gradient-to-position);
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+ }
+ .px-1 {
+ padding-left: 0.25rem;
+ padding-right: 0.25rem;
+ }
+ .pe-8 {
+ padding-inline-end: 2rem;
+ }
+ .ps-4 {
+ padding-inline-start: 1rem;
+ }
+ .pt-6 {
+ padding-top: 1.5rem;
+ }
+ .text-center {
+ text-align: center;
+ }
+ .font-medium {
+ font-weight: 500;
+ }
+ .shadow-md {
+ --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
+ --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
+ 0 2px 4px -2px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
+ var(--tw-shadow);
+ }
+ .shadow-sm {
+ --tw-shadow: 0 1px 2px 0 #0000000d;
+ --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
+ var(--tw-shadow);
+ }
+ .magic-none {
+ magic: none;
+ }
+ .magic-tons {
+ magic: tons;
+ }
+ .custom-util {
+ background: #abcdef;
+ }
+ *,
+ :before,
+ :after {
+ margin: 10px;
+ }
+ ::backdrop {
+ margin: 10px;
+ }
+ .hover\:container:hover {
+ width: 100%;
+ }
+ @media (min-width: 640px) {
+ .hover\:container:hover {
+ max-width: 640px;
+ }
+ }
+ @media (min-width: 768px) {
+ .hover\:container:hover {
+ max-width: 768px;
+ }
+ }
+ @media (min-width: 1024px) {
+ .hover\:container:hover {
+ max-width: 1024px;
+ }
+ }
+ @media (min-width: 1280px) {
+ .hover\:container:hover {
+ max-width: 1280px;
+ }
+ }
+ @media (min-width: 1536px) {
+ .hover\:container:hover {
+ max-width: 1536px;
+ }
+ }
+ @media (min-width: 640px) {
+ .sm\:container {
width: 100%;
}
@media (min-width: 640px) {
- .container {
+ .sm\:container {
max-width: 640px;
}
}
@media (min-width: 768px) {
- .container {
+ .sm\:container {
max-width: 768px;
}
}
@media (min-width: 1024px) {
- .container {
+ .sm\:container {
max-width: 1024px;
}
}
@media (min-width: 1280px) {
- .container {
+ .sm\:container {
max-width: 1280px;
}
}
@media (min-width: 1536px) {
- .container {
+ .sm\:container {
max-width: 1536px;
}
}
- .test-apply-font-variant {
- --tw-ordinal: ordinal;
+ }
+ @media (min-width: 768px) {
+ .md\:container {
+ width: 100%;
+ }
+ @media (min-width: 640px) {
+ .md\:container {
+ max-width: 640px;
+ }
+ }
+ @media (min-width: 768px) {
+ .md\:container {
+ max-width: 768px;
+ }
+ }
+ @media (min-width: 1024px) {
+ .md\:container {
+ max-width: 1024px;
+ }
+ }
+ @media (min-width: 1280px) {
+ .md\:container {
+ max-width: 1280px;
+ }
+ }
+ @media (min-width: 1536px) {
+ .md\:container {
+ max-width: 1536px;
+ }
+ }
+ }
+ .first\:pt-0:first-child {
+ padding-top: 0;
+ }
+ .hover\:scale-75:hover {
+ --tw-scale-x: 0.75;
+ --tw-scale-y: 0.75;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .hover\:font-bold:hover {
+ font-weight: 700;
+ }
+ .hover\:shadow-lg:hover {
+ --tw-shadow: 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color),
+ 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
+ var(--tw-shadow);
+ }
+ .hover\:custom-util:hover {
+ background: #abcdef;
+ }
+ .focus\:font-normal:focus {
+ font-weight: 400;
+ }
+ .focus\:ring-2:focus {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
+ var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width))
+ var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+ }
+ .focus\:ring-blue-500:focus {
+ --tw-ring-opacity: 1;
+ --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
+ }
+ .focus\:hover\:font-light:hover:focus {
+ font-weight: 300;
+ }
+ .disabled\:font-bold:disabled {
+ font-weight: 700;
+ }
+ .group:hover .group-hover\:opacity-100 {
+ opacity: 1;
+ }
+ .group:hover .group-hover\:custom-util {
+ background: #abcdef;
+ }
+ .group:active .group-active\:opacity-10 {
+ opacity: 0.1;
+ }
+ .foo\:custom-util,
+ .foo\:hover\:custom-util:hover {
+ background: #abcdef !important;
+ }
+ @media (prefers-reduced-motion: no-preference) {
+ .motion-safe\:transition {
+ transition-property: color, background-color, border-color, text-decoration-color, fill,
+ stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter, backdrop-filter;
+ transition-duration: 0.15s;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ }
+ .motion-safe\:custom-util {
+ background: #abcdef;
+ }
+ }
+ @media (prefers-reduced-motion: reduce) {
+ .motion-reduce\:transition {
+ transition-property: color, background-color, border-color, text-decoration-color, fill,
+ stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter, backdrop-filter;
+ transition-duration: 0.15s;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ }
+ }
+ :is(.dark .dark\:custom-util) {
+ background: #abcdef;
+ }
+ @media (min-width: 640px) {
+ .sm\:text-center {
+ text-align: center;
+ }
+ .sm\:tabular-nums {
--tw-numeric-spacing: tabular-nums;
font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
var(--tw-numeric-spacing) var(--tw-numeric-fraction);
}
- .custom-component {
- background: #123456;
+ .sm\:custom-util {
+ background: #abcdef;
}
- *,
- :before,
- :after,
- ::backdrop {
- padding: 5px;
+ @media (prefers-reduced-motion: no-preference) {
+ .group:active .sm\:motion-safe\:group-active\:focus\:opacity-10:focus {
+ opacity: 0.1;
+ }
}
- .foo .bg-black {
- appearance: none;
- }
- .inset-6 {
- inset: 1.5rem;
- }
- .inset-x-1 {
- left: 0.25rem;
- right: 0.25rem;
- }
- .end-8 {
- inset-inline-end: 2rem;
- }
- .start-4 {
- inset-inline-start: 1rem;
- }
- .mx-1 {
- margin-left: 0.25rem;
- margin-right: 0.25rem;
- }
- .me-8 {
- margin-inline-end: 2rem;
- }
- .ms-4 {
- margin-inline-start: 1rem;
- }
- .mt-6 {
- margin-top: 1.5rem;
- }
- .line-clamp-2 {
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- display: -webkit-box;
- overflow: hidden;
- }
- .line-clamp-\[33\] {
- -webkit-line-clamp: 33;
- -webkit-box-orient: vertical;
- display: -webkit-box;
- overflow: hidden;
- }
- .line-clamp-\[var\(--line-clamp-variable\)\] {
- -webkit-line-clamp: var(--line-clamp-variable);
- -webkit-box-orient: vertical;
- display: -webkit-box;
- overflow: hidden;
- }
- .line-clamp-none {
- -webkit-line-clamp: none;
- -webkit-box-orient: horizontal;
- display: block;
- overflow: visible;
- }
- .scale-50 {
- --tw-scale-x: 0.5;
- --tw-scale-y: 0.5;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .transform {
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .grid-cols-\[200px\,repeat\(auto-fill\,minmax\(15\%\,100px\)\)\,300px\] {
- grid-template-columns: 200px repeat(auto-fill, minmax(15%, 100px)) 300px;
- }
- .rounded-e {
- border-start-end-radius: 0.25rem;
- border-end-end-radius: 0.25rem;
- }
- .rounded-s {
- border-start-start-radius: 0.25rem;
- border-end-start-radius: 0.25rem;
- }
- .rounded-es {
- border-end-start-radius: 0.25rem;
- }
- .rounded-ss {
- border-start-start-radius: 0.25rem;
- }
- .border-2 {
- border-width: 2px;
- }
- .border-e-4 {
- border-inline-end-width: 4px;
- }
- .border-s-0 {
- border-inline-start-width: 0;
- }
- .border-black {
- --tw-border-opacity: 1;
- border-color: rgb(0 0 0 / var(--tw-border-opacity));
- }
- .border-e-red-400 {
- --tw-border-opacity: 1;
- border-inline-end-color: rgb(248 113 113 / var(--tw-border-opacity));
- }
- .border-s-green-500 {
- --tw-border-opacity: 1;
- border-inline-start-color: rgb(34 197 94 / var(--tw-border-opacity));
- }
- .bg-black {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- .bg-green-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(34 197 94 / var(--tw-bg-opacity));
- }
- .bg-opacity-50 {
- --tw-bg-opacity: 0.5;
- }
- .bg-gradient-to-r {
- background-image: linear-gradient(to right, var(--tw-gradient-stops));
- }
- .bg-hero--home-1 {
- background-image: url('/images/homepage-1.jpg');
- }
- .from-foo {
- --tw-gradient-from: #bada55 var(--tw-gradient-from-position);
- --tw-gradient-to: #bada5500 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
- }
- .px-1 {
- padding-left: 0.25rem;
- padding-right: 0.25rem;
- }
- .pe-8 {
- padding-inline-end: 2rem;
- }
- .ps-4 {
- padding-inline-start: 1rem;
- }
- .pt-6 {
- padding-top: 1.5rem;
- }
- .text-center {
+ }
+ @media (min-width: 768px) {
+ .md\:text-center {
text-align: center;
}
- .font-medium {
- font-weight: 500;
+ .md\:opacity-50 {
+ opacity: 0.5;
}
- .shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- .shadow-sm {
+ .md\:shadow-sm {
--tw-shadow: 0 1px 2px 0 #0000000d;
--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
var(--tw-shadow);
}
- .magic-none {
- magic: none;
+ .md\:hover\:border-r-blue-500\/30:hover {
+ border-right-color: #3b82f64d;
}
- .magic-tons {
- magic: tons;
- }
- .custom-util {
- background: #abcdef;
- }
- *,
- :before,
- :after,
- ::backdrop {
- margin: 10px;
- }
- .hover\:container:hover {
- width: 100%;
- }
- @media (min-width: 640px) {
- .hover\:container:hover {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .hover\:container:hover {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .hover\:container:hover {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .hover\:container:hover {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .hover\:container:hover {
- max-width: 1536px;
- }
- }
- @media (min-width: 640px) {
- .sm\:container {
- width: 100%;
- }
- @media (min-width: 640px) {
- .sm\:container {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .sm\:container {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .sm\:container {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .sm\:container {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .sm\:container {
- max-width: 1536px;
- }
- }
- }
- @media (min-width: 768px) {
- .md\:container {
- width: 100%;
- }
- @media (min-width: 640px) {
- .md\:container {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .md\:container {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .md\:container {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .md\:container {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .md\:container {
- max-width: 1536px;
- }
- }
- }
- .first\:pt-0:first-child {
- padding-top: 0;
- }
- .hover\:scale-75:hover {
- --tw-scale-x: 0.75;
- --tw-scale-y: 0.75;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .hover\:font-bold:hover {
- font-weight: 700;
- }
- .hover\:shadow-lg:hover {
- --tw-shadow: 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;
- --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color),
- 0 4px 6px -4px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- .hover\:custom-util:hover {
- background: #abcdef;
- }
- .focus\:font-normal:focus {
- font-weight: 400;
- }
- .focus\:ring-2:focus {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
- var(--tw-shadow, 0 0 #0000);
- }
- .focus\:ring-blue-500:focus {
- --tw-ring-opacity: 1;
- --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));
- }
- .focus\:hover\:font-light:hover:focus {
- font-weight: 300;
- }
- .disabled\:font-bold:disabled {
- font-weight: 700;
- }
- .group:hover .group-hover\:opacity-100 {
- opacity: 1;
- }
- .group:hover .group-hover\:custom-util {
- background: #abcdef;
- }
- .group:active .group-active\:opacity-10 {
- opacity: 0.1;
- }
- .foo\:custom-util,
- .foo\:hover\:custom-util:hover {
- background: #abcdef !important;
+ .md\:hover\:opacity-20:hover {
+ opacity: 0.2;
}
@media (prefers-reduced-motion: no-preference) {
- .motion-safe\:transition {
+ .md\:motion-safe\:hover\:transition:hover {
transition-property: color, background-color, border-color, text-decoration-color, fill,
- stroke, opacity, box-shadow, transform, filter, backdrop-filter;
+ stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter,
+ backdrop-filter;
transition-duration: 0.15s;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
- .motion-safe\:custom-util {
- background: #abcdef;
+ :is(.dark .md\:dark\:motion-safe\:foo\:active\:custom-util:active) {
+ background: #abcdef !important;
}
}
- @media (prefers-reduced-motion: reduce) {
- .motion-reduce\:transition {
- transition-property: color, background-color, border-color, text-decoration-color, fill,
- stroke, opacity, box-shadow, transform, filter, backdrop-filter;
- transition-duration: 0.15s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- }
- }
- :is(.dark .dark\:custom-util) {
- background: #abcdef;
- }
@media (min-width: 640px) {
- .sm\:text-center {
+ .md\:sm\:text-center {
text-align: center;
}
- .sm\:tabular-nums {
- --tw-numeric-spacing: tabular-nums;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
- }
- .sm\:custom-util {
- background: #abcdef;
- }
- @media (prefers-reduced-motion: no-preference) {
- .group:active .sm\:motion-safe\:group-active\:focus\:opacity-10:focus {
- opacity: 0.1;
- }
- }
}
- @media (min-width: 768px) {
- .md\:text-center {
- text-align: center;
- }
- .md\:opacity-50 {
- opacity: 0.5;
- }
- .md\:shadow-sm {
- --tw-shadow: 0 1px 2px 0 #0000000d;
- --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- .md\:hover\:border-r-blue-500\/30:hover {
- border-right-color: #3b82f64d;
- }
- .md\:hover\:opacity-20:hover {
- opacity: 0.2;
- }
- @media (prefers-reduced-motion: no-preference) {
- .md\:motion-safe\:hover\:transition:hover {
- transition-property: color, background-color, border-color, text-decoration-color,
- fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
- transition-duration: 0.15s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- }
- :is(.dark .md\:dark\:motion-safe\:foo\:active\:custom-util:active) {
- background: #abcdef !important;
- }
- }
- @media (min-width: 640px) {
- .md\:sm\:text-center {
- text-align: center;
- }
- }
+ }
+ @media (min-width: 1280px) and (max-width: 1535px) {
+ .range\:text-right {
+ text-align: right;
}
- @media (min-width: 1280px) and (max-width: 1535px) {
- .range\:text-right {
- text-align: right;
- }
+ }
+ @media (min-width: 640px) and (max-width: 767px), (max-width: 868px) {
+ .multi\:text-left {
+ text-align: left;
}
- @media (min-width: 640px) and (max-width: 767px), (max-width: 868px) {
- .multi\:text-left {
- text-align: left;
- }
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .theme-test {
- color: #3b82f6;
- font-family: 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;
- }
- @media (min-width: 1024px) {
- .screen-test {
- color: purple;
- }
- }
- .apply-1,
- .apply-2 {
- margin-top: 1.5rem;
- }
- .apply-test {
- background-color: #ec4899;
- margin-top: 1.5rem;
- }
- .apply-test:hover,
- .apply-test:hover:focus {
- font-weight: 700;
- }
- @media (min-width: 640px) {
- .apply-test {
- background-color: #22c55e;
- }
- .apply-test:nth-child(2n):focus {
- background-color: #fbcfe8;
- }
- }
- .apply-components {
- width: 100%;
- }
- @media (min-width: 640px) {
- .apply-components {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .apply-components {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .apply-components {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .apply-components {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .apply-components {
- max-width: 1536px;
- }
- }
- .apply-components {
- margin-left: auto;
- margin-right: auto;
- }
- .drop-empty-rules:hover,
- .group:hover .apply-group,
- :is(.dark .apply-dark-mode) {
- font-weight: 700;
- }
- .apply-with-existing:hover {
- font-weight: 400;
- }
- @media (min-width: 640px) {
- .apply-with-existing:hover {
- background-color: #22c55e;
- }
- }
- .multiple,
- .selectors {
- font-weight: 700;
- }
- .group:hover .multiple,
- .group:hover .selectors {
- font-weight: 400;
- }
- .list > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(1rem * var(--tw-space-y-reverse));
- }
- .nested .example {
- font-weight: 700;
- }
- .nested .example:hover {
- font-weight: 400;
- }
- .apply-order-a,
- .apply-order-b {
- margin: 1.5rem 1.25rem 1.25rem;
- }
- :is(.dark .group:hover .apply-dark-group-example-a) {
- background-color: #22c55e;
- }
- @media (min-width: 640px) {
- @media (prefers-reduced-motion: no-preference) {
- .group:active .crazy-example:focus {
- opacity: 0.1;
- }
- }
- }
- h1 {
- font-size: 1.5rem;
- font-weight: 700;
- }
- h1:first-child {
- margin-top: 0;
- }
- div {
- background: #654321;
- }
- ${defaults}
- .container {
- width: 100%;
- }
- @media (min-width: 640px) {
- .container {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .container {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .container {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .container {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .container {
- max-width: 1536px;
- }
- }
- .test-apply-font-variant {
- --tw-ordinal: ordinal;
- --tw-numeric-spacing: tabular-nums;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
- }
- .custom-component {
- background: #123456;
- }
- *,
- :before,
- :after,
- ::backdrop {
- padding: 5px;
- }
- .foo .bg-black {
- appearance: none;
- }
- .inset-6 {
- inset: 1.5rem;
- }
- .inset-x-1 {
- left: 0.25rem;
- right: 0.25rem;
- }
- .end-8 {
- inset-inline-end: 2rem;
- }
- .start-4 {
- inset-inline-start: 1rem;
- }
- .mx-1 {
- margin-left: 0.25rem;
- margin-right: 0.25rem;
- }
- .me-8 {
- margin-inline-end: 2rem;
- }
- .ms-4 {
- margin-inline-start: 1rem;
- }
- .mt-6 {
- margin-top: 1.5rem;
- }
- .line-clamp-2 {
- -webkit-line-clamp: 2;
- -webkit-box-orient: vertical;
- display: -webkit-box;
- overflow: hidden;
- }
- .line-clamp-\[33\] {
- -webkit-line-clamp: 33;
- -webkit-box-orient: vertical;
- display: -webkit-box;
- overflow: hidden;
- }
- .line-clamp-\[var\(--line-clamp-variable\)\] {
- -webkit-line-clamp: var(--line-clamp-variable);
- -webkit-box-orient: vertical;
- display: -webkit-box;
- overflow: hidden;
- }
- .line-clamp-none {
- -webkit-line-clamp: none;
- -webkit-box-orient: horizontal;
- display: block;
- overflow: visible;
- }
- .scale-50 {
- --tw-scale-x: 0.5;
- --tw-scale-y: 0.5;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .transform {
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .grid-cols-\[200px\,repeat\(auto-fill\,minmax\(15\%\,100px\)\)\,300px\] {
- grid-template-columns: 200px repeat(auto-fill, minmax(15%, 100px)) 300px;
- }
- .rounded-e {
- border-start-end-radius: 0.25rem;
- border-end-end-radius: 0.25rem;
- }
- .rounded-s {
- border-start-start-radius: 0.25rem;
- border-end-start-radius: 0.25rem;
- }
- .rounded-es {
- border-end-start-radius: 0.25rem;
- }
- .rounded-ss {
- border-start-start-radius: 0.25rem;
- }
- .border-2 {
- border-width: 2px;
- }
- .border-e-4 {
- border-inline-end-width: 4px;
- }
- .border-s-0 {
- border-inline-start-width: 0;
- }
- .border-black {
- border-color: #000;
- }
- .border-e-red-400 {
- border-inline-end-color: #f87171;
- }
- .border-s-green-500 {
- border-inline-start-color: #22c55e;
- }
- .bg-black {
- background-color: #000;
- }
- .bg-green-500 {
- background-color: #22c55e;
- }
- .bg-gradient-to-r {
- background-image: linear-gradient(to right, var(--tw-gradient-stops));
- }
- .bg-hero--home-1 {
- background-image: url('/images/homepage-1.jpg');
- }
- .from-foo {
- --tw-gradient-from: #bada55 var(--tw-gradient-from-position);
- --tw-gradient-to: #bada5500 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
- }
- .px-1 {
- padding-left: 0.25rem;
- padding-right: 0.25rem;
- }
- .pe-8 {
- padding-inline-end: 2rem;
- }
- .ps-4 {
- padding-inline-start: 1rem;
- }
- .pt-6 {
- padding-top: 1.5rem;
- }
- .text-center {
- text-align: center;
- }
- .font-medium {
- font-weight: 500;
- }
- .shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- .shadow-sm {
- --tw-shadow: 0 1px 2px 0 #0000000d;
- --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- .magic-none {
- magic: none;
- }
- .magic-tons {
- magic: tons;
- }
- .custom-util {
- background: #abcdef;
- }
- *,
- :before,
- :after,
- ::backdrop {
- margin: 10px;
- }
- .hover\:container:hover {
- width: 100%;
- }
- @media (min-width: 640px) {
- .hover\:container:hover {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .hover\:container:hover {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .hover\:container:hover {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .hover\:container:hover {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .hover\:container:hover {
- max-width: 1536px;
- }
- }
- @media (min-width: 640px) {
- .sm\:container {
- width: 100%;
- }
- @media (min-width: 640px) {
- .sm\:container {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .sm\:container {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .sm\:container {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .sm\:container {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .sm\:container {
- max-width: 1536px;
- }
- }
- }
- @media (min-width: 768px) {
- .md\:container {
- width: 100%;
- }
- @media (min-width: 640px) {
- .md\:container {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .md\:container {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .md\:container {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .md\:container {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .md\:container {
- max-width: 1536px;
- }
- }
- }
- .first\:pt-0:first-child {
- padding-top: 0;
- }
- .hover\:scale-75:hover {
- --tw-scale-x: 0.75;
- --tw-scale-y: 0.75;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .hover\:font-bold:hover {
- font-weight: 700;
- }
- .hover\:shadow-lg:hover {
- --tw-shadow: 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;
- --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color),
- 0 4px 6px -4px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- .hover\:custom-util:hover {
- background: #abcdef;
- }
- .focus\:font-normal:focus {
- font-weight: 400;
- }
- .focus\:ring-2:focus {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
- var(--tw-shadow, 0 0 #0000);
- }
- .focus\:ring-blue-500:focus {
- --tw-ring-color: #3b82f6;
- }
- .focus\:hover\:font-light:hover:focus {
- font-weight: 300;
- }
- .disabled\:font-bold:disabled {
- font-weight: 700;
- }
- .group:hover .group-hover\:opacity-100 {
- opacity: 1;
- }
- .group:hover .group-hover\:custom-util {
- background: #abcdef;
- }
- .group:active .group-active\:opacity-10 {
- opacity: 0.1;
- }
- .foo\:custom-util,
- .foo\:hover\:custom-util:hover {
- background: #abcdef !important;
- }
- @media (prefers-reduced-motion: no-preference) {
- .motion-safe\:transition {
- transition-property: color, background-color, border-color, text-decoration-color, fill,
- stroke, opacity, box-shadow, transform, filter, backdrop-filter;
- transition-duration: 0.15s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- }
- .motion-safe\:custom-util {
- background: #abcdef;
- }
- }
- @media (prefers-reduced-motion: reduce) {
- .motion-reduce\:transition {
- transition-property: color, background-color, border-color, text-decoration-color, fill,
- stroke, opacity, box-shadow, transform, filter, backdrop-filter;
- transition-duration: 0.15s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- }
- }
- :is(.dark .dark\:custom-util) {
- background: #abcdef;
- }
- @media (min-width: 640px) {
- .sm\:text-center {
- text-align: center;
- }
- .sm\:tabular-nums {
- --tw-numeric-spacing: tabular-nums;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
- }
- .sm\:custom-util {
- background: #abcdef;
- }
- @media (prefers-reduced-motion: no-preference) {
- .group:active .sm\:motion-safe\:group-active\:focus\:opacity-10:focus {
- opacity: 0.1;
- }
- }
- }
- @media (min-width: 768px) {
- .md\:text-center {
- text-align: center;
- }
- .md\:opacity-50 {
- opacity: 0.5;
- }
- .md\:shadow-sm {
- --tw-shadow: 0 1px 2px 0 #0000000d;
- --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- .md\:hover\:border-r-blue-500\/30:hover {
- border-right-color: #3b82f64d;
- }
- .md\:hover\:opacity-20:hover {
- opacity: 0.2;
- }
- @media (prefers-reduced-motion: no-preference) {
- .md\:motion-safe\:hover\:transition:hover {
- transition-property: color, background-color, border-color, text-decoration-color,
- fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
- transition-duration: 0.15s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
- }
- :is(.dark .md\:dark\:motion-safe\:foo\:active\:custom-util:active) {
- background: #abcdef !important;
- }
- }
- @media (min-width: 640px) {
- .md\:sm\:text-center {
- text-align: center;
- }
- }
- }
- @media (min-width: 1280px) and (max-width: 1535px) {
- .range\:text-right {
- text-align: right;
- }
- }
- @media (min-width: 640px) and (max-width: 767px), (max-width: 868px) {
- .multi\:text-left {
- text-align: left;
- }
- }
- `)
- })
+ }
+ `)
})
})
diff --git a/tests/layer-at-rules.test.js b/tests/layer-at-rules.test.js
index db98bbeb5..ac1b11bd5 100644
--- a/tests/layer-at-rules.test.js
+++ b/tests/layer-at-rules.test.js
@@ -1,321 +1,319 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(() => {
- test('custom user-land utilities', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- theme: {},
- plugins: [],
+test('custom user-land utilities', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {},
+ plugins: [],
+ }
+
+ let input = css`
+ @layer utilities {
+ .align-banana {
+ text-align: banana;
+ }
}
- let input = css`
- @layer utilities {
- .align-banana {
- text-align: banana;
- }
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer utilities {
+ .align-chocolate {
+ text-align: chocolate;
}
+ }
+ `
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
-
- @layer utilities {
- .align-chocolate {
- text-align: chocolate;
- }
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .uppercase {
+ text-transform: uppercase;
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .uppercase {
- text-transform: uppercase;
- }
- .align-banana,
- .hover\:align-banana:hover {
- text-align: banana;
- }
- .focus\:hover\:align-chocolate:hover:focus {
- text-align: chocolate;
- }
- `)
- })
+ .align-banana,
+ .hover\:align-banana:hover {
+ text-align: banana;
+ }
+ .focus\:hover\:align-chocolate:hover:focus {
+ text-align: chocolate;
+ }
+ `)
})
+})
- test('comments can be used inside layers without crashing', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- theme: {},
- plugins: [],
+test('comments can be used inside layers without crashing', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {},
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer base {
+ /* Important base */
+ div {
+ background-color: #bada55;
+ }
}
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
-
- @layer base {
- /* Important base */
- div {
- background-color: #bada55;
- }
+ @layer utilities {
+ /* Important utility */
+ .important-utility {
+ text-align: banana;
}
+ }
- @layer utilities {
- /* Important utility */
+ @layer components {
+ /* Important component */
+ .important-component {
+ text-align: banana;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ div {
+ background-color: #bada55;
+ }
+ ${defaults}
+ .important-component,
.important-utility {
- text-align: banana;
- }
+ text-align: banana;
}
-
- @layer components {
- /* Important component */
- .important-component {
- text-align: banana;
- }
- }
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- div {
- background-color: #bada55;
- }
- ${defaults}
- .important-component,
- .important-utility {
- text-align: banana;
- }
- `)
- })
+ `)
})
+})
- test('comments can be used inside layers (with important) without crashing', () => {
- let config = {
- important: true,
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- theme: {},
- plugins: [],
+test('comments can be used inside layers (with important) without crashing', () => {
+ let config = {
+ important: true,
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {},
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer base {
+ /* Important base */
+ div {
+ background-color: #bada55;
+ }
}
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
-
- @layer base {
- /* Important base */
- div {
- background-color: #bada55;
- }
+ @layer utilities {
+ /* Important utility */
+ .important-utility {
+ text-align: banana;
}
+ }
- @layer utilities {
- /* Important utility */
- .important-utility {
- text-align: banana;
- }
+ @layer components {
+ /* Important component */
+ .important-component {
+ text-align: banana;
}
+ }
+ `
- @layer components {
- /* Important component */
- .important-component {
- text-align: banana;
- }
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ div {
+ background-color: #bada55;
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- div {
- background-color: #bada55;
- }
- ${defaults}
- .important-component {
- text-align: banana;
- }
- .important-utility {
- text-align: banana !important;
- }
- `)
- })
+ ${defaults}
+ .important-component {
+ text-align: banana;
+ }
+ .important-utility {
+ text-align: banana !important;
+ }
+ `)
})
+})
- test('layers are grouped and inserted at the matching @tailwind rule', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addBase, addComponents, addUtilities }) {
- addBase({ body: { margin: 0 } })
+test('layers are grouped and inserted at the matching @tailwind rule', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addBase, addComponents, addUtilities }) {
+ addBase({ body: { margin: 0 } })
- addComponents({
- '.input': { background: 'white' },
- })
+ addComponents({
+ '.input': { background: 'white' },
+ })
- addUtilities({
- '.float-squirrel': { float: 'squirrel' },
- })
- },
- ],
- corePlugins: { preflight: false },
+ addUtilities({
+ '.float-squirrel': { float: 'squirrel' },
+ })
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @layer vanilla {
+ strong {
+ font-weight: medium;
+ }
}
- let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer components {
+ .btn {
+ background: blue;
+ }
+ }
+
+ @layer utilities {
+ .align-banana {
+ text-align: banana;
+ }
+ }
+
+ @layer base {
+ h1 {
+ font-weight: bold;
+ }
+ }
+
+ @layer components {
+ .card {
+ border-radius: 12px;
+ }
+ }
+
+ @layer base {
+ p {
+ font-weight: normal;
+ }
+ }
+
+ @layer utilities {
+ .align-sandwich {
+ text-align: sandwich;
+ }
+ }
+
+ @layer chocolate {
+ a {
+ text-decoration: underline;
+ }
+ }
+ `
+
+ expect.assertions(2)
+
+ return run(input, config).then((result) => {
+ expect(result.warnings().length).toBe(0)
+ expect(result.css).toMatchFormattedCss(css`
@layer vanilla {
strong {
font-weight: medium;
}
}
-
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .btn {
- background: blue;
- }
+ body {
+ margin: 0;
}
-
- @layer utilities {
- .align-banana {
- text-align: banana;
- }
+ h1 {
+ font-weight: bold;
}
-
- @layer base {
- h1 {
- font-weight: bold;
- }
+ p {
+ font-weight: normal;
}
-
- @layer components {
- .card {
- border-radius: 12px;
- }
+ ${defaults}
+ .input {
+ background: #fff;
}
-
- @layer base {
- p {
- font-weight: normal;
- }
+ .btn {
+ background: #00f;
}
-
- @layer utilities {
- .align-sandwich {
- text-align: sandwich;
- }
+ .card {
+ border-radius: 12px;
+ }
+ .float-squirrel {
+ float: squirrel;
+ }
+ .align-banana {
+ text-align: banana;
+ }
+ .align-sandwich {
+ text-align: sandwich;
}
-
@layer chocolate {
a {
text-decoration: underline;
}
}
- `
-
- expect.assertions(2)
-
- return run(input, config).then((result) => {
- expect(result.warnings().length).toBe(0)
- expect(result.css).toMatchFormattedCss(css`
- @layer vanilla {
- strong {
- font-weight: medium;
- }
- }
- body {
- margin: 0;
- }
- h1 {
- font-weight: bold;
- }
- p {
- font-weight: normal;
- }
- ${defaults}
- .input {
- background: #fff;
- }
- .btn {
- background: #00f;
- }
- .card {
- border-radius: 12px;
- }
- .float-squirrel {
- float: squirrel;
- }
- .align-banana {
- text-align: banana;
- }
- .align-sandwich {
- text-align: sandwich;
- }
- @layer chocolate {
- a {
- text-decoration: underline;
- }
- }
- `)
- })
- })
-
- it('should keep `@supports` rules inside `@layer`s', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
-
- @layer utilities {
- .test {
- --tw-test: 1;
- }
-
- @supports (backdrop-filter: blur(1px)) {
- .test {
- --tw-test: 0.9;
- }
- }
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .test {
- --tw-test: 1;
- }
- @supports (backdrop-filter: blur(1px)) {
- .test {
- --tw-test: 0.9;
- }
- }
- `)
- })
+ `)
+ })
+})
+
+it('should keep `@supports` rules inside `@layer`s', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ @layer utilities {
+ .test {
+ --tw-test: 1;
+ }
+
+ @supports (backdrop-filter: blur(1px)) {
+ .test {
+ --tw-test: 0.9;
+ }
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .test {
+ --tw-test: 1;
+ }
+ @supports ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
+ .test {
+ --tw-test: 0.9;
+ }
+ }
+ `)
})
})
diff --git a/tests/layer-without-tailwind.test.js b/tests/layer-without-tailwind.test.js
index f15d43351..4122873c9 100644
--- a/tests/layer-without-tailwind.test.js
+++ b/tests/layer-without-tailwind.test.js
@@ -1,81 +1,79 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- test('using @layer without @tailwind', async () => {
- let config = {
- content: [{ raw: html`
` }],
- }
+test('using @layer without @tailwind', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
- let input = css`
- @layer components {
- .foo {
- color: black;
- }
+ let input = css`
+ @layer components {
+ .foo {
+ color: black;
}
- `
-
- await expect(run(input, config)).rejects.toThrowError(
- '`@layer components` is used but no matching `@tailwind components` directive is present.'
- )
- })
-
- test('using @responsive without @tailwind', async () => {
- let config = {
- content: [{ raw: html`
` }],
}
+ `
- let input = css`
- @responsive {
- .foo {
- color: black;
- }
+ await expect(run(input, config)).rejects.toThrowError(
+ '`@layer components` is used but no matching `@tailwind components` directive is present.'
+ )
+})
+
+test('using @responsive without @tailwind', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ let input = css`
+ @responsive {
+ .foo {
+ color: black;
}
- `
-
- await expect(run(input, config)).rejects.toThrowError(
- '`@responsive` is used but `@tailwind utilities` is missing.'
- )
- })
-
- test('using @variants without @tailwind', async () => {
- let config = {
- content: [{ raw: html`
` }],
}
+ `
- let input = css`
- @variants hover {
- .foo {
- color: black;
- }
+ await expect(run(input, config)).rejects.toThrowError(
+ '`@responsive` is used but `@tailwind utilities` is missing.'
+ )
+})
+
+test('using @variants without @tailwind', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ let input = css`
+ @variants hover {
+ .foo {
+ color: black;
}
- `
-
- await expect(run(input, config)).rejects.toThrowError(
- '`@variants` is used but `@tailwind utilities` is missing.'
- )
- })
-
- test('non-Tailwind @layer rules are okay', async () => {
- let config = {
- content: [{ raw: html`
` }],
}
+ `
- let input = css`
+ await expect(run(input, config)).rejects.toThrowError(
+ '`@variants` is used but `@tailwind utilities` is missing.'
+ )
+})
+
+test('non-Tailwind @layer rules are okay', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ let input = css`
+ @layer custom {
+ .foo {
+ color: black;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
@layer custom {
.foo {
- color: black;
+ color: #000;
}
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @layer custom {
- .foo {
- color: #000;
- }
- }
- `)
- })
+ `)
})
})
diff --git a/tests/match-components.test.js b/tests/match-components.test.js
index a8b546127..8f6241724 100644
--- a/tests/match-components.test.js
+++ b/tests/match-components.test.js
@@ -1,86 +1,82 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(() => {
- it('should be possible to matchComponents', () => {
- let config = {
- content: [
- {
- raw: html``,
- },
- ],
- corePlugins: {
- preflight: false,
+it('should be possible to matchComponents', () => {
+ let config = {
+ content: [
+ {
+ raw: html``,
},
- plugins: [
- function ({ matchComponents }) {
- matchComponents({
- card: (value) => {
- return [
- { color: value },
- {
- '.card-header': {
- borderTopWidth: 3,
- borderTopColor: value,
- },
+ ],
+ corePlugins: {
+ preflight: false,
+ },
+ plugins: [
+ function ({ matchComponents }) {
+ matchComponents({
+ card: (value) => {
+ return [
+ { color: value },
+ {
+ '.card-header': {
+ borderTopWidth: 3,
+ borderTopColor: value,
},
- {
- '.card-footer': {
- borderBottomWidth: 3,
- borderBottomColor: value,
- },
+ },
+ {
+ '.card-footer': {
+ borderBottomWidth: 3,
+ borderBottomColor: value,
},
- ]
- },
- })
- },
- ],
- }
+ },
+ ]
+ },
+ })
+ },
+ ],
+ }
- return run('@tailwind base; @tailwind components; @tailwind utilities', config).then(
- (result) => {
- return expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .card-\[\#0088cc\] {
- color: #08c;
- }
- .card-\[\#0088cc\] .card-header {
- border-top-width: 3px;
- border-top-color: #08c;
- }
- .card-\[\#0088cc\] .card-footer {
- border-bottom-width: 3px;
- border-bottom-color: #08c;
- }
- .text-center {
- text-align: center;
- }
- .font-bold {
- font-weight: 700;
- }
- .shadow {
- --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
- 0 1px 2px -1px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- .hover\:card-\[\#f0f\]:hover {
- color: #f0f;
- }
- .hover\:card-\[\#f0f\]:hover .card-header {
- border-top-width: 3px;
- border-top-color: #f0f;
- }
- .hover\:card-\[\#f0f\]:hover .card-footer {
- border-bottom-width: 3px;
- border-bottom-color: #f0f;
- }
- `)
+ return run('@tailwind base; @tailwind components; @tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .card-\[\#0088cc\] {
+ color: #08c;
}
- )
+ .card-\[\#0088cc\] .card-header {
+ border-top-width: 3px;
+ border-top-color: #08c;
+ }
+ .card-\[\#0088cc\] .card-footer {
+ border-bottom-width: 3px;
+ border-bottom-color: #08c;
+ }
+ .text-center {
+ text-align: center;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .shadow {
+ --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
+ --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
+ 0 1px 2px -1px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
+ var(--tw-shadow);
+ }
+ .hover\:card-\[\#f0f\]:hover {
+ color: #f0f;
+ }
+ .hover\:card-\[\#f0f\]:hover .card-header {
+ border-top-width: 3px;
+ border-top-color: #f0f;
+ }
+ .hover\:card-\[\#f0f\]:hover .card-footer {
+ border-bottom-width: 3px;
+ border-bottom-color: #f0f;
+ }
+ `)
})
})
diff --git a/tests/match-utilities.test.js b/tests/match-utilities.test.js
index 9b3cd4c56..a9705b021 100644
--- a/tests/match-utilities.test.js
+++ b/tests/match-utilities.test.js
@@ -1,575 +1,573 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- test('match utilities with modifiers', async () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
+test('match utilities with modifiers', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
- plugins: [
- ({ matchUtilities }) => {
- matchUtilities(
- {
- test: (value, { modifier }) => ({
- color: `${value}_${modifier}`,
- }),
+ plugins: [
+ ({ matchUtilities }) => {
+ matchUtilities(
+ {
+ test: (value, { modifier }) => ({
+ color: `${value}_${modifier}`,
+ }),
+ },
+ {
+ values: {
+ DEFAULT: 'default',
+ bar: 'bar',
+ '1': 'one',
+ '2': 'two',
+ '1/foo': 'onefoo',
+ '[8]/[9]': 'eightnine',
},
- {
- values: {
- DEFAULT: 'default',
- bar: 'bar',
- '1': 'one',
- '2': 'two',
- '1/foo': 'onefoo',
- '[8]/[9]': 'eightnine',
- },
- modifiers: 'any',
- }
- )
- },
- ],
+ modifiers: 'any',
+ }
+ )
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .test {
+ color: default_null;
}
+ .test-1\/\[foo\] {
+ color: one_[foo];
+ }
+ .test-1\/foo {
+ color: onefoo_null;
+ }
+ .test-2\/foo {
+ color: two_foo;
+ }
+ .test-\[8\]\/\[9\] {
+ color: eightnine_null;
+ }
+ .test\/\[foo\] {
+ color: default_[foo];
+ }
+ .test\/foo {
+ color: default_foo;
+ }
+ `)
+})
- let input = css`
- @tailwind utilities;
- `
+test('match utilities with modifiers in the config', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
- let result = await run(input, config)
+ plugins: [
+ ({ matchUtilities }) => {
+ matchUtilities(
+ {
+ test: (value, { modifier }) => ({
+ color: `${value}_${modifier}`,
+ }),
+ },
+ {
+ values: {
+ DEFAULT: 'default',
+ bar: 'bar',
+ '1': 'one',
+ },
+ modifiers: {
+ foo: 'mewtwo',
+ },
+ }
+ )
+ },
+ ],
+ }
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .test {
+ color: default_null;
+ }
+ .test-1\/\[bar\] {
+ color: one_bar;
+ }
+ .test-1\/foo {
+ color: one_mewtwo;
+ }
+ .test\/\[bar\] {
+ color: default_bar;
+ }
+ .test\/foo {
+ color: default_mewtwo;
+ }
+ `)
+})
+
+test('match utilities can omit utilities by returning null', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+
+ plugins: [
+ ({ matchUtilities }) => {
+ matchUtilities(
+ {
+ test: (value, { modifier }) =>
+ modifier === 'bad'
+ ? null
+ : {
+ color: `${value}_${modifier}`,
+ },
+ },
+ {
+ values: {
+ DEFAULT: 'default',
+ bar: 'bar',
+ '1': 'one',
+ },
+ modifiers: 'any',
+ }
+ )
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .test {
+ color: default_null;
+ }
+ .test\/good {
+ color: default_good;
+ }
+ `)
+})
+
+test('matching utilities with a basic configured value', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {},
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities(
+ {
+ test: (value) => ({ value }),
+ },
+ {
+ values: {
+ foo: 'value_foo',
+ },
+ }
+ )
+ },
+ ],
+ corePlugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
expect(result.css).toMatchFormattedCss(css`
- .test {
- color: default_null;
- }
- .test-1\/\[foo\] {
- color: one_[foo];
- }
- .test-1\/foo {
- color: onefoo_null;
- }
- .test-2\/foo {
- color: two_foo;
- }
- .test-\[8\]\/\[9\] {
- color: eightnine_null;
- }
- .test\/\[foo\] {
- color: default_[foo];
- }
- .test\/foo {
- color: default_foo;
+ .test-foo {
+ value: value_foo;
+ }
+ `)
+ })
+})
+
+test('matching utilities with an arbitrary value and configured modifier', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {},
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities(
+ {
+ test: (value, { modifier }) => ({ value, modifier }),
+ },
+ {
+ modifiers: {
+ bar: 'configured_bar',
+ },
+ }
+ )
+ },
+ ],
+ corePlugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test-\[foo\]\/bar {
+ value: foo;
+ modifier: configured_bar;
+ }
+ `)
+ })
+})
+
+test('matching utilities with an configured value and an arbitrary modifier (raw)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {},
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities(
+ {
+ test: (value, { modifier }) => ({ value, modifier }),
+ },
+ {
+ values: {
+ foo: 'configured_foo',
+ },
+ modifiers: 'any', // Raw `[value]`
+ }
+ )
+ },
+ ],
+ corePlugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test-foo\/\[bar\] {
+ value: configured_foo;
+ modifier: [bar];
+ }
+ `)
+ })
+})
+
+test('matching utilities with an configured value and an arbitrary modifier (non-raw)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {},
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities(
+ {
+ test: (value, { modifier }) => ({ value, modifier }),
+ },
+ {
+ values: {
+ foo: 'configured_foo',
+ },
+ modifiers: {},
+ }
+ )
+ },
+ ],
+ corePlugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test-foo\/\[bar\] {
+ value: configured_foo;
+ modifier: bar;
+ }
+ `)
+ })
+})
+
+test('matching utilities with an configured value and a configured modifier', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {},
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities(
+ {
+ test: (value, { modifier }) => ({ value, modifier }),
+ },
+ {
+ values: {
+ foo: 'configured_foo',
+ },
+ modifiers: {
+ bar: 'configured_bar',
+ },
+ }
+ )
+ },
+ ],
+ corePlugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test-foo\/bar {
+ value: configured_foo;
+ modifier: configured_bar;
+ }
+ `)
+ })
+})
+
+test('matching utilities with an arbitrary value and an arbitrary modifier (raw)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {},
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities(
+ {
+ test: (value, { modifier }) => ({ value, modifier }),
+ },
+ {
+ modifiers: 'any',
+ }
+ )
+ },
+ ],
+ corePlugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test-\[foo\]\/\[bar\] {
+ value: foo;
+ modifier: [bar];
+ }
+ `)
+ })
+})
+
+test('matching utilities with an arbitrary value and an arbitrary modifier (non-raw)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {},
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities(
+ {
+ test: (value, { modifier }) => ({ value, modifier }),
+ },
+ {
+ modifiers: {},
+ }
+ )
+ },
+ ],
+ corePlugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test-\[foo\]\/\[bar\] {
+ value: foo;
+ modifier: bar;
+ }
+ `)
+ })
+})
+
+test('matching utilities with a lookup value that looks like an arbitrary value and modifier', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {},
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities(
+ {
+ test: (value, { modifier }) => ({ value, modifier }),
+ },
+ {
+ values: {
+ '[foo]/[bar]': 'hello',
+ },
+ }
+ )
+ },
+ ],
+ corePlugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test-\[foo\]\/\[bar\] {
+ value: hello;
+ }
+ `)
+ })
+})
+
+test('matching utilities with a lookup value that looks like an arbitrary value and modifier (with modifiers = any)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {},
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities(
+ {
+ test: (value, { modifier }) => ({ value, modifier }),
+ },
+ {
+ values: {
+ '[foo]/[bar]': 'hello',
+ },
+ modifiers: 'any',
+ }
+ )
+ },
+ ],
+ corePlugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test-\[foo\]\/\[bar\] {
+ value: hello;
+ }
+ `)
+ })
+})
+
+test('matching utilities with a lookup value that looks like an arbitrary value and modifier (with modifiers = {})', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {},
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities(
+ {
+ test: (value, { modifier }) => ({ value, modifier }),
+ },
+ {
+ values: {
+ '[foo]/[bar]': 'hello',
+ },
+ modifiers: {},
+ }
+ )
+ },
+ ],
+ corePlugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test-\[foo\]\/\[bar\] {
+ value: hello;
+ }
+ `)
+ })
+})
+
+test('matching utilities with a lookup value that looks like an arbitrary value and a configured modifier', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {},
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities(
+ {
+ test: (value, { modifier }) => ({ value, modifier }),
+ },
+ {
+ values: {
+ '[foo]/bar': 'hello',
+ },
+ }
+ )
+ },
+ ],
+ corePlugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test-\[foo\]\/bar {
+ value: hello;
+ }
+ `)
+ })
+})
+
+test('matching utilities with a lookup value that looks like a configured value and an arbitrary modifier', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {},
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities(
+ {
+ test: (value, { modifier }) => ({ value, modifier }),
+ },
+ {
+ values: {
+ 'foo/[bar]': 'hello',
+ },
+ }
+ )
+ },
+ ],
+ corePlugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test-foo\/\[bar\] {
+ value: hello;
+ }
+ `)
+ })
+})
+
+test('matching utilities with a lookup value that does not match the configured type', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {},
+ plugins: [
+ function ({ matchUtilities }) {
+ matchUtilities(
+ {
+ test: (value, { modifier }) => ({ value, modifier }),
+ },
+ {
+ values: {
+ foo: 'not-a-percentage',
+ },
+ type: ['percentage'],
+ }
+ )
+ },
+ ],
+ corePlugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test-foo {
+ value: not-a-percentage;
}
`)
})
-
- test('match utilities with modifiers in the config', async () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
-
- plugins: [
- ({ matchUtilities }) => {
- matchUtilities(
- {
- test: (value, { modifier }) => ({
- color: `${value}_${modifier}`,
- }),
- },
- {
- values: {
- DEFAULT: 'default',
- bar: 'bar',
- '1': 'one',
- },
- modifiers: {
- foo: 'mewtwo',
- },
- }
- )
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .test {
- color: default_null;
- }
- .test-1\/\[bar\] {
- color: one_bar;
- }
- .test-1\/foo {
- color: one_mewtwo;
- }
- .test\/\[bar\] {
- color: default_bar;
- }
- .test\/foo {
- color: default_mewtwo;
- }
- `)
- })
-
- test('match utilities can omit utilities by returning null', async () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
-
- plugins: [
- ({ matchUtilities }) => {
- matchUtilities(
- {
- test: (value, { modifier }) =>
- modifier === 'bad'
- ? null
- : {
- color: `${value}_${modifier}`,
- },
- },
- {
- values: {
- DEFAULT: 'default',
- bar: 'bar',
- '1': 'one',
- },
- modifiers: 'any',
- }
- )
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .test {
- color: default_null;
- }
- .test\/good {
- color: default_good;
- }
- `)
- })
-
- test('matching utilities with a basic configured value', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {},
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities(
- {
- test: (value) => ({ value }),
- },
- {
- values: {
- foo: 'value_foo',
- },
- }
- )
- },
- ],
- corePlugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .test-foo {
- value: value_foo;
- }
- `)
- })
- })
-
- test('matching utilities with an arbitrary value and configured modifier', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {},
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities(
- {
- test: (value, { modifier }) => ({ value, modifier }),
- },
- {
- modifiers: {
- bar: 'configured_bar',
- },
- }
- )
- },
- ],
- corePlugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .test-\[foo\]\/bar {
- value: foo;
- modifier: configured_bar;
- }
- `)
- })
- })
-
- test('matching utilities with an configured value and an arbitrary modifier (raw)', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {},
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities(
- {
- test: (value, { modifier }) => ({ value, modifier }),
- },
- {
- values: {
- foo: 'configured_foo',
- },
- modifiers: 'any', // Raw `[value]`
- }
- )
- },
- ],
- corePlugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .test-foo\/\[bar\] {
- value: configured_foo;
- modifier: [bar];
- }
- `)
- })
- })
-
- test('matching utilities with an configured value and an arbitrary modifier (non-raw)', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {},
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities(
- {
- test: (value, { modifier }) => ({ value, modifier }),
- },
- {
- values: {
- foo: 'configured_foo',
- },
- modifiers: {},
- }
- )
- },
- ],
- corePlugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .test-foo\/\[bar\] {
- value: configured_foo;
- modifier: bar;
- }
- `)
- })
- })
-
- test('matching utilities with an configured value and a configured modifier', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {},
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities(
- {
- test: (value, { modifier }) => ({ value, modifier }),
- },
- {
- values: {
- foo: 'configured_foo',
- },
- modifiers: {
- bar: 'configured_bar',
- },
- }
- )
- },
- ],
- corePlugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .test-foo\/bar {
- value: configured_foo;
- modifier: configured_bar;
- }
- `)
- })
- })
-
- test('matching utilities with an arbitrary value and an arbitrary modifier (raw)', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {},
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities(
- {
- test: (value, { modifier }) => ({ value, modifier }),
- },
- {
- modifiers: 'any',
- }
- )
- },
- ],
- corePlugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .test-\[foo\]\/\[bar\] {
- value: foo;
- modifier: [bar];
- }
- `)
- })
- })
-
- test('matching utilities with an arbitrary value and an arbitrary modifier (non-raw)', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {},
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities(
- {
- test: (value, { modifier }) => ({ value, modifier }),
- },
- {
- modifiers: {},
- }
- )
- },
- ],
- corePlugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .test-\[foo\]\/\[bar\] {
- value: foo;
- modifier: bar;
- }
- `)
- })
- })
-
- test('matching utilities with a lookup value that looks like an arbitrary value and modifier', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {},
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities(
- {
- test: (value, { modifier }) => ({ value, modifier }),
- },
- {
- values: {
- '[foo]/[bar]': 'hello',
- },
- }
- )
- },
- ],
- corePlugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .test-\[foo\]\/\[bar\] {
- value: hello;
- }
- `)
- })
- })
-
- test('matching utilities with a lookup value that looks like an arbitrary value and modifier (with modifiers = any)', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {},
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities(
- {
- test: (value, { modifier }) => ({ value, modifier }),
- },
- {
- values: {
- '[foo]/[bar]': 'hello',
- },
- modifiers: 'any',
- }
- )
- },
- ],
- corePlugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .test-\[foo\]\/\[bar\] {
- value: hello;
- }
- `)
- })
- })
-
- test('matching utilities with a lookup value that looks like an arbitrary value and modifier (with modifiers = {})', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {},
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities(
- {
- test: (value, { modifier }) => ({ value, modifier }),
- },
- {
- values: {
- '[foo]/[bar]': 'hello',
- },
- modifiers: {},
- }
- )
- },
- ],
- corePlugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .test-\[foo\]\/\[bar\] {
- value: hello;
- }
- `)
- })
- })
-
- test('matching utilities with a lookup value that looks like an arbitrary value and a configured modifier', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {},
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities(
- {
- test: (value, { modifier }) => ({ value, modifier }),
- },
- {
- values: {
- '[foo]/bar': 'hello',
- },
- }
- )
- },
- ],
- corePlugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .test-\[foo\]\/bar {
- value: hello;
- }
- `)
- })
- })
-
- test('matching utilities with a lookup value that looks like a configured value and an arbitrary modifier', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {},
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities(
- {
- test: (value, { modifier }) => ({ value, modifier }),
- },
- {
- values: {
- 'foo/[bar]': 'hello',
- },
- }
- )
- },
- ],
- corePlugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .test-foo\/\[bar\] {
- value: hello;
- }
- `)
- })
- })
-
- test('matching utilities with a lookup value that does not match the configured type', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {},
- plugins: [
- function ({ matchUtilities }) {
- matchUtilities(
- {
- test: (value, { modifier }) => ({ value, modifier }),
- },
- {
- values: {
- foo: 'not-a-percentage',
- },
- type: ['percentage'],
- }
- )
- },
- ],
- corePlugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .test-foo {
- value: not-a-percentage;
- }
- `)
- })
- })
})
diff --git a/tests/match-variants.test.js b/tests/match-variants.test.js
index e4330f7a9..2923b10c0 100644
--- a/tests/match-variants.test.js
+++ b/tests/match-variants.test.js
@@ -1,856 +1,820 @@
import resolveConfig from '../src/public/resolve-config'
import { createContext } from '../src/lib/setupContextUtils'
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(({ stable, oxide }) => {
- test('partial arbitrary variants', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('potato', (flavor) => `.potato-${flavor} &`)
- },
- ],
- }
+test('partial arbitrary variants', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('potato', (flavor) => `.potato-${flavor} &`)
+ },
+ ],
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .potato-baked .potato-\[baked\]\:w-3 {
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .potato-baked .potato-\[baked\]\:w-3 {
+ width: 0.75rem;
+ }
+ .potato-yellow .potato-\[yellow\]\:bg-yellow-200 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 240 138 / var(--tw-bg-opacity));
+ }
+ `)
+ })
+})
+
+test('partial arbitrary variants with at-rules', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('potato', (flavor) => `@media (potato: ${flavor})`)
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (potato: baked) {
+ .potato-\[baked\]\:w-3 {
width: 0.75rem;
}
- .potato-yellow .potato-\[yellow\]\:bg-yellow-200 {
+ }
+ @media (potato: yellow) {
+ .potato-\[yellow\]\:bg-yellow-200 {
--tw-bg-opacity: 1;
background-color: rgb(254 240 138 / var(--tw-bg-opacity));
}
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .potato-baked .potato-\[baked\]\:w-3 {
+ }
+ `)
+ })
+})
+
+test('partial arbitrary variants with at-rules and placeholder', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('potato', (flavor) => `@media (potato: ${flavor}) { &:potato }`)
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (potato: baked) {
+ .potato-\[baked\]\:w-3:potato {
width: 0.75rem;
}
- .potato-yellow .potato-\[yellow\]\:bg-yellow-200 {
- background-color: #fef08a;
+ }
+ @media (potato: yellow) {
+ .potato-\[yellow\]\:bg-yellow-200:potato {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 240 138 / var(--tw-bg-opacity));
}
- `)
- })
+ }
+ `)
})
+})
- test('partial arbitrary variants with at-rules', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('potato', (flavor) => `@media (potato: ${flavor})`)
- },
- ],
- }
+test('partial arbitrary variants with default values', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('tooltip', (side) => `&${side}`, {
+ values: {
+ bottom: '[data-location="bottom"]',
+ top: '[data-location="top"]',
+ },
+ })
+ },
+ ],
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- @media (potato: baked) {
- .potato-\[baked\]\:w-3 {
- width: 0.75rem;
- }
- }
- @media (potato: yellow) {
- .potato-\[yellow\]\:bg-yellow-200 {
- --tw-bg-opacity: 1;
- background-color: rgb(254 240 138 / var(--tw-bg-opacity));
- }
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- @media (potato: baked) {
- .potato-\[baked\]\:w-3 {
- width: 0.75rem;
- }
- }
- @media (potato: yellow) {
- .potato-\[yellow\]\:bg-yellow-200 {
- background-color: #fef08a;
- }
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .tooltip-bottom\:mt-2[data-location='bottom'] {
+ margin-top: 0.5rem;
+ }
+ .tooltip-top\:mb-2[data-location='top'] {
+ margin-bottom: 0.5rem;
+ }
+ `)
})
+})
- test('partial arbitrary variants with at-rules and placeholder', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('potato', (flavor) => `@media (potato: ${flavor}) { &:potato }`)
- },
- ],
- }
+test('matched variant values maintain the sort order they are registered in', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('alphabet', (side) => `&${side}`, {
+ values: {
+ a: '[data-value="a"]',
+ b: '[data-value="b"]',
+ c: '[data-value="c"]',
+ d: '[data-value="d"]',
+ },
+ })
+ },
+ ],
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- @media (potato: baked) {
- .potato-\[baked\]\:w-3:potato {
- width: 0.75rem;
- }
- }
- @media (potato: yellow) {
- .potato-\[yellow\]\:bg-yellow-200:potato {
- --tw-bg-opacity: 1;
- background-color: rgb(254 240 138 / var(--tw-bg-opacity));
- }
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- @media (potato: baked) {
- .potato-\[baked\]\:w-3:potato {
- width: 0.75rem;
- }
- }
- @media (potato: yellow) {
- .potato-\[yellow\]\:bg-yellow-200:potato {
- background-color: #fef08a;
- }
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .alphabet-a\:underline[data-value='a'],
+ .alphabet-b\:underline[data-value='b'],
+ .alphabet-c\:underline[data-value='c'],
+ .alphabet-d\:underline[data-value='d'] {
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- test('partial arbitrary variants with default values', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('tooltip', (side) => `&${side}`, {
- values: {
- bottom: '[data-location="bottom"]',
- top: '[data-location="top"]',
- },
- })
- },
- ],
- }
+test('matchVariant can return an array of format strings from the function', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('test', (selector) =>
+ selector.split(',').map((selector) => `&.${selector} > *`)
+ )
+ },
+ ],
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .tooltip-bottom\:mt-2[data-location='bottom'] {
- margin-top: 0.5rem;
- }
- .tooltip-top\:mb-2[data-location='top'] {
- margin-bottom: 0.5rem;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .test-\[a\,b\,c\]\:underline.a > *,
+ .test-\[a\,b\,c\]\:underline.b > *,
+ .test-\[a\,b\,c\]\:underline.c > * {
+ text-decoration-line: underline;
+ }
+ `)
})
+})
- test('matched variant values maintain the sort order they are registered in', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('alphabet', (side) => `&${side}`, {
- values: {
- a: '[data-value="a"]',
- b: '[data-value="b"]',
- c: '[data-value="c"]',
- d: '[data-value="d"]',
- },
- })
- },
- ],
- }
+it('should be possible to sort variants', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('testmin', (value) => `@media (min-width: ${value})`, {
+ sort(a, z) {
+ return parseInt(a.value) - parseInt(z.value)
+ },
+ })
+ },
+ ],
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .alphabet-a\:underline[data-value='a'],
- .alphabet-b\:underline[data-value='b'],
- .alphabet-c\:underline[data-value='c'],
- .alphabet-d\:underline[data-value='d'] {
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 500px) {
+ .testmin-\[500px\]\:underline {
text-decoration-line: underline;
}
- `)
- })
- })
-
- test('matchVariant can return an array of format strings from the function', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('test', (selector) =>
- selector.split(',').map((selector) => `&.${selector} > *`)
- )
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .test-\[a\,b\,c\]\:underline.a > *,
- .test-\[a\,b\,c\]\:underline.b > *,
- .test-\[a\,b\,c\]\:underline.c > * {
- text-decoration-line: underline;
+ }
+ @media (min-width: 700px) {
+ .testmin-\[700px\]\:italic {
+ font-style: italic;
}
- `)
- })
+ }
+ `)
})
+})
- it('should be possible to sort variants', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('testmin', (value) => `@media (min-width: ${value})`, {
- sort(a, z) {
- return parseInt(a.value) - parseInt(z.value)
- },
- })
- },
- ],
- }
+it('should be possible to compare arbitrary variants and hardcoded variants', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('testmin', (value) => `@media (min-width: ${value})`, {
+ values: {
+ example: '600px',
+ },
+ sort(a, z) {
+ return parseInt(a.value) - parseInt(z.value)
+ },
+ })
+ },
+ ],
+ }
- let input = css`
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 500px) {
- .testmin-\[500px\]\:underline {
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 500px) {
+ .testmin-\[500px\]\:italic {
+ font-style: italic;
+ }
+ }
+ @media (min-width: 600px) {
+ .testmin-example\:italic {
+ font-style: italic;
+ }
+ }
+ @media (min-width: 700px) {
+ .testmin-\[700px\]\:italic {
+ font-style: italic;
+ }
+ }
+ `)
+ })
+})
+
+it('should be possible to sort stacked arbitrary variants correctly', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('testmin', (value) => `@media (min-width: ${value})`, {
+ sort(a, z) {
+ return parseInt(a.value) - parseInt(z.value)
+ },
+ })
+
+ matchVariant('testmax', (value) => `@media (max-width: ${value})`, {
+ sort(a, z) {
+ return parseInt(z.value) - parseInt(a.value)
+ },
+ })
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 100px) {
+ @media (max-width: 400px) {
+ .testmin-\[100px\]\:testmax-\[400px\]\:underline {
text-decoration-line: underline;
}
}
- @media (min-width: 700px) {
- .testmin-\[700px\]\:italic {
- font-style: italic;
+ @media (max-width: 350px) {
+ .testmin-\[100px\]\:testmax-\[350px\]\:underline {
+ text-decoration-line: underline;
}
}
- `)
- })
+ @media (max-width: 300px) {
+ .testmin-\[100px\]\:testmax-\[300px\]\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ }
+ @media (min-width: 150px) {
+ @media (max-width: 400px) {
+ .testmin-\[150px\]\:testmax-\[400px\]\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ }
+ `)
})
+})
- it('should be possible to compare arbitrary variants and hardcoded variants', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('testmin', (value) => `@media (min-width: ${value})`, {
- values: {
- example: '600px',
- },
- sort(a, z) {
- return parseInt(a.value) - parseInt(z.value)
- },
- })
- },
- ],
- }
+it('should maintain sort from other variants, if sort functions of arbitrary variants return 0', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('testmin', (value) => `@media (min-width: ${value})`, {
+ sort(a, z) {
+ return parseInt(a.value) - parseInt(z.value)
+ },
+ })
- let input = css`
- @tailwind utilities;
- `
+ matchVariant('testmax', (value) => `@media (max-width: ${value})`, {
+ sort(a, z) {
+ return parseInt(z.value) - parseInt(a.value)
+ },
+ })
+ },
+ ],
+ }
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 500px) {
- .testmin-\[500px\]\:italic {
- font-style: italic;
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 100px) {
+ @media (max-width: 200px) {
+ .testmin-\[100px\]\:testmax-\[200px\]\:hover\:underline:hover,
+ .testmin-\[100px\]\:testmax-\[200px\]\:focus\:underline:focus {
+ text-decoration-line: underline;
}
}
- @media (min-width: 600px) {
- .testmin-example\:italic {
- font-style: italic;
- }
- }
- @media (min-width: 700px) {
- .testmin-\[700px\]\:italic {
- font-style: italic;
- }
- }
- `)
- })
+ }
+ `)
})
+})
- it('should be possible to sort stacked arbitrary variants correctly', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('testmin', (value) => `@media (min-width: ${value})`, {
- sort(a, z) {
- return parseInt(a.value) - parseInt(z.value)
- },
- })
+it('should sort arbitrary variants left to right (1)', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('testmin', (value) => `@media (min-width: ${value})`, {
+ sort(a, z) {
+ return parseInt(a.value) - parseInt(z.value)
+ },
+ })
+ matchVariant('testmax', (value) => `@media (max-width: ${value})`, {
+ sort(a, z) {
+ return parseInt(z.value) - parseInt(a.value)
+ },
+ })
+ },
+ ],
+ }
- matchVariant('testmax', (value) => `@media (max-width: ${value})`, {
- sort(a, z) {
- return parseInt(z.value) - parseInt(a.value)
- },
- })
- },
- ],
- }
+ let input = css`
+ @tailwind utilities;
+ `
- let input = css`
- @tailwind utilities;
- `
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 100px) {
+ @media (max-width: 400px) {
+ .testmin-\[100px\]\:testmax-\[400px\]\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ @media (max-width: 300px) {
+ .testmin-\[100px\]\:testmax-\[300px\]\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ }
+ @media (min-width: 200px) {
+ @media (max-width: 400px) {
+ .testmin-\[200px\]\:testmax-\[400px\]\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ @media (max-width: 300px) {
+ .testmin-\[200px\]\:testmax-\[300px\]\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ }
+ `)
+ })
+})
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
+it('should sort arbitrary variants left to right (2)', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('testmin', (value) => `@media (min-width: ${value})`, {
+ sort(a, z) {
+ return parseInt(a.value) - parseInt(z.value)
+ },
+ })
+ matchVariant('testmax', (value) => `@media (max-width: ${value})`, {
+ sort(a, z) {
+ return parseInt(z.value) - parseInt(a.value)
+ },
+ })
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (max-width: 400px) {
@media (min-width: 100px) {
- @media (max-width: 400px) {
- .testmin-\[100px\]\:testmax-\[400px\]\:underline {
- text-decoration-line: underline;
- }
- }
- @media (max-width: 350px) {
- .testmin-\[100px\]\:testmax-\[350px\]\:underline {
- text-decoration-line: underline;
- }
- }
- @media (max-width: 300px) {
- .testmin-\[100px\]\:testmax-\[300px\]\:underline {
- text-decoration-line: underline;
- }
- }
- }
- @media (min-width: 150px) {
- @media (max-width: 400px) {
- .testmin-\[150px\]\:testmax-\[400px\]\:underline {
- text-decoration-line: underline;
- }
- }
- }
- `)
- })
- })
-
- it('should maintain sort from other variants, if sort functions of arbitrary variants return 0', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('testmin', (value) => `@media (min-width: ${value})`, {
- sort(a, z) {
- return parseInt(a.value) - parseInt(z.value)
- },
- })
-
- matchVariant('testmax', (value) => `@media (max-width: ${value})`, {
- sort(a, z) {
- return parseInt(z.value) - parseInt(a.value)
- },
- })
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 100px) {
- @media (max-width: 200px) {
- .testmin-\[100px\]\:testmax-\[200px\]\:hover\:underline:hover,
- .testmin-\[100px\]\:testmax-\[200px\]\:focus\:underline:focus {
- text-decoration-line: underline;
- }
- }
- }
- `)
- })
- })
-
- it('should sort arbitrary variants left to right (1)', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('testmin', (value) => `@media (min-width: ${value})`, {
- sort(a, z) {
- return parseInt(a.value) - parseInt(z.value)
- },
- })
- matchVariant('testmax', (value) => `@media (max-width: ${value})`, {
- sort(a, z) {
- return parseInt(z.value) - parseInt(a.value)
- },
- })
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 100px) {
- @media (max-width: 400px) {
- .testmin-\[100px\]\:testmax-\[400px\]\:underline {
- text-decoration-line: underline;
- }
- }
- @media (max-width: 300px) {
- .testmin-\[100px\]\:testmax-\[300px\]\:underline {
- text-decoration-line: underline;
- }
+ .testmax-\[400px\]\:testmin-\[100px\]\:underline {
+ text-decoration-line: underline;
}
}
@media (min-width: 200px) {
- @media (max-width: 400px) {
- .testmin-\[200px\]\:testmax-\[400px\]\:underline {
- text-decoration-line: underline;
- }
- }
- @media (max-width: 300px) {
- .testmin-\[200px\]\:testmax-\[300px\]\:underline {
- text-decoration-line: underline;
- }
+ .testmax-\[400px\]\:testmin-\[200px\]\:underline {
+ text-decoration-line: underline;
}
}
- `)
- })
- })
+ }
- it('should sort arbitrary variants left to right (2)', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('testmin', (value) => `@media (min-width: ${value})`, {
- sort(a, z) {
- return parseInt(a.value) - parseInt(z.value)
- },
- })
- matchVariant('testmax', (value) => `@media (max-width: ${value})`, {
- sort(a, z) {
- return parseInt(z.value) - parseInt(a.value)
- },
- })
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (max-width: 400px) {
- @media (min-width: 100px) {
- .testmax-\[400px\]\:testmin-\[100px\]\:underline {
- text-decoration-line: underline;
- }
+ @media (max-width: 300px) {
+ @media (min-width: 100px) {
+ .testmax-\[300px\]\:testmin-\[100px\]\:underline {
+ text-decoration-line: underline;
}
- @media (min-width: 200px) {
- .testmax-\[400px\]\:testmin-\[200px\]\:underline {
- text-decoration-line: underline;
+ }
+ @media (min-width: 200px) {
+ .testmax-\[300px\]\:testmin-\[200px\]\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ }
+ `)
+ })
+})
+
+it('should guarantee that we are not passing values from other variants to the wrong function', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('testmin', (value) => `@media (min-width: ${value})`, {
+ sort(a, z) {
+ let lookup = ['100px', '200px']
+ if (lookup.indexOf(a.value) === -1 || lookup.indexOf(z.value) === -1) {
+ throw new Error('We are seeing values that should not be there!')
}
+ return lookup.indexOf(a.value) - lookup.indexOf(z.value)
+ },
+ })
+ matchVariant('testmax', (value) => `@media (max-width: ${value})`, {
+ sort(a, z) {
+ let lookup = ['300px', '400px']
+ if (lookup.indexOf(a.value) === -1 || lookup.indexOf(z.value) === -1) {
+ throw new Error('We are seeing values that should not be there!')
+ }
+ return lookup.indexOf(z.value) - lookup.indexOf(a.value)
+ },
+ })
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 100px) {
+ @media (max-width: 400px) {
+ .testmin-\[100px\]\:testmax-\[400px\]\:underline {
+ text-decoration-line: underline;
}
}
@media (max-width: 300px) {
- @media (min-width: 100px) {
- .testmax-\[300px\]\:testmin-\[100px\]\:underline {
- text-decoration-line: underline;
- }
- }
- @media (min-width: 200px) {
- .testmax-\[300px\]\:testmin-\[200px\]\:underline {
- text-decoration-line: underline;
- }
+ .testmin-\[100px\]\:testmax-\[300px\]\:underline {
+ text-decoration-line: underline;
}
}
- `)
- })
- })
+ }
- it('should guarantee that we are not passing values from other variants to the wrong function', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('testmin', (value) => `@media (min-width: ${value})`, {
- sort(a, z) {
- let lookup = ['100px', '200px']
- if (lookup.indexOf(a.value) === -1 || lookup.indexOf(z.value) === -1) {
- throw new Error('We are seeing values that should not be there!')
- }
- return lookup.indexOf(a.value) - lookup.indexOf(z.value)
- },
- })
- matchVariant('testmax', (value) => `@media (max-width: ${value})`, {
- sort(a, z) {
- let lookup = ['300px', '400px']
- if (lookup.indexOf(a.value) === -1 || lookup.indexOf(z.value) === -1) {
- throw new Error('We are seeing values that should not be there!')
- }
- return lookup.indexOf(z.value) - lookup.indexOf(a.value)
- },
- })
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 100px) {
- @media (max-width: 400px) {
- .testmin-\[100px\]\:testmax-\[400px\]\:underline {
- text-decoration-line: underline;
- }
- }
-
- @media (max-width: 300px) {
- .testmin-\[100px\]\:testmax-\[300px\]\:underline {
- text-decoration-line: underline;
- }
+ @media (min-width: 200px) {
+ @media (max-width: 400px) {
+ .testmin-\[200px\]\:testmax-\[400px\]\:underline {
+ text-decoration-line: underline;
}
}
- @media (min-width: 200px) {
- @media (max-width: 400px) {
- .testmin-\[200px\]\:testmax-\[400px\]\:underline {
- text-decoration-line: underline;
- }
- }
-
- @media (max-width: 300px) {
- .testmin-\[200px\]\:testmax-\[300px\]\:underline {
- text-decoration-line: underline;
- }
+ @media (max-width: 300px) {
+ .testmin-\[200px\]\:testmax-\[300px\]\:underline {
+ text-decoration-line: underline;
}
}
- `)
- })
- })
-
- it('should default to the DEFAULT value for variants', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('foo', (value) => `.foo${value} &`, {
- values: {
- DEFAULT: '.bar',
- },
- })
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo.bar .foo\:underline {
- text-decoration-line: underline;
- }
- `)
- })
- })
-
- it('should not generate anything if the matchVariant does not have a DEFAULT value configured', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('foo', (value) => `.foo${value} &`)
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css``)
- })
- })
-
- it('should be possible to use `null` as a DEFAULT value', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('foo', (value) => `.foo${value === null ? '-good' : '-bad'} &`, {
- values: { DEFAULT: null },
- })
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo-good .foo\:underline {
- text-decoration-line: underline;
- }
- `)
- })
- })
-
- it('should be possible to use `undefined` as a DEFAULT value', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('foo', (value) => `.foo${value === undefined ? '-good' : '-bad'} &`, {
- values: { DEFAULT: undefined },
- })
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo-good .foo\:underline {
- text-decoration-line: underline;
- }
- `)
- })
- })
-
- it('should be possible to use `undefined` as a DEFAULT value', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ matchVariant }) => {
- matchVariant('foo', (value) => `.foo${value === undefined ? '-good' : '-bad'} &`, {
- values: { DEFAULT: undefined },
- })
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo-good .foo\:underline {
- text-decoration-line: underline;
- }
- `)
- })
- })
-
- it('should not break things', () => {
- let config = {}
-
- let context = createContext(resolveConfig(config))
- let [[, fn]] = context.variantMap.get('group')
-
- let format
-
- expect(
- fn({
- format(input) {
- format = input
- },
- })
- ).toBe(undefined)
-
- expect(format).toBe(':merge(.group) &')
+ }
+ `)
})
})
+
+it('should default to the DEFAULT value for variants', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('foo', (value) => `.foo${value} &`, {
+ values: {
+ DEFAULT: '.bar',
+ },
+ })
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo.bar .foo\:underline {
+ text-decoration-line: underline;
+ }
+ `)
+ })
+})
+
+it('should not generate anything if the matchVariant does not have a DEFAULT value configured', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('foo', (value) => `.foo${value} &`)
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css``)
+ })
+})
+
+it('should be possible to use `null` as a DEFAULT value', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('foo', (value) => `.foo${value === null ? '-good' : '-bad'} &`, {
+ values: { DEFAULT: null },
+ })
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo-good .foo\:underline {
+ text-decoration-line: underline;
+ }
+ `)
+ })
+})
+
+it('should be possible to use `undefined` as a DEFAULT value', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('foo', (value) => `.foo${value === undefined ? '-good' : '-bad'} &`, {
+ values: { DEFAULT: undefined },
+ })
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo-good .foo\:underline {
+ text-decoration-line: underline;
+ }
+ `)
+ })
+})
+
+it('should be possible to use `undefined` as a DEFAULT value', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ ({ matchVariant }) => {
+ matchVariant('foo', (value) => `.foo${value === undefined ? '-good' : '-bad'} &`, {
+ values: { DEFAULT: undefined },
+ })
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo-good .foo\:underline {
+ text-decoration-line: underline;
+ }
+ `)
+ })
+})
+
+it('should not break things', () => {
+ let config = {}
+
+ let context = createContext(resolveConfig(config))
+ let [[, fn]] = context.variantMap.get('group')
+
+ let format
+
+ expect(
+ fn({
+ format(input) {
+ format = input
+ },
+ })
+ ).toBe(undefined)
+
+ expect(format).toBe(':merge(.group) &')
+})
diff --git a/tests/min-max-screen-variants.test.js b/tests/min-max-screen-variants.test.js
index a86c6f6cd..beab47ac0 100644
--- a/tests/min-max-screen-variants.test.js
+++ b/tests/min-max-screen-variants.test.js
@@ -1,656 +1,642 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- let defaultScreens = {
- sm: '640px',
- md: '768px',
- lg: '1024px',
- xl: '1280px',
- '2xl': '1536px',
+let defaultScreens = {
+ sm: '640px',
+ md: '768px',
+ lg: '1024px',
+ xl: '1280px',
+ '2xl': '1536px',
+}
+
+it('sorts min and max correctly relative to screens and each other', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ screens: defaultScreens,
+ },
}
- it('sorts min and max correctly relative to screens and each other', async () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- screens: defaultScreens,
- },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .font-bold {
- font-weight: 700;
- }
- @media (max-width: 800px) {
- .max-\[800px\]\:font-bold {
- font-weight: 700;
- }
- }
- @media (max-width: 700px) {
- .max-\[700px\]\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 640px) {
- .sm\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 700px) {
- .min-\[700px\]\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 768px) {
- .md\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 800px) {
- .min-\[800px\]\:font-bold {
- font-weight: 700;
- }
- }
- `)
- })
- })
-
- it('works when using min variants screens config is empty and variants all use the same unit', async () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- screens: {},
- },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
+ let input = css`
+ @tailwind utilities;
+ `
+ return run(input, config).then((result) => {
expect(result.css).toMatchFormattedCss(css`
.font-bold {
font-weight: 700;
}
+ @media (max-width: 800px) {
+ .max-\[800px\]\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (max-width: 700px) {
+ .max-\[700px\]\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (min-width: 640px) {
+ .sm\:font-bold {
+ font-weight: 700;
+ }
+ }
@media (min-width: 700px) {
.min-\[700px\]\:font-bold {
font-weight: 700;
}
}
+ @media (min-width: 768px) {
+ .md\:font-bold {
+ font-weight: 700;
+ }
+ }
@media (min-width: 800px) {
.min-\[800px\]\:font-bold {
font-weight: 700;
}
}
`)
-
- expect().not.toHaveBeenWarned()
})
+})
- it('works when using max variants screens config is empty and variants all use the same unit', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- screens: {},
+it('works when using min variants screens config is empty and variants all use the same unit', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
},
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ screens: {},
+ },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .font-bold {
+ font-weight: 700;
}
+ @media (min-width: 700px) {
+ .min-\[700px\]\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (min-width: 800px) {
+ .min-\[800px\]\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
- let input = css`
- @tailwind utilities;
- `
+ expect().not.toHaveBeenWarned()
+})
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .font-bold {
- font-weight: 700;
- }
- @media (max-width: 800px) {
- .max-\[800px\]\:font-bold {
- font-weight: 700;
- }
- }
- @media (max-width: 700px) {
- .max-\[700px\]\:font-bold {
- font-weight: 700;
- }
- }
- `)
- })
- })
-
- it('converts simple min-width screens for max variant', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- screens: defaultScreens,
+it('works when using max variants screens config is empty and variants all use the same unit', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
},
- }
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ screens: {},
+ },
+ }
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .font-bold {
- font-weight: 700;
- }
- @media not all and (min-width: 1024px) {
- .max-lg\:font-bold {
- font-weight: 700;
- }
- }
- @media (max-width: 700px) {
- .max-\[700px\]\:font-bold {
- font-weight: 700;
- }
- }
- @media not all and (min-width: 640px) {
- .max-sm\:font-bold {
- font-weight: 700;
- }
- }
- @media (max-width: 300px) {
- .max-\[300px\]\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 640px) {
- .sm\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 768px) {
- .md\:font-bold {
- font-weight: 700;
- }
- }
- `)
- })
- })
-
- it('does not have keyed screens for min variant', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- screens: defaultScreens,
- },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .font-bold {
- font-weight: 700;
- }
- @media (min-width: 300px) {
- .min-\[300px\]\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 640px) {
- .sm\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 700px) {
- .min-\[700px\]\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 768px) {
- .md\:font-bold {
- font-weight: 700;
- }
- }
- `)
- })
- })
-
- it('warns when using min variants with complex screen configs', async () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- screens: {
- sm: '640px',
- md: '768px',
- lg: '1024px',
- xl: '1280px',
- '2xl': '1536px',
-
- // Any presence of an object makes it complex
- yodawg: { min: '700px' },
- },
- },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
+ let input = css`
+ @tailwind utilities;
+ `
+ return run(input, config).then((result) => {
expect(result.css).toMatchFormattedCss(css`
.font-bold {
font-weight: 700;
}
- @media (min-width: 640px) {
- .sm\:font-bold {
+ @media (max-width: 800px) {
+ .max-\[800px\]\:font-bold {
font-weight: 700;
}
}
- @media (min-width: 768px) {
- .md\:font-bold {
- font-weight: 700;
- }
- }
- `)
-
- expect().toHaveBeenWarnedWith(['complex-screen-config'])
- })
-
- it('warns when using min variants with simple configs containing mixed units', async () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- screens: {
- sm: '640px',
- md: '48rem',
- lg: '1024px',
- xl: '1280px',
- '2xl': '1536px',
- },
- },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .font-bold {
- font-weight: 700;
- }
- @media (min-width: 640px) {
- .sm\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 48rem) {
- .md\:font-bold {
- font-weight: 700;
- }
- }
- `)
-
- expect().toHaveBeenWarnedWith(['mixed-screen-units'])
- })
-
- it('warns when using min variants with mixed units (with screens config)', async () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- screens: {
- sm: '640px',
- md: '768px',
- lg: '1024px',
- xl: '1280px',
- '2xl': '1536px',
- },
- },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .font-bold {
- font-weight: 700;
- }
- @media (min-width: 640px) {
- .sm\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 768px) {
- .md\:font-bold {
- font-weight: 700;
- }
- }
- `)
-
- expect().toHaveBeenWarnedWith(['minmax-have-mixed-units'])
- })
-
- it('warns when using min variants with mixed units (with no screens config)', async () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- screens: {},
- },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .font-bold {
- font-weight: 700;
- }
- @media (min-width: 700px) {
- .min-\[700px\]\:font-bold {
- font-weight: 700;
- }
- }
- `)
-
- expect().toHaveBeenWarnedWith(['minmax-have-mixed-units'])
- })
-
- it('warns when using max variants with complex screen configs', async () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- screens: {
- sm: '640px',
- md: '768px',
- lg: '1024px',
- xl: '1280px',
- '2xl': '1536px',
-
- // Any presence of an object makes it complex
- yodawg: { min: '700px' },
- },
- },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .font-bold {
- font-weight: 700;
- }
- @media (min-width: 640px) {
- .sm\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 768px) {
- .md\:font-bold {
- font-weight: 700;
- }
- }
- `)
-
- expect().toHaveBeenWarnedWith(['complex-screen-config'])
- })
-
- it('warns when using max variants with simple configs containing mixed units', async () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- screens: {
- sm: '640px',
- md: '48rem',
- lg: '1024px',
- xl: '1280px',
- '2xl': '1536px',
- },
- },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .font-bold {
- font-weight: 700;
- }
- @media (min-width: 640px) {
- .sm\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 48rem) {
- .md\:font-bold {
- font-weight: 700;
- }
- }
- `)
-
- expect().toHaveBeenWarnedWith(['mixed-screen-units'])
- })
-
- it('warns when using max variants with mixed units (with screens config)', async () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- screens: {
- sm: '640px',
- md: '768px',
- lg: '1024px',
- xl: '1280px',
- '2xl': '1536px',
- },
- },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .font-bold {
- font-weight: 700;
- }
- @media (min-width: 640px) {
- .sm\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 768px) {
- .md\:font-bold {
- font-weight: 700;
- }
- }
- `)
-
- expect().toHaveBeenWarnedWith(['minmax-have-mixed-units'])
- })
-
- it('warns when using max variants with mixed units (with no screens config)', async () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- screens: {},
- },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .font-bold {
- font-weight: 700;
- }
@media (max-width: 700px) {
.max-\[700px\]\:font-bold {
font-weight: 700;
}
}
`)
-
- expect().toHaveBeenWarnedWith(['minmax-have-mixed-units'])
})
+})
- it('warns when using min and max variants with mixed units (with no screens config)', async () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- screens: {},
+it('converts simple min-width screens for max variant', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
},
- }
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ screens: defaultScreens,
+ },
+ }
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
+ let input = css`
+ @tailwind utilities;
+ `
+ return run(input, config).then((result) => {
expect(result.css).toMatchFormattedCss(css`
.font-bold {
font-weight: 700;
}
- @media (max-width: 700rem) {
- .max-\[700rem\]\:font-bold {
+ @media not all and (min-width: 1024px) {
+ .max-lg\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (max-width: 700px) {
+ .max-\[700px\]\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media not all and (min-width: 640px) {
+ .max-sm\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (max-width: 300px) {
+ .max-\[300px\]\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (min-width: 640px) {
+ .sm\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (min-width: 768px) {
+ .md\:font-bold {
font-weight: 700;
}
}
`)
-
- expect().toHaveBeenWarnedWith(['minmax-have-mixed-units'])
})
})
+
+it('does not have keyed screens for min variant', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ screens: defaultScreens,
+ },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .font-bold {
+ font-weight: 700;
+ }
+ @media (min-width: 300px) {
+ .min-\[300px\]\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (min-width: 640px) {
+ .sm\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (min-width: 700px) {
+ .min-\[700px\]\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (min-width: 768px) {
+ .md\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+ })
+})
+
+it('warns when using min variants with complex screen configs', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ screens: {
+ sm: '640px',
+ md: '768px',
+ lg: '1024px',
+ xl: '1280px',
+ '2xl': '1536px',
+
+ // Any presence of an object makes it complex
+ yodawg: { min: '700px' },
+ },
+ },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .font-bold {
+ font-weight: 700;
+ }
+ @media (min-width: 640px) {
+ .sm\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (min-width: 768px) {
+ .md\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+
+ expect().toHaveBeenWarnedWith(['complex-screen-config'])
+})
+
+it('warns when using min variants with simple configs containing mixed units', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ screens: {
+ sm: '640px',
+ md: '48rem',
+ lg: '1024px',
+ xl: '1280px',
+ '2xl': '1536px',
+ },
+ },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .font-bold {
+ font-weight: 700;
+ }
+ @media (min-width: 640px) {
+ .sm\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (min-width: 48rem) {
+ .md\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+
+ expect().toHaveBeenWarnedWith(['mixed-screen-units'])
+})
+
+it('warns when using min variants with mixed units (with screens config)', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ screens: {
+ sm: '640px',
+ md: '768px',
+ lg: '1024px',
+ xl: '1280px',
+ '2xl': '1536px',
+ },
+ },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .font-bold {
+ font-weight: 700;
+ }
+ @media (min-width: 640px) {
+ .sm\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (min-width: 768px) {
+ .md\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+
+ expect().toHaveBeenWarnedWith(['minmax-have-mixed-units'])
+})
+
+it('warns when using min variants with mixed units (with no screens config)', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ screens: {},
+ },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .font-bold {
+ font-weight: 700;
+ }
+ @media (min-width: 700px) {
+ .min-\[700px\]\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+
+ expect().toHaveBeenWarnedWith(['minmax-have-mixed-units'])
+})
+
+it('warns when using max variants with complex screen configs', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ screens: {
+ sm: '640px',
+ md: '768px',
+ lg: '1024px',
+ xl: '1280px',
+ '2xl': '1536px',
+
+ // Any presence of an object makes it complex
+ yodawg: { min: '700px' },
+ },
+ },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .font-bold {
+ font-weight: 700;
+ }
+ @media (min-width: 640px) {
+ .sm\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (min-width: 768px) {
+ .md\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+
+ expect().toHaveBeenWarnedWith(['complex-screen-config'])
+})
+
+it('warns when using max variants with simple configs containing mixed units', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ screens: {
+ sm: '640px',
+ md: '48rem',
+ lg: '1024px',
+ xl: '1280px',
+ '2xl': '1536px',
+ },
+ },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .font-bold {
+ font-weight: 700;
+ }
+ @media (min-width: 640px) {
+ .sm\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (min-width: 48rem) {
+ .md\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+
+ expect().toHaveBeenWarnedWith(['mixed-screen-units'])
+})
+
+it('warns when using max variants with mixed units (with screens config)', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ screens: {
+ sm: '640px',
+ md: '768px',
+ lg: '1024px',
+ xl: '1280px',
+ '2xl': '1536px',
+ },
+ },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .font-bold {
+ font-weight: 700;
+ }
+ @media (min-width: 640px) {
+ .sm\:font-bold {
+ font-weight: 700;
+ }
+ }
+ @media (min-width: 768px) {
+ .md\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+
+ expect().toHaveBeenWarnedWith(['minmax-have-mixed-units'])
+})
+
+it('warns when using max variants with mixed units (with no screens config)', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ screens: {},
+ },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .font-bold {
+ font-weight: 700;
+ }
+ @media (max-width: 700px) {
+ .max-\[700px\]\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+
+ expect().toHaveBeenWarnedWith(['minmax-have-mixed-units'])
+})
+
+it('warns when using min and max variants with mixed units (with no screens config)', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ screens: {},
+ },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .font-bold {
+ font-weight: 700;
+ }
+ @media (max-width: 700rem) {
+ .max-\[700rem\]\:font-bold {
+ font-weight: 700;
+ }
+ }
+ `)
+
+ expect().toHaveBeenWarnedWith(['minmax-have-mixed-units'])
+})
diff --git a/tests/minimum-impact-selector.test.js b/tests/minimum-impact-selector.test.js
index ed2fad914..d8292e467 100644
--- a/tests/minimum-impact-selector.test.js
+++ b/tests/minimum-impact-selector.test.js
@@ -1,32 +1,29 @@
import { elementSelectorParser } from '../src/lib/resolveDefaultsAtRules'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- it.each`
- before | after
- ${'*'} | ${'*'}
- ${'*:hover'} | ${'*'}
- ${'* > *'} | ${'* > *'}
- ${'.foo'} | ${'.foo'}
- ${'.foo:hover'} | ${'.foo'}
- ${'.foo:focus:hover'} | ${'.foo'}
- ${'li:first-child'} | ${'li'}
- ${'li:before'} | ${'li:before'}
- ${'li::before'} | ${'li::before'}
- ${'#app .foo'} | ${'.foo'}
- ${'#app'} | ${'[id=app]'}
- ${'#app.other'} | ${'.other'}
- ${'input[type="text"]'} | ${'[type="text"]'}
- ${'input[type="text"].foo'} | ${'.foo'}
- ${'.group .group\\:foo'} | ${'.group\\:foo'}
- ${'.group:hover .group-hover\\:foo'} | ${'.group-hover\\:foo'}
- ${'.owl > * + *'} | ${'.owl > *'}
- ${'.owl > :not([hidden]) + :not([hidden])'} | ${'.owl > *'}
- ${'.group:hover .group-hover\\:owl > :not([hidden]) + :not([hidden])'} | ${'.group-hover\\:owl > *'}
- ${'.peer:first-child ~ .peer-first\\:shadow-md'} | ${'.peer-first\\:shadow-md'}
- ${'.whats ~ .next > span:hover'} | ${'span'}
- ${'.foo .bar ~ .baz > .next > span > article:hover'} | ${'article'}
- `('should generate "$after" from "$before"', ({ before, after }) => {
- expect(elementSelectorParser.transformSync(before).join(', ')).toEqual(after)
- })
+it.each`
+ before | after
+ ${'*'} | ${'*'}
+ ${'*:hover'} | ${'*'}
+ ${'* > *'} | ${'* > *'}
+ ${'.foo'} | ${'.foo'}
+ ${'.foo:hover'} | ${'.foo'}
+ ${'.foo:focus:hover'} | ${'.foo'}
+ ${'li:first-child'} | ${'li'}
+ ${'li:before'} | ${'li:before'}
+ ${'li::before'} | ${'li::before'}
+ ${'#app .foo'} | ${'.foo'}
+ ${'#app'} | ${'[id=app]'}
+ ${'#app.other'} | ${'.other'}
+ ${'input[type="text"]'} | ${'[type="text"]'}
+ ${'input[type="text"].foo'} | ${'.foo'}
+ ${'.group .group\\:foo'} | ${'.group\\:foo'}
+ ${'.group:hover .group-hover\\:foo'} | ${'.group-hover\\:foo'}
+ ${'.owl > * + *'} | ${'.owl > *'}
+ ${'.owl > :not([hidden]) + :not([hidden])'} | ${'.owl > *'}
+ ${'.group:hover .group-hover\\:owl > :not([hidden]) + :not([hidden])'} | ${'.group-hover\\:owl > *'}
+ ${'.peer:first-child ~ .peer-first\\:shadow-md'} | ${'.peer-first\\:shadow-md'}
+ ${'.whats ~ .next > span:hover'} | ${'span'}
+ ${'.foo .bar ~ .baz > .next > span > article:hover'} | ${'article'}
+`('should generate "$after" from "$before"', ({ before, after }) => {
+ expect(elementSelectorParser.transformSync(before).join(', ')).toEqual(after)
})
diff --git a/tests/modify-selectors.test.js b/tests/modify-selectors.test.js
index 3176b17f3..e6ce3cf14 100644
--- a/tests/modify-selectors.test.js
+++ b/tests/modify-selectors.test.js
@@ -1,95 +1,93 @@
import selectorParser from 'postcss-selector-parser'
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- test('modify selectors', () => {
- let config = {
- darkMode: 'class',
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
Lorem ipsum dolor sit amet...
-
-
-
Lorem ipsum dolor sit amet...
-
-
-
Lorem ipsum dolor sit amet...
-
-
-
Lorem ipsum dolor sit amet...
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {},
- plugins: [
- function ({ addVariant }) {
- addVariant('foo', ({ modifySelectors, separator }) => {
- modifySelectors(({ selector }) => {
- return selectorParser((selectors) => {
- selectors.walkClasses((classNode) => {
- classNode.value = `foo${separator}${classNode.value}`
- classNode.parent.insertBefore(classNode, selectorParser().astSync(`.foo `))
- })
- }).processSync(selector)
- })
+test('modify selectors', () => {
+ let config = {
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
Lorem ipsum dolor sit amet...
+
+
+
Lorem ipsum dolor sit amet...
+
+
+
Lorem ipsum dolor sit amet...
+
+
+
Lorem ipsum dolor sit amet...
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {},
+ plugins: [
+ function ({ addVariant }) {
+ addVariant('foo', ({ modifySelectors, separator }) => {
+ modifySelectors(({ selector }) => {
+ return selectorParser((selectors) => {
+ selectors.walkClasses((classNode) => {
+ classNode.value = `foo${separator}${classNode.value}`
+ classNode.parent.insertBefore(classNode, selectorParser().astSync(`.foo `))
+ })
+ }).processSync(selector)
})
- },
- ],
+ })
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ @layer components {
+ .markdown > p {
+ margin-top: 12px;
+ }
}
+ `
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .markdown > p {
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .markdown > p {
+ margin-top: 12px;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .foo .foo\:markdown > p,
+ .foo .foo\:visited\:markdown:visited > p {
+ margin-top: 12px;
+ }
+ @media (min-width: 1024px) {
+ .foo .lg\:foo\:disabled\:markdown:disabled > p {
margin-top: 12px;
}
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .markdown > p {
- margin-top: 12px;
- }
- .font-bold {
+ .foo .foo\:font-bold,
+ .foo .foo\:hover\:font-bold:hover {
+ font-weight: 700;
+ }
+ @media (min-width: 640px) {
+ .foo .sm\:foo\:font-bold {
font-weight: 700;
}
- .foo .foo\:markdown > p,
- .foo .foo\:visited\:markdown:visited > p {
- margin-top: 12px;
- }
- @media (min-width: 1024px) {
- .foo .lg\:foo\:disabled\:markdown:disabled > p {
- margin-top: 12px;
- }
- }
- .foo .foo\:font-bold,
- .foo .foo\:hover\:font-bold:hover {
+ }
+ @media (min-width: 768px) {
+ .foo .md\:foo\:focus\:font-bold:focus {
font-weight: 700;
}
- @media (min-width: 640px) {
- .foo .sm\:foo\:font-bold {
- font-weight: 700;
- }
- }
- @media (min-width: 768px) {
- .foo .md\:foo\:focus\:font-bold:focus {
- font-weight: 700;
- }
- }
- `)
- })
+ }
+ `)
})
})
diff --git a/tests/mutable.test.js b/tests/mutable.test.js
index 45419380f..5c3f9a487 100644
--- a/tests/mutable.test.js
+++ b/tests/mutable.test.js
@@ -1,54 +1,52 @@
import path from 'path'
import postcss from 'postcss'
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- function pluginThatMutatesRules() {
- return (root) => {
- root.walkRules((rule) => {
- rule.nodes
- .filter((node) => node.prop === 'background-image')
- .forEach((node) => {
- node.value = 'url("./bar.png")'
- })
+function pluginThatMutatesRules() {
+ return (root) => {
+ root.walkRules((rule) => {
+ rule.nodes
+ .filter((node) => node.prop === 'background-image')
+ .forEach((node) => {
+ node.value = 'url("./bar.png")'
+ })
- return rule
- })
- }
+ return rule
+ })
+ }
+}
+
+test('plugins mutating rules after tailwind doesnt break it', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ backgroundImage: {
+ foo: 'url("./foo.png")',
+ },
+ },
+ plugins: [],
}
- test('plugins mutating rules after tailwind doesnt break it', async () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- backgroundImage: {
- foo: 'url("./foo.png")',
- },
- },
- plugins: [],
- }
+ function checkResult(result) {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-foo {
+ background-image: url('./foo.png');
+ }
+ `)
+ }
- function checkResult(result) {
- expect(result.css).toMatchFormattedCss(css`
- .bg-foo {
- background-image: url('./foo.png');
- }
- `)
- }
+ // Verify the first run produces the expected result
+ let firstRun = await run('@tailwind utilities', config)
+ checkResult(firstRun)
- // Verify the first run produces the expected result
- let firstRun = await run('@tailwind utilities', config)
- checkResult(firstRun)
-
- // Outside of the context of tailwind jit more postcss plugins may operate on the AST:
- // In this case we have a plugin that mutates rules directly
- await postcss([pluginThatMutatesRules()]).process(firstRun, {
- from: path.resolve(__filename),
- })
-
- // Verify subsequent runs don't produce mutated rules
- let secondRun = await run('@tailwind utilities', config)
- checkResult(secondRun)
+ // Outside of the context of tailwind jit more postcss plugins may operate on the AST:
+ // In this case we have a plugin that mutates rules directly
+ await postcss([pluginThatMutatesRules()]).process(firstRun, {
+ from: path.resolve(__filename),
})
+
+ // Verify subsequent runs don't produce mutated rules
+ let secondRun = await run('@tailwind utilities', config)
+ checkResult(secondRun)
})
diff --git a/tests/negateValue.test.js b/tests/negateValue.test.js
index 052132f91..c31741d48 100644
--- a/tests/negateValue.test.js
+++ b/tests/negateValue.test.js
@@ -1,17 +1,14 @@
import negateValue from '../src/util/negateValue'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- test('it negates numeric CSS values', () => {
- expect(negateValue('5')).toEqual('-5')
- expect(negateValue('10px')).toEqual('-10px')
- expect(negateValue('18rem')).toEqual('-18rem')
- expect(negateValue('-10')).toEqual('10')
- expect(negateValue('-7ch')).toEqual('7ch')
- })
-
- test('values that cannot be negated become undefined', () => {
- expect(negateValue('auto')).toBeUndefined()
- expect(negateValue('cover')).toBeUndefined()
- })
+test('it negates numeric CSS values', () => {
+ expect(negateValue('5')).toEqual('-5')
+ expect(negateValue('10px')).toEqual('-10px')
+ expect(negateValue('18rem')).toEqual('-18rem')
+ expect(negateValue('-10')).toEqual('10')
+ expect(negateValue('-7ch')).toEqual('7ch')
+})
+
+test('values that cannot be negated become undefined', () => {
+ expect(negateValue('auto')).toBeUndefined()
+ expect(negateValue('cover')).toBeUndefined()
})
diff --git a/tests/negated-content.test.js b/tests/negated-content.test.js
index 66e231946..6d46e3a8d 100644
--- a/tests/negated-content.test.js
+++ b/tests/negated-content.test.js
@@ -1,29 +1,27 @@
import * as path from 'path'
-import { crosscheck, run, css, defaults } from './util/run'
+import { run, css, defaults } from './util/run'
-crosscheck(() => {
- it('should be possible to use negated content patterns', () => {
- let config = {
- content: [
- path.resolve(__dirname, './negated-content-*.test.html'),
- '!' + path.resolve(__dirname, './negated-content-ignore.test.html'),
- ],
- corePlugins: { preflight: false },
- }
+it('should be possible to use negated content patterns', () => {
+ let config = {
+ content: [
+ path.resolve(__dirname, './negated-content-*.test.html'),
+ '!' + path.resolve(__dirname, './negated-content-ignore.test.html'),
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .uppercase {
- text-transform: uppercase;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .uppercase {
+ text-transform: uppercase;
+ }
+ `)
})
})
diff --git a/tests/negative-prefix.test.js b/tests/negative-prefix.test.js
index c799bb54e..edd5b7aaa 100644
--- a/tests/negative-prefix.test.js
+++ b/tests/negative-prefix.test.js
@@ -1,346 +1,362 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- test('using a negative prefix with a negative scale value', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- margin: {
- 2: '8px',
- '-2': '-4px',
- },
+test('using a negative prefix with a negative scale value', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ margin: {
+ 2: '8px',
+ '-2': '-4px',
},
- }
+ },
+ }
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .-mt-2 {
- margin-top: -4px;
- }
- .mt-2 {
- margin-top: 8px;
- }
- `)
- })
- })
-
- test('using a negative scale value with a plugin that does not support dynamic negative values', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- opacity: {
- '-50': '0.5',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .-opacity-50 {
- opacity: 0.5;
- }
- `)
- })
- })
-
- test('using a negative prefix without a negative scale value', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- margin: {
- 5: '20px',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .-mt-5 {
- margin-top: -20px;
- }
- .mt-5 {
- margin-top: 20px;
- }
- `)
- })
- })
-
- test('being an asshole', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- margin: {
- '-[10px]': '55px',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .-mt-\[10px\] {
- margin-top: 55px;
- }
- `)
- })
- })
-
- test('being a real asshole', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- margin: {
- '[10px]': '55px',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .-mt-\[10px\] {
- margin-top: -55px;
- }
- `)
- })
- })
-
- test('a value that includes a variable', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- margin: {
- 5: 'var(--sizing-5)',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .-mt-5 {
- margin-top: calc(var(--sizing-5) * -1);
- }
- .mt-5 {
- margin-top: var(--sizing-5);
- }
- `)
- })
- })
-
- test('a value that includes a calc', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- margin: {
- 5: 'calc(52px * -3)',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .-mt-5 {
- margin-top: 156px;
- }
- .mt-5 {
- margin-top: -156px;
- }
- `)
- })
- })
-
- test('a value that includes min/max/clamp functions', () => {
- let config = {
- content: [
- { raw: html`
` },
- ],
- theme: {
- margin: {
- min: 'min(100vmin, 3rem)',
- max: 'max(100vmax, 3rem)',
- clamp: 'clamp(1rem, 100vh, 3rem)',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .-mt-clamp {
- margin-top: calc(-1 * clamp(1rem, 100vh, 3rem));
- }
- .-mt-max {
- margin-top: calc(-1 * max(100vmax, 3rem));
- }
- .-mt-min {
- margin-top: calc(-1 * min(100vmin, 3rem));
- }
- .mt-clamp {
- margin-top: clamp(1rem, 100vh, 3rem);
- }
- .mt-max {
- margin-top: max(100vmax, 3rem);
- }
- .mt-min {
- margin-top: min(100vmin, 3rem);
- }
- `)
- })
- })
-
- test('a keyword value', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- margin: {
- auto: 'auto',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .mt-auto {
- margin-top: auto;
- }
- `)
- })
- })
-
- test('a zero value', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- margin: {
- 0: '0',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .-mt-0,
- .mt-0 {
- margin-top: 0;
- }
- `)
- })
- })
-
- test('a color', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- colors: {
- red: 'red',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css``)
- })
- })
-
- test('arbitrary values', () => {
- let config = {
- content: [{ raw: html`
` }],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .-mt-\[10px\] {
- margin-top: -10px;
- }
- `)
- })
- })
-
- test('negating a negative scale value', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- margin: {
- weird: '-15px',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .-mt-weird {
- margin-top: 15px;
- }
- `)
- })
- })
-
- test('negating a default value', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- margin: {
- DEFAULT: '15px',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .-mt {
- margin-top: -15px;
- }
- `)
- })
- })
-
- test('using a negative prefix with a negative default scale value', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- margin: {
- DEFAULT: '8px',
- '-DEFAULT': '-4px',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .-mt {
- margin-top: -4px;
- }
- .mt {
- margin-top: 8px;
- }
- `)
- })
- })
-
- test('negating a default value with a configured prefix', () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`
` }],
- theme: {
- margin: {
- DEFAULT: '15px',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css`
- .tw--mt {
- margin-top: -15px;
- }
- `)
- })
- })
-
- test('arbitrary value keywords should be ignored', () => {
- let config = {
- content: [{ raw: html`
` }],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchCss(css``)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .-mt-2 {
+ margin-top: -4px;
+ }
+ .mt-2 {
+ margin-top: 8px;
+ }
+ `)
+ })
+})
+
+test('using a negative scale value with a plugin that does not support dynamic negative values', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ opacity: {
+ '-50': '0.5',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .-opacity-50 {
+ opacity: 0.5;
+ }
+ `)
+ })
+})
+
+test('using a negative prefix without a negative scale value', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ margin: {
+ 5: '20px',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .-mt-5 {
+ margin-top: -20px;
+ }
+ .mt-5 {
+ margin-top: 20px;
+ }
+ `)
+ })
+})
+
+test('being an asshole', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ margin: {
+ '-[10px]': '55px',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .-mt-\[10px\] {
+ margin-top: 55px;
+ }
+ `)
+ })
+})
+
+test('being a real asshole', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ margin: {
+ '[10px]': '55px',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .-mt-\[10px\] {
+ margin-top: -55px;
+ }
+ `)
+ })
+})
+
+test('a value that includes a variable', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ margin: {
+ 5: 'var(--sizing-5)',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .-mt-5 {
+ margin-top: calc(var(--sizing-5) * -1);
+ }
+ .mt-5 {
+ margin-top: var(--sizing-5);
+ }
+ `)
+ })
+})
+
+test('a value that includes a calc', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ margin: {
+ 5: 'calc(52px * -3)',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .-mt-5 {
+ margin-top: 156px;
+ }
+ .mt-5 {
+ margin-top: -156px;
+ }
+ `)
+ })
+})
+
+test('a value that includes min/max/clamp functions', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ margin: {
+ min: 'min(100vmin, 3rem)',
+ max: 'max(100vmax, 3rem)',
+ clamp: 'clamp(1rem, 100vh, 3rem)',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .-mt-clamp {
+ margin-top: calc(-1 * clamp(1rem, 100vh, 3rem));
+ }
+ .-mt-max {
+ margin-top: calc(-1 * max(100vmax, 3rem));
+ }
+ .-mt-min {
+ margin-top: calc(-1 * min(100vmin, 3rem));
+ }
+ .mt-clamp {
+ margin-top: clamp(1rem, 100vh, 3rem);
+ }
+ .mt-max {
+ margin-top: max(100vmax, 3rem);
+ }
+ .mt-min {
+ margin-top: min(100vmin, 3rem);
+ }
+ `)
+ })
+})
+
+test('a keyword value', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ margin: {
+ auto: 'auto',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .mt-auto {
+ margin-top: auto;
+ }
+ `)
+ })
+})
+
+test('a zero value', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ margin: {
+ 0: '0',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .-mt-0,
+ .mt-0 {
+ margin-top: 0;
+ }
+ `)
+ })
+})
+
+test('a color', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ colors: {
+ red: 'red',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css``)
+ })
+})
+
+test('arbitrary values', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .-mt-\[10px\] {
+ margin-top: -10px;
+ }
+ `)
+ })
+})
+
+test('negating a negative scale value', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ margin: {
+ weird: '-15px',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .-mt-weird {
+ margin-top: 15px;
+ }
+ `)
+ })
+})
+
+test('negating a default value', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ margin: {
+ DEFAULT: '15px',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .-mt {
+ margin-top: -15px;
+ }
+ `)
+ })
+})
+
+test('using a negative prefix with a negative default scale value', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ margin: {
+ DEFAULT: '8px',
+ '-DEFAULT': '-4px',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .-mt {
+ margin-top: -4px;
+ }
+ .mt {
+ margin-top: 8px;
+ }
+ `)
+ })
+})
+
+test('negating a default value with a configured prefix', () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`
` }],
+ theme: {
+ margin: {
+ DEFAULT: '15px',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .tw--mt {
+ margin-top: -15px;
+ }
+ `)
+ })
+})
+
+test('arbitrary value keywords should be ignored', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css``)
+ })
+
+ // This is a weird test but it used to crash because the negative prefix + variant used to cause an undefined utility to be generated
+ test('addUtilities without negative prefix + variant + negative prefix in content should not crash', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [
+ ({ addUtilities }) => {
+ addUtilities({
+ '.top-lg': {
+ top: '6rem',
+ },
+ })
+ },
+ ],
+ }
+
+ let result = await run('@tailwind utilities', config)
+
+ expect(result.css).toMatchCss(css``)
})
})
diff --git a/tests/normalize-config.test.js b/tests/normalize-config.test.js
index a0b7a59bb..0468c8c78 100644
--- a/tests/normalize-config.test.js
+++ b/tests/normalize-config.test.js
@@ -1,164 +1,155 @@
import { normalizeConfig } from '../src/util/normalizeConfig'
import resolveConfig from '../src/public/resolve-config'
-import { crosscheck, run, css } from './util/run'
+import { run, css } from './util/run'
-crosscheck(({ stable, oxide }) => {
- it.each`
- config
- ${{ purge: [{ raw: 'text-center' }] }}
- ${{ purge: { content: [{ raw: 'text-center' }] } }}
- ${{ content: { content: [{ raw: 'text-center' }] } }}
- `('should normalize content $config', ({ config }) => {
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .text-center {
- text-align: center;
- }
- `)
- })
- })
-
- it.each`
- config
- ${{ purge: { safelist: ['text-center'] } }}
- ${{ purge: { options: { safelist: ['text-center'] } } }}
- ${{ content: { safelist: ['text-center'] } }}
- `('should normalize safelist $config', ({ config }) => {
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .text-center {
- text-align: center;
- }
- `)
- })
- })
-
- oxide.test.todo('should normalize extractors')
- stable.test.each`
- config
- ${{ content: [{ raw: 'text-center' }], purge: { extract: () => ['font-bold'] } }}
- ${{ content: [{ raw: 'text-center' }], purge: { extract: { DEFAULT: () => ['font-bold'] } } }}
- ${{
- content: [{ raw: 'text-center' }],
- purge: { options: { defaultExtractor: () => ['font-bold'] } },
- }}
- ${{
- content: [{ raw: 'text-center' }],
- purge: {
- options: { extractors: [{ extractor: () => ['font-bold'], extensions: ['html'] }] },
- },
- }}
- ${{ content: [{ raw: 'text-center' }], purge: { extract: { html: () => ['font-bold'] } } }}
- `('should normalize extractors $config', ({ config }) => {
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .font-bold {
- font-weight: 700;
- }
- `)
- })
- })
-
- oxide.test.todo('should still be possible to use the "old" v2 config')
- stable.test('should still be possible to use the "old" v2 config', () => {
- let config = {
- purge: {
- content: [
- { raw: 'text-svelte', extension: 'svelte' },
- { raw: '# My Big Heading', extension: 'md' },
- ],
- options: {
- defaultExtractor(content) {
- return content.split(' ').concat(['font-bold'])
- },
- },
- extract: {
- svelte(content) {
- return content.replace('svelte', 'center').split(' ')
- },
- },
- transform: {
- md() {
- return 'text-4xl'
- },
- },
- },
- theme: {
- extends: {},
- },
- variants: {
- extends: {},
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .text-center {
- text-align: center;
- }
- .text-4xl {
- font-size: 2.25rem;
- line-height: 2.5rem;
- }
- .font-bold {
- font-weight: 700;
- }
- `)
- })
- })
-
- it('should keep content files with globs', () => {
- let config = {
- content: ['./example-folder/**/*.{html,js}'],
- }
-
- stable.expect(normalizeConfig(resolveConfig(config)).content).toEqual({
- files: ['./example-folder/**/*.{html,js}'],
- relative: false,
- extract: {},
- transform: {},
- })
- oxide.expect(normalizeConfig(resolveConfig(config)).content).toEqual({
- files: ['./example-folder/**/*.{html,js}'],
- relative: true,
- extract: {},
- transform: {},
- })
- })
-
- it('should warn when we detect invalid globs with incorrect brace expansion', () => {
- let config = {
- content: [
- './{example-folder}/**/*.{html,js}',
- './{example-folder}/**/*.{html}',
- './example-folder/**/*.{html}',
- ],
- }
-
- let normalizedConfig = normalizeConfig(resolveConfig(config)).content
-
- // No rewrite happens
- stable.expect(normalizedConfig).toEqual({
- files: [
- './{example-folder}/**/*.{html,js}',
- './{example-folder}/**/*.{html}',
- './example-folder/**/*.{html}',
- ],
- relative: false,
- extract: {},
- transform: {},
- })
- oxide.expect(normalizedConfig).toEqual({
- files: [
- './{example-folder}/**/*.{html,js}',
- './{example-folder}/**/*.{html}',
- './example-folder/**/*.{html}',
- ],
- relative: true,
- extract: {},
- transform: {},
- })
-
- expect().toHaveBeenWarnedWith(['invalid-glob-braces'])
+it.each`
+ config
+ ${{ purge: [{ raw: 'text-center' }] }}
+ ${{ purge: { content: [{ raw: 'text-center' }] } }}
+ ${{ content: { files: [], content: [{ raw: 'text-center' }] } }}
+`('should normalize content $config', ({ config }) => {
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .text-center {
+ text-align: center;
+ }
+ `)
})
})
+
+it.each`
+ config
+ ${{ purge: { safelist: ['text-center'] } }}
+ ${{ purge: { options: { safelist: ['text-center'] } } }}
+ ${{ content: { files: [], safelist: ['text-center'] } }}
+`('should normalize safelist $config', ({ config }) => {
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .text-center {
+ text-align: center;
+ }
+ `)
+ })
+})
+
+test.each`
+ config
+ ${{
+ purge: { content: [{ raw: 'text-center' }], extract: () => ['font-bold'] },
+}}
+ ${{
+ purge: { content: [{ raw: 'text-center' }], extract: { DEFAULT: () => ['font-bold'] } },
+}}
+ ${{
+ purge: {
+ content: [{ raw: 'text-center' }],
+ options: { defaultExtractor: () => ['font-bold'] },
+ },
+}}
+ ${{
+ purge: {
+ content: [{ raw: 'text-center' }],
+ options: { extractors: [{ extractor: () => ['font-bold'], extensions: ['html'] }] },
+ },
+}}
+ ${{
+ purge: {
+ content: [{ raw: 'text-center' }],
+ extract: { html: () => ['font-bold'] },
+ },
+}}
+`('should normalize extractors $config', ({ config }) => {
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .font-bold {
+ font-weight: 700;
+ }
+ `)
+ })
+})
+
+test('should still be possible to use the "old" v2 config', () => {
+ let config = {
+ purge: {
+ content: [
+ { raw: 'text-svelte', extension: 'svelte' },
+ { raw: '# My Big Heading', extension: 'md' },
+ ],
+ options: {
+ defaultExtractor(content) {
+ return content.split(' ').concat(['font-bold'])
+ },
+ },
+ extract: {
+ svelte(content) {
+ return content.replace('svelte', 'center').split(' ')
+ },
+ },
+ transform: {
+ md() {
+ return 'text-4xl'
+ },
+ },
+ },
+ theme: {
+ extends: {},
+ },
+ variants: {
+ extends: {},
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .text-center {
+ text-align: center;
+ }
+ .text-4xl {
+ font-size: 2.25rem;
+ line-height: 2.5rem;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ `)
+ })
+})
+
+it('should keep content files with globs', () => {
+ let config = {
+ content: ['./example-folder/**/*.{html,js}'],
+ }
+
+ expect(normalizeConfig(resolveConfig(config)).content).toEqual({
+ files: ['./example-folder/**/*.{html,js}'],
+ relative: false,
+ extract: {},
+ transform: {},
+ })
+})
+
+it('should warn when we detect invalid globs with incorrect brace expansion', () => {
+ let config = {
+ content: [
+ './{example-folder}/**/*.{html,js}',
+ './{example-folder}/**/*.{html}',
+ './example-folder/**/*.{html}',
+ ],
+ }
+
+ let normalizedConfig = normalizeConfig(resolveConfig(config)).content
+
+ // No rewrite happens
+ expect(normalizedConfig).toEqual({
+ files: [
+ './{example-folder}/**/*.{html,js}',
+ './{example-folder}/**/*.{html}',
+ './example-folder/**/*.{html}',
+ ],
+ relative: false,
+ extract: {},
+ transform: {},
+ })
+
+ expect().toHaveBeenWarnedWith(['invalid-glob-braces'])
+})
diff --git a/tests/normalize-data-types.test.js b/tests/normalize-data-types.test.js
index eff2fa677..f01efa5e6 100644
--- a/tests/normalize-data-types.test.js
+++ b/tests/normalize-data-types.test.js
@@ -1,5 +1,5 @@
+import { css, run } from './util/run'
import { normalize } from '../src/util/dataTypes'
-import { crosscheck } from './util/run'
let table = [
['foo', 'foo'],
@@ -42,13 +42,83 @@ let table = [
['var(--my-var-with-more-than-3-words)', 'var(--my-var-with-more-than-3-words)'],
['var(--width, calc(100%+1rem))', 'var(--width, calc(100% + 1rem))'],
+ ['calc(1px*(7--12/24))', 'calc(1px * (7 - -12 / 24))'],
+ ['calc((7-32)/(1400-782))', 'calc((7 - 32) / (1400 - 782))'],
+ ['calc((7-3)/(1400-782))', 'calc((7 - 3) / (1400 - 782))'],
+ ['calc((7-32)/(1400-782))', 'calc((7 - 32) / (1400 - 782))'],
+ ['calc((70-3)/(1400-782))', 'calc((70 - 3) / (1400 - 782))'],
+ ['calc((70-32)/(1400-782))', 'calc((70 - 32) / (1400 - 782))'],
+ ['calc((704-3)/(1400-782))', 'calc((704 - 3) / (1400 - 782))'],
+ ['calc((704-320))', 'calc((704 - 320))'],
+ ['calc((704-320)/1)', 'calc((704 - 320) / 1)'],
+ ['calc((704-320)/(1400-782))', 'calc((704 - 320) / (1400 - 782))'],
+ ['calc(24px+-1rem)', 'calc(24px + -1rem)'],
+ ['calc(24px+(-1rem))', 'calc(24px + (-1rem))'],
+ ['calc(24px_+_-1rem)', 'calc(24px + -1rem)'],
+ ['calc(24px+(-1rem))', 'calc(24px + (-1rem))'],
+ ['calc(24px_+_(-1rem))', 'calc(24px + (-1rem))'],
+ [
+ 'calc(var(--10-10px,calc(-20px-(-30px--40px)-50px)',
+ 'calc(var(--10-10px,calc(-20px - (-30px - -40px) - 50px)',
+ ],
+ ['calc(theme(spacing.1-bar))', 'calc(theme(spacing.1-bar))'],
+ ['theme(spacing.1-bar)', 'theme(spacing.1-bar)'],
+ ['calc(theme(spacing.1-bar))', 'calc(theme(spacing.1-bar))'],
+ ['calc(1rem-theme(spacing.1-bar))', 'calc(1rem - theme(spacing.1-bar))'],
+ ['calc(theme(spacing.foo-2))', 'calc(theme(spacing.foo-2))'],
+ ['calc(theme(spacing.foo-bar))', 'calc(theme(spacing.foo-bar))'],
+
+ // A negative number immediately after a `,` should not have spaces inserted
+ ['clamp(-3px+4px,-3px+4px,-3px+4px)', 'clamp(-3px + 4px,-3px + 4px,-3px + 4px)'],
+
+ // Prevent formatting inside `var()` functions
+ ['calc(var(--foo-bar-bar)*2)', 'calc(var(--foo-bar-bar) * 2)'],
+
+ // Prevent formatting inside `env()` functions
+ ['calc(env(safe-area-inset-bottom)*2)', 'calc(env(safe-area-inset-bottom) * 2)'],
+ // Should format inside `calc()` nested in `env()`
+ ['env(safe-area-inset-bottom,calc(10px+20px))', 'env(safe-area-inset-bottom,calc(10px + 20px))'],
+ [
+ 'calc(env(safe-area-inset-bottom,calc(10px+20px))+5px)',
+ 'calc(env(safe-area-inset-bottom,calc(10px + 20px)) + 5px)',
+ ],
+
+ // Prevent formatting keywords
+ ['minmax(min-content,25%)', 'minmax(min-content,25%)'],
+
// Misc
['color(0_0_0/1.0)', 'color(0 0 0/1.0)'],
['color(0_0_0_/_1.0)', 'color(0 0 0 / 1.0)'],
]
-crosscheck(() => {
- it.each(table)('normalize data: %s', (input, output) => {
- expect(normalize(input)).toBe(output)
+it.each(table)('normalize data: %s', (input, output) => {
+ expect(normalize(input)).toBe(output)
+})
+
+it('should not automatically inject the `var()` for properties that accept `` as the value', () => {
+ let config = {
+ content: [
+ // Automatic var injection
+ { raw: '[color:--foo]' },
+
+ // Automatic var injection is skipped
+ { raw: '[timeline-scope:--foo]' },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .\[color\:--foo\] {
+ color: var(--foo);
+ }
+
+ .\[timeline-scope\:--foo\] {
+ timeline-scope: --foo;
+ }
+ `)
})
})
diff --git a/tests/normalize-screens.test.js b/tests/normalize-screens.test.js
index 464623f9f..da31c50d3 100644
--- a/tests/normalize-screens.test.js
+++ b/tests/normalize-screens.test.js
@@ -1,66 +1,63 @@
import { normalizeScreens } from '../src/util/normalizeScreens'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- it('should normalize an array of string values', () => {
- let screens = ['768px', '1200px']
+it('should normalize an array of string values', () => {
+ let screens = ['768px', '1200px']
- expect(normalizeScreens(screens)).toEqual([
- { name: '768px', not: false, values: [{ min: '768px', max: undefined }] },
- { name: '1200px', not: false, values: [{ min: '1200px', max: undefined }] },
- ])
- })
-
- it('should normalize an object with string values', () => {
- let screens = {
- a: '768px',
- b: '1200px',
- }
-
- expect(normalizeScreens(screens)).toEqual([
- { name: 'a', not: false, values: [{ min: '768px', max: undefined }] },
- { name: 'b', not: false, values: [{ min: '1200px', max: undefined }] },
- ])
- })
-
- it('should normalize an object with object values', () => {
- let screens = {
- a: { min: '768px' },
- b: { max: '1200px' },
- }
-
- expect(normalizeScreens(screens)).toEqual([
- { name: 'a', not: false, values: [{ min: '768px', max: undefined }] },
- { name: 'b', not: false, values: [{ min: undefined, max: '1200px' }] },
- ])
- })
-
- it('should normalize an object with multiple object values', () => {
- let screens = {
- a: [{ min: '768px' }, { max: '1200px' }],
- }
-
- expect(normalizeScreens(screens)).toEqual([
- {
- name: 'a',
- not: false,
- values: [
- { max: undefined, min: '768px', raw: undefined },
- { max: '1200px', min: undefined, raw: undefined },
- ],
- },
- ])
- })
-
- it('should normalize an object with object values (min-width normalized to width)', () => {
- let screens = {
- a: { 'min-width': '768px' },
- b: { max: '1200px' },
- }
-
- expect(normalizeScreens(screens)).toEqual([
- { name: 'a', not: false, values: [{ min: '768px', max: undefined }] },
- { name: 'b', not: false, values: [{ min: undefined, max: '1200px' }] },
- ])
- })
+ expect(normalizeScreens(screens)).toEqual([
+ { name: '768px', not: false, values: [{ min: '768px', max: undefined }] },
+ { name: '1200px', not: false, values: [{ min: '1200px', max: undefined }] },
+ ])
+})
+
+it('should normalize an object with string values', () => {
+ let screens = {
+ a: '768px',
+ b: '1200px',
+ }
+
+ expect(normalizeScreens(screens)).toEqual([
+ { name: 'a', not: false, values: [{ min: '768px', max: undefined }] },
+ { name: 'b', not: false, values: [{ min: '1200px', max: undefined }] },
+ ])
+})
+
+it('should normalize an object with object values', () => {
+ let screens = {
+ a: { min: '768px' },
+ b: { max: '1200px' },
+ }
+
+ expect(normalizeScreens(screens)).toEqual([
+ { name: 'a', not: false, values: [{ min: '768px', max: undefined }] },
+ { name: 'b', not: false, values: [{ min: undefined, max: '1200px' }] },
+ ])
+})
+
+it('should normalize an object with multiple object values', () => {
+ let screens = {
+ a: [{ min: '768px' }, { max: '1200px' }],
+ }
+
+ expect(normalizeScreens(screens)).toEqual([
+ {
+ name: 'a',
+ not: false,
+ values: [
+ { max: undefined, min: '768px', raw: undefined },
+ { max: '1200px', min: undefined, raw: undefined },
+ ],
+ },
+ ])
+})
+
+it('should normalize an object with object values (min-width normalized to width)', () => {
+ let screens = {
+ a: { 'min-width': '768px' },
+ b: { max: '1200px' },
+ }
+
+ expect(normalizeScreens(screens)).toEqual([
+ { name: 'a', not: false, values: [{ min: '768px', max: undefined }] },
+ { name: 'b', not: false, values: [{ min: undefined, max: '1200px' }] },
+ ])
})
diff --git a/tests/opacity.test.js b/tests/opacity.test.js
index 82b437ce8..04b23aea7 100644
--- a/tests/opacity.test.js
+++ b/tests/opacity.test.js
@@ -1,1115 +1,1065 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(({ stable, oxide }) => {
- test('opacity', () => {
- let config = {
- darkMode: 'class',
- content: [
- {
- raw: html`
-
-
-
-
-
- `,
- },
- ],
- corePlugins: {
- backgroundOpacity: false,
- borderOpacity: false,
- divideOpacity: false,
- placeholderOpacity: false,
- textOpacity: false,
+test('opacity', () => {
+ let config = {
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+ `,
},
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .divide-black > :not([hidden]) ~ :not([hidden]),
- .border-black {
- border-color: #000;
- }
- .bg-black {
- background-color: #000;
- }
- .text-black,
- .placeholder-black::placeholder {
- color: #000;
- }
- `)
- })
- })
-
- test('colors defined as functions work when opacity plugins are disabled', () => {
- let config = {
- darkMode: 'class',
- content: [
- {
- raw: html`
-
-
-
-
-
- `,
- },
- ],
- theme: {
- colors: {
- primary: ({ opacityValue }) =>
- opacityValue === undefined
- ? 'rgb(var(--color-primary))'
- : `rgb(var(--color-primary) / ${opacityValue})`,
- },
- },
- corePlugins: {
- backgroundOpacity: false,
- borderOpacity: false,
- divideOpacity: false,
- placeholderOpacity: false,
- textOpacity: false,
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .divide-primary > :not([hidden]) ~ :not([hidden]),
- .border-primary {
- border-color: rgb(var(--color-primary));
- }
- .bg-primary {
- background-color: rgb(var(--color-primary));
- }
- .text-primary,
- .placeholder-primary::placeholder {
- color: rgb(var(--color-primary));
- }
- `)
- })
- })
-
- it('can use defining custom properties for colors (opacity plugins enabled)', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- theme: {
- colors: {
- primary: 'rgb(var(--color-primary) / )',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .divide-primary > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-opacity: 1;
- border-color: rgb(var(--color-primary) / var(--tw-divide-opacity));
- }
- .divide-opacity-50 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-opacity: 0.5;
- }
- .border-primary {
- --tw-border-opacity: 1;
- border-color: rgb(var(--color-primary) / var(--tw-border-opacity));
- }
- .border-opacity-50 {
- --tw-border-opacity: 0.5;
- }
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: rgb(var(--color-primary) / var(--tw-bg-opacity));
- }
- .bg-opacity-50 {
- --tw-bg-opacity: 0.5;
- }
- .text-primary {
- --tw-text-opacity: 1;
- color: rgb(var(--color-primary) / var(--tw-text-opacity));
- }
- .text-opacity-50 {
- --tw-text-opacity: 0.5;
- }
- .placeholder-primary::placeholder {
- --tw-placeholder-opacity: 1;
- color: rgb(var(--color-primary) / var(--tw-placeholder-opacity));
- }
- .placeholder-opacity-50::placeholder {
- --tw-placeholder-opacity: 0.5;
- }
- .ring-primary {
- --tw-ring-opacity: 1;
- --tw-ring-color: rgb(var(--color-primary) / var(--tw-ring-opacity));
- }
- .ring-opacity-50 {
- --tw-ring-opacity: 0.5;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .divide-primary > :not([hidden]) ~ :not([hidden]),
- .border-primary {
- border-color: rgb(var(--color-primary) / 1);
- }
- .bg-primary {
- background-color: rgb(var(--color-primary) / 1);
- }
- .text-primary,
- .placeholder-primary::placeholder {
- color: rgb(var(--color-primary) / 1);
- }
- .ring-primary {
- --tw-ring-color: rgb(var(--color-primary) / 1);
- }
- `)
- })
- })
-
- it('can use rgb helper when defining custom properties for colors (opacity plugins disabled)', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- theme: {
- colors: {
- primary: 'rgb(var(--color-primary) / )',
- },
- },
- corePlugins: {
- backgroundOpacity: false,
- borderOpacity: false,
- divideOpacity: false,
- placeholderOpacity: false,
- textOpacity: false,
- ringOpacity: false,
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .divide-primary > :not([hidden]) ~ :not([hidden]) {
- border-color: rgb(var(--color-primary) / 1);
- }
- .divide-primary\/50 > :not([hidden]) ~ :not([hidden]) {
- border-color: rgb(var(--color-primary) / 0.5);
- }
- .border-primary {
- border-color: rgb(var(--color-primary) / 1);
- }
- .border-primary\/50 {
- border-color: rgb(var(--color-primary) / 0.5);
- }
- .bg-primary {
- background-color: rgb(var(--color-primary) / 1);
- }
- .bg-primary\/50 {
- background-color: rgb(var(--color-primary) / 0.5);
- }
- .text-primary {
- color: rgb(var(--color-primary) / 1);
- }
- .text-primary\/50 {
- color: rgb(var(--color-primary) / 0.5);
- }
- .placeholder-primary::placeholder {
- color: rgb(var(--color-primary) / 1);
- }
- .placeholder-primary\/50::placeholder {
- color: rgb(var(--color-primary) / 0.5);
- }
- .ring-primary {
- --tw-ring-color: rgb(var(--color-primary) / 1);
- }
- .ring-primary\/50 {
- --tw-ring-color: rgb(var(--color-primary) / 0.5);
- }
- `)
- })
- })
-
- it('can use hsl helper when defining custom properties for colors (opacity plugins enabled)', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- theme: {
- colors: {
- primary: 'hsl(var(--color-primary) / )',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .divide-primary > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-opacity: 1;
- border-color: hsl(var(--color-primary) / var(--tw-divide-opacity));
- }
- .divide-opacity-50 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-opacity: 0.5;
- }
- .border-primary {
- --tw-border-opacity: 1;
- border-color: hsl(var(--color-primary) / var(--tw-border-opacity));
- }
- .border-opacity-50 {
- --tw-border-opacity: 0.5;
- }
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: hsl(var(--color-primary) / var(--tw-bg-opacity));
- }
- .bg-opacity-50 {
- --tw-bg-opacity: 0.5;
- }
- .text-primary {
- --tw-text-opacity: 1;
- color: hsl(var(--color-primary) / var(--tw-text-opacity));
- }
- .text-opacity-50 {
- --tw-text-opacity: 0.5;
- }
- .placeholder-primary::placeholder {
- --tw-placeholder-opacity: 1;
- color: hsl(var(--color-primary) / var(--tw-placeholder-opacity));
- }
- .placeholder-opacity-50::placeholder {
- --tw-placeholder-opacity: 0.5;
- }
- .ring-primary {
- --tw-ring-opacity: 1;
- --tw-ring-color: hsl(var(--color-primary) / var(--tw-ring-opacity));
- }
- .ring-opacity-50 {
- --tw-ring-opacity: 0.5;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .divide-primary > :not([hidden]) ~ :not([hidden]),
- .border-primary {
- border-color: hsl(var(--color-primary) / 1);
- }
- .bg-primary {
- background-color: hsl(var(--color-primary) / 1);
- }
- .text-primary,
- .placeholder-primary::placeholder {
- color: hsl(var(--color-primary) / 1);
- }
- .ring-primary {
- --tw-ring-color: hsl(var(--color-primary) / 1);
- }
- `)
- })
- })
-
- it('can use hsl helper when defining custom properties for colors (opacity plugins disabled)', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- theme: {
- colors: {
- primary: 'hsl(var(--color-primary) / )',
- },
- },
- corePlugins: {
- backgroundOpacity: false,
- borderOpacity: false,
- divideOpacity: false,
- placeholderOpacity: false,
- textOpacity: false,
- ringOpacity: false,
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .divide-primary > :not([hidden]) ~ :not([hidden]) {
- border-color: hsl(var(--color-primary) / 1);
- }
- .divide-primary\/50 > :not([hidden]) ~ :not([hidden]) {
- border-color: hsl(var(--color-primary) / 0.5);
- }
- .border-primary {
- border-color: hsl(var(--color-primary) / 1);
- }
- .border-primary\/50 {
- border-color: hsl(var(--color-primary) / 0.5);
- }
- .bg-primary {
- background-color: hsl(var(--color-primary) / 1);
- }
- .bg-primary\/50 {
- background-color: hsl(var(--color-primary) / 0.5);
- }
- .text-primary {
- color: hsl(var(--color-primary) / 1);
- }
- .text-primary\/50 {
- color: hsl(var(--color-primary) / 0.5);
- }
- .placeholder-primary::placeholder {
- color: hsl(var(--color-primary) / 1);
- }
- .placeholder-primary\/50::placeholder {
- color: hsl(var(--color-primary) / 0.5);
- }
- .ring-primary {
- --tw-ring-color: hsl(var(--color-primary) / 1);
- }
- .ring-primary\/50 {
- --tw-ring-color: hsl(var(--color-primary) / 0.5);
- }
- `)
- })
- })
-
- test('Theme function in JS can apply alpha values to colors (1)', () => {
- let input = css`
- @tailwind utilities;
- `
-
- let output = css`
- .text-foo {
- color: #3b82f680;
- }
- `
-
- return run(input, {
- content: [{ raw: html`text-foo` }],
- corePlugins: { textOpacity: false },
- theme: {
- colors: { blue: { 500: '#3b82f6' } },
- extend: {
- textColor: ({ theme }) => ({
- foo: theme('colors.blue.500 / 50%'),
- }),
- },
- },
- }).then((result) => {
- expect(result.css).toMatchFormattedCss(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('Theme function in JS can apply alpha values to colors (2)', () => {
- let input = css`
- @tailwind utilities;
- `
-
- let output = css`
- .text-foo {
- color: #3b82f680;
- }
- `
-
- return run(input, {
- content: [{ raw: html`text-foo` }],
- corePlugins: { textOpacity: false },
- theme: {
- colors: { blue: { 500: '#3b82f6' } },
- extend: {
- textColor: ({ theme }) => ({
- foo: theme('colors.blue.500 / 0.5'),
- }),
- },
- },
- }).then((result) => {
- expect(result.css).toMatchFormattedCss(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('Theme function in JS can apply alpha values to colors (3)', () => {
- let input = css`
- @tailwind utilities;
- `
-
- let output = css`
- .text-foo {
- color: rgb(59 130 246 / var(--my-alpha));
- }
- `
-
- return run(input, {
- content: [{ raw: html`text-foo` }],
- corePlugins: { textOpacity: false },
- theme: {
- colors: { blue: { 500: '#3b82f6' } },
- extend: {
- textColor: ({ theme }) => ({
- foo: theme('colors.blue.500 / var(--my-alpha)'),
- }),
- },
- },
- }).then((result) => {
- expect(result.css).toMatchFormattedCss(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('Theme function in JS can apply alpha values to colors (4)', () => {
- let input = css`
- @tailwind utilities;
- `
-
- let output = css`
- .text-foo {
- color: #3c83f680;
- }
- `
-
- return run(input, {
- content: [{ raw: html`text-foo` }],
- corePlugins: { textOpacity: false },
- theme: {
- colors: { blue: { 500: 'hsl(217, 91%, 60%)' } },
- extend: {
- textColor: ({ theme }) => ({
- foo: theme('colors.blue.500 / 50%'),
- }),
- },
- },
- }).then((result) => {
- expect(result.css).toMatchFormattedCss(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('Theme function in JS can apply alpha values to colors (5)', () => {
- let input = css`
- @tailwind utilities;
- `
-
- let output = css`
- .text-foo {
- color: #3c83f680;
- }
- `
-
- return run(input, {
- content: [{ raw: html`text-foo` }],
- corePlugins: { textOpacity: false },
- theme: {
- colors: { blue: { 500: 'hsl(217, 91%, 60%)' } },
- extend: {
- textColor: ({ theme }) => ({
- foo: theme('colors.blue.500 / 0.5'),
- }),
- },
- },
- }).then((result) => {
- expect(result.css).toMatchFormattedCss(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('Theme function in JS can apply alpha values to colors (6)', () => {
- let input = css`
- @tailwind utilities;
- `
-
- let output = css`
- .text-foo {
- color: hsl(217 91% 60% / var(--my-alpha));
- }
- `
-
- return run(input, {
- content: [{ raw: html`text-foo` }],
- corePlugins: { textOpacity: false },
- theme: {
- colors: { blue: { 500: 'hsl(217, 91%, 60%)' } },
- extend: {
- textColor: ({ theme }) => ({
- foo: theme('colors.blue.500 / var(--my-alpha)'),
- }),
- },
- },
- }).then((result) => {
- expect(result.css).toMatchFormattedCss(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('Theme function in JS can apply alpha values to colors (7)', () => {
- let input = css`
- @tailwind utilities;
- `
-
- let output = css`
- .text-foo {
- color: rgb(var(--foo) / var(--my-alpha));
- }
- `
-
- return run(input, {
- content: [{ raw: html`text-foo` }],
- corePlugins: { textOpacity: false },
- theme: {
- colors: {
- blue: {
- 500: 'rgb(var(--foo) / )',
- },
- },
- extend: {
- textColor: ({ theme }) => ({
- foo: theme('colors.blue.500 / var(--my-alpha)'),
- }),
- },
- },
- }).then((result) => {
- expect(result.css).toMatchFormattedCss(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- test('Theme function prefers existing values in config', () => {
- let input = css`
- @tailwind utilities;
- `
-
- let output = css`
- .text-foo {
- color: purple;
- }
- `
-
- return run(input, {
- content: [{ raw: html`text-foo` }],
- corePlugins: { textOpacity: false },
- theme: {
- colors: {
- blue: {
- '500 / 50%': 'purple',
- },
- },
- extend: {
- textColor: ({ theme }) => ({
- foo: theme('colors.blue.500 / 50%'),
- }),
- },
- },
- }).then((result) => {
- expect(result.css).toMatchFormattedCss(output)
- expect(result.warnings().length).toBe(0)
- })
- })
-
- it('should be possible to use an as part of the color definition', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: ['backgroundColor', 'backgroundOpacity'],
- theme: {
- colors: {
- primary: 'rgb(var(--color-primary) / )',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-primary {
- --tw-bg-opacity: 1;
- background-color: rgb(var(--color-primary) / var(--tw-bg-opacity));
- }
- `)
- })
- })
-
- it('should be possible to use an as part of the color definition with an opacity modifiers', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: ['backgroundColor', 'backgroundOpacity'],
- theme: {
- colors: {
- primary: 'rgb(var(--color-primary) / )',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-primary\/50 {
- background-color: rgb(var(--color-primary) / 0.5);
- }
- `)
- })
- })
-
- it('should be possible to use an as part of the color definition with an opacity modifiers', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: ['backgroundColor'],
- theme: {
- colors: {
- primary: 'rgb(var(--color-primary) / )',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-primary {
- background-color: rgb(var(--color-primary) / 1);
- }
- `)
- })
- })
-
- it('should be possible to use inside arbitrary values', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: ['backgroundColor', 'backgroundOpacity'],
- theme: {
- colors: {
- primary: 'rgb(var(--color-primary) / )',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-\[rgb\(var\(--color-primary\)\/\\)\]\/50 {
- background-color: rgb(var(--color-primary) / 0.5);
- }
- `)
- })
- })
-
- it('Theme functions can reference values with slashes in brackets', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- theme: {
- colors: {
- 'a/b': '#000000',
- },
- extend: {
- backgroundColor: ({ theme }) => ({
- foo1: theme('colors[a/b]'),
- foo2: theme('colors[a/b]/50%'),
- }),
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .bg-foo1 {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- .bg-foo2 {
- background-color: #00000080;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .bg-foo1 {
- background-color: #000;
- }
- .bg-foo2 {
- background-color: #00000080;
- }
- `)
- })
- })
-
- it('works with opacity values defined as a placeholder or a function in when colors is a function', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- theme: {
- colors: () => ({
- foobar1: ({ opacityValue }) => `rgb(255 100 0 / ${opacityValue ?? '100%'})`,
- foobar2: `rgb(255 100 0 / )`,
- foobar3: {
- 100: ({ opacityValue }) => `rgb(255 100 0 / ${opacityValue ?? '100%'})`,
- 200: `rgb(255 100 0 / )`,
- },
- }),
- extend: {
- backgroundColor: ({ theme }) => ({
- foo10: theme('colors.foobar1'),
- foo20: theme('colors.foobar2'),
- foo30: theme('colors.foobar3.100'),
- foo40: theme('colors.foobar3.200'),
- foo11: theme('colors.foobar1 / 50%'),
- foo21: theme('colors.foobar2 / 50%'),
- foo31: theme('colors.foobar3.100 / 50%'),
- foo41: theme('colors.foobar3.200 / 50%'),
- }),
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .bg-foo10 {
- background-color: #ff6400;
- }
- .bg-foo11 {
- background-color: #ff640080;
- }
- .bg-foo20 {
- --tw-bg-opacity: 1;
- background-color: rgb(255 100 0 / var(--tw-bg-opacity));
- }
- .bg-foo21 {
- background-color: #ff640080;
- }
- .bg-foo30 {
- background-color: #ff6400;
- }
- .bg-foo31 {
- background-color: #ff640080;
- }
- .bg-foo40 {
- --tw-bg-opacity: 1;
- background-color: rgb(255 100 0 / var(--tw-bg-opacity));
- }
- .bg-foo41 {
- background-color: #ff640080;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .bg-foo10 {
- background-color: #ff6400;
- }
- .bg-foo11 {
- background-color: #ff640080;
- }
- .bg-foo20 {
- background-color: #ff6400;
- }
- .bg-foo21 {
- background-color: #ff640080;
- }
- .bg-foo30 {
- background-color: #ff6400;
- }
- .bg-foo31 {
- background-color: #ff640080;
- }
- .bg-foo40 {
- background-color: #ff6400;
- }
- .bg-foo41 {
- background-color: #ff640080;
- }
- `)
- })
- })
-
- it('The disableColorOpacityUtilitiesByDefault flag disables the color opacity plugins and removes their variables', () => {
- let config = {
- future: {
- disableColorOpacityUtilitiesByDefault: true,
- },
- content: [
- {
- raw: html`
-
-
-
-
- `,
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .divide-blue-300 > :not([hidden]) ~ :not([hidden]) {
- border-color: #93c5fd;
- }
- .divide-blue-300\/50 > :not([hidden]) ~ :not([hidden]) {
- border-color: #93c5fd80;
- }
- .divide-blue-300\/\[var\(--my-opacity\)\] > :not([hidden]) ~ :not([hidden]) {
- border-color: rgb(147 197 253 / var(--my-opacity));
- }
- .border-blue-300 {
- border-color: #93c5fd;
- }
- .border-blue-300\/50 {
- border-color: #93c5fd80;
- }
- .border-blue-300\/\[var\(--my-opacity\)\] {
- border-color: rgb(147 197 253 / var(--my-opacity));
- }
- .bg-blue-300 {
- background-color: #93c5fd;
- }
- .bg-blue-300\/50 {
- background-color: #93c5fd80;
- }
- .bg-blue-300\/\[var\(--my-opacity\)\] {
- background-color: rgb(147 197 253 / var(--my-opacity));
- }
- .text-blue-300 {
- color: #93c5fd;
- }
- .text-blue-300\/50 {
- color: #93c5fd80;
- }
- .text-blue-300\/\[var\(--my-opacity\)\] {
- color: rgb(147 197 253 / var(--my-opacity));
- }
- .placeholder-blue-300::placeholder {
- color: #93c5fd;
- }
- .placeholder-blue-300\/50::placeholder {
- color: #93c5fd80;
- }
- .placeholder-blue-300\/\[var\(--my-opacity\)\]::placeholder {
- color: rgb(147 197 253 / var(--my-opacity));
- }
- .ring-blue-300 {
- --tw-ring-color: #93c5fd;
- }
- .ring-blue-300\/50 {
- --tw-ring-color: #93c5fd80;
- }
- .ring-blue-300\/\[var\(--my-opacity\)\] {
- --tw-ring-color: rgb(147 197 253 / var(--my-opacity));
- }
- `)
- })
- })
-
- it('You can re-enable any opacity plugin even when disableColorOpacityUtilitiesByDefault is enabled', () => {
- let config = {
- future: {
- disableColorOpacityUtilitiesByDefault: true,
- },
- corePlugins: {
- backgroundOpacity: true,
- borderOpacity: true,
- divideOpacity: true,
- placeholderOpacity: true,
- ringOpacity: true,
- textOpacity: true,
- },
- content: [
- {
- raw: html`
-
-
-
-
- `,
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .divide-blue-300 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-opacity: 1;
- border-color: rgb(147 197 253 / var(--tw-divide-opacity));
- }
- .divide-blue-300\/50 > :not([hidden]) ~ :not([hidden]) {
- border-color: #93c5fd80;
- }
- .divide-blue-300\/\[var\(--my-opacity\)\] > :not([hidden]) ~ :not([hidden]) {
- border-color: rgb(147 197 253 / var(--my-opacity));
- }
- .divide-opacity-50 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-opacity: 0.5;
- }
- .border-blue-300 {
- --tw-border-opacity: 1;
- border-color: rgb(147 197 253 / var(--tw-border-opacity));
- }
- .border-blue-300\/50 {
- border-color: #93c5fd80;
- }
- .border-blue-300\/\[var\(--my-opacity\)\] {
- border-color: rgb(147 197 253 / var(--my-opacity));
- }
- .border-opacity-50 {
- --tw-border-opacity: 0.5;
- }
- .bg-blue-300 {
- --tw-bg-opacity: 1;
- background-color: rgb(147 197 253 / var(--tw-bg-opacity));
- }
- .bg-blue-300\/50 {
- background-color: #93c5fd80;
- }
- .bg-blue-300\/\[var\(--my-opacity\)\] {
- background-color: rgb(147 197 253 / var(--my-opacity));
- }
- .bg-opacity-50 {
- --tw-bg-opacity: 0.5;
- }
- .text-blue-300 {
- --tw-text-opacity: 1;
- color: rgb(147 197 253 / var(--tw-text-opacity));
- }
- .text-blue-300\/50 {
- color: #93c5fd80;
- }
- .text-blue-300\/\[var\(--my-opacity\)\] {
- color: rgb(147 197 253 / var(--my-opacity));
- }
- .text-opacity-50 {
- --tw-text-opacity: 0.5;
- }
- .placeholder-blue-300::placeholder {
- --tw-placeholder-opacity: 1;
- color: rgb(147 197 253 / var(--tw-placeholder-opacity));
- }
- .placeholder-blue-300\/50::placeholder {
- color: #93c5fd80;
- }
- .placeholder-blue-300\/\[var\(--my-opacity\)\]::placeholder {
- color: rgb(147 197 253 / var(--my-opacity));
- }
- .placeholder-opacity-50::placeholder {
- --tw-placeholder-opacity: 0.5;
- }
- .ring-blue-300 {
- --tw-ring-opacity: 1;
- --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity));
- }
- .ring-blue-300\/50 {
- --tw-ring-color: #93c5fd80;
- }
- .ring-blue-300\/\[var\(--my-opacity\)\] {
- --tw-ring-color: rgb(147 197 253 / var(--my-opacity));
- }
- .ring-opacity-50 {
- --tw-ring-opacity: 0.5;
- }
- `)
- })
- })
-
- it('can replace the potential alpha value in rgba/hsla syntax', async () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- colors: {
- 'primary-rgba': 'rgba(var(--color), 0.1)',
- 'primary-hsla': 'hsla(var(--color), 0.1)',
- },
- },
- }
-
- let result = await run('@tailwind utilities', config)
+ ],
+ corePlugins: {
+ backgroundOpacity: false,
+ borderOpacity: false,
+ divideOpacity: false,
+ placeholderOpacity: false,
+ textOpacity: false,
+ },
+ }
+ return run('@tailwind utilities', config).then((result) => {
expect(result.css).toMatchFormattedCss(css`
- .text-primary-hsla\/50 {
- color: hsla(var(--color), 0.5);
+ .divide-black > :not([hidden]) ~ :not([hidden]),
+ .border-black {
+ border-color: #000;
}
- .text-primary-rgba\/50 {
- color: rgba(var(--color), 0.5);
+ .bg-black {
+ background-color: #000;
+ }
+ .text-black,
+ .placeholder-black::placeholder {
+ color: #000;
}
`)
})
})
+
+test('colors defined as functions work when opacity plugins are disabled', () => {
+ let config = {
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+ `,
+ },
+ ],
+ theme: {
+ colors: {
+ primary: ({ opacityValue }) =>
+ opacityValue === undefined
+ ? 'rgb(var(--color-primary))'
+ : `rgb(var(--color-primary) / ${opacityValue})`,
+ },
+ },
+ corePlugins: {
+ backgroundOpacity: false,
+ borderOpacity: false,
+ divideOpacity: false,
+ placeholderOpacity: false,
+ textOpacity: false,
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .divide-primary > :not([hidden]) ~ :not([hidden]),
+ .border-primary {
+ border-color: rgb(var(--color-primary));
+ }
+ .bg-primary {
+ background-color: rgb(var(--color-primary));
+ }
+ .text-primary,
+ .placeholder-primary::placeholder {
+ color: rgb(var(--color-primary));
+ }
+ `)
+ })
+})
+
+it('can use defining custom properties for colors (opacity plugins enabled)', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ theme: {
+ colors: {
+ primary: 'rgb(var(--color-primary) / )',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .divide-primary > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: 1;
+ border-color: rgb(var(--color-primary) / var(--tw-divide-opacity));
+ }
+ .divide-opacity-50 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: 0.5;
+ }
+ .border-primary {
+ --tw-border-opacity: 1;
+ border-color: rgb(var(--color-primary) / var(--tw-border-opacity));
+ }
+ .border-opacity-50 {
+ --tw-border-opacity: 0.5;
+ }
+ .bg-primary {
+ --tw-bg-opacity: 1;
+ background-color: rgb(var(--color-primary) / var(--tw-bg-opacity));
+ }
+ .bg-opacity-50 {
+ --tw-bg-opacity: 0.5;
+ }
+ .text-primary {
+ --tw-text-opacity: 1;
+ color: rgb(var(--color-primary) / var(--tw-text-opacity));
+ }
+ .text-opacity-50 {
+ --tw-text-opacity: 0.5;
+ }
+ .placeholder-primary::placeholder {
+ --tw-placeholder-opacity: 1;
+ color: rgb(var(--color-primary) / var(--tw-placeholder-opacity));
+ }
+ .placeholder-opacity-50::placeholder {
+ --tw-placeholder-opacity: 0.5;
+ }
+ .ring-primary {
+ --tw-ring-opacity: 1;
+ --tw-ring-color: rgb(var(--color-primary) / var(--tw-ring-opacity));
+ }
+ .ring-opacity-50 {
+ --tw-ring-opacity: 0.5;
+ }
+ `)
+ })
+})
+
+it('can use rgb helper when defining custom properties for colors (opacity plugins disabled)', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ theme: {
+ colors: {
+ primary: 'rgb(var(--color-primary) / )',
+ },
+ },
+ corePlugins: {
+ backgroundOpacity: false,
+ borderOpacity: false,
+ divideOpacity: false,
+ placeholderOpacity: false,
+ textOpacity: false,
+ ringOpacity: false,
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .divide-primary > :not([hidden]) ~ :not([hidden]) {
+ border-color: rgb(var(--color-primary) / 1);
+ }
+ .divide-primary\/50 > :not([hidden]) ~ :not([hidden]) {
+ border-color: rgb(var(--color-primary) / 0.5);
+ }
+ .border-primary {
+ border-color: rgb(var(--color-primary) / 1);
+ }
+ .border-primary\/50 {
+ border-color: rgb(var(--color-primary) / 0.5);
+ }
+ .bg-primary {
+ background-color: rgb(var(--color-primary) / 1);
+ }
+ .bg-primary\/50 {
+ background-color: rgb(var(--color-primary) / 0.5);
+ }
+ .text-primary {
+ color: rgb(var(--color-primary) / 1);
+ }
+ .text-primary\/50 {
+ color: rgb(var(--color-primary) / 0.5);
+ }
+ .placeholder-primary::placeholder {
+ color: rgb(var(--color-primary) / 1);
+ }
+ .placeholder-primary\/50::placeholder {
+ color: rgb(var(--color-primary) / 0.5);
+ }
+ .ring-primary {
+ --tw-ring-color: rgb(var(--color-primary) / 1);
+ }
+ .ring-primary\/50 {
+ --tw-ring-color: rgb(var(--color-primary) / 0.5);
+ }
+ `)
+ })
+})
+
+it('can use hsl helper when defining custom properties for colors (opacity plugins enabled)', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ theme: {
+ colors: {
+ primary: 'hsl(var(--color-primary) / )',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .divide-primary > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: 1;
+ border-color: hsl(var(--color-primary) / var(--tw-divide-opacity));
+ }
+ .divide-opacity-50 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: 0.5;
+ }
+ .border-primary {
+ --tw-border-opacity: 1;
+ border-color: hsl(var(--color-primary) / var(--tw-border-opacity));
+ }
+ .border-opacity-50 {
+ --tw-border-opacity: 0.5;
+ }
+ .bg-primary {
+ --tw-bg-opacity: 1;
+ background-color: hsl(var(--color-primary) / var(--tw-bg-opacity));
+ }
+ .bg-opacity-50 {
+ --tw-bg-opacity: 0.5;
+ }
+ .text-primary {
+ --tw-text-opacity: 1;
+ color: hsl(var(--color-primary) / var(--tw-text-opacity));
+ }
+ .text-opacity-50 {
+ --tw-text-opacity: 0.5;
+ }
+ .placeholder-primary::placeholder {
+ --tw-placeholder-opacity: 1;
+ color: hsl(var(--color-primary) / var(--tw-placeholder-opacity));
+ }
+ .placeholder-opacity-50::placeholder {
+ --tw-placeholder-opacity: 0.5;
+ }
+ .ring-primary {
+ --tw-ring-opacity: 1;
+ --tw-ring-color: hsl(var(--color-primary) / var(--tw-ring-opacity));
+ }
+ .ring-opacity-50 {
+ --tw-ring-opacity: 0.5;
+ }
+ `)
+ })
+})
+
+it('can use hsl helper when defining custom properties for colors (opacity plugins disabled)', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ theme: {
+ colors: {
+ primary: 'hsl(var(--color-primary) / )',
+ },
+ },
+ corePlugins: {
+ backgroundOpacity: false,
+ borderOpacity: false,
+ divideOpacity: false,
+ placeholderOpacity: false,
+ textOpacity: false,
+ ringOpacity: false,
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .divide-primary > :not([hidden]) ~ :not([hidden]) {
+ border-color: hsl(var(--color-primary) / 1);
+ }
+ .divide-primary\/50 > :not([hidden]) ~ :not([hidden]) {
+ border-color: hsl(var(--color-primary) / 0.5);
+ }
+ .border-primary {
+ border-color: hsl(var(--color-primary) / 1);
+ }
+ .border-primary\/50 {
+ border-color: hsl(var(--color-primary) / 0.5);
+ }
+ .bg-primary {
+ background-color: hsl(var(--color-primary) / 1);
+ }
+ .bg-primary\/50 {
+ background-color: hsl(var(--color-primary) / 0.5);
+ }
+ .text-primary {
+ color: hsl(var(--color-primary) / 1);
+ }
+ .text-primary\/50 {
+ color: hsl(var(--color-primary) / 0.5);
+ }
+ .placeholder-primary::placeholder {
+ color: hsl(var(--color-primary) / 1);
+ }
+ .placeholder-primary\/50::placeholder {
+ color: hsl(var(--color-primary) / 0.5);
+ }
+ .ring-primary {
+ --tw-ring-color: hsl(var(--color-primary) / 1);
+ }
+ .ring-primary\/50 {
+ --tw-ring-color: hsl(var(--color-primary) / 0.5);
+ }
+ `)
+ })
+})
+
+test('Theme function in JS can apply alpha values to colors (1)', () => {
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let output = css`
+ .text-foo {
+ color: #3b82f680;
+ }
+ `
+
+ return run(input, {
+ content: [{ raw: html`text-foo` }],
+ corePlugins: { textOpacity: false },
+ theme: {
+ colors: { blue: { 500: '#3b82f6' } },
+ extend: {
+ textColor: ({ theme }) => ({
+ foo: theme('colors.blue.500 / 50%'),
+ }),
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('Theme function in JS can apply alpha values to colors (2)', () => {
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let output = css`
+ .text-foo {
+ color: #3b82f680;
+ }
+ `
+
+ return run(input, {
+ content: [{ raw: html`text-foo` }],
+ corePlugins: { textOpacity: false },
+ theme: {
+ colors: { blue: { 500: '#3b82f6' } },
+ extend: {
+ textColor: ({ theme }) => ({
+ foo: theme('colors.blue.500 / 0.5'),
+ }),
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('Theme function in JS can apply alpha values to colors (3)', () => {
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let output = css`
+ .text-foo {
+ color: rgb(59 130 246 / var(--my-alpha));
+ }
+ `
+
+ return run(input, {
+ content: [{ raw: html`text-foo` }],
+ corePlugins: { textOpacity: false },
+ theme: {
+ colors: { blue: { 500: '#3b82f6' } },
+ extend: {
+ textColor: ({ theme }) => ({
+ foo: theme('colors.blue.500 / var(--my-alpha)'),
+ }),
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('Theme function in JS can apply alpha values to colors (4)', () => {
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let output = css`
+ .text-foo {
+ color: #3c83f680;
+ }
+ `
+
+ return run(input, {
+ content: [{ raw: html`text-foo` }],
+ corePlugins: { textOpacity: false },
+ theme: {
+ colors: { blue: { 500: 'hsl(217, 91%, 60%)' } },
+ extend: {
+ textColor: ({ theme }) => ({
+ foo: theme('colors.blue.500 / 50%'),
+ }),
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('Theme function in JS can apply alpha values to colors (5)', () => {
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let output = css`
+ .text-foo {
+ color: #3c83f680;
+ }
+ `
+
+ return run(input, {
+ content: [{ raw: html`text-foo` }],
+ corePlugins: { textOpacity: false },
+ theme: {
+ colors: { blue: { 500: 'hsl(217, 91%, 60%)' } },
+ extend: {
+ textColor: ({ theme }) => ({
+ foo: theme('colors.blue.500 / 0.5'),
+ }),
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('Theme function in JS can apply alpha values to colors (6)', () => {
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let output = css`
+ .text-foo {
+ color: hsl(217 91% 60% / var(--my-alpha));
+ }
+ `
+
+ return run(input, {
+ content: [{ raw: html`text-foo` }],
+ corePlugins: { textOpacity: false },
+ theme: {
+ colors: { blue: { 500: 'hsl(217, 91%, 60%)' } },
+ extend: {
+ textColor: ({ theme }) => ({
+ foo: theme('colors.blue.500 / var(--my-alpha)'),
+ }),
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('Theme function in JS can apply alpha values to colors (7)', () => {
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let output = css`
+ .text-foo {
+ color: rgb(var(--foo) / var(--my-alpha));
+ }
+ `
+
+ return run(input, {
+ content: [{ raw: html`text-foo` }],
+ corePlugins: { textOpacity: false },
+ theme: {
+ colors: {
+ blue: {
+ 500: 'rgb(var(--foo) / )',
+ },
+ },
+ extend: {
+ textColor: ({ theme }) => ({
+ foo: theme('colors.blue.500 / var(--my-alpha)'),
+ }),
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+test('Theme function prefers existing values in config', () => {
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let output = css`
+ .text-foo {
+ color: purple;
+ }
+ `
+
+ return run(input, {
+ content: [{ raw: html`text-foo` }],
+ corePlugins: { textOpacity: false },
+ theme: {
+ colors: {
+ blue: {
+ '500 / 50%': 'purple',
+ },
+ },
+ extend: {
+ textColor: ({ theme }) => ({
+ foo: theme('colors.blue.500 / 50%'),
+ }),
+ },
+ },
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(output)
+ expect(result.warnings().length).toBe(0)
+ })
+})
+
+it('should be possible to use an as part of the color definition', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: ['backgroundColor', 'backgroundOpacity'],
+ theme: {
+ colors: {
+ primary: 'rgb(var(--color-primary) / )',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-primary {
+ --tw-bg-opacity: 1;
+ background-color: rgb(var(--color-primary) / var(--tw-bg-opacity));
+ }
+ `)
+ })
+})
+
+it('should be possible to use an as part of the color definition with an opacity modifiers', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: ['backgroundColor', 'backgroundOpacity'],
+ theme: {
+ colors: {
+ primary: 'rgb(var(--color-primary) / )',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-primary\/50 {
+ background-color: rgb(var(--color-primary) / 0.5);
+ }
+ `)
+ })
+})
+
+it('should be possible to use an as part of the color definition with an opacity modifiers', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: ['backgroundColor'],
+ theme: {
+ colors: {
+ primary: 'rgb(var(--color-primary) / )',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-primary {
+ background-color: rgb(var(--color-primary) / 1);
+ }
+ `)
+ })
+})
+
+it('should be possible to use inside arbitrary values', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: ['backgroundColor', 'backgroundOpacity'],
+ theme: {
+ colors: {
+ primary: 'rgb(var(--color-primary) / )',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-\[rgb\(var\(--color-primary\)\/\\)\]\/50 {
+ background-color: rgb(var(--color-primary) / 0.5);
+ }
+ `)
+ })
+})
+
+it('Theme functions can reference values with slashes in brackets', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ theme: {
+ colors: {
+ 'a/b': '#000000',
+ },
+ extend: {
+ backgroundColor: ({ theme }) => ({
+ foo1: theme('colors[a/b]'),
+ foo2: theme('colors[a/b]/50%'),
+ }),
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-foo1 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(0 0 0 / var(--tw-bg-opacity));
+ }
+ .bg-foo2 {
+ background-color: #00000080;
+ }
+ `)
+ })
+})
+
+it('works with opacity values defined as a placeholder or a function in when colors is a function', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ theme: {
+ colors: () => ({
+ foobar1: ({ opacityValue }) => `rgb(255 100 0 / ${opacityValue ?? '100%'})`,
+ foobar2: `rgb(255 100 0 / )`,
+ foobar3: {
+ 100: ({ opacityValue }) => `rgb(255 100 0 / ${opacityValue ?? '100%'})`,
+ 200: `rgb(255 100 0 / )`,
+ },
+ }),
+ extend: {
+ backgroundColor: ({ theme }) => ({
+ foo10: theme('colors.foobar1'),
+ foo20: theme('colors.foobar2'),
+ foo30: theme('colors.foobar3.100'),
+ foo40: theme('colors.foobar3.200'),
+ foo11: theme('colors.foobar1 / 50%'),
+ foo21: theme('colors.foobar2 / 50%'),
+ foo31: theme('colors.foobar3.100 / 50%'),
+ foo41: theme('colors.foobar3.200 / 50%'),
+ }),
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-foo10 {
+ background-color: #ff6400;
+ }
+ .bg-foo11 {
+ background-color: #ff640080;
+ }
+ .bg-foo20 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 100 0 / var(--tw-bg-opacity));
+ }
+ .bg-foo21 {
+ background-color: #ff640080;
+ }
+ .bg-foo30 {
+ background-color: #ff6400;
+ }
+ .bg-foo31 {
+ background-color: #ff640080;
+ }
+ .bg-foo40 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 100 0 / var(--tw-bg-opacity));
+ }
+ .bg-foo41 {
+ background-color: #ff640080;
+ }
+ `)
+ })
+})
+
+it('The disableColorOpacityUtilitiesByDefault flag disables the color opacity plugins and removes their variables', () => {
+ let config = {
+ future: {
+ disableColorOpacityUtilitiesByDefault: true,
+ },
+ content: [
+ {
+ raw: html`
+
+
+
+
+ `,
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .divide-blue-300 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #93c5fd;
+ }
+ .divide-blue-300\/50 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #93c5fd80;
+ }
+ .divide-blue-300\/\[var\(--my-opacity\)\] > :not([hidden]) ~ :not([hidden]) {
+ border-color: rgb(147 197 253 / var(--my-opacity));
+ }
+ .border-blue-300 {
+ border-color: #93c5fd;
+ }
+ .border-blue-300\/50 {
+ border-color: #93c5fd80;
+ }
+ .border-blue-300\/\[var\(--my-opacity\)\] {
+ border-color: rgb(147 197 253 / var(--my-opacity));
+ }
+ .bg-blue-300 {
+ background-color: #93c5fd;
+ }
+ .bg-blue-300\/50 {
+ background-color: #93c5fd80;
+ }
+ .bg-blue-300\/\[var\(--my-opacity\)\] {
+ background-color: rgb(147 197 253 / var(--my-opacity));
+ }
+ .text-blue-300 {
+ color: #93c5fd;
+ }
+ .text-blue-300\/50 {
+ color: #93c5fd80;
+ }
+ .text-blue-300\/\[var\(--my-opacity\)\] {
+ color: rgb(147 197 253 / var(--my-opacity));
+ }
+ .placeholder-blue-300::placeholder {
+ color: #93c5fd;
+ }
+ .placeholder-blue-300\/50::placeholder {
+ color: #93c5fd80;
+ }
+ .placeholder-blue-300\/\[var\(--my-opacity\)\]::placeholder {
+ color: rgb(147 197 253 / var(--my-opacity));
+ }
+ .ring-blue-300 {
+ --tw-ring-color: #93c5fd;
+ }
+ .ring-blue-300\/50 {
+ --tw-ring-color: #93c5fd80;
+ }
+ .ring-blue-300\/\[var\(--my-opacity\)\] {
+ --tw-ring-color: rgb(147 197 253 / var(--my-opacity));
+ }
+ `)
+ })
+})
+
+it('You can re-enable any opacity plugin even when disableColorOpacityUtilitiesByDefault is enabled', () => {
+ let config = {
+ future: {
+ disableColorOpacityUtilitiesByDefault: true,
+ },
+ corePlugins: {
+ backgroundOpacity: true,
+ borderOpacity: true,
+ divideOpacity: true,
+ placeholderOpacity: true,
+ ringOpacity: true,
+ textOpacity: true,
+ },
+ content: [
+ {
+ raw: html`
+
+
+
+
+ `,
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .divide-blue-300 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: 1;
+ border-color: rgb(147 197 253 / var(--tw-divide-opacity));
+ }
+ .divide-blue-300\/50 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #93c5fd80;
+ }
+ .divide-blue-300\/\[var\(--my-opacity\)\] > :not([hidden]) ~ :not([hidden]) {
+ border-color: rgb(147 197 253 / var(--my-opacity));
+ }
+ .divide-opacity-50 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: 0.5;
+ }
+ .border-blue-300 {
+ --tw-border-opacity: 1;
+ border-color: rgb(147 197 253 / var(--tw-border-opacity));
+ }
+ .border-blue-300\/50 {
+ border-color: #93c5fd80;
+ }
+ .border-blue-300\/\[var\(--my-opacity\)\] {
+ border-color: rgb(147 197 253 / var(--my-opacity));
+ }
+ .border-opacity-50 {
+ --tw-border-opacity: 0.5;
+ }
+ .bg-blue-300 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(147 197 253 / var(--tw-bg-opacity));
+ }
+ .bg-blue-300\/50 {
+ background-color: #93c5fd80;
+ }
+ .bg-blue-300\/\[var\(--my-opacity\)\] {
+ background-color: rgb(147 197 253 / var(--my-opacity));
+ }
+ .bg-opacity-50 {
+ --tw-bg-opacity: 0.5;
+ }
+ .text-blue-300 {
+ --tw-text-opacity: 1;
+ color: rgb(147 197 253 / var(--tw-text-opacity));
+ }
+ .text-blue-300\/50 {
+ color: #93c5fd80;
+ }
+ .text-blue-300\/\[var\(--my-opacity\)\] {
+ color: rgb(147 197 253 / var(--my-opacity));
+ }
+ .text-opacity-50 {
+ --tw-text-opacity: 0.5;
+ }
+ .placeholder-blue-300::placeholder {
+ --tw-placeholder-opacity: 1;
+ color: rgb(147 197 253 / var(--tw-placeholder-opacity));
+ }
+ .placeholder-blue-300\/50::placeholder {
+ color: #93c5fd80;
+ }
+ .placeholder-blue-300\/\[var\(--my-opacity\)\]::placeholder {
+ color: rgb(147 197 253 / var(--my-opacity));
+ }
+ .placeholder-opacity-50::placeholder {
+ --tw-placeholder-opacity: 0.5;
+ }
+ .ring-blue-300 {
+ --tw-ring-opacity: 1;
+ --tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity));
+ }
+ .ring-blue-300\/50 {
+ --tw-ring-color: #93c5fd80;
+ }
+ .ring-blue-300\/\[var\(--my-opacity\)\] {
+ --tw-ring-color: rgb(147 197 253 / var(--my-opacity));
+ }
+ .ring-opacity-50 {
+ --tw-ring-opacity: 0.5;
+ }
+ `)
+ })
+})
+
+it('can replace the potential alpha value in rgba/hsla syntax', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ colors: {
+ 'primary-rgba': 'rgba(var(--color), 0.1)',
+ 'primary-hsla': 'hsla(var(--color), 0.1)',
+ },
+ },
+ }
+
+ let result = await run('@tailwind utilities', config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .text-primary-hsla\/50 {
+ color: hsla(var(--color), 0.5);
+ }
+ .text-primary-rgba\/50 {
+ color: rgba(var(--color), 0.5);
+ }
+ `)
+})
+
+it('variables with variable fallback values can use opacity modifier', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ }
+
+ let result = await run(`@tailwind utilities;`, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-\[rgb\(var\(--some-var\,var\(--some-other-var\)\)\)\]\/50 {
+ background-color: rgb(var(--some-var, var(--some-other-var)) / 0.5);
+ }
+ `)
+})
diff --git a/tests/oxide.test.js b/tests/oxide.test.js
deleted file mode 100644
index d2a697626..000000000
--- a/tests/oxide.test.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
-
-crosscheck(({ stable, oxide }) => {
- stable.test.todo('space-x uses physical properties')
- oxide.test('space-x uses logical properties', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- return run('@tailwind base; @tailwind utilities;', config).then((result) => {
- expect(result.css).toMatchCss(css`
- ${defaults}
- .space-x-4 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-inline-start: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
- margin-inline-end: calc(1rem * var(--tw-space-x-reverse));
- }
- `)
- })
- })
-})
diff --git a/tests/parallel-variants.test.js b/tests/parallel-variants.test.js
index a4d4dfc8f..61fb2cb33 100644
--- a/tests/parallel-variants.test.js
+++ b/tests/parallel-variants.test.js
@@ -1,138 +1,136 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- test('basic parallel variants', async () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function test({ addVariant }) {
- addVariant('test', ['& *::test', '&::test'])
- },
- ],
- }
+test('basic parallel variants', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function test({ addVariant }) {
+ addVariant('test', ['& *::test', '&::test'])
+ },
+ ],
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .font-normal {
- font-weight: 400;
- }
- .test\:font-bold ::test {
- font-weight: 700;
- }
- .test\:font-medium ::test {
- font-weight: 500;
- }
- .hover\:test\:font-black ::test:hover {
- font-weight: 900;
- }
- .test\:font-bold::test {
- font-weight: 700;
- }
- .test\:font-medium::test {
- font-weight: 500;
- }
- .hover\:test\:font-black::test:hover {
- font-weight: 900;
- }
- `)
- })
- })
-
- test('parallel variants can be generated using a function that returns parallel variants', async () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function test({ addVariant }) {
- addVariant('test', () => ['& *::test', '&::test'])
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .font-normal {
- font-weight: 400;
- }
- .test\:font-bold ::test {
- font-weight: 700;
- }
- .test\:font-medium ::test {
- font-weight: 500;
- }
- .test\:font-bold::test {
- font-weight: 700;
- }
- .test\:font-medium::test {
- font-weight: 500;
- }
- .hover\:test\:font-black ::test:hover {
- font-weight: 900;
- }
- .hover\:test\:font-black::test:hover {
- font-weight: 900;
- }
- `)
- })
- })
-
- test('a function that returns parallel variants can modify the container', async () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function test({ addVariant }) {
- addVariant('test', ({ container }) => {
- container.walkDecls((decl) => {
- decl.value = `calc(0 + ${decl.value})`
- })
-
- return ['& *::test', '&::test']
- })
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .font-normal {
- font-weight: 400;
- }
- .test\:font-bold ::test {
- font-weight: 700;
- }
- .test\:font-medium ::test {
- font-weight: 500;
- }
- .test\:font-bold::test {
- font-weight: 700;
- }
- .test\:font-medium::test {
- font-weight: 500;
- }
- .hover\:test\:font-black ::test:hover {
- font-weight: 900;
- }
- .hover\:test\:font-black::test:hover {
- font-weight: 900;
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .font-normal {
+ font-weight: 400;
+ }
+ .test\:font-bold ::test {
+ font-weight: 700;
+ }
+ .test\:font-medium ::test {
+ font-weight: 500;
+ }
+ .hover\:test\:font-black ::test:hover {
+ font-weight: 900;
+ }
+ .test\:font-bold::test {
+ font-weight: 700;
+ }
+ .test\:font-medium::test {
+ font-weight: 500;
+ }
+ .hover\:test\:font-black::test:hover {
+ font-weight: 900;
+ }
+ `)
+ })
+})
+
+test('parallel variants can be generated using a function that returns parallel variants', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function test({ addVariant }) {
+ addVariant('test', () => ['& *::test', '&::test'])
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .font-normal {
+ font-weight: 400;
+ }
+ .test\:font-bold ::test {
+ font-weight: 700;
+ }
+ .test\:font-medium ::test {
+ font-weight: 500;
+ }
+ .test\:font-bold::test {
+ font-weight: 700;
+ }
+ .test\:font-medium::test {
+ font-weight: 500;
+ }
+ .hover\:test\:font-black ::test:hover {
+ font-weight: 900;
+ }
+ .hover\:test\:font-black::test:hover {
+ font-weight: 900;
+ }
+ `)
+ })
+})
+
+test('a function that returns parallel variants can modify the container', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function test({ addVariant }) {
+ addVariant('test', ({ container }) => {
+ container.walkDecls((decl) => {
+ decl.value = `calc(0 + ${decl.value})`
+ })
+
+ return ['& *::test', '&::test']
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .font-normal {
+ font-weight: 400;
+ }
+ .test\:font-bold ::test {
+ font-weight: 700;
+ }
+ .test\:font-medium ::test {
+ font-weight: 500;
+ }
+ .test\:font-bold::test {
+ font-weight: 700;
+ }
+ .test\:font-medium::test {
+ font-weight: 500;
+ }
+ .hover\:test\:font-black ::test:hover {
+ font-weight: 900;
+ }
+ .hover\:test\:font-black::test:hover {
+ font-weight: 900;
+ }
+ `)
})
})
diff --git a/tests/parse-candidate-strings.test.js b/tests/parse-candidate-strings.test.js
new file mode 100644
index 000000000..e9fe78c27
--- /dev/null
+++ b/tests/parse-candidate-strings.test.js
@@ -0,0 +1,500 @@
+import { parseCandidateStrings, IO, Parsing } from '@tailwindcss/oxide'
+import { defaultExtractor as createDefaultExtractor } from '../src/lib/defaultExtractor'
+
+let html = String.raw
+
+let defaultExtractor = createDefaultExtractor({ tailwindConfig: { separator: ':' } })
+
+function regexParser(str) {
+ return defaultExtractor(str)
+}
+
+function oxideParser(str) {
+ return parseCandidateStrings(
+ [{ content: str, extension: 'html' }],
+ IO.Sequential | Parsing.Parallel
+ )
+}
+
+function templateTable(classes) {
+ classes = classes.concat(
+ // Variants
+ classes.flatMap((c) => {
+ return [
+ // Simple variant
+ `hover:${c}`,
+
+ // Combined variant
+ `focus:hover:${c}`,
+
+ // Variant with dashes
+ `group-hover:group-focus:${c}`,
+
+ // With special characters
+ `:${c}`,
+
+ // With arbitrary values
+ `min-[300px]:${c}`,
+
+ // With arbitrary values
+ `[@media(hover:hover)]:${c}`,
+
+ // With parent selector
+ `[.foo_&]:${c}`,
+ ]
+ })
+ )
+
+ let classString = classes.join(' ')
+ let singleQuoteArraySyntaxWithSpace = `'${classes.join("', '")}'`
+ let singleQuoteArraySyntaxWithoutSpace = `'${classes.join("','")}'`
+
+ return [
+ ['Plain', classString],
+ ['HTML', html`
`],
+
+ ['JavaScript variable', `let foo = "${classString}"`],
+ ['JavaScript expression', `document.body.classList.add(['${classString}'].join(' '))`],
+ ['JavaScript object key', `let foo = {'${classString}': true}`],
+
+ ['JSX basic', html`
`],
+ ['JSX with JavaScript expression', html`
`],
+
+ ['Vue basic', html`
`],
+ [
+ 'Vue array (single quote, with space)',
+ html`
`,
+ ],
+ [
+ 'Vue array (single quote, without space)',
+ html`
`,
+ ],
+ ['Vue object (single quote)', html`
`],
+
+ ['Markdown code fences', ``],
+ ].map(([name, template]) => [name, template, classes])
+}
+
+describe.each([
+ ['Regex', regexParser],
+ ['Oxide', oxideParser],
+])('%s parser', (_, parse) => {
+ describe('basic utility classes', () => {
+ let classes = [
+ // One word classes
+ 'underline',
+
+ // With dashes
+ 'text-center',
+ 'pointer-events-none',
+
+ // With numbers
+ 'px-4',
+
+ // With special characters
+ 'px-1.5',
+ 'translate-x-1/2',
+ 'from-50%',
+
+ // With negative signs
+ '-translate-x-full',
+
+ // With halves and negative signs
+ '-translate-x-1/2',
+ ]
+
+ test.each(templateTable(classes))('%# — %s', (_, template, classes) => {
+ let extractions = parse(template)
+
+ for (let c of classes) {
+ expect(extractions).toContain(c)
+ }
+ })
+ })
+
+ describe('utility classes with arbitrary values', () => {
+ let classes = [
+ // With simple number
+ 'px-[0]',
+ 'px-[0.5]',
+
+ // With number and unit
+ 'px-[123px]',
+ 'px-[123.45px]',
+
+ // With special symbols
+ 'bg-[#bada55]',
+ // ^
+ 'bg-[color:#bada55]',
+ // ^^
+ 'content-[>]',
+ // ^
+ 'content-[<]',
+ // ^
+
+ // With functions and math expressions
+ 'px-[calc(100%-1rem)]',
+ 'px-[theme(spacing.1)]',
+ 'px-[theme(spacing[1.5])]',
+
+ // With spaces (replaced by `_`)
+ 'bg-[rgb(255_0_0)]',
+
+ // Examples with combinations
+ 'w-[calc(100%_-_theme("spacing[1.5]))"]',
+ 'fill-[oklab(59.69%_0.1007_0.1191_/_0.5)]/[33.7%]',
+ 'fill-[color:oklab(59.69%_0.1007_0.1191_/_0.5)]/[33.7%]',
+ 'shadow-[inset_0_-3em_3em_rgba(0,_0,_0,_0.1),_0_0_0_2px_rgb(255,_255,_255),_0.3em_0.3em_1em_rgba(0,_0,_0,_0.3)]',
+ ]
+
+ test.each(templateTable(classes))('%# — %s', (_, template, classes) => {
+ let extractions = parse(template)
+
+ for (let c of classes) {
+ // TODO: This is a bug in the RegEx parser.
+ if (!extractions.includes(c) && parse === regexParser) {
+ continue
+ }
+
+ expect(extractions).toContain(c)
+ }
+ })
+ })
+
+ describe('utility classes with modifiers', () => {
+ let classes = [
+ // With simple modifiers
+ 'bg-red-500/50',
+
+ // With arbitrary modifiers
+ 'bg-red-500/[0.5]',
+ 'bg-red-500/[50%]',
+ 'bg-red-500/[var(--opacity)]',
+
+ // With spces (replaced by `_`)
+ 'bg-red-500/[var(--opacity,_50%)]',
+ ]
+
+ test.each(templateTable(classes))('%# — %s', (_, template, classes) => {
+ let extractions = parse(template)
+
+ for (let c of classes) {
+ expect(extractions).toContain(c)
+ }
+ })
+ })
+
+ describe('utility classes with important modifier', () => {
+ let classes = ['!bg-red-500', '!bg-[#bada55]', '![display:flex]', '!-translate-x-1/2']
+
+ test.each(templateTable(classes))('%# — %s', (_, template, classes) => {
+ let extractions = parse(template)
+
+ for (let c of classes) {
+ // TODO: This is a bug in the RegEx parser.
+ if (!extractions.includes(c) && parse === regexParser) {
+ continue
+ }
+
+ expect(extractions).toContain(c)
+ }
+ })
+ })
+
+ describe('arbitrary properties', () => {
+ let classes = [
+ // With simple arbitrary property
+ '[display:flex]',
+ ]
+
+ test.each(templateTable(classes))('%# — %s', (_, template, classes) => {
+ let extractions = parse(template)
+
+ for (let c of classes) {
+ expect(extractions).toContain(c)
+ }
+ })
+ })
+
+ describe('arbitrary values with quotes', () => {
+ test('arbitrary values with single quotes', async () => {
+ let extractions = parse(`
+
+ `)
+
+ expect(extractions).toContain(`content-['hello_world']`)
+ expect(extractions).toContain(`hover:content-['hello_world_2']`)
+ expect(extractions).toContain(`hover:focus:content-['hello_world_3']`)
+ })
+
+ test('arbitrary values with double quotes', async () => {
+ let extractions = parse(`
+
+ `)
+
+ expect(extractions).toContain(`content-["hello_world"]`)
+ expect(extractions).toContain(`hover:content-["hello_world_2"]`)
+ expect(extractions).toContain(`hover:focus:content-["hello_world_3"]`)
+ })
+
+ test('arbitrary values with some single quoted values', async () => {
+ let extractions = parse(`
+
+ `)
+
+ expect(extractions).toContain(`font-['Open_Sans',_system-ui,_sans-serif]`)
+ expect(extractions).toContain(`hover:font-['Proxima_Nova',_system-ui,_sans-serif]`)
+ expect(extractions).toContain(`hover:focus:font-['Inter_var',_system-ui,_sans-serif]`)
+ })
+
+ test('arbitrary values with some double quoted values', async () => {
+ let extractions = parse(`
+
+ `)
+
+ expect(extractions).toContain(`font-["Open_Sans",_system-ui,_sans-serif]`)
+ expect(extractions).toContain(`hover:font-["Proxima_Nova",_system-ui,_sans-serif]`)
+ expect(extractions).toContain(`hover:focus:font-["Inter_var",_system-ui,_sans-serif]`)
+ })
+
+ test('arbitrary values with escaped underscores', async () => {
+ let extractions = parse(`
+
+ `)
+
+ expect(extractions).toContain(`content-['hello\\_world']`)
+ expect(extractions).toContain(`hover:content-['hello\\_world\\_2']`)
+ expect(extractions).toContain(`hover:focus:content-['hello\\_world\\_3']`)
+ })
+
+ test('arbitrary values with angle brackets in single quotes', async () => {
+ let extractions = parse(`
+
+ `)
+
+ expect(extractions).toContain(`content-['>']`)
+ expect(extractions).toContain(`hover:content-['<']`)
+ expect(extractions).toContain(`hover:focus:content-['>']`)
+ })
+
+ test('arbitrary values with angle brackets in double quotes', async () => {
+ let extractions = parse(`
+ "] hover:content-["<"] hover:focus:content-[">"]">
+ `)
+
+ expect(extractions).toContain(`content-[">"]`)
+ expect(extractions).toContain(`hover:content-["<"]`)
+ expect(extractions).toContain(`hover:focus:content-[">"]`)
+ })
+
+ test('arbitrary values with theme lookup using quotes', () => {
+ let extractions = parse(`
+
+ `)
+
+ expect(extractions).toContain(`[--y:theme('colors.blue.500')]`)
+ expect(extractions).toContain(`[color:var(--y)]`)
+ })
+ })
+
+ test('special characters', async () => {
+ let extractions = parse(`
+
+ `)
+
+ expect(extractions).toContain(`:font-bold`)
+ })
+
+ test('with single quotes array within template literal', async () => {
+ let extractions = parse(`
`)
+
+ expect(extractions).toContain('pr-1.5')
+ })
+
+ test('with double quotes array within template literal', async () => {
+ let extractions = parse(`
`)
+
+ expect(extractions).toContain('pr-1.5')
+ })
+
+ test('with single quotes array within function', async () => {
+ let extractions = parse(`document.body.classList.add(['pl-1.5'].join(" "));`)
+
+ expect(extractions).toContain('pl-1.5')
+ })
+
+ test('with double quotes array within function', async () => {
+ let extractions = parse(`document.body.classList.add(["pl-1.5"].join(" "));`)
+
+ expect(extractions).toContain('pl-1.5')
+ })
+
+ test('with angle brackets', async () => {
+ let extractions = parse(
+ `test
`
+ )
+
+ expect(extractions).toContain('bg-blue-200')
+ expect(extractions).toContain('shadow-xl')
+ expect(extractions).not.toContain('>shadow-xl')
+ expect(extractions).not.toContain('shadow-xl<')
+ })
+
+ test('markdown code fences', async () => {
+ let extractions = parse('')
+
+ expect(extractions).toContain('font-bold')
+ expect(extractions).toContain('font-normal')
+ expect(extractions).not.toContain('.font-bold')
+ expect(extractions).not.toContain('.font-normal')
+ })
+
+ test('classes in slim templates', async () => {
+ let extractions = parse(`
+ p.bg-red-500.text-sm
+ 'This is a paragraph
+ small.italic.text-gray-500
+ '(Look mom, no closing tag!)
+ `)
+
+ expect(extractions).toContain('bg-red-500')
+ expect(extractions).toContain('text-sm')
+ expect(extractions).toContain('italic')
+ expect(extractions).toContain('text-gray-500')
+ })
+
+ test('multi-word + arbitrary values + quotes', async () => {
+ let extractions = parse(`
+ grid-cols-['repeat(2)']
+ `)
+
+ expect(extractions).toContain(`grid-cols-['repeat(2)']`)
+ })
+
+ test('a lot of data', () => {
+ let extractions = parse('underline '.repeat(2 ** 17))
+
+ expect(extractions).toContain(`underline`)
+ })
+
+ test('ruby percent string array', () => {
+ let extractions = parse('%w[text-[#bada55]]')
+
+ expect(extractions).toContain(`text-[#bada55]`)
+ })
+
+ test('arbitrary properties followed by square bracketed stuff', () => {
+ let extractions = parse(
+ '[foo]
'
+ )
+
+ expect(extractions).toContain(`[display:inherit]`)
+ })
+
+ describe('Vue', () => {
+ test('Class object syntax', () => {
+ let extractions = parse(
+ `[foo] `
+ )
+
+ expect(extractions).toContain(`underline`, `font-bold`)
+ })
+
+ test('Class array syntax', () => {
+ // With leading space
+ let extractions = parse(
+ `
[foo]
`
+ )
+
+ expect(extractions).toContain(`underline`, `font-bold`, `flex`, `block`)
+
+ // Without leading space
+ extractions = parse(
+ `
[foo]
`
+ )
+
+ expect(extractions).toContain(`underline`, `font-bold`, `flex`, `block`)
+ })
+ })
+
+ describe('anti-test', () => {
+ it('should not parse candidates without spaces in object-like syntax', () => {
+ let extractions = parse(html`
`)
+
+ // The oxide parser _does_ allow this!
+ if (parse !== oxideParser) {
+ expect(extractions).not.toContain(`underline:isActive`)
+ expect(extractions).not.toContain(`flex:isOnline`)
+ expect(extractions).not.toContain(`md:bold`)
+ }
+
+ expect(extractions).not.toContain(`underline`)
+ expect(extractions).not.toContain(`isActive`)
+ expect(extractions).not.toContain(`flex`)
+ expect(extractions).not.toContain(`isOnline`)
+ expect(extractions).not.toContain(`md`)
+ expect(extractions).not.toContain(`bold`)
+ })
+ })
+
+ describe('real world', () => {
+ it.each([
+ [
+ 'const myCVAComponent = cva([],{defaultVariants:{size:"md"},variants:{size:{sm:["p-1"],md:["p-1.5"],lg:["p-2"],xl:["p-2.5"]}}});',
+ ],
+ [
+ 'const myCVAComponent = cva([],{defaultVariants:{size:"md"}, variants:{size:{sm:["p-1"],md:["p-1.5"],lg:["p-2"],xl:["p-2.5"]}}});',
+ ],
+ [
+ 'const myCVAComponent = cva("",{defaultVariants:{size:"md"},variants:{size:{sm:["p-1"],md:["p-1.5"],lg:["p-2"],xl:["p-2.5"]}}});',
+ ],
+ ])('should work for issue #12109 (%#)', async (content) => {
+ let extractions = parse(content)
+
+ expect(extractions).toContain('p-1')
+ expect(extractions).toContain('p-1.5')
+ expect(extractions).toContain('p-2')
+ expect(extractions).toContain('p-2.5')
+ })
+
+ it.each([
+ // With group name modifier
+ [
+ '
',
+ [
+ 'bg-blue-300',
+ 'group-[[data-can-play]:not([data-playing])]/parent:bg-red-300',
+ 'p-4',
+ 'w-60',
+ ],
+ ],
+ // Without group name modifier
+ [
+ '
',
+ ['bg-blue-300', 'group-[[data-can-play]:not([data-playing])]:bg-red-300', 'p-4', 'w-60'],
+ ],
+ ])('should work for issue #12169 (%#)', async (content, expectations) => {
+ let extractions = parse(content)
+
+ for (let value of expectations) {
+ expect(extractions).toContain(value)
+ }
+ })
+
+ it.each([
+ ['["min-w-[17rem]","max-w-[17rem]"]', ['min-w-[17rem]', 'max-w-[17rem]']],
+ [
+ '["w-[calc(theme(spacing[2]*-1px))]","h-[calc(theme(spacing[2]*-1px))]"]',
+ ['w-[calc(theme(spacing[2]*-1px))]', 'h-[calc(theme(spacing[2]*-1px))]'],
+ ],
+ ])('should work for issue #12371 (%#)', async (content, expectations) => {
+ let extractions = parse(content)
+
+ for (let value of expectations) {
+ expect(extractions).toContain(value)
+ }
+ })
+ })
+})
diff --git a/tests/parseAnimationValue.test.js b/tests/parseAnimationValue.test.js
index 098178079..1eaa76ae8 100644
--- a/tests/parseAnimationValue.test.js
+++ b/tests/parseAnimationValue.test.js
@@ -1,203 +1,200 @@
import parseAnimationValue from '../src/util/parseAnimationValue'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- describe('Tailwind Defaults', () => {
- it.each([
- [
- 'spin 1s linear infinite',
- {
- value: 'spin 1s linear infinite',
- name: 'spin',
- duration: '1s',
- timingFunction: 'linear',
- iterationCount: 'infinite',
- },
- ],
- [
- 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
- {
- value: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
- name: 'ping',
- duration: '1s',
- timingFunction: 'cubic-bezier(0, 0, 0.2, 1)',
- iterationCount: 'infinite',
- },
- ],
- [
- 'bounce 1s infinite',
- {
- value: 'bounce 1s infinite',
- name: 'bounce',
- duration: '1s',
- iterationCount: 'infinite',
- },
- ],
- ])('should be possible to parse: "%s"', (input, expected) => {
- const parsed = parseAnimationValue(input)
- expect(parsed).toHaveLength(1)
- expect(parsed[0]).toEqual(expected)
- })
- })
-
- describe('css variables', () => {
- it('should be possible to use css variables', () => {
- let parsed = parseAnimationValue('jump var(--animation-duration, 10s) linear infinite')
- expect(parsed[0]).toEqual({
- value: 'jump var(--animation-duration, 10s) linear infinite',
- name: 'jump',
+describe('Tailwind Defaults', () => {
+ it.each([
+ [
+ 'spin 1s linear infinite',
+ {
+ value: 'spin 1s linear infinite',
+ name: 'spin',
+ duration: '1s',
timingFunction: 'linear',
iterationCount: 'infinite',
- unknown: ['var(--animation-duration, 10s)'],
- })
- })
- })
-
- describe('MDN Examples', () => {
- it.each([
- [
- '3s ease-in 1s 2 reverse both paused slidein',
- {
- value: '3s ease-in 1s 2 reverse both paused slidein',
- delay: '1s',
- direction: 'reverse',
- duration: '3s',
- fillMode: 'both',
- iterationCount: '2',
- name: 'slidein',
- playState: 'paused',
- timingFunction: 'ease-in',
- },
- ],
- [
- 'slidein 3s linear 1s',
- {
- value: 'slidein 3s linear 1s',
- delay: '1s',
- duration: '3s',
- name: 'slidein',
- timingFunction: 'linear',
- },
- ],
- ['slidein 3s', { value: 'slidein 3s', duration: '3s', name: 'slidein' }],
- ])('should be possible to parse: "%s"', (input, expected) => {
- const parsed = parseAnimationValue(input)
- expect(parsed).toHaveLength(1)
- expect(parsed[0]).toEqual(expected)
- })
- })
-
- describe('duration & delay', () => {
- it.each([
- // Positive seconds (integer)
- ['spin 2s 1s linear', { duration: '2s', delay: '1s' }],
-
- // Negative seconds (integer)
- ['spin -2s -1s linear', { duration: '-2s', delay: '-1s' }],
-
- // Positive seconds (float)
- ['spin 2.321s 1.321s linear', { duration: '2.321s', delay: '1.321s' }],
-
- // Negative seconds (float)
- ['spin -2.321s -1.321s linear', { duration: '-2.321s', delay: '-1.321s' }],
-
- // Positive milliseconds (integer)
- ['spin 200ms 100ms linear', { duration: '200ms', delay: '100ms' }],
-
- // Negative milliseconds (integer)
- ['spin -200ms -100ms linear', { duration: '-200ms', delay: '-100ms' }],
-
- // Positive milliseconds (float)
- ['spin 200.321ms 100.321ms linear', { duration: '200.321ms', delay: '100.321ms' }],
-
- // Negative milliseconds (float)
- ['spin -200.321ms -100.321ms linear', { duration: '-200.321ms', delay: '-100.321ms' }],
- ])('should be possible to parse "%s" into %o', (input, { duration, delay }) => {
- const parsed = parseAnimationValue(input)
- expect(parsed).toHaveLength(1)
- expect(parsed[0].duration).toEqual(duration)
- expect(parsed[0].delay).toEqual(delay)
- })
- })
-
- describe('iteration count', () => {
- it.each([
- // Number
- ['1 spin 200s 100s linear', '1'],
- ['spin 2 200s 100s linear', '2'],
- ['spin 200s 3 100s linear', '3'],
- ['spin 200s 100s 4 linear', '4'],
- ['spin 200s 100s linear 5', '5'],
-
- // Infinite
- ['infinite spin 200s 100s linear', 'infinite'],
- ['spin infinite 200s 100s linear', 'infinite'],
- ['spin 200s infinite 100s linear', 'infinite'],
- ['spin 200s 100s infinite linear', 'infinite'],
- ['spin 200s 100s linear infinite', 'infinite'],
- ])(
- 'should be possible to parse "%s" with an iteraction count of "%s"',
- (input, iterationCount) => {
- const parsed = parseAnimationValue(input)
- expect(parsed).toHaveLength(1)
- expect(parsed[0].iterationCount).toEqual(iterationCount)
- }
- )
- })
-
- describe('multiple animations', () => {
- it('should be possible to parse multiple applications at once', () => {
- const input = [
- 'spin 1s linear infinite',
- 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
- 'pulse 2s cubic-bezier(0.4, 0, 0.6) infinite',
- ].join(',')
-
- const parsed = parseAnimationValue(input)
- expect(parsed).toHaveLength(3)
- expect(parsed).toEqual([
- {
- value: 'spin 1s linear infinite',
- name: 'spin',
- duration: '1s',
- timingFunction: 'linear',
- iterationCount: 'infinite',
- },
- {
- value: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
- name: 'ping',
- duration: '1s',
- timingFunction: 'cubic-bezier(0, 0, 0.2, 1)',
- iterationCount: 'infinite',
- },
- {
- value: 'pulse 2s cubic-bezier(0.4, 0, 0.6) infinite',
- name: 'pulse',
- duration: '2s',
- timingFunction: 'cubic-bezier(0.4, 0, 0.6)',
- iterationCount: 'infinite',
- },
- ])
- })
- })
-
- it.each`
- input | value | direction | playState | fillMode | iterationCount | timingFunction | duration | delay | name
- ${'1s spin 1s infinite'} | ${'1s spin 1s infinite'} | ${undefined} | ${undefined} | ${undefined} | ${'infinite'} | ${undefined} | ${'1s'} | ${'1s'} | ${'spin'}
- ${'infinite infinite 1s 1s'} | ${'infinite infinite 1s 1s'} | ${undefined} | ${undefined} | ${undefined} | ${'infinite'} | ${undefined} | ${'1s'} | ${'1s'} | ${'infinite'}
- ${'ease 1s ease 1s'} | ${'ease 1s ease 1s'} | ${undefined} | ${undefined} | ${undefined} | ${undefined} | ${'ease'} | ${'1s'} | ${'1s'} | ${'ease'}
- ${'normal paused backwards infinite ease-in 1s 2s name'} | ${'normal paused backwards infinite ease-in 1s 2s name'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
- ${'paused backwards infinite ease-in 1s 2s name normal'} | ${'paused backwards infinite ease-in 1s 2s name normal'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
- ${'backwards infinite ease-in 1s 2s name normal paused'} | ${'backwards infinite ease-in 1s 2s name normal paused'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
- ${'infinite ease-in 1s 2s name normal paused backwards'} | ${'infinite ease-in 1s 2s name normal paused backwards'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
- ${'ease-in 1s 2s name normal paused backwards infinite'} | ${'ease-in 1s 2s name normal paused backwards infinite'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
- ${'1s 2s name normal paused backwards infinite ease-in'} | ${'1s 2s name normal paused backwards infinite ease-in'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
- ${'2s name normal paused backwards infinite ease-in 1s'} | ${'2s name normal paused backwards infinite ease-in 1s'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'2s'} | ${'1s'} | ${'name'}
- ${'name normal paused backwards infinite ease-in 1s 2s'} | ${'name normal paused backwards infinite ease-in 1s 2s'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
- ${' name normal paused backwards infinite ease-in 1s 2s '} | ${'name normal paused backwards infinite ease-in 1s 2s'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
- `('should parse "$input" correctly', ({ input, ...expected }) => {
- let parsed = parseAnimationValue(input)
+ },
+ ],
+ [
+ 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
+ {
+ value: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
+ name: 'ping',
+ duration: '1s',
+ timingFunction: 'cubic-bezier(0, 0, 0.2, 1)',
+ iterationCount: 'infinite',
+ },
+ ],
+ [
+ 'bounce 1s infinite',
+ {
+ value: 'bounce 1s infinite',
+ name: 'bounce',
+ duration: '1s',
+ iterationCount: 'infinite',
+ },
+ ],
+ ])('should be possible to parse: "%s"', (input, expected) => {
+ const parsed = parseAnimationValue(input)
expect(parsed).toHaveLength(1)
expect(parsed[0]).toEqual(expected)
})
})
+
+describe('css variables', () => {
+ it('should be possible to use css variables', () => {
+ let parsed = parseAnimationValue('jump var(--animation-duration, 10s) linear infinite')
+ expect(parsed[0]).toEqual({
+ value: 'jump var(--animation-duration, 10s) linear infinite',
+ name: 'jump',
+ timingFunction: 'linear',
+ iterationCount: 'infinite',
+ unknown: ['var(--animation-duration, 10s)'],
+ })
+ })
+})
+
+describe('MDN Examples', () => {
+ it.each([
+ [
+ '3s ease-in 1s 2 reverse both paused slidein',
+ {
+ value: '3s ease-in 1s 2 reverse both paused slidein',
+ delay: '1s',
+ direction: 'reverse',
+ duration: '3s',
+ fillMode: 'both',
+ iterationCount: '2',
+ name: 'slidein',
+ playState: 'paused',
+ timingFunction: 'ease-in',
+ },
+ ],
+ [
+ 'slidein 3s linear 1s',
+ {
+ value: 'slidein 3s linear 1s',
+ delay: '1s',
+ duration: '3s',
+ name: 'slidein',
+ timingFunction: 'linear',
+ },
+ ],
+ ['slidein 3s', { value: 'slidein 3s', duration: '3s', name: 'slidein' }],
+ ])('should be possible to parse: "%s"', (input, expected) => {
+ const parsed = parseAnimationValue(input)
+ expect(parsed).toHaveLength(1)
+ expect(parsed[0]).toEqual(expected)
+ })
+})
+
+describe('duration & delay', () => {
+ it.each([
+ // Positive seconds (integer)
+ ['spin 2s 1s linear', { duration: '2s', delay: '1s' }],
+
+ // Negative seconds (integer)
+ ['spin -2s -1s linear', { duration: '-2s', delay: '-1s' }],
+
+ // Positive seconds (float)
+ ['spin 2.321s 1.321s linear', { duration: '2.321s', delay: '1.321s' }],
+
+ // Negative seconds (float)
+ ['spin -2.321s -1.321s linear', { duration: '-2.321s', delay: '-1.321s' }],
+
+ // Positive milliseconds (integer)
+ ['spin 200ms 100ms linear', { duration: '200ms', delay: '100ms' }],
+
+ // Negative milliseconds (integer)
+ ['spin -200ms -100ms linear', { duration: '-200ms', delay: '-100ms' }],
+
+ // Positive milliseconds (float)
+ ['spin 200.321ms 100.321ms linear', { duration: '200.321ms', delay: '100.321ms' }],
+
+ // Negative milliseconds (float)
+ ['spin -200.321ms -100.321ms linear', { duration: '-200.321ms', delay: '-100.321ms' }],
+ ])('should be possible to parse "%s" into %o', (input, { duration, delay }) => {
+ const parsed = parseAnimationValue(input)
+ expect(parsed).toHaveLength(1)
+ expect(parsed[0].duration).toEqual(duration)
+ expect(parsed[0].delay).toEqual(delay)
+ })
+})
+
+describe('iteration count', () => {
+ it.each([
+ // Number
+ ['1 spin 200s 100s linear', '1'],
+ ['spin 2 200s 100s linear', '2'],
+ ['spin 200s 3 100s linear', '3'],
+ ['spin 200s 100s 4 linear', '4'],
+ ['spin 200s 100s linear 5', '5'],
+
+ // Infinite
+ ['infinite spin 200s 100s linear', 'infinite'],
+ ['spin infinite 200s 100s linear', 'infinite'],
+ ['spin 200s infinite 100s linear', 'infinite'],
+ ['spin 200s 100s infinite linear', 'infinite'],
+ ['spin 200s 100s linear infinite', 'infinite'],
+ ])(
+ 'should be possible to parse "%s" with an iteration count of "%s"',
+ (input, iterationCount) => {
+ const parsed = parseAnimationValue(input)
+ expect(parsed).toHaveLength(1)
+ expect(parsed[0].iterationCount).toEqual(iterationCount)
+ }
+ )
+})
+
+describe('multiple animations', () => {
+ it('should be possible to parse multiple applications at once', () => {
+ const input = [
+ 'spin 1s linear infinite',
+ 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
+ 'pulse 2s cubic-bezier(0.4, 0, 0.6) infinite',
+ ].join(',')
+
+ const parsed = parseAnimationValue(input)
+ expect(parsed).toHaveLength(3)
+ expect(parsed).toEqual([
+ {
+ value: 'spin 1s linear infinite',
+ name: 'spin',
+ duration: '1s',
+ timingFunction: 'linear',
+ iterationCount: 'infinite',
+ },
+ {
+ value: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
+ name: 'ping',
+ duration: '1s',
+ timingFunction: 'cubic-bezier(0, 0, 0.2, 1)',
+ iterationCount: 'infinite',
+ },
+ {
+ value: 'pulse 2s cubic-bezier(0.4, 0, 0.6) infinite',
+ name: 'pulse',
+ duration: '2s',
+ timingFunction: 'cubic-bezier(0.4, 0, 0.6)',
+ iterationCount: 'infinite',
+ },
+ ])
+ })
+})
+
+it.each`
+ input | value | direction | playState | fillMode | iterationCount | timingFunction | duration | delay | name
+ ${'1s spin 1s infinite'} | ${'1s spin 1s infinite'} | ${undefined} | ${undefined} | ${undefined} | ${'infinite'} | ${undefined} | ${'1s'} | ${'1s'} | ${'spin'}
+ ${'infinite infinite 1s 1s'} | ${'infinite infinite 1s 1s'} | ${undefined} | ${undefined} | ${undefined} | ${'infinite'} | ${undefined} | ${'1s'} | ${'1s'} | ${'infinite'}
+ ${'ease 1s ease 1s'} | ${'ease 1s ease 1s'} | ${undefined} | ${undefined} | ${undefined} | ${undefined} | ${'ease'} | ${'1s'} | ${'1s'} | ${'ease'}
+ ${'normal paused backwards infinite ease-in 1s 2s name'} | ${'normal paused backwards infinite ease-in 1s 2s name'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
+ ${'paused backwards infinite ease-in 1s 2s name normal'} | ${'paused backwards infinite ease-in 1s 2s name normal'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
+ ${'backwards infinite ease-in 1s 2s name normal paused'} | ${'backwards infinite ease-in 1s 2s name normal paused'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
+ ${'infinite ease-in 1s 2s name normal paused backwards'} | ${'infinite ease-in 1s 2s name normal paused backwards'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
+ ${'ease-in 1s 2s name normal paused backwards infinite'} | ${'ease-in 1s 2s name normal paused backwards infinite'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
+ ${'1s 2s name normal paused backwards infinite ease-in'} | ${'1s 2s name normal paused backwards infinite ease-in'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
+ ${'2s name normal paused backwards infinite ease-in 1s'} | ${'2s name normal paused backwards infinite ease-in 1s'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'2s'} | ${'1s'} | ${'name'}
+ ${'name normal paused backwards infinite ease-in 1s 2s'} | ${'name normal paused backwards infinite ease-in 1s 2s'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
+ ${' name normal paused backwards infinite ease-in 1s 2s '} | ${'name normal paused backwards infinite ease-in 1s 2s'} | ${'normal'} | ${'paused'} | ${'backwards'} | ${'infinite'} | ${'ease-in'} | ${'1s'} | ${'2s'} | ${'name'}
+`('should parse "$input" correctly', ({ input, ...expected }) => {
+ let parsed = parseAnimationValue(input)
+ expect(parsed).toHaveLength(1)
+ expect(parsed[0]).toEqual(expected)
+})
diff --git a/tests/parseObjectStyles.test.js b/tests/parseObjectStyles.test.js
index c6121977f..c1a602038 100644
--- a/tests/parseObjectStyles.test.js
+++ b/tests/parseObjectStyles.test.js
@@ -1,319 +1,317 @@
import parseObjectStyles from '../src/util/parseObjectStyles'
import postcss from 'postcss'
-import { crosscheck, css } from './util/run'
+import { css } from './util/run'
function toCss(nodes) {
return postcss.root({ nodes }).toString()
}
-crosscheck(() => {
- test('it parses simple single class definitions', () => {
- const result = parseObjectStyles({
- '.foobar': {
- backgroundColor: 'red',
- color: 'white',
- padding: '1rem',
- },
- })
-
- expect(toCss(result)).toMatchFormattedCss(css`
- .foobar {
- color: #fff;
- background-color: red;
- padding: 1rem;
- }
- `)
+test('it parses simple single class definitions', () => {
+ let result = parseObjectStyles({
+ '.foobar': {
+ backgroundColor: 'red',
+ color: 'white',
+ padding: '1rem',
+ },
})
- test('it parses multiple class definitions', () => {
- const result = parseObjectStyles({
- '.foo': {
- backgroundColor: 'red',
- color: 'white',
- padding: '1rem',
- },
- '.bar': {
- width: '200px',
- height: '100px',
- },
- })
+ expect(toCss(result)).toMatchFormattedCss(css`
+ .foobar {
+ background-color: red;
+ color: white;
+ padding: 1rem;
+ }
+ `)
+})
- expect(toCss(result)).toMatchFormattedCss(css`
- .foo {
- color: #fff;
- background-color: red;
- padding: 1rem;
- }
- .bar {
- width: 200px;
- height: 100px;
- }
- `)
+test('it parses multiple class definitions', () => {
+ let result = parseObjectStyles({
+ '.foo': {
+ backgroundColor: 'red',
+ color: 'white',
+ padding: '1rem',
+ },
+ '.bar': {
+ width: '200px',
+ height: '100px',
+ },
})
- test('it parses nested pseudo-selectors', () => {
- const result = parseObjectStyles({
- '.foo': {
- backgroundColor: 'red',
- color: 'white',
- padding: '1rem',
- '&:hover': {
- backgroundColor: 'orange',
- },
- '&:focus': {
- backgroundColor: 'blue',
- },
- },
- })
+ expect(toCss(result)).toMatchFormattedCss(css`
+ .foo {
+ background-color: red;
+ color: white;
+ padding: 1rem;
+ }
+ .bar {
+ width: 200px;
+ height: 100px;
+ }
+ `)
+})
- expect(toCss(result)).toMatchFormattedCss(css`
+test('it parses nested pseudo-selectors', () => {
+ let result = parseObjectStyles({
+ '.foo': {
+ backgroundColor: 'red',
+ color: 'white',
+ padding: '1rem',
+ '&:hover': {
+ backgroundColor: 'orange',
+ },
+ '&:focus': {
+ backgroundColor: 'blue',
+ },
+ },
+ })
+
+ expect(toCss(result)).toMatchFormattedCss(css`
+ .foo {
+ background-color: red;
+ color: white;
+ padding: 1rem;
+ }
+ .foo:hover {
+ background-color: orange;
+ }
+ .foo:focus {
+ background-color: blue;
+ }
+ `)
+})
+
+test('it parses top-level media queries', () => {
+ let result = parseObjectStyles({
+ '@media (min-width: 200px)': {
+ '.foo': {
+ backgroundColor: 'orange',
+ },
+ },
+ })
+
+ expect(toCss(result)).toMatchFormattedCss(css`
+ @media (min-width: 200px) {
.foo {
- color: #fff;
- background-color: red;
- padding: 1rem;
- }
- .foo:hover {
background-color: orange;
}
- .foo:focus {
- background-color: #00f;
- }
- `)
- })
+ }
+ `)
+})
- test('it parses top-level media queries', () => {
- const result = parseObjectStyles({
+test('it parses nested media queries', () => {
+ let result = parseObjectStyles({
+ '.foo': {
+ backgroundColor: 'red',
+ color: 'white',
+ padding: '1rem',
'@media (min-width: 200px)': {
- '.foo': {
- backgroundColor: 'orange',
- },
+ backgroundColor: 'orange',
},
- })
-
- expect(toCss(result)).toMatchFormattedCss(css`
- @media (min-width: 200px) {
- .foo {
- background-color: orange;
- }
- }
- `)
+ },
})
- test('it parses nested media queries', () => {
- const result = parseObjectStyles({
- '.foo': {
- backgroundColor: 'red',
- color: 'white',
- padding: '1rem',
+ expect(toCss(result)).toMatchFormattedCss(css`
+ .foo {
+ background-color: red;
+ color: white;
+ padding: 1rem;
+ }
+ @media (min-width: 200px) {
+ .foo {
+ background-color: orange;
+ }
+ }
+ `)
+})
+
+test('it bubbles nested screen rules', () => {
+ let result = parseObjectStyles({
+ '.foo': {
+ backgroundColor: 'red',
+ color: 'white',
+ padding: '1rem',
+ '@screen sm': {
+ backgroundColor: 'orange',
+ },
+ },
+ })
+
+ expect(toCss(result)).toMatchFormattedCss(css`
+ .foo {
+ background-color: red;
+ color: white;
+ padding: 1rem;
+ }
+ @screen sm {
+ .foo {
+ background-color: orange;
+ }
+ }
+ `)
+})
+
+test('it parses pseudo-selectors in nested media queries', () => {
+ let result = parseObjectStyles({
+ '.foo': {
+ backgroundColor: 'red',
+ color: 'white',
+ padding: '1rem',
+ '&:hover': {
'@media (min-width: 200px)': {
backgroundColor: 'orange',
},
},
- })
-
- expect(toCss(result)).toMatchFormattedCss(css`
- .foo {
- color: #fff;
- background-color: red;
- padding: 1rem;
- }
- @media (min-width: 200px) {
- .foo {
- background-color: orange;
- }
- }
- `)
+ },
})
- test('it bubbles nested screen rules', () => {
- const result = parseObjectStyles({
- '.foo': {
- backgroundColor: 'red',
- color: 'white',
- padding: '1rem',
- '@screen sm': {
- backgroundColor: 'orange',
- },
- },
- })
-
- expect(toCss(result)).toMatchFormattedCss(css`
- .foo {
- color: #fff;
- background-color: red;
- padding: 1rem;
- }
- @screen sm {
- .foo {
- background-color: orange;
- }
- }
- `)
- })
-
- test('it parses pseudo-selectors in nested media queries', () => {
- const result = parseObjectStyles({
- '.foo': {
- backgroundColor: 'red',
- color: 'white',
- padding: '1rem',
- '&:hover': {
- '@media (min-width: 200px)': {
- backgroundColor: 'orange',
- },
- },
- },
- })
-
- expect(toCss(result)).toMatchFormattedCss(css`
- .foo {
- color: #fff;
- background-color: red;
- padding: 1rem;
- }
- @media (min-width: 200px) {
- .foo:hover {
- background-color: orange;
- }
- }
- `)
- })
-
- test('it parses descendant selectors', () => {
- const result = parseObjectStyles({
- '.foo': {
- backgroundColor: 'red',
- color: 'white',
- padding: '1rem',
- '.bar': {
- backgroundColor: 'orange',
- },
- },
- })
-
- expect(toCss(result)).toMatchFormattedCss(css`
- .foo {
- color: #fff;
- background-color: red;
- padding: 1rem;
- }
- .foo .bar {
+ expect(toCss(result)).toMatchFormattedCss(css`
+ .foo {
+ background-color: red;
+ color: white;
+ padding: 1rem;
+ }
+ @media (min-width: 200px) {
+ .foo:hover {
background-color: orange;
}
- `)
+ }
+ `)
+})
+
+test('it parses descendant selectors', () => {
+ let result = parseObjectStyles({
+ '.foo': {
+ backgroundColor: 'red',
+ color: 'white',
+ padding: '1rem',
+ '.bar': {
+ backgroundColor: 'orange',
+ },
+ },
})
- test('it parses nested multi-class selectors', () => {
- const result = parseObjectStyles({
- '.foo': {
- backgroundColor: 'red',
- color: 'white',
- padding: '1rem',
+ expect(toCss(result)).toMatchFormattedCss(css`
+ .foo {
+ background-color: red;
+ color: white;
+ padding: 1rem;
+ }
+ .foo .bar {
+ background-color: orange;
+ }
+ `)
+})
+
+test('it parses nested multi-class selectors', () => {
+ let result = parseObjectStyles({
+ '.foo': {
+ backgroundColor: 'red',
+ color: 'white',
+ padding: '1rem',
+ '&.bar': {
+ backgroundColor: 'orange',
+ },
+ },
+ })
+
+ expect(toCss(result)).toMatchFormattedCss(css`
+ .foo {
+ background-color: red;
+ color: white;
+ padding: 1rem;
+ }
+ .foo.bar {
+ background-color: orange;
+ }
+ `)
+})
+
+test('it parses nested multi-class selectors in media queries', () => {
+ let result = parseObjectStyles({
+ '.foo': {
+ backgroundColor: 'red',
+ color: 'white',
+ padding: '1rem',
+ '@media (min-width: 200px)': {
'&.bar': {
backgroundColor: 'orange',
},
},
- })
+ },
+ })
- expect(toCss(result)).toMatchFormattedCss(css`
- .foo {
- color: #fff;
- background-color: red;
- padding: 1rem;
- }
+ expect(toCss(result)).toMatchFormattedCss(css`
+ .foo {
+ background-color: red;
+ color: white;
+ padding: 1rem;
+ }
+ @media (min-width: 200px) {
.foo.bar {
background-color: orange;
}
- `)
- })
-
- test('it parses nested multi-class selectors in media queries', () => {
- const result = parseObjectStyles({
- '.foo': {
- backgroundColor: 'red',
- color: 'white',
- padding: '1rem',
- '@media (min-width: 200px)': {
- '&.bar': {
- backgroundColor: 'orange',
- },
- },
- },
- })
-
- expect(toCss(result)).toMatchFormattedCss(css`
- .foo {
- color: #fff;
- background-color: red;
- padding: 1rem;
- }
- @media (min-width: 200px) {
- .foo.bar {
- background-color: orange;
- }
- }
- `)
- })
-
- test('it strips empty selectors when nesting', () => {
- const result = parseObjectStyles({
- '.foo': {
- '.bar': {
- backgroundColor: 'orange',
- },
- },
- })
-
- expect(toCss(result)).toMatchFormattedCss(css`
- .foo .bar {
- background-color: orange;
- }
- `)
- })
-
- test('it can parse an array of styles', () => {
- const result = parseObjectStyles([
- {
- '.foo': {
- backgroundColor: 'orange',
- },
- },
- {
- '.bar': {
- backgroundColor: 'red',
- },
- },
- {
- '.foo': {
- backgroundColor: 'blue',
- },
- },
- ])
-
- expect(toCss(result)).toMatchFormattedCss(css`
- .foo {
- background-color: orange;
- }
- .bar {
- background-color: red;
- }
- .foo {
- background-color: #00f;
- }
- `)
- })
-
- test('custom properties preserve their case', () => {
- const result = parseObjectStyles({
- ':root': {
- '--colors-aColor-500': '0',
- },
- })
-
- expect(toCss(result)).toMatchFormattedCss(css`
- :root {
- --colors-aColor-500: 0;
- }
- `)
- })
+ }
+ `)
+})
+
+test('it strips empty selectors when nesting', () => {
+ let result = parseObjectStyles({
+ '.foo': {
+ '.bar': {
+ backgroundColor: 'orange',
+ },
+ },
+ })
+
+ expect(toCss(result)).toMatchFormattedCss(css`
+ .foo .bar {
+ background-color: orange;
+ }
+ `)
+})
+
+test('it can parse an array of styles', () => {
+ let result = parseObjectStyles([
+ {
+ '.foo': {
+ backgroundColor: 'orange',
+ },
+ },
+ {
+ '.bar': {
+ backgroundColor: 'red',
+ },
+ },
+ {
+ '.foo': {
+ backgroundColor: 'blue',
+ },
+ },
+ ])
+
+ expect(toCss(result)).toMatchFormattedCss(css`
+ .foo {
+ background-color: orange;
+ }
+ .bar {
+ background-color: red;
+ }
+ .foo {
+ background-color: blue;
+ }
+ `)
+})
+
+test('custom properties preserve their case', () => {
+ let result = parseObjectStyles({
+ ':root': {
+ '--colors-aColor-500': '0',
+ },
+ })
+
+ expect(toCss(result)).toMatchFormattedCss(css`
+ :root {
+ --colors-aColor-500: 0;
+ }
+ `)
})
diff --git a/tests/plugins/__snapshots__/accentColor.test.js.snap b/tests/plugins/__snapshots__/accentColor.test.js.snap
new file mode 100644
index 000000000..ef9692f87
--- /dev/null
+++ b/tests/plugins/__snapshots__/accentColor.test.js.snap
@@ -0,0 +1,61 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'accentColor' plugin 1`] = `
+"
+.accent-\\[\\#0088cc\\] {
+ accent-color: #08c;
+}
+
+.accent-\\[var\\(--my-value\\)\\] {
+ accent-color: var(--my-value);
+}
+
+.accent-auto {
+ accent-color: auto;
+}
+
+.accent-black {
+ accent-color: #000;
+}
+
+.accent-black\\/0 {
+ accent-color: #0000;
+}
+
+.accent-black\\/50 {
+ accent-color: #00000080;
+}
+
+.accent-red-100 {
+ accent-color: #fee2e2;
+}
+
+.accent-red-100\\/0 {
+ accent-color: #fee2e200;
+}
+
+.accent-red-100\\/50 {
+ accent-color: #fee2e280;
+}
+
+.accent-red-200 {
+ accent-color: #fecaca;
+}
+
+.accent-red-200\\/0 {
+ accent-color: #fecaca00;
+}
+
+.accent-red-200\\/50 {
+ accent-color: #fecaca80;
+}
+
+.accent-transparent, .accent-transparent\\/0 {
+ accent-color: #0000;
+}
+
+.accent-transparent\\/50 {
+ accent-color: #00000080;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/accessibility.test.js.snap b/tests/plugins/__snapshots__/accessibility.test.js.snap
new file mode 100644
index 000000000..78e6fe0ec
--- /dev/null
+++ b/tests/plugins/__snapshots__/accessibility.test.js.snap
@@ -0,0 +1,28 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'accessibility' plugin 1`] = `
+"
+.sr-only {
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border-width: 0;
+ width: 1px;
+ height: 1px;
+ margin: -1px;
+ padding: 0;
+ position: absolute;
+ overflow: hidden;
+}
+
+.not-sr-only {
+ clip: auto;
+ white-space: normal;
+ width: auto;
+ height: auto;
+ margin: 0;
+ padding: 0;
+ position: static;
+ overflow: visible;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/alignContent.test.js.snap b/tests/plugins/__snapshots__/alignContent.test.js.snap
new file mode 100644
index 000000000..712fd4f73
--- /dev/null
+++ b/tests/plugins/__snapshots__/alignContent.test.js.snap
@@ -0,0 +1,41 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'alignContent' plugin 1`] = `
+"
+.content-normal {
+ align-content: normal;
+}
+
+.content-center {
+ align-content: center;
+}
+
+.content-start {
+ align-content: flex-start;
+}
+
+.content-end {
+ align-content: flex-end;
+}
+
+.content-between {
+ align-content: space-between;
+}
+
+.content-around {
+ align-content: space-around;
+}
+
+.content-evenly {
+ align-content: space-evenly;
+}
+
+.content-baseline {
+ align-content: baseline;
+}
+
+.content-stretch {
+ align-content: stretch;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/alignItems.test.js.snap b/tests/plugins/__snapshots__/alignItems.test.js.snap
new file mode 100644
index 000000000..b6d8ce8a7
--- /dev/null
+++ b/tests/plugins/__snapshots__/alignItems.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'alignItems' plugin 1`] = `
+"
+.items-start {
+ align-items: flex-start;
+}
+
+.items-end {
+ align-items: flex-end;
+}
+
+.items-center {
+ align-items: center;
+}
+
+.items-baseline {
+ align-items: baseline;
+}
+
+.items-stretch {
+ align-items: stretch;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/alignSelf.test.js.snap b/tests/plugins/__snapshots__/alignSelf.test.js.snap
new file mode 100644
index 000000000..06277ae86
--- /dev/null
+++ b/tests/plugins/__snapshots__/alignSelf.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'alignSelf' plugin 1`] = `
+"
+.self-auto {
+ align-self: auto;
+}
+
+.self-start {
+ align-self: flex-start;
+}
+
+.self-end {
+ align-self: flex-end;
+}
+
+.self-center {
+ align-self: center;
+}
+
+.self-stretch {
+ align-self: stretch;
+}
+
+.self-baseline {
+ align-self: baseline;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/animation.test.js.snap b/tests/plugins/__snapshots__/animation.test.js.snap
new file mode 100644
index 000000000..f8a9a37b0
--- /dev/null
+++ b/tests/plugins/__snapshots__/animation.test.js.snap
@@ -0,0 +1,64 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'animation' plugin 1`] = `
+"
+.animate-\\[1s_infinite_example\\] {
+ animation: 1s infinite example;
+}
+
+.animate-\\[var\\(--my-value\\)\\] {
+ animation: var(--my-value);
+}
+
+@keyframes bounce {
+ 0%, 100% {
+ animation-timing-function: cubic-bezier(.8, 0, 1, 1);
+ transform: translateY(-25%);
+ }
+
+ 50% {
+ animation-timing-function: cubic-bezier(0, 0, .2, 1);
+ transform: none;
+ }
+}
+
+.animate-bounce {
+ animation: 1s infinite bounce;
+}
+
+.animate-none {
+ animation: none;
+}
+
+@keyframes ping {
+ 75%, 100% {
+ opacity: 0;
+ transform: scale(2);
+ }
+}
+
+.animate-ping {
+ animation: 1s cubic-bezier(0, 0, .2, 1) infinite ping;
+}
+
+@keyframes pulse {
+ 50% {
+ opacity: .5;
+ }
+}
+
+.animate-pulse {
+ animation: 2s cubic-bezier(.4, 0, .6, 1) infinite pulse;
+}
+
+@keyframes spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+.animate-spin {
+ animation: 1s linear infinite spin;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/appearance.test.js.snap b/tests/plugins/__snapshots__/appearance.test.js.snap
new file mode 100644
index 000000000..0313ab1da
--- /dev/null
+++ b/tests/plugins/__snapshots__/appearance.test.js.snap
@@ -0,0 +1,15 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'appearance' plugin 1`] = `
+"
+.appearance-none {
+ -webkit-appearance: none;
+ appearance: none;
+}
+
+.appearance-auto {
+ -webkit-appearance: auto;
+ appearance: auto;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/aspectRatio.test.js.snap b/tests/plugins/__snapshots__/aspectRatio.test.js.snap
new file mode 100644
index 000000000..03ada172e
--- /dev/null
+++ b/tests/plugins/__snapshots__/aspectRatio.test.js.snap
@@ -0,0 +1,17 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'aspectRatio' plugin 1`] = `
+"
+.aspect-auto {
+ aspect-ratio: auto;
+}
+
+.aspect-square {
+ aspect-ratio: 1;
+}
+
+.aspect-video {
+ aspect-ratio: 16 / 9;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backdropBlur.test.js.snap b/tests/plugins/__snapshots__/backdropBlur.test.js.snap
new file mode 100644
index 000000000..1ba86a9a1
--- /dev/null
+++ b/tests/plugins/__snapshots__/backdropBlur.test.js.snap
@@ -0,0 +1,71 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backdropBlur' plugin 1`] = `
+"
+.backdrop-blur {
+ --tw-backdrop-blur: blur(8px);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-blur-0 {
+ --tw-backdrop-blur: blur(0);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-blur-2xl {
+ --tw-backdrop-blur: blur(40px);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-blur-3xl {
+ --tw-backdrop-blur: blur(64px);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-blur-\\[12px\\] {
+ --tw-backdrop-blur: blur(12px);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-blur-\\[var\\(--my-value\\)\\] {
+ --tw-backdrop-blur: blur(var(--my-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-blur-lg {
+ --tw-backdrop-blur: blur(16px);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-blur-md {
+ --tw-backdrop-blur: blur(12px);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-blur-none {
+ --tw-backdrop-blur: blur(0);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-blur-sm {
+ --tw-backdrop-blur: blur(4px);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-blur-xl {
+ --tw-backdrop-blur: blur(24px);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backdropBrightness.test.js.snap b/tests/plugins/__snapshots__/backdropBrightness.test.js.snap
new file mode 100644
index 000000000..70129a9e7
--- /dev/null
+++ b/tests/plugins/__snapshots__/backdropBrightness.test.js.snap
@@ -0,0 +1,83 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backdropBrightness' plugin 1`] = `
+"
+.backdrop-brightness-0 {
+ --tw-backdrop-brightness: brightness(0);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-brightness-100 {
+ --tw-backdrop-brightness: brightness(1);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-brightness-105 {
+ --tw-backdrop-brightness: brightness(1.05);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-brightness-110 {
+ --tw-backdrop-brightness: brightness(1.1);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-brightness-125 {
+ --tw-backdrop-brightness: brightness(1.25);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-brightness-150 {
+ --tw-backdrop-brightness: brightness(1.5);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-brightness-200 {
+ --tw-backdrop-brightness: brightness(2);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-brightness-50 {
+ --tw-backdrop-brightness: brightness(.5);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-brightness-75 {
+ --tw-backdrop-brightness: brightness(.75);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-brightness-90 {
+ --tw-backdrop-brightness: brightness(.9);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-brightness-95 {
+ --tw-backdrop-brightness: brightness(.95);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-brightness-\\[\\.12\\] {
+ --tw-backdrop-brightness: brightness(.12);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-brightness-\\[var\\(--my-value\\)\\] {
+ --tw-backdrop-brightness: brightness(var(--my-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backdropContrast.test.js.snap b/tests/plugins/__snapshots__/backdropContrast.test.js.snap
new file mode 100644
index 000000000..bdc8ddf74
--- /dev/null
+++ b/tests/plugins/__snapshots__/backdropContrast.test.js.snap
@@ -0,0 +1,59 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backdropContrast' plugin 1`] = `
+"
+.backdrop-contrast-0 {
+ --tw-backdrop-contrast: contrast(0);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-contrast-100 {
+ --tw-backdrop-contrast: contrast(1);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-contrast-125 {
+ --tw-backdrop-contrast: contrast(1.25);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-contrast-150 {
+ --tw-backdrop-contrast: contrast(1.5);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-contrast-200 {
+ --tw-backdrop-contrast: contrast(2);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-contrast-50 {
+ --tw-backdrop-contrast: contrast(.5);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-contrast-75 {
+ --tw-backdrop-contrast: contrast(.75);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-contrast-\\[\\.12\\] {
+ --tw-backdrop-contrast: contrast(.12);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-contrast-\\[var\\(--my-value\\)\\] {
+ --tw-backdrop-contrast: contrast(var(--my-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backdropFilter.test.js.snap b/tests/plugins/__snapshots__/backdropFilter.test.js.snap
new file mode 100644
index 000000000..b1eacbf86
--- /dev/null
+++ b/tests/plugins/__snapshots__/backdropFilter.test.js.snap
@@ -0,0 +1,39 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backdropFilter' plugin 1`] = `
+"
+*, :before, :after {
+ --tw-backdrop-blur: ;
+ --tw-backdrop-brightness: ;
+ --tw-backdrop-contrast: ;
+ --tw-backdrop-grayscale: ;
+ --tw-backdrop-hue-rotate: ;
+ --tw-backdrop-invert: ;
+ --tw-backdrop-opacity: ;
+ --tw-backdrop-saturate: ;
+ --tw-backdrop-sepia: ;
+}
+
+::backdrop {
+ --tw-backdrop-blur: ;
+ --tw-backdrop-brightness: ;
+ --tw-backdrop-contrast: ;
+ --tw-backdrop-grayscale: ;
+ --tw-backdrop-hue-rotate: ;
+ --tw-backdrop-invert: ;
+ --tw-backdrop-opacity: ;
+ --tw-backdrop-saturate: ;
+ --tw-backdrop-sepia: ;
+}
+
+.backdrop-filter {
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-filter-none {
+ -webkit-backdrop-filter: none;
+ backdrop-filter: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backdropGrayscale.test.js.snap b/tests/plugins/__snapshots__/backdropGrayscale.test.js.snap
new file mode 100644
index 000000000..79c67d6e1
--- /dev/null
+++ b/tests/plugins/__snapshots__/backdropGrayscale.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backdropGrayscale' plugin 1`] = `
+"
+.backdrop-grayscale {
+ --tw-backdrop-grayscale: grayscale(100%);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-grayscale-0 {
+ --tw-backdrop-grayscale: grayscale(0);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-grayscale-\\[50\\%\\] {
+ --tw-backdrop-grayscale: grayscale(50%);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-grayscale-\\[var\\(--my-value\\)\\] {
+ --tw-backdrop-grayscale: grayscale(var(--my-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backdropHueRotate.test.js.snap b/tests/plugins/__snapshots__/backdropHueRotate.test.js.snap
new file mode 100644
index 000000000..628918bda
--- /dev/null
+++ b/tests/plugins/__snapshots__/backdropHueRotate.test.js.snap
@@ -0,0 +1,89 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backdropHueRotate' plugin 1`] = `
+"
+.-backdrop-hue-rotate-0 {
+ --tw-backdrop-hue-rotate: hue-rotate(-0deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.-backdrop-hue-rotate-15 {
+ --tw-backdrop-hue-rotate: hue-rotate(-15deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.-backdrop-hue-rotate-180 {
+ --tw-backdrop-hue-rotate: hue-rotate(-180deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.-backdrop-hue-rotate-30 {
+ --tw-backdrop-hue-rotate: hue-rotate(-30deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.-backdrop-hue-rotate-60 {
+ --tw-backdrop-hue-rotate: hue-rotate(-60deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.-backdrop-hue-rotate-90 {
+ --tw-backdrop-hue-rotate: hue-rotate(-90deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-hue-rotate-0 {
+ --tw-backdrop-hue-rotate: hue-rotate(0deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-hue-rotate-15 {
+ --tw-backdrop-hue-rotate: hue-rotate(15deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-hue-rotate-180 {
+ --tw-backdrop-hue-rotate: hue-rotate(180deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-hue-rotate-30 {
+ --tw-backdrop-hue-rotate: hue-rotate(30deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-hue-rotate-60 {
+ --tw-backdrop-hue-rotate: hue-rotate(60deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-hue-rotate-90 {
+ --tw-backdrop-hue-rotate: hue-rotate(90deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-hue-rotate-\\[12deg\\] {
+ --tw-backdrop-hue-rotate: hue-rotate(12deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-hue-rotate-\\[var\\(--my-value\\)\\] {
+ --tw-backdrop-hue-rotate: hue-rotate(var(--my-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backdropInvert.test.js.snap b/tests/plugins/__snapshots__/backdropInvert.test.js.snap
new file mode 100644
index 000000000..822764749
--- /dev/null
+++ b/tests/plugins/__snapshots__/backdropInvert.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backdropInvert' plugin 1`] = `
+"
+.backdrop-invert {
+ --tw-backdrop-invert: invert(100%);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-invert-0 {
+ --tw-backdrop-invert: invert(0);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-invert-\\[50\\%\\] {
+ --tw-backdrop-invert: invert(50%);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-invert-\\[var\\(--my-value\\)\\] {
+ --tw-backdrop-invert: invert(var(--my-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backdropOpacity.test.js.snap b/tests/plugins/__snapshots__/backdropOpacity.test.js.snap
new file mode 100644
index 000000000..1acff365b
--- /dev/null
+++ b/tests/plugins/__snapshots__/backdropOpacity.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backdropOpacity' plugin 1`] = `
+"
+.backdrop-opacity-0 {
+ --tw-backdrop-opacity: opacity(0);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-opacity-50 {
+ --tw-backdrop-opacity: opacity(.5);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-opacity-\\[0\\.12\\] {
+ --tw-backdrop-opacity: opacity(.12);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-opacity-\\[var\\(--my-value\\)\\] {
+ --tw-backdrop-opacity: opacity(var(--my-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backdropSaturate.test.js.snap b/tests/plugins/__snapshots__/backdropSaturate.test.js.snap
new file mode 100644
index 000000000..0ee3a7859
--- /dev/null
+++ b/tests/plugins/__snapshots__/backdropSaturate.test.js.snap
@@ -0,0 +1,47 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backdropSaturate' plugin 1`] = `
+"
+.backdrop-saturate-0 {
+ --tw-backdrop-saturate: saturate(0);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-saturate-100 {
+ --tw-backdrop-saturate: saturate(1);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-saturate-150 {
+ --tw-backdrop-saturate: saturate(1.5);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-saturate-200 {
+ --tw-backdrop-saturate: saturate(2);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-saturate-50 {
+ --tw-backdrop-saturate: saturate(.5);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-saturate-\\[0\\.12\\] {
+ --tw-backdrop-saturate: saturate(.12);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-saturate-\\[var\\(--my-value\\)\\] {
+ --tw-backdrop-saturate: saturate(var(--my-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backdropSepia.test.js.snap b/tests/plugins/__snapshots__/backdropSepia.test.js.snap
new file mode 100644
index 000000000..31f15f7ac
--- /dev/null
+++ b/tests/plugins/__snapshots__/backdropSepia.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backdropSepia' plugin 1`] = `
+"
+.backdrop-sepia {
+ --tw-backdrop-sepia: sepia(100%);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-sepia-0 {
+ --tw-backdrop-sepia: sepia(0);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-sepia-\\[50\\%\\] {
+ --tw-backdrop-sepia: sepia(50%);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-sepia-\\[var\\(--my-value\\)\\] {
+ --tw-backdrop-sepia: sepia(var(--my-value));
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+ backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backgroundAttachment.test.js.snap b/tests/plugins/__snapshots__/backgroundAttachment.test.js.snap
new file mode 100644
index 000000000..e5b2a2035
--- /dev/null
+++ b/tests/plugins/__snapshots__/backgroundAttachment.test.js.snap
@@ -0,0 +1,17 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backgroundAttachment' plugin 1`] = `
+"
+.bg-fixed {
+ background-attachment: fixed;
+}
+
+.bg-local {
+ background-attachment: local;
+}
+
+.bg-scroll {
+ background-attachment: scroll;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backgroundBlendMode.test.js.snap b/tests/plugins/__snapshots__/backgroundBlendMode.test.js.snap
new file mode 100644
index 000000000..e9813586c
--- /dev/null
+++ b/tests/plugins/__snapshots__/backgroundBlendMode.test.js.snap
@@ -0,0 +1,69 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backgroundBlendMode' plugin 1`] = `
+"
+.bg-blend-normal {
+ background-blend-mode: normal;
+}
+
+.bg-blend-multiply {
+ background-blend-mode: multiply;
+}
+
+.bg-blend-screen {
+ background-blend-mode: screen;
+}
+
+.bg-blend-overlay {
+ background-blend-mode: overlay;
+}
+
+.bg-blend-darken {
+ background-blend-mode: darken;
+}
+
+.bg-blend-lighten {
+ background-blend-mode: lighten;
+}
+
+.bg-blend-color-dodge {
+ background-blend-mode: color-dodge;
+}
+
+.bg-blend-color-burn {
+ background-blend-mode: color-burn;
+}
+
+.bg-blend-hard-light {
+ background-blend-mode: hard-light;
+}
+
+.bg-blend-soft-light {
+ background-blend-mode: soft-light;
+}
+
+.bg-blend-difference {
+ background-blend-mode: difference;
+}
+
+.bg-blend-exclusion {
+ background-blend-mode: exclusion;
+}
+
+.bg-blend-hue {
+ background-blend-mode: hue;
+}
+
+.bg-blend-saturation {
+ background-blend-mode: saturation;
+}
+
+.bg-blend-color {
+ background-blend-mode: color;
+}
+
+.bg-blend-luminosity {
+ background-blend-mode: luminosity;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backgroundClip.test.js.snap b/tests/plugins/__snapshots__/backgroundClip.test.js.snap
new file mode 100644
index 000000000..b04895402
--- /dev/null
+++ b/tests/plugins/__snapshots__/backgroundClip.test.js.snap
@@ -0,0 +1,22 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backgroundClip' plugin 1`] = `
+"
+.bg-clip-border {
+ background-clip: border-box;
+}
+
+.bg-clip-padding {
+ background-clip: padding-box;
+}
+
+.bg-clip-content {
+ background-clip: content-box;
+}
+
+.bg-clip-text {
+ -webkit-background-clip: text;
+ background-clip: text;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backgroundColor.test.js.snap b/tests/plugins/__snapshots__/backgroundColor.test.js.snap
new file mode 100644
index 000000000..37100123f
--- /dev/null
+++ b/tests/plugins/__snapshots__/backgroundColor.test.js.snap
@@ -0,0 +1,125 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backgroundColor' plugin 1`] = `
+"
+.bg-\\[\\#0088cc\\] {
+ background-color: #08c;
+}
+
+.bg-\\[var\\(--my-value\\)\\] {
+ background-color: var(--my-value);
+}
+
+.bg-black {
+ background-color: #000;
+}
+
+.bg-black\\/0 {
+ background-color: #0000;
+}
+
+.bg-black\\/50 {
+ background-color: #00000080;
+}
+
+.bg-red-100 {
+ background-color: #fee2e2;
+}
+
+.bg-red-100\\/0 {
+ background-color: #fee2e200;
+}
+
+.bg-red-100\\/50 {
+ background-color: #fee2e280;
+}
+
+.bg-red-200 {
+ background-color: #fecaca;
+}
+
+.bg-red-200\\/0 {
+ background-color: #fecaca00;
+}
+
+.bg-red-200\\/50 {
+ background-color: #fecaca80;
+}
+
+.bg-transparent, .bg-transparent\\/0 {
+ background-color: #0000;
+}
+
+.bg-transparent\\/50 {
+ background-color: #00000080;
+}
+"
+`;
+
+exports[`should test the 'backgroundColor' plugin 2`] = `
+"
+.bg-\\[\\#0088cc\\] {
+ --tw-bg-opacity: 1;
+ background-color: rgb(0 136 204 / var(--tw-bg-opacity));
+}
+
+.bg-\\[var\\(--my-value\\)\\] {
+ background-color: var(--my-value);
+}
+
+.bg-black {
+ --tw-bg-opacity: 1;
+ background-color: rgb(0 0 0 / var(--tw-bg-opacity));
+}
+
+.bg-black\\/0 {
+ background-color: #0000;
+}
+
+.bg-black\\/50 {
+ background-color: #00000080;
+}
+
+.bg-red-100 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 226 226 / var(--tw-bg-opacity));
+}
+
+.bg-red-100\\/0 {
+ background-color: #fee2e200;
+}
+
+.bg-red-100\\/50 {
+ background-color: #fee2e280;
+}
+
+.bg-red-200 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 202 202 / var(--tw-bg-opacity));
+}
+
+.bg-red-200\\/0 {
+ background-color: #fecaca00;
+}
+
+.bg-red-200\\/50 {
+ background-color: #fecaca80;
+}
+
+.bg-transparent, .bg-transparent\\/0 {
+ background-color: #0000;
+}
+
+.bg-transparent\\/50 {
+ background-color: #00000080;
+}
+
+.bg-opacity-0 {
+ --tw-bg-opacity: 0;
+}
+
+.bg-opacity-50 {
+ --tw-bg-opacity: .5;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backgroundImage.test.js.snap b/tests/plugins/__snapshots__/backgroundImage.test.js.snap
new file mode 100644
index 000000000..54ccf1afe
--- /dev/null
+++ b/tests/plugins/__snapshots__/backgroundImage.test.js.snap
@@ -0,0 +1,45 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backgroundImage' plugin 1`] = `
+"
+.bg-\\[url\\(\\/my-image\\.png\\)\\] {
+ background-image: url("/my-image.png");
+}
+
+.bg-gradient-to-b {
+ background-image: linear-gradient(to bottom, var(--tw-gradient-stops));
+}
+
+.bg-gradient-to-bl {
+ background-image: linear-gradient(to bottom left, var(--tw-gradient-stops));
+}
+
+.bg-gradient-to-br {
+ background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));
+}
+
+.bg-gradient-to-l {
+ background-image: linear-gradient(to left, var(--tw-gradient-stops));
+}
+
+.bg-gradient-to-r {
+ background-image: linear-gradient(to right, var(--tw-gradient-stops));
+}
+
+.bg-gradient-to-t {
+ background-image: linear-gradient(to top, var(--tw-gradient-stops));
+}
+
+.bg-gradient-to-tl {
+ background-image: linear-gradient(to top left, var(--tw-gradient-stops));
+}
+
+.bg-gradient-to-tr {
+ background-image: linear-gradient(to top right, var(--tw-gradient-stops));
+}
+
+.bg-none {
+ background-image: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backgroundOpacity.test.js.snap b/tests/plugins/__snapshots__/backgroundOpacity.test.js.snap
new file mode 100644
index 000000000..e624f564c
--- /dev/null
+++ b/tests/plugins/__snapshots__/backgroundOpacity.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backgroundOpacity' plugin 1`] = `
+"
+.bg-opacity-0 {
+ --tw-bg-opacity: 0;
+}
+
+.bg-opacity-50 {
+ --tw-bg-opacity: .5;
+}
+
+.bg-opacity-\\[0\\.12\\] {
+ --tw-bg-opacity: .12;
+}
+
+.bg-opacity-\\[var\\(--my-value\\)\\] {
+ --tw-bg-opacity: var(--my-value);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backgroundOrigin.test.js.snap b/tests/plugins/__snapshots__/backgroundOrigin.test.js.snap
new file mode 100644
index 000000000..4d50f54c0
--- /dev/null
+++ b/tests/plugins/__snapshots__/backgroundOrigin.test.js.snap
@@ -0,0 +1,17 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backgroundOrigin' plugin 1`] = `
+"
+.bg-origin-border {
+ background-origin: border-box;
+}
+
+.bg-origin-padding {
+ background-origin: padding-box;
+}
+
+.bg-origin-content {
+ background-origin: content-box;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backgroundPosition.test.js.snap b/tests/plugins/__snapshots__/backgroundPosition.test.js.snap
new file mode 100644
index 000000000..1c3f4816e
--- /dev/null
+++ b/tests/plugins/__snapshots__/backgroundPosition.test.js.snap
@@ -0,0 +1,45 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backgroundPosition' plugin 1`] = `
+"
+.bg-\\[50\\%_25\\%\\] {
+ background-position: 50% 25%;
+}
+
+.bg-bottom {
+ background-position: bottom;
+}
+
+.bg-center {
+ background-position: center;
+}
+
+.bg-left {
+ background-position: 0;
+}
+
+.bg-left-bottom {
+ background-position: 0 100%;
+}
+
+.bg-left-top {
+ background-position: 0 0;
+}
+
+.bg-right {
+ background-position: 100%;
+}
+
+.bg-right-bottom {
+ background-position: 100% 100%;
+}
+
+.bg-right-top {
+ background-position: 100% 0;
+}
+
+.bg-top {
+ background-position: top;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backgroundRepeat.test.js.snap b/tests/plugins/__snapshots__/backgroundRepeat.test.js.snap
new file mode 100644
index 000000000..8f305810e
--- /dev/null
+++ b/tests/plugins/__snapshots__/backgroundRepeat.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backgroundRepeat' plugin 1`] = `
+"
+.bg-repeat {
+ background-repeat: repeat;
+}
+
+.bg-no-repeat {
+ background-repeat: no-repeat;
+}
+
+.bg-repeat-x {
+ background-repeat: repeat-x;
+}
+
+.bg-repeat-y {
+ background-repeat: repeat-y;
+}
+
+.bg-repeat-round {
+ background-repeat: round;
+}
+
+.bg-repeat-space {
+ background-repeat: space;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/backgroundSize.test.js.snap b/tests/plugins/__snapshots__/backgroundSize.test.js.snap
new file mode 100644
index 000000000..1d3db3016
--- /dev/null
+++ b/tests/plugins/__snapshots__/backgroundSize.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'backgroundSize' plugin 1`] = `
+"
+.bg-\\[50\\%\\] {
+ background-size: 50%;
+}
+
+.bg-auto {
+ background-size: auto;
+}
+
+.bg-contain {
+ background-size: contain;
+}
+
+.bg-cover {
+ background-size: cover;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/blur.test.js.snap b/tests/plugins/__snapshots__/blur.test.js.snap
new file mode 100644
index 000000000..2915fecf3
--- /dev/null
+++ b/tests/plugins/__snapshots__/blur.test.js.snap
@@ -0,0 +1,60 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'blur' plugin 1`] = `
+"
+.blur {
+ --tw-blur: blur(8px);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.blur-0 {
+ --tw-blur: blur(0);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.blur-2xl {
+ --tw-blur: blur(40px);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.blur-3xl {
+ --tw-blur: blur(64px);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.blur-\\[12px\\] {
+ --tw-blur: blur(12px);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.blur-\\[var\\(--my-value\\)\\] {
+ --tw-blur: blur(var(--my-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.blur-lg {
+ --tw-blur: blur(16px);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.blur-md {
+ --tw-blur: blur(12px);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.blur-none {
+ --tw-blur: blur(0);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.blur-sm {
+ --tw-blur: blur(4px);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.blur-xl {
+ --tw-blur: blur(24px);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/borderCollapse.test.js.snap b/tests/plugins/__snapshots__/borderCollapse.test.js.snap
new file mode 100644
index 000000000..e90f62fcf
--- /dev/null
+++ b/tests/plugins/__snapshots__/borderCollapse.test.js.snap
@@ -0,0 +1,13 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'borderCollapse' plugin 1`] = `
+"
+.border-collapse {
+ border-collapse: collapse;
+}
+
+.border-separate {
+ border-collapse: separate;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/borderColor.test.js.snap b/tests/plugins/__snapshots__/borderColor.test.js.snap
new file mode 100644
index 000000000..22b254ff7
--- /dev/null
+++ b/tests/plugins/__snapshots__/borderColor.test.js.snap
@@ -0,0 +1,3785 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'borderColor' plugin 1`] = `
+"
+.border-\\[\\#0088cc\\] {
+ border-color: #08c;
+}
+
+.border-\\[var\\(--my-value\\)\\] {
+ border-color: var(--my-value);
+}
+
+.border-black {
+ border-color: #000;
+}
+
+.border-black\\/0 {
+ border-color: #0000;
+}
+
+.border-black\\/10 {
+ border-color: #0000001a;
+}
+
+.border-black\\/100 {
+ border-color: #000;
+}
+
+.border-black\\/15 {
+ border-color: #00000026;
+}
+
+.border-black\\/20 {
+ border-color: #0003;
+}
+
+.border-black\\/25 {
+ border-color: #00000040;
+}
+
+.border-black\\/30 {
+ border-color: #0000004d;
+}
+
+.border-black\\/35 {
+ border-color: #00000059;
+}
+
+.border-black\\/40 {
+ border-color: #0006;
+}
+
+.border-black\\/45 {
+ border-color: #00000073;
+}
+
+.border-black\\/5 {
+ border-color: #0000000d;
+}
+
+.border-black\\/50 {
+ border-color: #00000080;
+}
+
+.border-black\\/55 {
+ border-color: #0000008c;
+}
+
+.border-black\\/60 {
+ border-color: #0009;
+}
+
+.border-black\\/65 {
+ border-color: #000000a6;
+}
+
+.border-black\\/70 {
+ border-color: #000000b3;
+}
+
+.border-black\\/75 {
+ border-color: #000000bf;
+}
+
+.border-black\\/80 {
+ border-color: #000c;
+}
+
+.border-black\\/85 {
+ border-color: #000000d9;
+}
+
+.border-black\\/90 {
+ border-color: #000000e6;
+}
+
+.border-black\\/95 {
+ border-color: #000000f2;
+}
+
+.border-red-100 {
+ border-color: #fee2e2;
+}
+
+.border-red-100\\/0 {
+ border-color: #fee2e200;
+}
+
+.border-red-100\\/10 {
+ border-color: #fee2e21a;
+}
+
+.border-red-100\\/100 {
+ border-color: #fee2e2;
+}
+
+.border-red-100\\/15 {
+ border-color: #fee2e226;
+}
+
+.border-red-100\\/20 {
+ border-color: #fee2e233;
+}
+
+.border-red-100\\/25 {
+ border-color: #fee2e240;
+}
+
+.border-red-100\\/30 {
+ border-color: #fee2e24d;
+}
+
+.border-red-100\\/35 {
+ border-color: #fee2e259;
+}
+
+.border-red-100\\/40 {
+ border-color: #fee2e266;
+}
+
+.border-red-100\\/45 {
+ border-color: #fee2e273;
+}
+
+.border-red-100\\/5 {
+ border-color: #fee2e20d;
+}
+
+.border-red-100\\/50 {
+ border-color: #fee2e280;
+}
+
+.border-red-100\\/55 {
+ border-color: #fee2e28c;
+}
+
+.border-red-100\\/60 {
+ border-color: #fee2e299;
+}
+
+.border-red-100\\/65 {
+ border-color: #fee2e2a6;
+}
+
+.border-red-100\\/70 {
+ border-color: #fee2e2b3;
+}
+
+.border-red-100\\/75 {
+ border-color: #fee2e2bf;
+}
+
+.border-red-100\\/80 {
+ border-color: #fee2e2cc;
+}
+
+.border-red-100\\/85 {
+ border-color: #fee2e2d9;
+}
+
+.border-red-100\\/90 {
+ border-color: #fee2e2e6;
+}
+
+.border-red-100\\/95 {
+ border-color: #fee2e2f2;
+}
+
+.border-red-200 {
+ border-color: #fecaca;
+}
+
+.border-red-200\\/0 {
+ border-color: #fecaca00;
+}
+
+.border-red-200\\/10 {
+ border-color: #fecaca1a;
+}
+
+.border-red-200\\/100 {
+ border-color: #fecaca;
+}
+
+.border-red-200\\/15 {
+ border-color: #fecaca26;
+}
+
+.border-red-200\\/20 {
+ border-color: #fecaca33;
+}
+
+.border-red-200\\/25 {
+ border-color: #fecaca40;
+}
+
+.border-red-200\\/30 {
+ border-color: #fecaca4d;
+}
+
+.border-red-200\\/35 {
+ border-color: #fecaca59;
+}
+
+.border-red-200\\/40 {
+ border-color: #fecaca66;
+}
+
+.border-red-200\\/45 {
+ border-color: #fecaca73;
+}
+
+.border-red-200\\/5 {
+ border-color: #fecaca0d;
+}
+
+.border-red-200\\/50 {
+ border-color: #fecaca80;
+}
+
+.border-red-200\\/55 {
+ border-color: #fecaca8c;
+}
+
+.border-red-200\\/60 {
+ border-color: #fecaca99;
+}
+
+.border-red-200\\/65 {
+ border-color: #fecacaa6;
+}
+
+.border-red-200\\/70 {
+ border-color: #fecacab3;
+}
+
+.border-red-200\\/75 {
+ border-color: #fecacabf;
+}
+
+.border-red-200\\/80 {
+ border-color: #fecacacc;
+}
+
+.border-red-200\\/85 {
+ border-color: #fecacad9;
+}
+
+.border-red-200\\/90 {
+ border-color: #fecacae6;
+}
+
+.border-red-200\\/95 {
+ border-color: #fecacaf2;
+}
+
+.border-transparent, .border-transparent\\/0 {
+ border-color: #0000;
+}
+
+.border-transparent\\/10 {
+ border-color: #0000001a;
+}
+
+.border-transparent\\/100 {
+ border-color: #000;
+}
+
+.border-transparent\\/15 {
+ border-color: #00000026;
+}
+
+.border-transparent\\/20 {
+ border-color: #0003;
+}
+
+.border-transparent\\/25 {
+ border-color: #00000040;
+}
+
+.border-transparent\\/30 {
+ border-color: #0000004d;
+}
+
+.border-transparent\\/35 {
+ border-color: #00000059;
+}
+
+.border-transparent\\/40 {
+ border-color: #0006;
+}
+
+.border-transparent\\/45 {
+ border-color: #00000073;
+}
+
+.border-transparent\\/5 {
+ border-color: #0000000d;
+}
+
+.border-transparent\\/50 {
+ border-color: #00000080;
+}
+
+.border-transparent\\/55 {
+ border-color: #0000008c;
+}
+
+.border-transparent\\/60 {
+ border-color: #0009;
+}
+
+.border-transparent\\/65 {
+ border-color: #000000a6;
+}
+
+.border-transparent\\/70 {
+ border-color: #000000b3;
+}
+
+.border-transparent\\/75 {
+ border-color: #000000bf;
+}
+
+.border-transparent\\/80 {
+ border-color: #000c;
+}
+
+.border-transparent\\/85 {
+ border-color: #000000d9;
+}
+
+.border-transparent\\/90 {
+ border-color: #000000e6;
+}
+
+.border-transparent\\/95 {
+ border-color: #000000f2;
+}
+
+.border-x-black {
+ border-left-color: #000;
+ border-right-color: #000;
+}
+
+.border-x-black\\/0 {
+ border-left-color: #0000;
+ border-right-color: #0000;
+}
+
+.border-x-black\\/10 {
+ border-left-color: #0000001a;
+ border-right-color: #0000001a;
+}
+
+.border-x-black\\/100 {
+ border-left-color: #000;
+ border-right-color: #000;
+}
+
+.border-x-black\\/15 {
+ border-left-color: #00000026;
+ border-right-color: #00000026;
+}
+
+.border-x-black\\/20 {
+ border-left-color: #0003;
+ border-right-color: #0003;
+}
+
+.border-x-black\\/25 {
+ border-left-color: #00000040;
+ border-right-color: #00000040;
+}
+
+.border-x-black\\/30 {
+ border-left-color: #0000004d;
+ border-right-color: #0000004d;
+}
+
+.border-x-black\\/35 {
+ border-left-color: #00000059;
+ border-right-color: #00000059;
+}
+
+.border-x-black\\/40 {
+ border-left-color: #0006;
+ border-right-color: #0006;
+}
+
+.border-x-black\\/45 {
+ border-left-color: #00000073;
+ border-right-color: #00000073;
+}
+
+.border-x-black\\/5 {
+ border-left-color: #0000000d;
+ border-right-color: #0000000d;
+}
+
+.border-x-black\\/50 {
+ border-left-color: #00000080;
+ border-right-color: #00000080;
+}
+
+.border-x-black\\/55 {
+ border-left-color: #0000008c;
+ border-right-color: #0000008c;
+}
+
+.border-x-black\\/60 {
+ border-left-color: #0009;
+ border-right-color: #0009;
+}
+
+.border-x-black\\/65 {
+ border-left-color: #000000a6;
+ border-right-color: #000000a6;
+}
+
+.border-x-black\\/70 {
+ border-left-color: #000000b3;
+ border-right-color: #000000b3;
+}
+
+.border-x-black\\/75 {
+ border-left-color: #000000bf;
+ border-right-color: #000000bf;
+}
+
+.border-x-black\\/80 {
+ border-left-color: #000c;
+ border-right-color: #000c;
+}
+
+.border-x-black\\/85 {
+ border-left-color: #000000d9;
+ border-right-color: #000000d9;
+}
+
+.border-x-black\\/90 {
+ border-left-color: #000000e6;
+ border-right-color: #000000e6;
+}
+
+.border-x-black\\/95 {
+ border-left-color: #000000f2;
+ border-right-color: #000000f2;
+}
+
+.border-x-red-100 {
+ border-left-color: #fee2e2;
+ border-right-color: #fee2e2;
+}
+
+.border-x-red-100\\/0 {
+ border-left-color: #fee2e200;
+ border-right-color: #fee2e200;
+}
+
+.border-x-red-100\\/10 {
+ border-left-color: #fee2e21a;
+ border-right-color: #fee2e21a;
+}
+
+.border-x-red-100\\/100 {
+ border-left-color: #fee2e2;
+ border-right-color: #fee2e2;
+}
+
+.border-x-red-100\\/15 {
+ border-left-color: #fee2e226;
+ border-right-color: #fee2e226;
+}
+
+.border-x-red-100\\/20 {
+ border-left-color: #fee2e233;
+ border-right-color: #fee2e233;
+}
+
+.border-x-red-100\\/25 {
+ border-left-color: #fee2e240;
+ border-right-color: #fee2e240;
+}
+
+.border-x-red-100\\/30 {
+ border-left-color: #fee2e24d;
+ border-right-color: #fee2e24d;
+}
+
+.border-x-red-100\\/35 {
+ border-left-color: #fee2e259;
+ border-right-color: #fee2e259;
+}
+
+.border-x-red-100\\/40 {
+ border-left-color: #fee2e266;
+ border-right-color: #fee2e266;
+}
+
+.border-x-red-100\\/45 {
+ border-left-color: #fee2e273;
+ border-right-color: #fee2e273;
+}
+
+.border-x-red-100\\/5 {
+ border-left-color: #fee2e20d;
+ border-right-color: #fee2e20d;
+}
+
+.border-x-red-100\\/50 {
+ border-left-color: #fee2e280;
+ border-right-color: #fee2e280;
+}
+
+.border-x-red-100\\/55 {
+ border-left-color: #fee2e28c;
+ border-right-color: #fee2e28c;
+}
+
+.border-x-red-100\\/60 {
+ border-left-color: #fee2e299;
+ border-right-color: #fee2e299;
+}
+
+.border-x-red-100\\/65 {
+ border-left-color: #fee2e2a6;
+ border-right-color: #fee2e2a6;
+}
+
+.border-x-red-100\\/70 {
+ border-left-color: #fee2e2b3;
+ border-right-color: #fee2e2b3;
+}
+
+.border-x-red-100\\/75 {
+ border-left-color: #fee2e2bf;
+ border-right-color: #fee2e2bf;
+}
+
+.border-x-red-100\\/80 {
+ border-left-color: #fee2e2cc;
+ border-right-color: #fee2e2cc;
+}
+
+.border-x-red-100\\/85 {
+ border-left-color: #fee2e2d9;
+ border-right-color: #fee2e2d9;
+}
+
+.border-x-red-100\\/90 {
+ border-left-color: #fee2e2e6;
+ border-right-color: #fee2e2e6;
+}
+
+.border-x-red-100\\/95 {
+ border-left-color: #fee2e2f2;
+ border-right-color: #fee2e2f2;
+}
+
+.border-x-red-200 {
+ border-left-color: #fecaca;
+ border-right-color: #fecaca;
+}
+
+.border-x-red-200\\/0 {
+ border-left-color: #fecaca00;
+ border-right-color: #fecaca00;
+}
+
+.border-x-red-200\\/10 {
+ border-left-color: #fecaca1a;
+ border-right-color: #fecaca1a;
+}
+
+.border-x-red-200\\/100 {
+ border-left-color: #fecaca;
+ border-right-color: #fecaca;
+}
+
+.border-x-red-200\\/15 {
+ border-left-color: #fecaca26;
+ border-right-color: #fecaca26;
+}
+
+.border-x-red-200\\/20 {
+ border-left-color: #fecaca33;
+ border-right-color: #fecaca33;
+}
+
+.border-x-red-200\\/25 {
+ border-left-color: #fecaca40;
+ border-right-color: #fecaca40;
+}
+
+.border-x-red-200\\/30 {
+ border-left-color: #fecaca4d;
+ border-right-color: #fecaca4d;
+}
+
+.border-x-red-200\\/35 {
+ border-left-color: #fecaca59;
+ border-right-color: #fecaca59;
+}
+
+.border-x-red-200\\/40 {
+ border-left-color: #fecaca66;
+ border-right-color: #fecaca66;
+}
+
+.border-x-red-200\\/45 {
+ border-left-color: #fecaca73;
+ border-right-color: #fecaca73;
+}
+
+.border-x-red-200\\/5 {
+ border-left-color: #fecaca0d;
+ border-right-color: #fecaca0d;
+}
+
+.border-x-red-200\\/50 {
+ border-left-color: #fecaca80;
+ border-right-color: #fecaca80;
+}
+
+.border-x-red-200\\/55 {
+ border-left-color: #fecaca8c;
+ border-right-color: #fecaca8c;
+}
+
+.border-x-red-200\\/60 {
+ border-left-color: #fecaca99;
+ border-right-color: #fecaca99;
+}
+
+.border-x-red-200\\/65 {
+ border-left-color: #fecacaa6;
+ border-right-color: #fecacaa6;
+}
+
+.border-x-red-200\\/70 {
+ border-left-color: #fecacab3;
+ border-right-color: #fecacab3;
+}
+
+.border-x-red-200\\/75 {
+ border-left-color: #fecacabf;
+ border-right-color: #fecacabf;
+}
+
+.border-x-red-200\\/80 {
+ border-left-color: #fecacacc;
+ border-right-color: #fecacacc;
+}
+
+.border-x-red-200\\/85 {
+ border-left-color: #fecacad9;
+ border-right-color: #fecacad9;
+}
+
+.border-x-red-200\\/90 {
+ border-left-color: #fecacae6;
+ border-right-color: #fecacae6;
+}
+
+.border-x-red-200\\/95 {
+ border-left-color: #fecacaf2;
+ border-right-color: #fecacaf2;
+}
+
+.border-x-transparent, .border-x-transparent\\/0 {
+ border-left-color: #0000;
+ border-right-color: #0000;
+}
+
+.border-x-transparent\\/10 {
+ border-left-color: #0000001a;
+ border-right-color: #0000001a;
+}
+
+.border-x-transparent\\/100 {
+ border-left-color: #000;
+ border-right-color: #000;
+}
+
+.border-x-transparent\\/15 {
+ border-left-color: #00000026;
+ border-right-color: #00000026;
+}
+
+.border-x-transparent\\/20 {
+ border-left-color: #0003;
+ border-right-color: #0003;
+}
+
+.border-x-transparent\\/25 {
+ border-left-color: #00000040;
+ border-right-color: #00000040;
+}
+
+.border-x-transparent\\/30 {
+ border-left-color: #0000004d;
+ border-right-color: #0000004d;
+}
+
+.border-x-transparent\\/35 {
+ border-left-color: #00000059;
+ border-right-color: #00000059;
+}
+
+.border-x-transparent\\/40 {
+ border-left-color: #0006;
+ border-right-color: #0006;
+}
+
+.border-x-transparent\\/45 {
+ border-left-color: #00000073;
+ border-right-color: #00000073;
+}
+
+.border-x-transparent\\/5 {
+ border-left-color: #0000000d;
+ border-right-color: #0000000d;
+}
+
+.border-x-transparent\\/50 {
+ border-left-color: #00000080;
+ border-right-color: #00000080;
+}
+
+.border-x-transparent\\/55 {
+ border-left-color: #0000008c;
+ border-right-color: #0000008c;
+}
+
+.border-x-transparent\\/60 {
+ border-left-color: #0009;
+ border-right-color: #0009;
+}
+
+.border-x-transparent\\/65 {
+ border-left-color: #000000a6;
+ border-right-color: #000000a6;
+}
+
+.border-x-transparent\\/70 {
+ border-left-color: #000000b3;
+ border-right-color: #000000b3;
+}
+
+.border-x-transparent\\/75 {
+ border-left-color: #000000bf;
+ border-right-color: #000000bf;
+}
+
+.border-x-transparent\\/80 {
+ border-left-color: #000c;
+ border-right-color: #000c;
+}
+
+.border-x-transparent\\/85 {
+ border-left-color: #000000d9;
+ border-right-color: #000000d9;
+}
+
+.border-x-transparent\\/90 {
+ border-left-color: #000000e6;
+ border-right-color: #000000e6;
+}
+
+.border-x-transparent\\/95 {
+ border-left-color: #000000f2;
+ border-right-color: #000000f2;
+}
+
+.border-y-black {
+ border-top-color: #000;
+ border-bottom-color: #000;
+}
+
+.border-y-black\\/0 {
+ border-top-color: #0000;
+ border-bottom-color: #0000;
+}
+
+.border-y-black\\/10 {
+ border-top-color: #0000001a;
+ border-bottom-color: #0000001a;
+}
+
+.border-y-black\\/100 {
+ border-top-color: #000;
+ border-bottom-color: #000;
+}
+
+.border-y-black\\/15 {
+ border-top-color: #00000026;
+ border-bottom-color: #00000026;
+}
+
+.border-y-black\\/20 {
+ border-top-color: #0003;
+ border-bottom-color: #0003;
+}
+
+.border-y-black\\/25 {
+ border-top-color: #00000040;
+ border-bottom-color: #00000040;
+}
+
+.border-y-black\\/30 {
+ border-top-color: #0000004d;
+ border-bottom-color: #0000004d;
+}
+
+.border-y-black\\/35 {
+ border-top-color: #00000059;
+ border-bottom-color: #00000059;
+}
+
+.border-y-black\\/40 {
+ border-top-color: #0006;
+ border-bottom-color: #0006;
+}
+
+.border-y-black\\/45 {
+ border-top-color: #00000073;
+ border-bottom-color: #00000073;
+}
+
+.border-y-black\\/5 {
+ border-top-color: #0000000d;
+ border-bottom-color: #0000000d;
+}
+
+.border-y-black\\/50 {
+ border-top-color: #00000080;
+ border-bottom-color: #00000080;
+}
+
+.border-y-black\\/55 {
+ border-top-color: #0000008c;
+ border-bottom-color: #0000008c;
+}
+
+.border-y-black\\/60 {
+ border-top-color: #0009;
+ border-bottom-color: #0009;
+}
+
+.border-y-black\\/65 {
+ border-top-color: #000000a6;
+ border-bottom-color: #000000a6;
+}
+
+.border-y-black\\/70 {
+ border-top-color: #000000b3;
+ border-bottom-color: #000000b3;
+}
+
+.border-y-black\\/75 {
+ border-top-color: #000000bf;
+ border-bottom-color: #000000bf;
+}
+
+.border-y-black\\/80 {
+ border-top-color: #000c;
+ border-bottom-color: #000c;
+}
+
+.border-y-black\\/85 {
+ border-top-color: #000000d9;
+ border-bottom-color: #000000d9;
+}
+
+.border-y-black\\/90 {
+ border-top-color: #000000e6;
+ border-bottom-color: #000000e6;
+}
+
+.border-y-black\\/95 {
+ border-top-color: #000000f2;
+ border-bottom-color: #000000f2;
+}
+
+.border-y-red-100 {
+ border-top-color: #fee2e2;
+ border-bottom-color: #fee2e2;
+}
+
+.border-y-red-100\\/0 {
+ border-top-color: #fee2e200;
+ border-bottom-color: #fee2e200;
+}
+
+.border-y-red-100\\/10 {
+ border-top-color: #fee2e21a;
+ border-bottom-color: #fee2e21a;
+}
+
+.border-y-red-100\\/100 {
+ border-top-color: #fee2e2;
+ border-bottom-color: #fee2e2;
+}
+
+.border-y-red-100\\/15 {
+ border-top-color: #fee2e226;
+ border-bottom-color: #fee2e226;
+}
+
+.border-y-red-100\\/20 {
+ border-top-color: #fee2e233;
+ border-bottom-color: #fee2e233;
+}
+
+.border-y-red-100\\/25 {
+ border-top-color: #fee2e240;
+ border-bottom-color: #fee2e240;
+}
+
+.border-y-red-100\\/30 {
+ border-top-color: #fee2e24d;
+ border-bottom-color: #fee2e24d;
+}
+
+.border-y-red-100\\/35 {
+ border-top-color: #fee2e259;
+ border-bottom-color: #fee2e259;
+}
+
+.border-y-red-100\\/40 {
+ border-top-color: #fee2e266;
+ border-bottom-color: #fee2e266;
+}
+
+.border-y-red-100\\/45 {
+ border-top-color: #fee2e273;
+ border-bottom-color: #fee2e273;
+}
+
+.border-y-red-100\\/5 {
+ border-top-color: #fee2e20d;
+ border-bottom-color: #fee2e20d;
+}
+
+.border-y-red-100\\/50 {
+ border-top-color: #fee2e280;
+ border-bottom-color: #fee2e280;
+}
+
+.border-y-red-100\\/55 {
+ border-top-color: #fee2e28c;
+ border-bottom-color: #fee2e28c;
+}
+
+.border-y-red-100\\/60 {
+ border-top-color: #fee2e299;
+ border-bottom-color: #fee2e299;
+}
+
+.border-y-red-100\\/65 {
+ border-top-color: #fee2e2a6;
+ border-bottom-color: #fee2e2a6;
+}
+
+.border-y-red-100\\/70 {
+ border-top-color: #fee2e2b3;
+ border-bottom-color: #fee2e2b3;
+}
+
+.border-y-red-100\\/75 {
+ border-top-color: #fee2e2bf;
+ border-bottom-color: #fee2e2bf;
+}
+
+.border-y-red-100\\/80 {
+ border-top-color: #fee2e2cc;
+ border-bottom-color: #fee2e2cc;
+}
+
+.border-y-red-100\\/85 {
+ border-top-color: #fee2e2d9;
+ border-bottom-color: #fee2e2d9;
+}
+
+.border-y-red-100\\/90 {
+ border-top-color: #fee2e2e6;
+ border-bottom-color: #fee2e2e6;
+}
+
+.border-y-red-100\\/95 {
+ border-top-color: #fee2e2f2;
+ border-bottom-color: #fee2e2f2;
+}
+
+.border-y-red-200 {
+ border-top-color: #fecaca;
+ border-bottom-color: #fecaca;
+}
+
+.border-y-red-200\\/0 {
+ border-top-color: #fecaca00;
+ border-bottom-color: #fecaca00;
+}
+
+.border-y-red-200\\/10 {
+ border-top-color: #fecaca1a;
+ border-bottom-color: #fecaca1a;
+}
+
+.border-y-red-200\\/100 {
+ border-top-color: #fecaca;
+ border-bottom-color: #fecaca;
+}
+
+.border-y-red-200\\/15 {
+ border-top-color: #fecaca26;
+ border-bottom-color: #fecaca26;
+}
+
+.border-y-red-200\\/20 {
+ border-top-color: #fecaca33;
+ border-bottom-color: #fecaca33;
+}
+
+.border-y-red-200\\/25 {
+ border-top-color: #fecaca40;
+ border-bottom-color: #fecaca40;
+}
+
+.border-y-red-200\\/30 {
+ border-top-color: #fecaca4d;
+ border-bottom-color: #fecaca4d;
+}
+
+.border-y-red-200\\/35 {
+ border-top-color: #fecaca59;
+ border-bottom-color: #fecaca59;
+}
+
+.border-y-red-200\\/40 {
+ border-top-color: #fecaca66;
+ border-bottom-color: #fecaca66;
+}
+
+.border-y-red-200\\/45 {
+ border-top-color: #fecaca73;
+ border-bottom-color: #fecaca73;
+}
+
+.border-y-red-200\\/5 {
+ border-top-color: #fecaca0d;
+ border-bottom-color: #fecaca0d;
+}
+
+.border-y-red-200\\/50 {
+ border-top-color: #fecaca80;
+ border-bottom-color: #fecaca80;
+}
+
+.border-y-red-200\\/55 {
+ border-top-color: #fecaca8c;
+ border-bottom-color: #fecaca8c;
+}
+
+.border-y-red-200\\/60 {
+ border-top-color: #fecaca99;
+ border-bottom-color: #fecaca99;
+}
+
+.border-y-red-200\\/65 {
+ border-top-color: #fecacaa6;
+ border-bottom-color: #fecacaa6;
+}
+
+.border-y-red-200\\/70 {
+ border-top-color: #fecacab3;
+ border-bottom-color: #fecacab3;
+}
+
+.border-y-red-200\\/75 {
+ border-top-color: #fecacabf;
+ border-bottom-color: #fecacabf;
+}
+
+.border-y-red-200\\/80 {
+ border-top-color: #fecacacc;
+ border-bottom-color: #fecacacc;
+}
+
+.border-y-red-200\\/85 {
+ border-top-color: #fecacad9;
+ border-bottom-color: #fecacad9;
+}
+
+.border-y-red-200\\/90 {
+ border-top-color: #fecacae6;
+ border-bottom-color: #fecacae6;
+}
+
+.border-y-red-200\\/95 {
+ border-top-color: #fecacaf2;
+ border-bottom-color: #fecacaf2;
+}
+
+.border-y-transparent, .border-y-transparent\\/0 {
+ border-top-color: #0000;
+ border-bottom-color: #0000;
+}
+
+.border-y-transparent\\/10 {
+ border-top-color: #0000001a;
+ border-bottom-color: #0000001a;
+}
+
+.border-y-transparent\\/100 {
+ border-top-color: #000;
+ border-bottom-color: #000;
+}
+
+.border-y-transparent\\/15 {
+ border-top-color: #00000026;
+ border-bottom-color: #00000026;
+}
+
+.border-y-transparent\\/20 {
+ border-top-color: #0003;
+ border-bottom-color: #0003;
+}
+
+.border-y-transparent\\/25 {
+ border-top-color: #00000040;
+ border-bottom-color: #00000040;
+}
+
+.border-y-transparent\\/30 {
+ border-top-color: #0000004d;
+ border-bottom-color: #0000004d;
+}
+
+.border-y-transparent\\/35 {
+ border-top-color: #00000059;
+ border-bottom-color: #00000059;
+}
+
+.border-y-transparent\\/40 {
+ border-top-color: #0006;
+ border-bottom-color: #0006;
+}
+
+.border-y-transparent\\/45 {
+ border-top-color: #00000073;
+ border-bottom-color: #00000073;
+}
+
+.border-y-transparent\\/5 {
+ border-top-color: #0000000d;
+ border-bottom-color: #0000000d;
+}
+
+.border-y-transparent\\/50 {
+ border-top-color: #00000080;
+ border-bottom-color: #00000080;
+}
+
+.border-y-transparent\\/55 {
+ border-top-color: #0000008c;
+ border-bottom-color: #0000008c;
+}
+
+.border-y-transparent\\/60 {
+ border-top-color: #0009;
+ border-bottom-color: #0009;
+}
+
+.border-y-transparent\\/65 {
+ border-top-color: #000000a6;
+ border-bottom-color: #000000a6;
+}
+
+.border-y-transparent\\/70 {
+ border-top-color: #000000b3;
+ border-bottom-color: #000000b3;
+}
+
+.border-y-transparent\\/75 {
+ border-top-color: #000000bf;
+ border-bottom-color: #000000bf;
+}
+
+.border-y-transparent\\/80 {
+ border-top-color: #000c;
+ border-bottom-color: #000c;
+}
+
+.border-y-transparent\\/85 {
+ border-top-color: #000000d9;
+ border-bottom-color: #000000d9;
+}
+
+.border-y-transparent\\/90 {
+ border-top-color: #000000e6;
+ border-bottom-color: #000000e6;
+}
+
+.border-y-transparent\\/95 {
+ border-top-color: #000000f2;
+ border-bottom-color: #000000f2;
+}
+
+.border-b-black {
+ border-bottom-color: #000;
+}
+
+.border-b-black\\/0 {
+ border-bottom-color: #0000;
+}
+
+.border-b-black\\/10 {
+ border-bottom-color: #0000001a;
+}
+
+.border-b-black\\/100 {
+ border-bottom-color: #000;
+}
+
+.border-b-black\\/15 {
+ border-bottom-color: #00000026;
+}
+
+.border-b-black\\/20 {
+ border-bottom-color: #0003;
+}
+
+.border-b-black\\/25 {
+ border-bottom-color: #00000040;
+}
+
+.border-b-black\\/30 {
+ border-bottom-color: #0000004d;
+}
+
+.border-b-black\\/35 {
+ border-bottom-color: #00000059;
+}
+
+.border-b-black\\/40 {
+ border-bottom-color: #0006;
+}
+
+.border-b-black\\/45 {
+ border-bottom-color: #00000073;
+}
+
+.border-b-black\\/5 {
+ border-bottom-color: #0000000d;
+}
+
+.border-b-black\\/50 {
+ border-bottom-color: #00000080;
+}
+
+.border-b-black\\/55 {
+ border-bottom-color: #0000008c;
+}
+
+.border-b-black\\/60 {
+ border-bottom-color: #0009;
+}
+
+.border-b-black\\/65 {
+ border-bottom-color: #000000a6;
+}
+
+.border-b-black\\/70 {
+ border-bottom-color: #000000b3;
+}
+
+.border-b-black\\/75 {
+ border-bottom-color: #000000bf;
+}
+
+.border-b-black\\/80 {
+ border-bottom-color: #000c;
+}
+
+.border-b-black\\/85 {
+ border-bottom-color: #000000d9;
+}
+
+.border-b-black\\/90 {
+ border-bottom-color: #000000e6;
+}
+
+.border-b-black\\/95 {
+ border-bottom-color: #000000f2;
+}
+
+.border-b-red-100 {
+ border-bottom-color: #fee2e2;
+}
+
+.border-b-red-100\\/0 {
+ border-bottom-color: #fee2e200;
+}
+
+.border-b-red-100\\/10 {
+ border-bottom-color: #fee2e21a;
+}
+
+.border-b-red-100\\/100 {
+ border-bottom-color: #fee2e2;
+}
+
+.border-b-red-100\\/15 {
+ border-bottom-color: #fee2e226;
+}
+
+.border-b-red-100\\/20 {
+ border-bottom-color: #fee2e233;
+}
+
+.border-b-red-100\\/25 {
+ border-bottom-color: #fee2e240;
+}
+
+.border-b-red-100\\/30 {
+ border-bottom-color: #fee2e24d;
+}
+
+.border-b-red-100\\/35 {
+ border-bottom-color: #fee2e259;
+}
+
+.border-b-red-100\\/40 {
+ border-bottom-color: #fee2e266;
+}
+
+.border-b-red-100\\/45 {
+ border-bottom-color: #fee2e273;
+}
+
+.border-b-red-100\\/5 {
+ border-bottom-color: #fee2e20d;
+}
+
+.border-b-red-100\\/50 {
+ border-bottom-color: #fee2e280;
+}
+
+.border-b-red-100\\/55 {
+ border-bottom-color: #fee2e28c;
+}
+
+.border-b-red-100\\/60 {
+ border-bottom-color: #fee2e299;
+}
+
+.border-b-red-100\\/65 {
+ border-bottom-color: #fee2e2a6;
+}
+
+.border-b-red-100\\/70 {
+ border-bottom-color: #fee2e2b3;
+}
+
+.border-b-red-100\\/75 {
+ border-bottom-color: #fee2e2bf;
+}
+
+.border-b-red-100\\/80 {
+ border-bottom-color: #fee2e2cc;
+}
+
+.border-b-red-100\\/85 {
+ border-bottom-color: #fee2e2d9;
+}
+
+.border-b-red-100\\/90 {
+ border-bottom-color: #fee2e2e6;
+}
+
+.border-b-red-100\\/95 {
+ border-bottom-color: #fee2e2f2;
+}
+
+.border-b-red-200 {
+ border-bottom-color: #fecaca;
+}
+
+.border-b-red-200\\/0 {
+ border-bottom-color: #fecaca00;
+}
+
+.border-b-red-200\\/10 {
+ border-bottom-color: #fecaca1a;
+}
+
+.border-b-red-200\\/100 {
+ border-bottom-color: #fecaca;
+}
+
+.border-b-red-200\\/15 {
+ border-bottom-color: #fecaca26;
+}
+
+.border-b-red-200\\/20 {
+ border-bottom-color: #fecaca33;
+}
+
+.border-b-red-200\\/25 {
+ border-bottom-color: #fecaca40;
+}
+
+.border-b-red-200\\/30 {
+ border-bottom-color: #fecaca4d;
+}
+
+.border-b-red-200\\/35 {
+ border-bottom-color: #fecaca59;
+}
+
+.border-b-red-200\\/40 {
+ border-bottom-color: #fecaca66;
+}
+
+.border-b-red-200\\/45 {
+ border-bottom-color: #fecaca73;
+}
+
+.border-b-red-200\\/5 {
+ border-bottom-color: #fecaca0d;
+}
+
+.border-b-red-200\\/50 {
+ border-bottom-color: #fecaca80;
+}
+
+.border-b-red-200\\/55 {
+ border-bottom-color: #fecaca8c;
+}
+
+.border-b-red-200\\/60 {
+ border-bottom-color: #fecaca99;
+}
+
+.border-b-red-200\\/65 {
+ border-bottom-color: #fecacaa6;
+}
+
+.border-b-red-200\\/70 {
+ border-bottom-color: #fecacab3;
+}
+
+.border-b-red-200\\/75 {
+ border-bottom-color: #fecacabf;
+}
+
+.border-b-red-200\\/80 {
+ border-bottom-color: #fecacacc;
+}
+
+.border-b-red-200\\/85 {
+ border-bottom-color: #fecacad9;
+}
+
+.border-b-red-200\\/90 {
+ border-bottom-color: #fecacae6;
+}
+
+.border-b-red-200\\/95 {
+ border-bottom-color: #fecacaf2;
+}
+
+.border-b-transparent, .border-b-transparent\\/0 {
+ border-bottom-color: #0000;
+}
+
+.border-b-transparent\\/10 {
+ border-bottom-color: #0000001a;
+}
+
+.border-b-transparent\\/100 {
+ border-bottom-color: #000;
+}
+
+.border-b-transparent\\/15 {
+ border-bottom-color: #00000026;
+}
+
+.border-b-transparent\\/20 {
+ border-bottom-color: #0003;
+}
+
+.border-b-transparent\\/25 {
+ border-bottom-color: #00000040;
+}
+
+.border-b-transparent\\/30 {
+ border-bottom-color: #0000004d;
+}
+
+.border-b-transparent\\/35 {
+ border-bottom-color: #00000059;
+}
+
+.border-b-transparent\\/40 {
+ border-bottom-color: #0006;
+}
+
+.border-b-transparent\\/45 {
+ border-bottom-color: #00000073;
+}
+
+.border-b-transparent\\/5 {
+ border-bottom-color: #0000000d;
+}
+
+.border-b-transparent\\/50 {
+ border-bottom-color: #00000080;
+}
+
+.border-b-transparent\\/55 {
+ border-bottom-color: #0000008c;
+}
+
+.border-b-transparent\\/60 {
+ border-bottom-color: #0009;
+}
+
+.border-b-transparent\\/65 {
+ border-bottom-color: #000000a6;
+}
+
+.border-b-transparent\\/70 {
+ border-bottom-color: #000000b3;
+}
+
+.border-b-transparent\\/75 {
+ border-bottom-color: #000000bf;
+}
+
+.border-b-transparent\\/80 {
+ border-bottom-color: #000c;
+}
+
+.border-b-transparent\\/85 {
+ border-bottom-color: #000000d9;
+}
+
+.border-b-transparent\\/90 {
+ border-bottom-color: #000000e6;
+}
+
+.border-b-transparent\\/95 {
+ border-bottom-color: #000000f2;
+}
+
+.border-e-black {
+ border-inline-end-color: #000;
+}
+
+.border-e-black\\/0 {
+ border-inline-end-color: #0000;
+}
+
+.border-e-black\\/10 {
+ border-inline-end-color: #0000001a;
+}
+
+.border-e-black\\/100 {
+ border-inline-end-color: #000;
+}
+
+.border-e-black\\/15 {
+ border-inline-end-color: #00000026;
+}
+
+.border-e-black\\/20 {
+ border-inline-end-color: #0003;
+}
+
+.border-e-black\\/25 {
+ border-inline-end-color: #00000040;
+}
+
+.border-e-black\\/30 {
+ border-inline-end-color: #0000004d;
+}
+
+.border-e-black\\/35 {
+ border-inline-end-color: #00000059;
+}
+
+.border-e-black\\/40 {
+ border-inline-end-color: #0006;
+}
+
+.border-e-black\\/45 {
+ border-inline-end-color: #00000073;
+}
+
+.border-e-black\\/5 {
+ border-inline-end-color: #0000000d;
+}
+
+.border-e-black\\/50 {
+ border-inline-end-color: #00000080;
+}
+
+.border-e-black\\/55 {
+ border-inline-end-color: #0000008c;
+}
+
+.border-e-black\\/60 {
+ border-inline-end-color: #0009;
+}
+
+.border-e-black\\/65 {
+ border-inline-end-color: #000000a6;
+}
+
+.border-e-black\\/70 {
+ border-inline-end-color: #000000b3;
+}
+
+.border-e-black\\/75 {
+ border-inline-end-color: #000000bf;
+}
+
+.border-e-black\\/80 {
+ border-inline-end-color: #000c;
+}
+
+.border-e-black\\/85 {
+ border-inline-end-color: #000000d9;
+}
+
+.border-e-black\\/90 {
+ border-inline-end-color: #000000e6;
+}
+
+.border-e-black\\/95 {
+ border-inline-end-color: #000000f2;
+}
+
+.border-e-red-100 {
+ border-inline-end-color: #fee2e2;
+}
+
+.border-e-red-100\\/0 {
+ border-inline-end-color: #fee2e200;
+}
+
+.border-e-red-100\\/10 {
+ border-inline-end-color: #fee2e21a;
+}
+
+.border-e-red-100\\/100 {
+ border-inline-end-color: #fee2e2;
+}
+
+.border-e-red-100\\/15 {
+ border-inline-end-color: #fee2e226;
+}
+
+.border-e-red-100\\/20 {
+ border-inline-end-color: #fee2e233;
+}
+
+.border-e-red-100\\/25 {
+ border-inline-end-color: #fee2e240;
+}
+
+.border-e-red-100\\/30 {
+ border-inline-end-color: #fee2e24d;
+}
+
+.border-e-red-100\\/35 {
+ border-inline-end-color: #fee2e259;
+}
+
+.border-e-red-100\\/40 {
+ border-inline-end-color: #fee2e266;
+}
+
+.border-e-red-100\\/45 {
+ border-inline-end-color: #fee2e273;
+}
+
+.border-e-red-100\\/5 {
+ border-inline-end-color: #fee2e20d;
+}
+
+.border-e-red-100\\/50 {
+ border-inline-end-color: #fee2e280;
+}
+
+.border-e-red-100\\/55 {
+ border-inline-end-color: #fee2e28c;
+}
+
+.border-e-red-100\\/60 {
+ border-inline-end-color: #fee2e299;
+}
+
+.border-e-red-100\\/65 {
+ border-inline-end-color: #fee2e2a6;
+}
+
+.border-e-red-100\\/70 {
+ border-inline-end-color: #fee2e2b3;
+}
+
+.border-e-red-100\\/75 {
+ border-inline-end-color: #fee2e2bf;
+}
+
+.border-e-red-100\\/80 {
+ border-inline-end-color: #fee2e2cc;
+}
+
+.border-e-red-100\\/85 {
+ border-inline-end-color: #fee2e2d9;
+}
+
+.border-e-red-100\\/90 {
+ border-inline-end-color: #fee2e2e6;
+}
+
+.border-e-red-100\\/95 {
+ border-inline-end-color: #fee2e2f2;
+}
+
+.border-e-red-200 {
+ border-inline-end-color: #fecaca;
+}
+
+.border-e-red-200\\/0 {
+ border-inline-end-color: #fecaca00;
+}
+
+.border-e-red-200\\/10 {
+ border-inline-end-color: #fecaca1a;
+}
+
+.border-e-red-200\\/100 {
+ border-inline-end-color: #fecaca;
+}
+
+.border-e-red-200\\/15 {
+ border-inline-end-color: #fecaca26;
+}
+
+.border-e-red-200\\/20 {
+ border-inline-end-color: #fecaca33;
+}
+
+.border-e-red-200\\/25 {
+ border-inline-end-color: #fecaca40;
+}
+
+.border-e-red-200\\/30 {
+ border-inline-end-color: #fecaca4d;
+}
+
+.border-e-red-200\\/35 {
+ border-inline-end-color: #fecaca59;
+}
+
+.border-e-red-200\\/40 {
+ border-inline-end-color: #fecaca66;
+}
+
+.border-e-red-200\\/45 {
+ border-inline-end-color: #fecaca73;
+}
+
+.border-e-red-200\\/5 {
+ border-inline-end-color: #fecaca0d;
+}
+
+.border-e-red-200\\/50 {
+ border-inline-end-color: #fecaca80;
+}
+
+.border-e-red-200\\/55 {
+ border-inline-end-color: #fecaca8c;
+}
+
+.border-e-red-200\\/60 {
+ border-inline-end-color: #fecaca99;
+}
+
+.border-e-red-200\\/65 {
+ border-inline-end-color: #fecacaa6;
+}
+
+.border-e-red-200\\/70 {
+ border-inline-end-color: #fecacab3;
+}
+
+.border-e-red-200\\/75 {
+ border-inline-end-color: #fecacabf;
+}
+
+.border-e-red-200\\/80 {
+ border-inline-end-color: #fecacacc;
+}
+
+.border-e-red-200\\/85 {
+ border-inline-end-color: #fecacad9;
+}
+
+.border-e-red-200\\/90 {
+ border-inline-end-color: #fecacae6;
+}
+
+.border-e-red-200\\/95 {
+ border-inline-end-color: #fecacaf2;
+}
+
+.border-e-transparent, .border-e-transparent\\/0 {
+ border-inline-end-color: #0000;
+}
+
+.border-e-transparent\\/10 {
+ border-inline-end-color: #0000001a;
+}
+
+.border-e-transparent\\/100 {
+ border-inline-end-color: #000;
+}
+
+.border-e-transparent\\/15 {
+ border-inline-end-color: #00000026;
+}
+
+.border-e-transparent\\/20 {
+ border-inline-end-color: #0003;
+}
+
+.border-e-transparent\\/25 {
+ border-inline-end-color: #00000040;
+}
+
+.border-e-transparent\\/30 {
+ border-inline-end-color: #0000004d;
+}
+
+.border-e-transparent\\/35 {
+ border-inline-end-color: #00000059;
+}
+
+.border-e-transparent\\/40 {
+ border-inline-end-color: #0006;
+}
+
+.border-e-transparent\\/45 {
+ border-inline-end-color: #00000073;
+}
+
+.border-e-transparent\\/5 {
+ border-inline-end-color: #0000000d;
+}
+
+.border-e-transparent\\/50 {
+ border-inline-end-color: #00000080;
+}
+
+.border-e-transparent\\/55 {
+ border-inline-end-color: #0000008c;
+}
+
+.border-e-transparent\\/60 {
+ border-inline-end-color: #0009;
+}
+
+.border-e-transparent\\/65 {
+ border-inline-end-color: #000000a6;
+}
+
+.border-e-transparent\\/70 {
+ border-inline-end-color: #000000b3;
+}
+
+.border-e-transparent\\/75 {
+ border-inline-end-color: #000000bf;
+}
+
+.border-e-transparent\\/80 {
+ border-inline-end-color: #000c;
+}
+
+.border-e-transparent\\/85 {
+ border-inline-end-color: #000000d9;
+}
+
+.border-e-transparent\\/90 {
+ border-inline-end-color: #000000e6;
+}
+
+.border-e-transparent\\/95 {
+ border-inline-end-color: #000000f2;
+}
+
+.border-l-black {
+ border-left-color: #000;
+}
+
+.border-l-black\\/0 {
+ border-left-color: #0000;
+}
+
+.border-l-black\\/10 {
+ border-left-color: #0000001a;
+}
+
+.border-l-black\\/100 {
+ border-left-color: #000;
+}
+
+.border-l-black\\/15 {
+ border-left-color: #00000026;
+}
+
+.border-l-black\\/20 {
+ border-left-color: #0003;
+}
+
+.border-l-black\\/25 {
+ border-left-color: #00000040;
+}
+
+.border-l-black\\/30 {
+ border-left-color: #0000004d;
+}
+
+.border-l-black\\/35 {
+ border-left-color: #00000059;
+}
+
+.border-l-black\\/40 {
+ border-left-color: #0006;
+}
+
+.border-l-black\\/45 {
+ border-left-color: #00000073;
+}
+
+.border-l-black\\/5 {
+ border-left-color: #0000000d;
+}
+
+.border-l-black\\/50 {
+ border-left-color: #00000080;
+}
+
+.border-l-black\\/55 {
+ border-left-color: #0000008c;
+}
+
+.border-l-black\\/60 {
+ border-left-color: #0009;
+}
+
+.border-l-black\\/65 {
+ border-left-color: #000000a6;
+}
+
+.border-l-black\\/70 {
+ border-left-color: #000000b3;
+}
+
+.border-l-black\\/75 {
+ border-left-color: #000000bf;
+}
+
+.border-l-black\\/80 {
+ border-left-color: #000c;
+}
+
+.border-l-black\\/85 {
+ border-left-color: #000000d9;
+}
+
+.border-l-black\\/90 {
+ border-left-color: #000000e6;
+}
+
+.border-l-black\\/95 {
+ border-left-color: #000000f2;
+}
+
+.border-l-red-100 {
+ border-left-color: #fee2e2;
+}
+
+.border-l-red-100\\/0 {
+ border-left-color: #fee2e200;
+}
+
+.border-l-red-100\\/10 {
+ border-left-color: #fee2e21a;
+}
+
+.border-l-red-100\\/100 {
+ border-left-color: #fee2e2;
+}
+
+.border-l-red-100\\/15 {
+ border-left-color: #fee2e226;
+}
+
+.border-l-red-100\\/20 {
+ border-left-color: #fee2e233;
+}
+
+.border-l-red-100\\/25 {
+ border-left-color: #fee2e240;
+}
+
+.border-l-red-100\\/30 {
+ border-left-color: #fee2e24d;
+}
+
+.border-l-red-100\\/35 {
+ border-left-color: #fee2e259;
+}
+
+.border-l-red-100\\/40 {
+ border-left-color: #fee2e266;
+}
+
+.border-l-red-100\\/45 {
+ border-left-color: #fee2e273;
+}
+
+.border-l-red-100\\/5 {
+ border-left-color: #fee2e20d;
+}
+
+.border-l-red-100\\/50 {
+ border-left-color: #fee2e280;
+}
+
+.border-l-red-100\\/55 {
+ border-left-color: #fee2e28c;
+}
+
+.border-l-red-100\\/60 {
+ border-left-color: #fee2e299;
+}
+
+.border-l-red-100\\/65 {
+ border-left-color: #fee2e2a6;
+}
+
+.border-l-red-100\\/70 {
+ border-left-color: #fee2e2b3;
+}
+
+.border-l-red-100\\/75 {
+ border-left-color: #fee2e2bf;
+}
+
+.border-l-red-100\\/80 {
+ border-left-color: #fee2e2cc;
+}
+
+.border-l-red-100\\/85 {
+ border-left-color: #fee2e2d9;
+}
+
+.border-l-red-100\\/90 {
+ border-left-color: #fee2e2e6;
+}
+
+.border-l-red-100\\/95 {
+ border-left-color: #fee2e2f2;
+}
+
+.border-l-red-200 {
+ border-left-color: #fecaca;
+}
+
+.border-l-red-200\\/0 {
+ border-left-color: #fecaca00;
+}
+
+.border-l-red-200\\/10 {
+ border-left-color: #fecaca1a;
+}
+
+.border-l-red-200\\/100 {
+ border-left-color: #fecaca;
+}
+
+.border-l-red-200\\/15 {
+ border-left-color: #fecaca26;
+}
+
+.border-l-red-200\\/20 {
+ border-left-color: #fecaca33;
+}
+
+.border-l-red-200\\/25 {
+ border-left-color: #fecaca40;
+}
+
+.border-l-red-200\\/30 {
+ border-left-color: #fecaca4d;
+}
+
+.border-l-red-200\\/35 {
+ border-left-color: #fecaca59;
+}
+
+.border-l-red-200\\/40 {
+ border-left-color: #fecaca66;
+}
+
+.border-l-red-200\\/45 {
+ border-left-color: #fecaca73;
+}
+
+.border-l-red-200\\/5 {
+ border-left-color: #fecaca0d;
+}
+
+.border-l-red-200\\/50 {
+ border-left-color: #fecaca80;
+}
+
+.border-l-red-200\\/55 {
+ border-left-color: #fecaca8c;
+}
+
+.border-l-red-200\\/60 {
+ border-left-color: #fecaca99;
+}
+
+.border-l-red-200\\/65 {
+ border-left-color: #fecacaa6;
+}
+
+.border-l-red-200\\/70 {
+ border-left-color: #fecacab3;
+}
+
+.border-l-red-200\\/75 {
+ border-left-color: #fecacabf;
+}
+
+.border-l-red-200\\/80 {
+ border-left-color: #fecacacc;
+}
+
+.border-l-red-200\\/85 {
+ border-left-color: #fecacad9;
+}
+
+.border-l-red-200\\/90 {
+ border-left-color: #fecacae6;
+}
+
+.border-l-red-200\\/95 {
+ border-left-color: #fecacaf2;
+}
+
+.border-l-transparent, .border-l-transparent\\/0 {
+ border-left-color: #0000;
+}
+
+.border-l-transparent\\/10 {
+ border-left-color: #0000001a;
+}
+
+.border-l-transparent\\/100 {
+ border-left-color: #000;
+}
+
+.border-l-transparent\\/15 {
+ border-left-color: #00000026;
+}
+
+.border-l-transparent\\/20 {
+ border-left-color: #0003;
+}
+
+.border-l-transparent\\/25 {
+ border-left-color: #00000040;
+}
+
+.border-l-transparent\\/30 {
+ border-left-color: #0000004d;
+}
+
+.border-l-transparent\\/35 {
+ border-left-color: #00000059;
+}
+
+.border-l-transparent\\/40 {
+ border-left-color: #0006;
+}
+
+.border-l-transparent\\/45 {
+ border-left-color: #00000073;
+}
+
+.border-l-transparent\\/5 {
+ border-left-color: #0000000d;
+}
+
+.border-l-transparent\\/50 {
+ border-left-color: #00000080;
+}
+
+.border-l-transparent\\/55 {
+ border-left-color: #0000008c;
+}
+
+.border-l-transparent\\/60 {
+ border-left-color: #0009;
+}
+
+.border-l-transparent\\/65 {
+ border-left-color: #000000a6;
+}
+
+.border-l-transparent\\/70 {
+ border-left-color: #000000b3;
+}
+
+.border-l-transparent\\/75 {
+ border-left-color: #000000bf;
+}
+
+.border-l-transparent\\/80 {
+ border-left-color: #000c;
+}
+
+.border-l-transparent\\/85 {
+ border-left-color: #000000d9;
+}
+
+.border-l-transparent\\/90 {
+ border-left-color: #000000e6;
+}
+
+.border-l-transparent\\/95 {
+ border-left-color: #000000f2;
+}
+
+.border-r-black {
+ border-right-color: #000;
+}
+
+.border-r-black\\/0 {
+ border-right-color: #0000;
+}
+
+.border-r-black\\/10 {
+ border-right-color: #0000001a;
+}
+
+.border-r-black\\/100 {
+ border-right-color: #000;
+}
+
+.border-r-black\\/15 {
+ border-right-color: #00000026;
+}
+
+.border-r-black\\/20 {
+ border-right-color: #0003;
+}
+
+.border-r-black\\/25 {
+ border-right-color: #00000040;
+}
+
+.border-r-black\\/30 {
+ border-right-color: #0000004d;
+}
+
+.border-r-black\\/35 {
+ border-right-color: #00000059;
+}
+
+.border-r-black\\/40 {
+ border-right-color: #0006;
+}
+
+.border-r-black\\/45 {
+ border-right-color: #00000073;
+}
+
+.border-r-black\\/5 {
+ border-right-color: #0000000d;
+}
+
+.border-r-black\\/50 {
+ border-right-color: #00000080;
+}
+
+.border-r-black\\/55 {
+ border-right-color: #0000008c;
+}
+
+.border-r-black\\/60 {
+ border-right-color: #0009;
+}
+
+.border-r-black\\/65 {
+ border-right-color: #000000a6;
+}
+
+.border-r-black\\/70 {
+ border-right-color: #000000b3;
+}
+
+.border-r-black\\/75 {
+ border-right-color: #000000bf;
+}
+
+.border-r-black\\/80 {
+ border-right-color: #000c;
+}
+
+.border-r-black\\/85 {
+ border-right-color: #000000d9;
+}
+
+.border-r-black\\/90 {
+ border-right-color: #000000e6;
+}
+
+.border-r-black\\/95 {
+ border-right-color: #000000f2;
+}
+
+.border-r-red-100 {
+ border-right-color: #fee2e2;
+}
+
+.border-r-red-100\\/0 {
+ border-right-color: #fee2e200;
+}
+
+.border-r-red-100\\/10 {
+ border-right-color: #fee2e21a;
+}
+
+.border-r-red-100\\/100 {
+ border-right-color: #fee2e2;
+}
+
+.border-r-red-100\\/15 {
+ border-right-color: #fee2e226;
+}
+
+.border-r-red-100\\/20 {
+ border-right-color: #fee2e233;
+}
+
+.border-r-red-100\\/25 {
+ border-right-color: #fee2e240;
+}
+
+.border-r-red-100\\/30 {
+ border-right-color: #fee2e24d;
+}
+
+.border-r-red-100\\/35 {
+ border-right-color: #fee2e259;
+}
+
+.border-r-red-100\\/40 {
+ border-right-color: #fee2e266;
+}
+
+.border-r-red-100\\/45 {
+ border-right-color: #fee2e273;
+}
+
+.border-r-red-100\\/5 {
+ border-right-color: #fee2e20d;
+}
+
+.border-r-red-100\\/50 {
+ border-right-color: #fee2e280;
+}
+
+.border-r-red-100\\/55 {
+ border-right-color: #fee2e28c;
+}
+
+.border-r-red-100\\/60 {
+ border-right-color: #fee2e299;
+}
+
+.border-r-red-100\\/65 {
+ border-right-color: #fee2e2a6;
+}
+
+.border-r-red-100\\/70 {
+ border-right-color: #fee2e2b3;
+}
+
+.border-r-red-100\\/75 {
+ border-right-color: #fee2e2bf;
+}
+
+.border-r-red-100\\/80 {
+ border-right-color: #fee2e2cc;
+}
+
+.border-r-red-100\\/85 {
+ border-right-color: #fee2e2d9;
+}
+
+.border-r-red-100\\/90 {
+ border-right-color: #fee2e2e6;
+}
+
+.border-r-red-100\\/95 {
+ border-right-color: #fee2e2f2;
+}
+
+.border-r-red-200 {
+ border-right-color: #fecaca;
+}
+
+.border-r-red-200\\/0 {
+ border-right-color: #fecaca00;
+}
+
+.border-r-red-200\\/10 {
+ border-right-color: #fecaca1a;
+}
+
+.border-r-red-200\\/100 {
+ border-right-color: #fecaca;
+}
+
+.border-r-red-200\\/15 {
+ border-right-color: #fecaca26;
+}
+
+.border-r-red-200\\/20 {
+ border-right-color: #fecaca33;
+}
+
+.border-r-red-200\\/25 {
+ border-right-color: #fecaca40;
+}
+
+.border-r-red-200\\/30 {
+ border-right-color: #fecaca4d;
+}
+
+.border-r-red-200\\/35 {
+ border-right-color: #fecaca59;
+}
+
+.border-r-red-200\\/40 {
+ border-right-color: #fecaca66;
+}
+
+.border-r-red-200\\/45 {
+ border-right-color: #fecaca73;
+}
+
+.border-r-red-200\\/5 {
+ border-right-color: #fecaca0d;
+}
+
+.border-r-red-200\\/50 {
+ border-right-color: #fecaca80;
+}
+
+.border-r-red-200\\/55 {
+ border-right-color: #fecaca8c;
+}
+
+.border-r-red-200\\/60 {
+ border-right-color: #fecaca99;
+}
+
+.border-r-red-200\\/65 {
+ border-right-color: #fecacaa6;
+}
+
+.border-r-red-200\\/70 {
+ border-right-color: #fecacab3;
+}
+
+.border-r-red-200\\/75 {
+ border-right-color: #fecacabf;
+}
+
+.border-r-red-200\\/80 {
+ border-right-color: #fecacacc;
+}
+
+.border-r-red-200\\/85 {
+ border-right-color: #fecacad9;
+}
+
+.border-r-red-200\\/90 {
+ border-right-color: #fecacae6;
+}
+
+.border-r-red-200\\/95 {
+ border-right-color: #fecacaf2;
+}
+
+.border-r-transparent, .border-r-transparent\\/0 {
+ border-right-color: #0000;
+}
+
+.border-r-transparent\\/10 {
+ border-right-color: #0000001a;
+}
+
+.border-r-transparent\\/100 {
+ border-right-color: #000;
+}
+
+.border-r-transparent\\/15 {
+ border-right-color: #00000026;
+}
+
+.border-r-transparent\\/20 {
+ border-right-color: #0003;
+}
+
+.border-r-transparent\\/25 {
+ border-right-color: #00000040;
+}
+
+.border-r-transparent\\/30 {
+ border-right-color: #0000004d;
+}
+
+.border-r-transparent\\/35 {
+ border-right-color: #00000059;
+}
+
+.border-r-transparent\\/40 {
+ border-right-color: #0006;
+}
+
+.border-r-transparent\\/45 {
+ border-right-color: #00000073;
+}
+
+.border-r-transparent\\/5 {
+ border-right-color: #0000000d;
+}
+
+.border-r-transparent\\/50 {
+ border-right-color: #00000080;
+}
+
+.border-r-transparent\\/55 {
+ border-right-color: #0000008c;
+}
+
+.border-r-transparent\\/60 {
+ border-right-color: #0009;
+}
+
+.border-r-transparent\\/65 {
+ border-right-color: #000000a6;
+}
+
+.border-r-transparent\\/70 {
+ border-right-color: #000000b3;
+}
+
+.border-r-transparent\\/75 {
+ border-right-color: #000000bf;
+}
+
+.border-r-transparent\\/80 {
+ border-right-color: #000c;
+}
+
+.border-r-transparent\\/85 {
+ border-right-color: #000000d9;
+}
+
+.border-r-transparent\\/90 {
+ border-right-color: #000000e6;
+}
+
+.border-r-transparent\\/95 {
+ border-right-color: #000000f2;
+}
+
+.border-s-black {
+ border-inline-start-color: #000;
+}
+
+.border-s-black\\/0 {
+ border-inline-start-color: #0000;
+}
+
+.border-s-black\\/10 {
+ border-inline-start-color: #0000001a;
+}
+
+.border-s-black\\/100 {
+ border-inline-start-color: #000;
+}
+
+.border-s-black\\/15 {
+ border-inline-start-color: #00000026;
+}
+
+.border-s-black\\/20 {
+ border-inline-start-color: #0003;
+}
+
+.border-s-black\\/25 {
+ border-inline-start-color: #00000040;
+}
+
+.border-s-black\\/30 {
+ border-inline-start-color: #0000004d;
+}
+
+.border-s-black\\/35 {
+ border-inline-start-color: #00000059;
+}
+
+.border-s-black\\/40 {
+ border-inline-start-color: #0006;
+}
+
+.border-s-black\\/45 {
+ border-inline-start-color: #00000073;
+}
+
+.border-s-black\\/5 {
+ border-inline-start-color: #0000000d;
+}
+
+.border-s-black\\/50 {
+ border-inline-start-color: #00000080;
+}
+
+.border-s-black\\/55 {
+ border-inline-start-color: #0000008c;
+}
+
+.border-s-black\\/60 {
+ border-inline-start-color: #0009;
+}
+
+.border-s-black\\/65 {
+ border-inline-start-color: #000000a6;
+}
+
+.border-s-black\\/70 {
+ border-inline-start-color: #000000b3;
+}
+
+.border-s-black\\/75 {
+ border-inline-start-color: #000000bf;
+}
+
+.border-s-black\\/80 {
+ border-inline-start-color: #000c;
+}
+
+.border-s-black\\/85 {
+ border-inline-start-color: #000000d9;
+}
+
+.border-s-black\\/90 {
+ border-inline-start-color: #000000e6;
+}
+
+.border-s-black\\/95 {
+ border-inline-start-color: #000000f2;
+}
+
+.border-s-red-100 {
+ border-inline-start-color: #fee2e2;
+}
+
+.border-s-red-100\\/0 {
+ border-inline-start-color: #fee2e200;
+}
+
+.border-s-red-100\\/10 {
+ border-inline-start-color: #fee2e21a;
+}
+
+.border-s-red-100\\/100 {
+ border-inline-start-color: #fee2e2;
+}
+
+.border-s-red-100\\/15 {
+ border-inline-start-color: #fee2e226;
+}
+
+.border-s-red-100\\/20 {
+ border-inline-start-color: #fee2e233;
+}
+
+.border-s-red-100\\/25 {
+ border-inline-start-color: #fee2e240;
+}
+
+.border-s-red-100\\/30 {
+ border-inline-start-color: #fee2e24d;
+}
+
+.border-s-red-100\\/35 {
+ border-inline-start-color: #fee2e259;
+}
+
+.border-s-red-100\\/40 {
+ border-inline-start-color: #fee2e266;
+}
+
+.border-s-red-100\\/45 {
+ border-inline-start-color: #fee2e273;
+}
+
+.border-s-red-100\\/5 {
+ border-inline-start-color: #fee2e20d;
+}
+
+.border-s-red-100\\/50 {
+ border-inline-start-color: #fee2e280;
+}
+
+.border-s-red-100\\/55 {
+ border-inline-start-color: #fee2e28c;
+}
+
+.border-s-red-100\\/60 {
+ border-inline-start-color: #fee2e299;
+}
+
+.border-s-red-100\\/65 {
+ border-inline-start-color: #fee2e2a6;
+}
+
+.border-s-red-100\\/70 {
+ border-inline-start-color: #fee2e2b3;
+}
+
+.border-s-red-100\\/75 {
+ border-inline-start-color: #fee2e2bf;
+}
+
+.border-s-red-100\\/80 {
+ border-inline-start-color: #fee2e2cc;
+}
+
+.border-s-red-100\\/85 {
+ border-inline-start-color: #fee2e2d9;
+}
+
+.border-s-red-100\\/90 {
+ border-inline-start-color: #fee2e2e6;
+}
+
+.border-s-red-100\\/95 {
+ border-inline-start-color: #fee2e2f2;
+}
+
+.border-s-red-200 {
+ border-inline-start-color: #fecaca;
+}
+
+.border-s-red-200\\/0 {
+ border-inline-start-color: #fecaca00;
+}
+
+.border-s-red-200\\/10 {
+ border-inline-start-color: #fecaca1a;
+}
+
+.border-s-red-200\\/100 {
+ border-inline-start-color: #fecaca;
+}
+
+.border-s-red-200\\/15 {
+ border-inline-start-color: #fecaca26;
+}
+
+.border-s-red-200\\/20 {
+ border-inline-start-color: #fecaca33;
+}
+
+.border-s-red-200\\/25 {
+ border-inline-start-color: #fecaca40;
+}
+
+.border-s-red-200\\/30 {
+ border-inline-start-color: #fecaca4d;
+}
+
+.border-s-red-200\\/35 {
+ border-inline-start-color: #fecaca59;
+}
+
+.border-s-red-200\\/40 {
+ border-inline-start-color: #fecaca66;
+}
+
+.border-s-red-200\\/45 {
+ border-inline-start-color: #fecaca73;
+}
+
+.border-s-red-200\\/5 {
+ border-inline-start-color: #fecaca0d;
+}
+
+.border-s-red-200\\/50 {
+ border-inline-start-color: #fecaca80;
+}
+
+.border-s-red-200\\/55 {
+ border-inline-start-color: #fecaca8c;
+}
+
+.border-s-red-200\\/60 {
+ border-inline-start-color: #fecaca99;
+}
+
+.border-s-red-200\\/65 {
+ border-inline-start-color: #fecacaa6;
+}
+
+.border-s-red-200\\/70 {
+ border-inline-start-color: #fecacab3;
+}
+
+.border-s-red-200\\/75 {
+ border-inline-start-color: #fecacabf;
+}
+
+.border-s-red-200\\/80 {
+ border-inline-start-color: #fecacacc;
+}
+
+.border-s-red-200\\/85 {
+ border-inline-start-color: #fecacad9;
+}
+
+.border-s-red-200\\/90 {
+ border-inline-start-color: #fecacae6;
+}
+
+.border-s-red-200\\/95 {
+ border-inline-start-color: #fecacaf2;
+}
+
+.border-s-transparent, .border-s-transparent\\/0 {
+ border-inline-start-color: #0000;
+}
+
+.border-s-transparent\\/10 {
+ border-inline-start-color: #0000001a;
+}
+
+.border-s-transparent\\/100 {
+ border-inline-start-color: #000;
+}
+
+.border-s-transparent\\/15 {
+ border-inline-start-color: #00000026;
+}
+
+.border-s-transparent\\/20 {
+ border-inline-start-color: #0003;
+}
+
+.border-s-transparent\\/25 {
+ border-inline-start-color: #00000040;
+}
+
+.border-s-transparent\\/30 {
+ border-inline-start-color: #0000004d;
+}
+
+.border-s-transparent\\/35 {
+ border-inline-start-color: #00000059;
+}
+
+.border-s-transparent\\/40 {
+ border-inline-start-color: #0006;
+}
+
+.border-s-transparent\\/45 {
+ border-inline-start-color: #00000073;
+}
+
+.border-s-transparent\\/5 {
+ border-inline-start-color: #0000000d;
+}
+
+.border-s-transparent\\/50 {
+ border-inline-start-color: #00000080;
+}
+
+.border-s-transparent\\/55 {
+ border-inline-start-color: #0000008c;
+}
+
+.border-s-transparent\\/60 {
+ border-inline-start-color: #0009;
+}
+
+.border-s-transparent\\/65 {
+ border-inline-start-color: #000000a6;
+}
+
+.border-s-transparent\\/70 {
+ border-inline-start-color: #000000b3;
+}
+
+.border-s-transparent\\/75 {
+ border-inline-start-color: #000000bf;
+}
+
+.border-s-transparent\\/80 {
+ border-inline-start-color: #000c;
+}
+
+.border-s-transparent\\/85 {
+ border-inline-start-color: #000000d9;
+}
+
+.border-s-transparent\\/90 {
+ border-inline-start-color: #000000e6;
+}
+
+.border-s-transparent\\/95 {
+ border-inline-start-color: #000000f2;
+}
+
+.border-t-black {
+ border-top-color: #000;
+}
+
+.border-t-black\\/0 {
+ border-top-color: #0000;
+}
+
+.border-t-black\\/10 {
+ border-top-color: #0000001a;
+}
+
+.border-t-black\\/100 {
+ border-top-color: #000;
+}
+
+.border-t-black\\/15 {
+ border-top-color: #00000026;
+}
+
+.border-t-black\\/20 {
+ border-top-color: #0003;
+}
+
+.border-t-black\\/25 {
+ border-top-color: #00000040;
+}
+
+.border-t-black\\/30 {
+ border-top-color: #0000004d;
+}
+
+.border-t-black\\/35 {
+ border-top-color: #00000059;
+}
+
+.border-t-black\\/40 {
+ border-top-color: #0006;
+}
+
+.border-t-black\\/45 {
+ border-top-color: #00000073;
+}
+
+.border-t-black\\/5 {
+ border-top-color: #0000000d;
+}
+
+.border-t-black\\/50 {
+ border-top-color: #00000080;
+}
+
+.border-t-black\\/55 {
+ border-top-color: #0000008c;
+}
+
+.border-t-black\\/60 {
+ border-top-color: #0009;
+}
+
+.border-t-black\\/65 {
+ border-top-color: #000000a6;
+}
+
+.border-t-black\\/70 {
+ border-top-color: #000000b3;
+}
+
+.border-t-black\\/75 {
+ border-top-color: #000000bf;
+}
+
+.border-t-black\\/80 {
+ border-top-color: #000c;
+}
+
+.border-t-black\\/85 {
+ border-top-color: #000000d9;
+}
+
+.border-t-black\\/90 {
+ border-top-color: #000000e6;
+}
+
+.border-t-black\\/95 {
+ border-top-color: #000000f2;
+}
+
+.border-t-red-100 {
+ border-top-color: #fee2e2;
+}
+
+.border-t-red-100\\/0 {
+ border-top-color: #fee2e200;
+}
+
+.border-t-red-100\\/10 {
+ border-top-color: #fee2e21a;
+}
+
+.border-t-red-100\\/100 {
+ border-top-color: #fee2e2;
+}
+
+.border-t-red-100\\/15 {
+ border-top-color: #fee2e226;
+}
+
+.border-t-red-100\\/20 {
+ border-top-color: #fee2e233;
+}
+
+.border-t-red-100\\/25 {
+ border-top-color: #fee2e240;
+}
+
+.border-t-red-100\\/30 {
+ border-top-color: #fee2e24d;
+}
+
+.border-t-red-100\\/35 {
+ border-top-color: #fee2e259;
+}
+
+.border-t-red-100\\/40 {
+ border-top-color: #fee2e266;
+}
+
+.border-t-red-100\\/45 {
+ border-top-color: #fee2e273;
+}
+
+.border-t-red-100\\/5 {
+ border-top-color: #fee2e20d;
+}
+
+.border-t-red-100\\/50 {
+ border-top-color: #fee2e280;
+}
+
+.border-t-red-100\\/55 {
+ border-top-color: #fee2e28c;
+}
+
+.border-t-red-100\\/60 {
+ border-top-color: #fee2e299;
+}
+
+.border-t-red-100\\/65 {
+ border-top-color: #fee2e2a6;
+}
+
+.border-t-red-100\\/70 {
+ border-top-color: #fee2e2b3;
+}
+
+.border-t-red-100\\/75 {
+ border-top-color: #fee2e2bf;
+}
+
+.border-t-red-100\\/80 {
+ border-top-color: #fee2e2cc;
+}
+
+.border-t-red-100\\/85 {
+ border-top-color: #fee2e2d9;
+}
+
+.border-t-red-100\\/90 {
+ border-top-color: #fee2e2e6;
+}
+
+.border-t-red-100\\/95 {
+ border-top-color: #fee2e2f2;
+}
+
+.border-t-red-200 {
+ border-top-color: #fecaca;
+}
+
+.border-t-red-200\\/0 {
+ border-top-color: #fecaca00;
+}
+
+.border-t-red-200\\/10 {
+ border-top-color: #fecaca1a;
+}
+
+.border-t-red-200\\/100 {
+ border-top-color: #fecaca;
+}
+
+.border-t-red-200\\/15 {
+ border-top-color: #fecaca26;
+}
+
+.border-t-red-200\\/20 {
+ border-top-color: #fecaca33;
+}
+
+.border-t-red-200\\/25 {
+ border-top-color: #fecaca40;
+}
+
+.border-t-red-200\\/30 {
+ border-top-color: #fecaca4d;
+}
+
+.border-t-red-200\\/35 {
+ border-top-color: #fecaca59;
+}
+
+.border-t-red-200\\/40 {
+ border-top-color: #fecaca66;
+}
+
+.border-t-red-200\\/45 {
+ border-top-color: #fecaca73;
+}
+
+.border-t-red-200\\/5 {
+ border-top-color: #fecaca0d;
+}
+
+.border-t-red-200\\/50 {
+ border-top-color: #fecaca80;
+}
+
+.border-t-red-200\\/55 {
+ border-top-color: #fecaca8c;
+}
+
+.border-t-red-200\\/60 {
+ border-top-color: #fecaca99;
+}
+
+.border-t-red-200\\/65 {
+ border-top-color: #fecacaa6;
+}
+
+.border-t-red-200\\/70 {
+ border-top-color: #fecacab3;
+}
+
+.border-t-red-200\\/75 {
+ border-top-color: #fecacabf;
+}
+
+.border-t-red-200\\/80 {
+ border-top-color: #fecacacc;
+}
+
+.border-t-red-200\\/85 {
+ border-top-color: #fecacad9;
+}
+
+.border-t-red-200\\/90 {
+ border-top-color: #fecacae6;
+}
+
+.border-t-red-200\\/95 {
+ border-top-color: #fecacaf2;
+}
+
+.border-t-transparent, .border-t-transparent\\/0 {
+ border-top-color: #0000;
+}
+
+.border-t-transparent\\/10 {
+ border-top-color: #0000001a;
+}
+
+.border-t-transparent\\/100 {
+ border-top-color: #000;
+}
+
+.border-t-transparent\\/15 {
+ border-top-color: #00000026;
+}
+
+.border-t-transparent\\/20 {
+ border-top-color: #0003;
+}
+
+.border-t-transparent\\/25 {
+ border-top-color: #00000040;
+}
+
+.border-t-transparent\\/30 {
+ border-top-color: #0000004d;
+}
+
+.border-t-transparent\\/35 {
+ border-top-color: #00000059;
+}
+
+.border-t-transparent\\/40 {
+ border-top-color: #0006;
+}
+
+.border-t-transparent\\/45 {
+ border-top-color: #00000073;
+}
+
+.border-t-transparent\\/5 {
+ border-top-color: #0000000d;
+}
+
+.border-t-transparent\\/50 {
+ border-top-color: #00000080;
+}
+
+.border-t-transparent\\/55 {
+ border-top-color: #0000008c;
+}
+
+.border-t-transparent\\/60 {
+ border-top-color: #0009;
+}
+
+.border-t-transparent\\/65 {
+ border-top-color: #000000a6;
+}
+
+.border-t-transparent\\/70 {
+ border-top-color: #000000b3;
+}
+
+.border-t-transparent\\/75 {
+ border-top-color: #000000bf;
+}
+
+.border-t-transparent\\/80 {
+ border-top-color: #000c;
+}
+
+.border-t-transparent\\/85 {
+ border-top-color: #000000d9;
+}
+
+.border-t-transparent\\/90 {
+ border-top-color: #000000e6;
+}
+
+.border-t-transparent\\/95 {
+ border-top-color: #000000f2;
+}
+"
+`;
+
+exports[`should test the 'borderColor' plugin 2`] = `
+"
+.border-\\[\\#0088cc\\] {
+ --tw-border-opacity: 1;
+ border-color: rgb(0 136 204 / var(--tw-border-opacity));
+}
+
+.border-\\[var\\(--my-value\\)\\] {
+ border-color: var(--my-value);
+}
+
+.border-black {
+ --tw-border-opacity: 1;
+ border-color: rgb(0 0 0 / var(--tw-border-opacity));
+}
+
+.border-black\\/0 {
+ border-color: #0000;
+}
+
+.border-black\\/50 {
+ border-color: #00000080;
+}
+
+.border-red-100 {
+ --tw-border-opacity: 1;
+ border-color: rgb(254 226 226 / var(--tw-border-opacity));
+}
+
+.border-red-100\\/0 {
+ border-color: #fee2e200;
+}
+
+.border-red-100\\/50 {
+ border-color: #fee2e280;
+}
+
+.border-red-200 {
+ --tw-border-opacity: 1;
+ border-color: rgb(254 202 202 / var(--tw-border-opacity));
+}
+
+.border-red-200\\/0 {
+ border-color: #fecaca00;
+}
+
+.border-red-200\\/50 {
+ border-color: #fecaca80;
+}
+
+.border-transparent, .border-transparent\\/0 {
+ border-color: #0000;
+}
+
+.border-transparent\\/50 {
+ border-color: #00000080;
+}
+
+.border-x-black {
+ --tw-border-opacity: 1;
+ border-left-color: rgb(0 0 0 / var(--tw-border-opacity));
+ border-right-color: rgb(0 0 0 / var(--tw-border-opacity));
+}
+
+.border-x-black\\/0 {
+ border-left-color: #0000;
+ border-right-color: #0000;
+}
+
+.border-x-black\\/50 {
+ border-left-color: #00000080;
+ border-right-color: #00000080;
+}
+
+.border-x-red-100 {
+ --tw-border-opacity: 1;
+ border-left-color: rgb(254 226 226 / var(--tw-border-opacity));
+ border-right-color: rgb(254 226 226 / var(--tw-border-opacity));
+}
+
+.border-x-red-100\\/0 {
+ border-left-color: #fee2e200;
+ border-right-color: #fee2e200;
+}
+
+.border-x-red-100\\/50 {
+ border-left-color: #fee2e280;
+ border-right-color: #fee2e280;
+}
+
+.border-x-red-200 {
+ --tw-border-opacity: 1;
+ border-left-color: rgb(254 202 202 / var(--tw-border-opacity));
+ border-right-color: rgb(254 202 202 / var(--tw-border-opacity));
+}
+
+.border-x-red-200\\/0 {
+ border-left-color: #fecaca00;
+ border-right-color: #fecaca00;
+}
+
+.border-x-red-200\\/50 {
+ border-left-color: #fecaca80;
+ border-right-color: #fecaca80;
+}
+
+.border-x-transparent, .border-x-transparent\\/0 {
+ border-left-color: #0000;
+ border-right-color: #0000;
+}
+
+.border-x-transparent\\/50 {
+ border-left-color: #00000080;
+ border-right-color: #00000080;
+}
+
+.border-y-black {
+ --tw-border-opacity: 1;
+ border-top-color: rgb(0 0 0 / var(--tw-border-opacity));
+ border-bottom-color: rgb(0 0 0 / var(--tw-border-opacity));
+}
+
+.border-y-black\\/0 {
+ border-top-color: #0000;
+ border-bottom-color: #0000;
+}
+
+.border-y-black\\/50 {
+ border-top-color: #00000080;
+ border-bottom-color: #00000080;
+}
+
+.border-y-red-100 {
+ --tw-border-opacity: 1;
+ border-top-color: rgb(254 226 226 / var(--tw-border-opacity));
+ border-bottom-color: rgb(254 226 226 / var(--tw-border-opacity));
+}
+
+.border-y-red-100\\/0 {
+ border-top-color: #fee2e200;
+ border-bottom-color: #fee2e200;
+}
+
+.border-y-red-100\\/50 {
+ border-top-color: #fee2e280;
+ border-bottom-color: #fee2e280;
+}
+
+.border-y-red-200 {
+ --tw-border-opacity: 1;
+ border-top-color: rgb(254 202 202 / var(--tw-border-opacity));
+ border-bottom-color: rgb(254 202 202 / var(--tw-border-opacity));
+}
+
+.border-y-red-200\\/0 {
+ border-top-color: #fecaca00;
+ border-bottom-color: #fecaca00;
+}
+
+.border-y-red-200\\/50 {
+ border-top-color: #fecaca80;
+ border-bottom-color: #fecaca80;
+}
+
+.border-y-transparent, .border-y-transparent\\/0 {
+ border-top-color: #0000;
+ border-bottom-color: #0000;
+}
+
+.border-y-transparent\\/50 {
+ border-top-color: #00000080;
+ border-bottom-color: #00000080;
+}
+
+.border-b-black {
+ --tw-border-opacity: 1;
+ border-bottom-color: rgb(0 0 0 / var(--tw-border-opacity));
+}
+
+.border-b-black\\/0 {
+ border-bottom-color: #0000;
+}
+
+.border-b-black\\/50 {
+ border-bottom-color: #00000080;
+}
+
+.border-b-red-100 {
+ --tw-border-opacity: 1;
+ border-bottom-color: rgb(254 226 226 / var(--tw-border-opacity));
+}
+
+.border-b-red-100\\/0 {
+ border-bottom-color: #fee2e200;
+}
+
+.border-b-red-100\\/50 {
+ border-bottom-color: #fee2e280;
+}
+
+.border-b-red-200 {
+ --tw-border-opacity: 1;
+ border-bottom-color: rgb(254 202 202 / var(--tw-border-opacity));
+}
+
+.border-b-red-200\\/0 {
+ border-bottom-color: #fecaca00;
+}
+
+.border-b-red-200\\/50 {
+ border-bottom-color: #fecaca80;
+}
+
+.border-b-transparent, .border-b-transparent\\/0 {
+ border-bottom-color: #0000;
+}
+
+.border-b-transparent\\/50 {
+ border-bottom-color: #00000080;
+}
+
+.border-e-black {
+ --tw-border-opacity: 1;
+ border-inline-end-color: rgb(0 0 0 / var(--tw-border-opacity));
+}
+
+.border-e-black\\/0 {
+ border-inline-end-color: #0000;
+}
+
+.border-e-black\\/50 {
+ border-inline-end-color: #00000080;
+}
+
+.border-e-red-100 {
+ --tw-border-opacity: 1;
+ border-inline-end-color: rgb(254 226 226 / var(--tw-border-opacity));
+}
+
+.border-e-red-100\\/0 {
+ border-inline-end-color: #fee2e200;
+}
+
+.border-e-red-100\\/50 {
+ border-inline-end-color: #fee2e280;
+}
+
+.border-e-red-200 {
+ --tw-border-opacity: 1;
+ border-inline-end-color: rgb(254 202 202 / var(--tw-border-opacity));
+}
+
+.border-e-red-200\\/0 {
+ border-inline-end-color: #fecaca00;
+}
+
+.border-e-red-200\\/50 {
+ border-inline-end-color: #fecaca80;
+}
+
+.border-e-transparent, .border-e-transparent\\/0 {
+ border-inline-end-color: #0000;
+}
+
+.border-e-transparent\\/50 {
+ border-inline-end-color: #00000080;
+}
+
+.border-l-black {
+ --tw-border-opacity: 1;
+ border-left-color: rgb(0 0 0 / var(--tw-border-opacity));
+}
+
+.border-l-black\\/0 {
+ border-left-color: #0000;
+}
+
+.border-l-black\\/50 {
+ border-left-color: #00000080;
+}
+
+.border-l-red-100 {
+ --tw-border-opacity: 1;
+ border-left-color: rgb(254 226 226 / var(--tw-border-opacity));
+}
+
+.border-l-red-100\\/0 {
+ border-left-color: #fee2e200;
+}
+
+.border-l-red-100\\/50 {
+ border-left-color: #fee2e280;
+}
+
+.border-l-red-200 {
+ --tw-border-opacity: 1;
+ border-left-color: rgb(254 202 202 / var(--tw-border-opacity));
+}
+
+.border-l-red-200\\/0 {
+ border-left-color: #fecaca00;
+}
+
+.border-l-red-200\\/50 {
+ border-left-color: #fecaca80;
+}
+
+.border-l-transparent, .border-l-transparent\\/0 {
+ border-left-color: #0000;
+}
+
+.border-l-transparent\\/50 {
+ border-left-color: #00000080;
+}
+
+.border-r-black {
+ --tw-border-opacity: 1;
+ border-right-color: rgb(0 0 0 / var(--tw-border-opacity));
+}
+
+.border-r-black\\/0 {
+ border-right-color: #0000;
+}
+
+.border-r-black\\/50 {
+ border-right-color: #00000080;
+}
+
+.border-r-red-100 {
+ --tw-border-opacity: 1;
+ border-right-color: rgb(254 226 226 / var(--tw-border-opacity));
+}
+
+.border-r-red-100\\/0 {
+ border-right-color: #fee2e200;
+}
+
+.border-r-red-100\\/50 {
+ border-right-color: #fee2e280;
+}
+
+.border-r-red-200 {
+ --tw-border-opacity: 1;
+ border-right-color: rgb(254 202 202 / var(--tw-border-opacity));
+}
+
+.border-r-red-200\\/0 {
+ border-right-color: #fecaca00;
+}
+
+.border-r-red-200\\/50 {
+ border-right-color: #fecaca80;
+}
+
+.border-r-transparent, .border-r-transparent\\/0 {
+ border-right-color: #0000;
+}
+
+.border-r-transparent\\/50 {
+ border-right-color: #00000080;
+}
+
+.border-s-black {
+ --tw-border-opacity: 1;
+ border-inline-start-color: rgb(0 0 0 / var(--tw-border-opacity));
+}
+
+.border-s-black\\/0 {
+ border-inline-start-color: #0000;
+}
+
+.border-s-black\\/50 {
+ border-inline-start-color: #00000080;
+}
+
+.border-s-red-100 {
+ --tw-border-opacity: 1;
+ border-inline-start-color: rgb(254 226 226 / var(--tw-border-opacity));
+}
+
+.border-s-red-100\\/0 {
+ border-inline-start-color: #fee2e200;
+}
+
+.border-s-red-100\\/50 {
+ border-inline-start-color: #fee2e280;
+}
+
+.border-s-red-200 {
+ --tw-border-opacity: 1;
+ border-inline-start-color: rgb(254 202 202 / var(--tw-border-opacity));
+}
+
+.border-s-red-200\\/0 {
+ border-inline-start-color: #fecaca00;
+}
+
+.border-s-red-200\\/50 {
+ border-inline-start-color: #fecaca80;
+}
+
+.border-s-transparent, .border-s-transparent\\/0 {
+ border-inline-start-color: #0000;
+}
+
+.border-s-transparent\\/50 {
+ border-inline-start-color: #00000080;
+}
+
+.border-t-black {
+ --tw-border-opacity: 1;
+ border-top-color: rgb(0 0 0 / var(--tw-border-opacity));
+}
+
+.border-t-black\\/0 {
+ border-top-color: #0000;
+}
+
+.border-t-black\\/50 {
+ border-top-color: #00000080;
+}
+
+.border-t-red-100 {
+ --tw-border-opacity: 1;
+ border-top-color: rgb(254 226 226 / var(--tw-border-opacity));
+}
+
+.border-t-red-100\\/0 {
+ border-top-color: #fee2e200;
+}
+
+.border-t-red-100\\/50 {
+ border-top-color: #fee2e280;
+}
+
+.border-t-red-200 {
+ --tw-border-opacity: 1;
+ border-top-color: rgb(254 202 202 / var(--tw-border-opacity));
+}
+
+.border-t-red-200\\/0 {
+ border-top-color: #fecaca00;
+}
+
+.border-t-red-200\\/50 {
+ border-top-color: #fecaca80;
+}
+
+.border-t-transparent, .border-t-transparent\\/0 {
+ border-top-color: #0000;
+}
+
+.border-t-transparent\\/50 {
+ border-top-color: #00000080;
+}
+
+.border-opacity-0 {
+ --tw-border-opacity: 0;
+}
+
+.border-opacity-50 {
+ --tw-border-opacity: .5;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/borderOpacity.test.js.snap b/tests/plugins/__snapshots__/borderOpacity.test.js.snap
new file mode 100644
index 000000000..4ec206f32
--- /dev/null
+++ b/tests/plugins/__snapshots__/borderOpacity.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'borderOpacity' plugin 1`] = `
+"
+.border-opacity-0 {
+ --tw-border-opacity: 0;
+}
+
+.border-opacity-50 {
+ --tw-border-opacity: .5;
+}
+
+.border-opacity-\\[12\\%\\] {
+ --tw-border-opacity: 12%;
+}
+
+.border-opacity-\\[var\\(--my-value\\)\\] {
+ --tw-border-opacity: var(--my-value);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/borderRadius.test.js.snap b/tests/plugins/__snapshots__/borderRadius.test.js.snap
new file mode 100644
index 000000000..8da8400c2
--- /dev/null
+++ b/tests/plugins/__snapshots__/borderRadius.test.js.snap
@@ -0,0 +1,665 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'borderRadius' plugin 1`] = `
+"
+.rounded {
+ border-radius: .25rem;
+}
+
+.rounded-2xl {
+ border-radius: 1rem;
+}
+
+.rounded-3xl {
+ border-radius: 1.5rem;
+}
+
+.rounded-\\[1px\\] {
+ border-radius: 1px;
+}
+
+.rounded-full {
+ border-radius: 9999px;
+}
+
+.rounded-lg {
+ border-radius: .5rem;
+}
+
+.rounded-md {
+ border-radius: .375rem;
+}
+
+.rounded-none {
+ border-radius: 0;
+}
+
+.rounded-sm {
+ border-radius: .125rem;
+}
+
+.rounded-xl {
+ border-radius: .75rem;
+}
+
+.rounded-b {
+ border-bottom-right-radius: .25rem;
+ border-bottom-left-radius: .25rem;
+}
+
+.rounded-b-2xl {
+ border-bottom-right-radius: 1rem;
+ border-bottom-left-radius: 1rem;
+}
+
+.rounded-b-3xl {
+ border-bottom-right-radius: 1.5rem;
+ border-bottom-left-radius: 1.5rem;
+}
+
+.rounded-b-\\[6px\\] {
+ border-bottom-right-radius: 6px;
+ border-bottom-left-radius: 6px;
+}
+
+.rounded-b-full {
+ border-bottom-right-radius: 9999px;
+ border-bottom-left-radius: 9999px;
+}
+
+.rounded-b-lg {
+ border-bottom-right-radius: .5rem;
+ border-bottom-left-radius: .5rem;
+}
+
+.rounded-b-md {
+ border-bottom-right-radius: .375rem;
+ border-bottom-left-radius: .375rem;
+}
+
+.rounded-b-none {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.rounded-b-sm {
+ border-bottom-right-radius: .125rem;
+ border-bottom-left-radius: .125rem;
+}
+
+.rounded-b-xl {
+ border-bottom-right-radius: .75rem;
+ border-bottom-left-radius: .75rem;
+}
+
+.rounded-e {
+ border-start-end-radius: .25rem;
+ border-end-end-radius: .25rem;
+}
+
+.rounded-e-2xl {
+ border-start-end-radius: 1rem;
+ border-end-end-radius: 1rem;
+}
+
+.rounded-e-3xl {
+ border-start-end-radius: 1.5rem;
+ border-end-end-radius: 1.5rem;
+}
+
+.rounded-e-\\[3px\\] {
+ border-start-end-radius: 3px;
+ border-end-end-radius: 3px;
+}
+
+.rounded-e-full {
+ border-start-end-radius: 9999px;
+ border-end-end-radius: 9999px;
+}
+
+.rounded-e-lg {
+ border-start-end-radius: .5rem;
+ border-end-end-radius: .5rem;
+}
+
+.rounded-e-md {
+ border-start-end-radius: .375rem;
+ border-end-end-radius: .375rem;
+}
+
+.rounded-e-none {
+ border-start-end-radius: 0;
+ border-end-end-radius: 0;
+}
+
+.rounded-e-sm {
+ border-start-end-radius: .125rem;
+ border-end-end-radius: .125rem;
+}
+
+.rounded-e-xl {
+ border-start-end-radius: .75rem;
+ border-end-end-radius: .75rem;
+}
+
+.rounded-l {
+ border-top-left-radius: .25rem;
+ border-bottom-left-radius: .25rem;
+}
+
+.rounded-l-2xl {
+ border-top-left-radius: 1rem;
+ border-bottom-left-radius: 1rem;
+}
+
+.rounded-l-3xl {
+ border-top-left-radius: 1.5rem;
+ border-bottom-left-radius: 1.5rem;
+}
+
+.rounded-l-\\[7px\\] {
+ border-top-left-radius: 7px;
+ border-bottom-left-radius: 7px;
+}
+
+.rounded-l-full {
+ border-top-left-radius: 9999px;
+ border-bottom-left-radius: 9999px;
+}
+
+.rounded-l-lg {
+ border-top-left-radius: .5rem;
+ border-bottom-left-radius: .5rem;
+}
+
+.rounded-l-md {
+ border-top-left-radius: .375rem;
+ border-bottom-left-radius: .375rem;
+}
+
+.rounded-l-none {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.rounded-l-sm {
+ border-top-left-radius: .125rem;
+ border-bottom-left-radius: .125rem;
+}
+
+.rounded-l-xl {
+ border-top-left-radius: .75rem;
+ border-bottom-left-radius: .75rem;
+}
+
+.rounded-r {
+ border-top-right-radius: .25rem;
+ border-bottom-right-radius: .25rem;
+}
+
+.rounded-r-2xl {
+ border-top-right-radius: 1rem;
+ border-bottom-right-radius: 1rem;
+}
+
+.rounded-r-3xl {
+ border-top-right-radius: 1.5rem;
+ border-bottom-right-radius: 1.5rem;
+}
+
+.rounded-r-\\[5px\\] {
+ border-top-right-radius: 5px;
+ border-bottom-right-radius: 5px;
+}
+
+.rounded-r-full {
+ border-top-right-radius: 9999px;
+ border-bottom-right-radius: 9999px;
+}
+
+.rounded-r-lg {
+ border-top-right-radius: .5rem;
+ border-bottom-right-radius: .5rem;
+}
+
+.rounded-r-md {
+ border-top-right-radius: .375rem;
+ border-bottom-right-radius: .375rem;
+}
+
+.rounded-r-none {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.rounded-r-sm {
+ border-top-right-radius: .125rem;
+ border-bottom-right-radius: .125rem;
+}
+
+.rounded-r-xl {
+ border-top-right-radius: .75rem;
+ border-bottom-right-radius: .75rem;
+}
+
+.rounded-s {
+ border-start-start-radius: .25rem;
+ border-end-start-radius: .25rem;
+}
+
+.rounded-s-2xl {
+ border-start-start-radius: 1rem;
+ border-end-start-radius: 1rem;
+}
+
+.rounded-s-3xl {
+ border-start-start-radius: 1.5rem;
+ border-end-start-radius: 1.5rem;
+}
+
+.rounded-s-\\[2px\\] {
+ border-start-start-radius: 2px;
+ border-end-start-radius: 2px;
+}
+
+.rounded-s-full {
+ border-start-start-radius: 9999px;
+ border-end-start-radius: 9999px;
+}
+
+.rounded-s-lg {
+ border-start-start-radius: .5rem;
+ border-end-start-radius: .5rem;
+}
+
+.rounded-s-md {
+ border-start-start-radius: .375rem;
+ border-end-start-radius: .375rem;
+}
+
+.rounded-s-none {
+ border-start-start-radius: 0;
+ border-end-start-radius: 0;
+}
+
+.rounded-s-sm {
+ border-start-start-radius: .125rem;
+ border-end-start-radius: .125rem;
+}
+
+.rounded-s-xl {
+ border-start-start-radius: .75rem;
+ border-end-start-radius: .75rem;
+}
+
+.rounded-t {
+ border-top-left-radius: .25rem;
+ border-top-right-radius: .25rem;
+}
+
+.rounded-t-2xl {
+ border-top-left-radius: 1rem;
+ border-top-right-radius: 1rem;
+}
+
+.rounded-t-3xl {
+ border-top-left-radius: 1.5rem;
+ border-top-right-radius: 1.5rem;
+}
+
+.rounded-t-\\[4px\\] {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+
+.rounded-t-full {
+ border-top-left-radius: 9999px;
+ border-top-right-radius: 9999px;
+}
+
+.rounded-t-lg {
+ border-top-left-radius: .5rem;
+ border-top-right-radius: .5rem;
+}
+
+.rounded-t-md {
+ border-top-left-radius: .375rem;
+ border-top-right-radius: .375rem;
+}
+
+.rounded-t-none {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.rounded-t-sm {
+ border-top-left-radius: .125rem;
+ border-top-right-radius: .125rem;
+}
+
+.rounded-t-xl {
+ border-top-left-radius: .75rem;
+ border-top-right-radius: .75rem;
+}
+
+.rounded-bl {
+ border-bottom-left-radius: .25rem;
+}
+
+.rounded-bl-2xl {
+ border-bottom-left-radius: 1rem;
+}
+
+.rounded-bl-3xl {
+ border-bottom-left-radius: 1.5rem;
+}
+
+.rounded-bl-\\[15px\\] {
+ border-bottom-left-radius: 15px;
+}
+
+.rounded-bl-full {
+ border-bottom-left-radius: 9999px;
+}
+
+.rounded-bl-lg {
+ border-bottom-left-radius: .5rem;
+}
+
+.rounded-bl-md {
+ border-bottom-left-radius: .375rem;
+}
+
+.rounded-bl-none {
+ border-bottom-left-radius: 0;
+}
+
+.rounded-bl-sm {
+ border-bottom-left-radius: .125rem;
+}
+
+.rounded-bl-xl {
+ border-bottom-left-radius: .75rem;
+}
+
+.rounded-br {
+ border-bottom-right-radius: .25rem;
+}
+
+.rounded-br-2xl {
+ border-bottom-right-radius: 1rem;
+}
+
+.rounded-br-3xl {
+ border-bottom-right-radius: 1.5rem;
+}
+
+.rounded-br-\\[14px\\] {
+ border-bottom-right-radius: 14px;
+}
+
+.rounded-br-full {
+ border-bottom-right-radius: 9999px;
+}
+
+.rounded-br-lg {
+ border-bottom-right-radius: .5rem;
+}
+
+.rounded-br-md {
+ border-bottom-right-radius: .375rem;
+}
+
+.rounded-br-none {
+ border-bottom-right-radius: 0;
+}
+
+.rounded-br-sm {
+ border-bottom-right-radius: .125rem;
+}
+
+.rounded-br-xl {
+ border-bottom-right-radius: .75rem;
+}
+
+.rounded-ee {
+ border-end-end-radius: .25rem;
+}
+
+.rounded-ee-2xl {
+ border-end-end-radius: 1rem;
+}
+
+.rounded-ee-3xl {
+ border-end-end-radius: 1.5rem;
+}
+
+.rounded-ee-\\[10px\\] {
+ border-end-end-radius: 10px;
+}
+
+.rounded-ee-full {
+ border-end-end-radius: 9999px;
+}
+
+.rounded-ee-lg {
+ border-end-end-radius: .5rem;
+}
+
+.rounded-ee-md {
+ border-end-end-radius: .375rem;
+}
+
+.rounded-ee-none {
+ border-end-end-radius: 0;
+}
+
+.rounded-ee-sm {
+ border-end-end-radius: .125rem;
+}
+
+.rounded-ee-xl {
+ border-end-end-radius: .75rem;
+}
+
+.rounded-es {
+ border-end-start-radius: .25rem;
+}
+
+.rounded-es-2xl {
+ border-end-start-radius: 1rem;
+}
+
+.rounded-es-3xl {
+ border-end-start-radius: 1.5rem;
+}
+
+.rounded-es-\\[11px\\] {
+ border-end-start-radius: 11px;
+}
+
+.rounded-es-full {
+ border-end-start-radius: 9999px;
+}
+
+.rounded-es-lg {
+ border-end-start-radius: .5rem;
+}
+
+.rounded-es-md {
+ border-end-start-radius: .375rem;
+}
+
+.rounded-es-none {
+ border-end-start-radius: 0;
+}
+
+.rounded-es-sm {
+ border-end-start-radius: .125rem;
+}
+
+.rounded-es-xl {
+ border-end-start-radius: .75rem;
+}
+
+.rounded-se {
+ border-start-end-radius: .25rem;
+}
+
+.rounded-se-2xl {
+ border-start-end-radius: 1rem;
+}
+
+.rounded-se-3xl {
+ border-start-end-radius: 1.5rem;
+}
+
+.rounded-se-\\[9px\\] {
+ border-start-end-radius: 9px;
+}
+
+.rounded-se-full {
+ border-start-end-radius: 9999px;
+}
+
+.rounded-se-lg {
+ border-start-end-radius: .5rem;
+}
+
+.rounded-se-md {
+ border-start-end-radius: .375rem;
+}
+
+.rounded-se-none {
+ border-start-end-radius: 0;
+}
+
+.rounded-se-sm {
+ border-start-end-radius: .125rem;
+}
+
+.rounded-se-xl {
+ border-start-end-radius: .75rem;
+}
+
+.rounded-ss {
+ border-start-start-radius: .25rem;
+}
+
+.rounded-ss-2xl {
+ border-start-start-radius: 1rem;
+}
+
+.rounded-ss-3xl {
+ border-start-start-radius: 1.5rem;
+}
+
+.rounded-ss-\\[8px\\] {
+ border-start-start-radius: 8px;
+}
+
+.rounded-ss-full {
+ border-start-start-radius: 9999px;
+}
+
+.rounded-ss-lg {
+ border-start-start-radius: .5rem;
+}
+
+.rounded-ss-md {
+ border-start-start-radius: .375rem;
+}
+
+.rounded-ss-none {
+ border-start-start-radius: 0;
+}
+
+.rounded-ss-sm {
+ border-start-start-radius: .125rem;
+}
+
+.rounded-ss-xl {
+ border-start-start-radius: .75rem;
+}
+
+.rounded-tl {
+ border-top-left-radius: .25rem;
+}
+
+.rounded-tl-2xl {
+ border-top-left-radius: 1rem;
+}
+
+.rounded-tl-3xl {
+ border-top-left-radius: 1.5rem;
+}
+
+.rounded-tl-\\[12px\\] {
+ border-top-left-radius: 12px;
+}
+
+.rounded-tl-full {
+ border-top-left-radius: 9999px;
+}
+
+.rounded-tl-lg {
+ border-top-left-radius: .5rem;
+}
+
+.rounded-tl-md {
+ border-top-left-radius: .375rem;
+}
+
+.rounded-tl-none {
+ border-top-left-radius: 0;
+}
+
+.rounded-tl-sm {
+ border-top-left-radius: .125rem;
+}
+
+.rounded-tl-xl {
+ border-top-left-radius: .75rem;
+}
+
+.rounded-tr {
+ border-top-right-radius: .25rem;
+}
+
+.rounded-tr-2xl {
+ border-top-right-radius: 1rem;
+}
+
+.rounded-tr-3xl {
+ border-top-right-radius: 1.5rem;
+}
+
+.rounded-tr-\\[13px\\] {
+ border-top-right-radius: 13px;
+}
+
+.rounded-tr-full {
+ border-top-right-radius: 9999px;
+}
+
+.rounded-tr-lg {
+ border-top-right-radius: .5rem;
+}
+
+.rounded-tr-md {
+ border-top-right-radius: .375rem;
+}
+
+.rounded-tr-none {
+ border-top-right-radius: 0;
+}
+
+.rounded-tr-sm {
+ border-top-right-radius: .125rem;
+}
+
+.rounded-tr-xl {
+ border-top-right-radius: .75rem;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/borderSpacing.test.js.snap b/tests/plugins/__snapshots__/borderSpacing.test.js.snap
new file mode 100644
index 000000000..fa939bcec
--- /dev/null
+++ b/tests/plugins/__snapshots__/borderSpacing.test.js.snap
@@ -0,0 +1,591 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'borderSpacing' plugin 1`] = `
+"
+*, :before, :after {
+ --tw-border-spacing-x: 0;
+ --tw-border-spacing-y: 0;
+}
+
+::backdrop {
+ --tw-border-spacing-x: 0;
+ --tw-border-spacing-y: 0;
+}
+
+.border-spacing-0 {
+ --tw-border-spacing-x: 0px;
+ --tw-border-spacing-y: 0px;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-0\\.5 {
+ --tw-border-spacing-x: .125rem;
+ --tw-border-spacing-y: .125rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-1 {
+ --tw-border-spacing-x: .25rem;
+ --tw-border-spacing-y: .25rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-1\\.5 {
+ --tw-border-spacing-x: .375rem;
+ --tw-border-spacing-y: .375rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-10 {
+ --tw-border-spacing-x: 2.5rem;
+ --tw-border-spacing-y: 2.5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-11 {
+ --tw-border-spacing-x: 2.75rem;
+ --tw-border-spacing-y: 2.75rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-12 {
+ --tw-border-spacing-x: 3rem;
+ --tw-border-spacing-y: 3rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-14 {
+ --tw-border-spacing-x: 3.5rem;
+ --tw-border-spacing-y: 3.5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-16 {
+ --tw-border-spacing-x: 4rem;
+ --tw-border-spacing-y: 4rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-2 {
+ --tw-border-spacing-x: .5rem;
+ --tw-border-spacing-y: .5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-2\\.5 {
+ --tw-border-spacing-x: .625rem;
+ --tw-border-spacing-y: .625rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-20 {
+ --tw-border-spacing-x: 5rem;
+ --tw-border-spacing-y: 5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-24 {
+ --tw-border-spacing-x: 6rem;
+ --tw-border-spacing-y: 6rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-28 {
+ --tw-border-spacing-x: 7rem;
+ --tw-border-spacing-y: 7rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-3 {
+ --tw-border-spacing-x: .75rem;
+ --tw-border-spacing-y: .75rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-3\\.5 {
+ --tw-border-spacing-x: .875rem;
+ --tw-border-spacing-y: .875rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-32 {
+ --tw-border-spacing-x: 8rem;
+ --tw-border-spacing-y: 8rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-36 {
+ --tw-border-spacing-x: 9rem;
+ --tw-border-spacing-y: 9rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-4 {
+ --tw-border-spacing-x: 1rem;
+ --tw-border-spacing-y: 1rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-40 {
+ --tw-border-spacing-x: 10rem;
+ --tw-border-spacing-y: 10rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-44 {
+ --tw-border-spacing-x: 11rem;
+ --tw-border-spacing-y: 11rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-48 {
+ --tw-border-spacing-x: 12rem;
+ --tw-border-spacing-y: 12rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-5 {
+ --tw-border-spacing-x: 1.25rem;
+ --tw-border-spacing-y: 1.25rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-52 {
+ --tw-border-spacing-x: 13rem;
+ --tw-border-spacing-y: 13rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-56 {
+ --tw-border-spacing-x: 14rem;
+ --tw-border-spacing-y: 14rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-6 {
+ --tw-border-spacing-x: 1.5rem;
+ --tw-border-spacing-y: 1.5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-60 {
+ --tw-border-spacing-x: 15rem;
+ --tw-border-spacing-y: 15rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-64 {
+ --tw-border-spacing-x: 16rem;
+ --tw-border-spacing-y: 16rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-7 {
+ --tw-border-spacing-x: 1.75rem;
+ --tw-border-spacing-y: 1.75rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-72 {
+ --tw-border-spacing-x: 18rem;
+ --tw-border-spacing-y: 18rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-8 {
+ --tw-border-spacing-x: 2rem;
+ --tw-border-spacing-y: 2rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-80 {
+ --tw-border-spacing-x: 20rem;
+ --tw-border-spacing-y: 20rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-9 {
+ --tw-border-spacing-x: 2.25rem;
+ --tw-border-spacing-y: 2.25rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-96 {
+ --tw-border-spacing-x: 24rem;
+ --tw-border-spacing-y: 24rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-\\[12px\\] {
+ --tw-border-spacing-x: 12px;
+ --tw-border-spacing-y: 12px;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-px {
+ --tw-border-spacing-x: 1px;
+ --tw-border-spacing-y: 1px;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-0 {
+ --tw-border-spacing-x: 0px;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-0\\.5 {
+ --tw-border-spacing-x: .125rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-1 {
+ --tw-border-spacing-x: .25rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-1\\.5 {
+ --tw-border-spacing-x: .375rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-10 {
+ --tw-border-spacing-x: 2.5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-11 {
+ --tw-border-spacing-x: 2.75rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-12 {
+ --tw-border-spacing-x: 3rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-14 {
+ --tw-border-spacing-x: 3.5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-16 {
+ --tw-border-spacing-x: 4rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-2 {
+ --tw-border-spacing-x: .5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-2\\.5 {
+ --tw-border-spacing-x: .625rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-20 {
+ --tw-border-spacing-x: 5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-24 {
+ --tw-border-spacing-x: 6rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-28 {
+ --tw-border-spacing-x: 7rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-3 {
+ --tw-border-spacing-x: .75rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-3\\.5 {
+ --tw-border-spacing-x: .875rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-32 {
+ --tw-border-spacing-x: 8rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-36 {
+ --tw-border-spacing-x: 9rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-4 {
+ --tw-border-spacing-x: 1rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-40 {
+ --tw-border-spacing-x: 10rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-44 {
+ --tw-border-spacing-x: 11rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-48 {
+ --tw-border-spacing-x: 12rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-5 {
+ --tw-border-spacing-x: 1.25rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-52 {
+ --tw-border-spacing-x: 13rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-56 {
+ --tw-border-spacing-x: 14rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-6 {
+ --tw-border-spacing-x: 1.5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-60 {
+ --tw-border-spacing-x: 15rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-64 {
+ --tw-border-spacing-x: 16rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-7 {
+ --tw-border-spacing-x: 1.75rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-72 {
+ --tw-border-spacing-x: 18rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-8 {
+ --tw-border-spacing-x: 2rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-80 {
+ --tw-border-spacing-x: 20rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-9 {
+ --tw-border-spacing-x: 2.25rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-96 {
+ --tw-border-spacing-x: 24rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-\\[23px\\] {
+ --tw-border-spacing-x: 23px;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-x-px {
+ --tw-border-spacing-x: 1px;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-0 {
+ --tw-border-spacing-y: 0px;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-0\\.5 {
+ --tw-border-spacing-y: .125rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-1 {
+ --tw-border-spacing-y: .25rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-1\\.5 {
+ --tw-border-spacing-y: .375rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-10 {
+ --tw-border-spacing-y: 2.5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-11 {
+ --tw-border-spacing-y: 2.75rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-12 {
+ --tw-border-spacing-y: 3rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-14 {
+ --tw-border-spacing-y: 3.5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-16 {
+ --tw-border-spacing-y: 4rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-2 {
+ --tw-border-spacing-y: .5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-2\\.5 {
+ --tw-border-spacing-y: .625rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-20 {
+ --tw-border-spacing-y: 5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-24 {
+ --tw-border-spacing-y: 6rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-28 {
+ --tw-border-spacing-y: 7rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-3 {
+ --tw-border-spacing-y: .75rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-3\\.5 {
+ --tw-border-spacing-y: .875rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-32 {
+ --tw-border-spacing-y: 8rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-36 {
+ --tw-border-spacing-y: 9rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-4 {
+ --tw-border-spacing-y: 1rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-40 {
+ --tw-border-spacing-y: 10rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-44 {
+ --tw-border-spacing-y: 11rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-48 {
+ --tw-border-spacing-y: 12rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-5 {
+ --tw-border-spacing-y: 1.25rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-52 {
+ --tw-border-spacing-y: 13rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-56 {
+ --tw-border-spacing-y: 14rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-6 {
+ --tw-border-spacing-y: 1.5rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-60 {
+ --tw-border-spacing-y: 15rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-64 {
+ --tw-border-spacing-y: 16rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-7 {
+ --tw-border-spacing-y: 1.75rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-72 {
+ --tw-border-spacing-y: 18rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-8 {
+ --tw-border-spacing-y: 2rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-80 {
+ --tw-border-spacing-y: 20rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-9 {
+ --tw-border-spacing-y: 2.25rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-96 {
+ --tw-border-spacing-y: 24rem;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-\\[34px\\] {
+ --tw-border-spacing-y: 34px;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+
+.border-spacing-y-px {
+ --tw-border-spacing-y: 1px;
+ border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/borderStyle.test.js.snap b/tests/plugins/__snapshots__/borderStyle.test.js.snap
new file mode 100644
index 000000000..c93d88c16
--- /dev/null
+++ b/tests/plugins/__snapshots__/borderStyle.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'borderStyle' plugin 1`] = `
+"
+.border-solid {
+ border-style: solid;
+}
+
+.border-dashed {
+ border-style: dashed;
+}
+
+.border-dotted {
+ border-style: dotted;
+}
+
+.border-double {
+ border-style: double;
+}
+
+.border-hidden {
+ border-style: hidden;
+}
+
+.border-none {
+ border-style: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/borderWidth.test.js.snap b/tests/plugins/__snapshots__/borderWidth.test.js.snap
new file mode 100644
index 000000000..b6cf4ac0a
--- /dev/null
+++ b/tests/plugins/__snapshots__/borderWidth.test.js.snap
@@ -0,0 +1,233 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'borderWidth' plugin 1`] = `
+"
+.border {
+ border-width: 1px;
+}
+
+.border-0 {
+ border-width: 0;
+}
+
+.border-2 {
+ border-width: 2px;
+}
+
+.border-4 {
+ border-width: 4px;
+}
+
+.border-8 {
+ border-width: 8px;
+}
+
+.border-\\[12px\\] {
+ border-width: 12px;
+}
+
+.border-x {
+ border-left-width: 1px;
+ border-right-width: 1px;
+}
+
+.border-x-0 {
+ border-left-width: 0;
+ border-right-width: 0;
+}
+
+.border-x-2 {
+ border-left-width: 2px;
+ border-right-width: 2px;
+}
+
+.border-x-4 {
+ border-left-width: 4px;
+ border-right-width: 4px;
+}
+
+.border-x-8 {
+ border-left-width: 8px;
+ border-right-width: 8px;
+}
+
+.border-x-\\[23px\\] {
+ border-left-width: 23px;
+ border-right-width: 23px;
+}
+
+.border-y {
+ border-top-width: 1px;
+ border-bottom-width: 1px;
+}
+
+.border-y-0 {
+ border-top-width: 0;
+ border-bottom-width: 0;
+}
+
+.border-y-2 {
+ border-top-width: 2px;
+ border-bottom-width: 2px;
+}
+
+.border-y-4 {
+ border-top-width: 4px;
+ border-bottom-width: 4px;
+}
+
+.border-y-8 {
+ border-top-width: 8px;
+ border-bottom-width: 8px;
+}
+
+.border-y-\\[34px\\] {
+ border-top-width: 34px;
+ border-bottom-width: 34px;
+}
+
+.border-b {
+ border-bottom-width: 1px;
+}
+
+.border-b-0 {
+ border-bottom-width: 0;
+}
+
+.border-b-2 {
+ border-bottom-width: 2px;
+}
+
+.border-b-4 {
+ border-bottom-width: 4px;
+}
+
+.border-b-8 {
+ border-bottom-width: 8px;
+}
+
+.border-b-\\[89px\\] {
+ border-bottom-width: 89px;
+}
+
+.border-e {
+ border-inline-end-width: 1px;
+}
+
+.border-e-0 {
+ border-inline-end-width: 0;
+}
+
+.border-e-2 {
+ border-inline-end-width: 2px;
+}
+
+.border-e-4 {
+ border-inline-end-width: 4px;
+}
+
+.border-e-8 {
+ border-inline-end-width: 8px;
+}
+
+.border-e-\\[56px\\] {
+ border-inline-end-width: 56px;
+}
+
+.border-l {
+ border-left-width: 1px;
+}
+
+.border-l-0 {
+ border-left-width: 0;
+}
+
+.border-l-2 {
+ border-left-width: 2px;
+}
+
+.border-l-4 {
+ border-left-width: 4px;
+}
+
+.border-l-8 {
+ border-left-width: 8px;
+}
+
+.border-l-\\[90px\\] {
+ border-left-width: 90px;
+}
+
+.border-r {
+ border-right-width: 1px;
+}
+
+.border-r-0 {
+ border-right-width: 0;
+}
+
+.border-r-2 {
+ border-right-width: 2px;
+}
+
+.border-r-4 {
+ border-right-width: 4px;
+}
+
+.border-r-8 {
+ border-right-width: 8px;
+}
+
+.border-r-\\[78px\\] {
+ border-right-width: 78px;
+}
+
+.border-s {
+ border-inline-start-width: 1px;
+}
+
+.border-s-0 {
+ border-inline-start-width: 0;
+}
+
+.border-s-2 {
+ border-inline-start-width: 2px;
+}
+
+.border-s-4 {
+ border-inline-start-width: 4px;
+}
+
+.border-s-8 {
+ border-inline-start-width: 8px;
+}
+
+.border-s-\\[45px\\] {
+ border-inline-start-width: 45px;
+}
+
+.border-t {
+ border-top-width: 1px;
+}
+
+.border-t-0 {
+ border-top-width: 0;
+}
+
+.border-t-2 {
+ border-top-width: 2px;
+}
+
+.border-t-4 {
+ border-top-width: 4px;
+}
+
+.border-t-8 {
+ border-top-width: 8px;
+}
+
+.border-t-\\[67px\\] {
+ border-top-width: 67px;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/boxDecorationBreak.test.js.snap b/tests/plugins/__snapshots__/boxDecorationBreak.test.js.snap
new file mode 100644
index 000000000..66d36a980
--- /dev/null
+++ b/tests/plugins/__snapshots__/boxDecorationBreak.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'boxDecorationBreak' plugin 1`] = `
+"
+.decoration-slice {
+ -webkit-box-decoration-break: slice;
+ box-decoration-break: slice;
+}
+
+.decoration-clone {
+ -webkit-box-decoration-break: clone;
+ box-decoration-break: clone;
+}
+
+.box-decoration-slice {
+ -webkit-box-decoration-break: slice;
+ box-decoration-break: slice;
+}
+
+.box-decoration-clone {
+ -webkit-box-decoration-break: clone;
+ box-decoration-break: clone;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/boxShadow.test.js.snap b/tests/plugins/__snapshots__/boxShadow.test.js.snap
new file mode 100644
index 000000000..444b61e1f
--- /dev/null
+++ b/tests/plugins/__snapshots__/boxShadow.test.js.snap
@@ -0,0 +1,73 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'boxShadow' plugin 1`] = `
+"
+*, :before, :after {
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+}
+
+::backdrop {
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+}
+
+.shadow {
+ --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
+ --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-2xl {
+ --tw-shadow: 0 25px 50px -12px #00000040;
+ --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-\\[0_1px_2px_\\#0088cc\\] {
+ --tw-shadow: 0 1px 2px #08c;
+ --tw-shadow-colored: 0 1px 2px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-inner {
+ --tw-shadow: inset 0 2px 4px 0 #0000000d;
+ --tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-lg {
+ --tw-shadow: 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;
+ --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-md {
+ --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
+ --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-none {
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-sm {
+ --tw-shadow: 0 1px 2px 0 #0000000d;
+ --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-xl {
+ --tw-shadow: 0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;
+ --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/boxShadowColor.test.js.snap b/tests/plugins/__snapshots__/boxShadowColor.test.js.snap
new file mode 100644
index 000000000..296b2fcaa
--- /dev/null
+++ b/tests/plugins/__snapshots__/boxShadowColor.test.js.snap
@@ -0,0 +1,75 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'boxShadowColor' plugin 1`] = `
+"
+.shadow-\\[\\#0088cc\\] {
+ --tw-shadow-color: #08c;
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
+.shadow-\\[var\\(--my-value\\)\\] {
+ --tw-shadow-color: var(--my-value);
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
+.shadow-black {
+ --tw-shadow-color: #000;
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
+.shadow-black\\/0 {
+ --tw-shadow-color: #0000;
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
+.shadow-black\\/50 {
+ --tw-shadow-color: #00000080;
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
+.shadow-red-100 {
+ --tw-shadow-color: #fee2e2;
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
+.shadow-red-100\\/0 {
+ --tw-shadow-color: #fee2e200;
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
+.shadow-red-100\\/50 {
+ --tw-shadow-color: #fee2e280;
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
+.shadow-red-200 {
+ --tw-shadow-color: #fecaca;
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
+.shadow-red-200\\/0 {
+ --tw-shadow-color: #fecaca00;
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
+.shadow-red-200\\/50 {
+ --tw-shadow-color: #fecaca80;
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
+.shadow-transparent {
+ --tw-shadow-color: transparent;
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
+.shadow-transparent\\/0 {
+ --tw-shadow-color: #0000;
+ --tw-shadow: var(--tw-shadow-colored);
+}
+
+.shadow-transparent\\/50 {
+ --tw-shadow-color: #00000080;
+ --tw-shadow: var(--tw-shadow-colored);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/boxSizing.test.js.snap b/tests/plugins/__snapshots__/boxSizing.test.js.snap
new file mode 100644
index 000000000..ea6cc3ceb
--- /dev/null
+++ b/tests/plugins/__snapshots__/boxSizing.test.js.snap
@@ -0,0 +1,13 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'boxSizing' plugin 1`] = `
+"
+.box-border {
+ box-sizing: border-box;
+}
+
+.box-content {
+ box-sizing: content-box;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/breakAfter.test.js.snap b/tests/plugins/__snapshots__/breakAfter.test.js.snap
new file mode 100644
index 000000000..fe4fe6717
--- /dev/null
+++ b/tests/plugins/__snapshots__/breakAfter.test.js.snap
@@ -0,0 +1,37 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'breakAfter' plugin 1`] = `
+"
+.break-after-auto {
+ break-after: auto;
+}
+
+.break-after-avoid {
+ break-after: avoid;
+}
+
+.break-after-all {
+ break-after: all;
+}
+
+.break-after-avoid-page {
+ break-after: avoid-page;
+}
+
+.break-after-page {
+ break-after: page;
+}
+
+.break-after-left {
+ break-after: left;
+}
+
+.break-after-right {
+ break-after: right;
+}
+
+.break-after-column {
+ break-after: column;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/breakBefore.test.js.snap b/tests/plugins/__snapshots__/breakBefore.test.js.snap
new file mode 100644
index 000000000..690d95e59
--- /dev/null
+++ b/tests/plugins/__snapshots__/breakBefore.test.js.snap
@@ -0,0 +1,37 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'breakBefore' plugin 1`] = `
+"
+.break-before-auto {
+ break-before: auto;
+}
+
+.break-before-avoid {
+ break-before: avoid;
+}
+
+.break-before-all {
+ break-before: all;
+}
+
+.break-before-avoid-page {
+ break-before: avoid-page;
+}
+
+.break-before-page {
+ break-before: page;
+}
+
+.break-before-left {
+ break-before: left;
+}
+
+.break-before-right {
+ break-before: right;
+}
+
+.break-before-column {
+ break-before: column;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/breakInside.test.js.snap b/tests/plugins/__snapshots__/breakInside.test.js.snap
new file mode 100644
index 000000000..886db8c5b
--- /dev/null
+++ b/tests/plugins/__snapshots__/breakInside.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'breakInside' plugin 1`] = `
+"
+.break-inside-auto {
+ break-inside: auto;
+}
+
+.break-inside-avoid {
+ break-inside: avoid;
+}
+
+.break-inside-avoid-page {
+ break-inside: avoid-page;
+}
+
+.break-inside-avoid-column {
+ break-inside: avoid-column;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/brightness.test.js.snap b/tests/plugins/__snapshots__/brightness.test.js.snap
new file mode 100644
index 000000000..f52325dd9
--- /dev/null
+++ b/tests/plugins/__snapshots__/brightness.test.js.snap
@@ -0,0 +1,70 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'brightness' plugin 1`] = `
+"
+.brightness-0 {
+ --tw-brightness: brightness(0);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.brightness-100 {
+ --tw-brightness: brightness(1);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.brightness-105 {
+ --tw-brightness: brightness(1.05);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.brightness-110 {
+ --tw-brightness: brightness(1.1);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.brightness-125 {
+ --tw-brightness: brightness(1.25);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.brightness-150 {
+ --tw-brightness: brightness(1.5);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.brightness-200 {
+ --tw-brightness: brightness(2);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.brightness-50 {
+ --tw-brightness: brightness(.5);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.brightness-75 {
+ --tw-brightness: brightness(.75);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.brightness-90 {
+ --tw-brightness: brightness(.9);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.brightness-95 {
+ --tw-brightness: brightness(.95);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.brightness-\\[12\\] {
+ --tw-brightness: brightness(12);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.brightness-\\[var\\(--my-value\\)\\] {
+ --tw-brightness: brightness(var(--my-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/captionSide.test.js.snap b/tests/plugins/__snapshots__/captionSide.test.js.snap
new file mode 100644
index 000000000..a35ad9c87
--- /dev/null
+++ b/tests/plugins/__snapshots__/captionSide.test.js.snap
@@ -0,0 +1,13 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'captionSide' plugin 1`] = `
+"
+.caption-top {
+ caption-side: top;
+}
+
+.caption-bottom {
+ caption-side: bottom;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/caretColor.test.js.snap b/tests/plugins/__snapshots__/caretColor.test.js.snap
new file mode 100644
index 000000000..3c4258cfe
--- /dev/null
+++ b/tests/plugins/__snapshots__/caretColor.test.js.snap
@@ -0,0 +1,57 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'caretColor' plugin 1`] = `
+"
+.caret-\\[\\#0088cc\\] {
+ caret-color: #08c;
+}
+
+.caret-\\[var\\(--my-value\\)\\] {
+ caret-color: var(--my-value);
+}
+
+.caret-black {
+ caret-color: #000;
+}
+
+.caret-black\\/0 {
+ caret-color: #0000;
+}
+
+.caret-black\\/50 {
+ caret-color: #00000080;
+}
+
+.caret-red-100 {
+ caret-color: #fee2e2;
+}
+
+.caret-red-100\\/0 {
+ caret-color: #fee2e200;
+}
+
+.caret-red-100\\/50 {
+ caret-color: #fee2e280;
+}
+
+.caret-red-200 {
+ caret-color: #fecaca;
+}
+
+.caret-red-200\\/0 {
+ caret-color: #fecaca00;
+}
+
+.caret-red-200\\/50 {
+ caret-color: #fecaca80;
+}
+
+.caret-transparent, .caret-transparent\\/0 {
+ caret-color: #0000;
+}
+
+.caret-transparent\\/50 {
+ caret-color: #00000080;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/clear.test.js.snap b/tests/plugins/__snapshots__/clear.test.js.snap
new file mode 100644
index 000000000..67d71c228
--- /dev/null
+++ b/tests/plugins/__snapshots__/clear.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'clear' plugin 1`] = `
+"
+.clear-start {
+ clear: inline-start;
+}
+
+.clear-end {
+ clear: inline-end;
+}
+
+.clear-left {
+ clear: left;
+}
+
+.clear-right {
+ clear: right;
+}
+
+.clear-both {
+ clear: both;
+}
+
+.clear-none {
+ clear: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/columns.test.js.snap b/tests/plugins/__snapshots__/columns.test.js.snap
new file mode 100644
index 000000000..e59aa2d77
--- /dev/null
+++ b/tests/plugins/__snapshots__/columns.test.js.snap
@@ -0,0 +1,117 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'columns' plugin 1`] = `
+"
+.columns-1 {
+ columns: 1;
+}
+
+.columns-10 {
+ columns: 10;
+}
+
+.columns-11 {
+ columns: 11;
+}
+
+.columns-12 {
+ columns: 12;
+}
+
+.columns-2 {
+ columns: 2;
+}
+
+.columns-2xl {
+ columns: 42rem;
+}
+
+.columns-2xs {
+ columns: 18rem;
+}
+
+.columns-3 {
+ columns: 3;
+}
+
+.columns-3xl {
+ columns: 48rem;
+}
+
+.columns-3xs {
+ columns: 16rem;
+}
+
+.columns-4 {
+ columns: 4;
+}
+
+.columns-4xl {
+ columns: 56rem;
+}
+
+.columns-5 {
+ columns: 5;
+}
+
+.columns-5xl {
+ columns: 64rem;
+}
+
+.columns-6 {
+ columns: 6;
+}
+
+.columns-6xl {
+ columns: 72rem;
+}
+
+.columns-7 {
+ columns: 7;
+}
+
+.columns-7xl {
+ columns: 80rem;
+}
+
+.columns-8 {
+ columns: 8;
+}
+
+.columns-9 {
+ columns: 9;
+}
+
+.columns-\\[12\\] {
+ columns: 12;
+}
+
+.columns-\\[var\\(--my-value\\)\\] {
+ columns: var(--my-value);
+}
+
+.columns-auto {
+ columns: auto;
+}
+
+.columns-lg {
+ columns: 32rem;
+}
+
+.columns-md {
+ columns: 28rem;
+}
+
+.columns-sm {
+ columns: 24rem;
+}
+
+.columns-xl {
+ columns: 36rem;
+}
+
+.columns-xs {
+ columns: 20rem;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/container.test.js.snap b/tests/plugins/__snapshots__/container.test.js.snap
new file mode 100644
index 000000000..f9f007fe8
--- /dev/null
+++ b/tests/plugins/__snapshots__/container.test.js.snap
@@ -0,0 +1,39 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'container' plugin 1`] = `
+"
+.container {
+ width: 100%;
+}
+
+@media (min-width: 640px) {
+ .container {
+ max-width: 640px;
+ }
+}
+
+@media (min-width: 768px) {
+ .container {
+ max-width: 768px;
+ }
+}
+
+@media (min-width: 1024px) {
+ .container {
+ max-width: 1024px;
+ }
+}
+
+@media (min-width: 1280px) {
+ .container {
+ max-width: 1280px;
+ }
+}
+
+@media (min-width: 1536px) {
+ .container {
+ max-width: 1536px;
+ }
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/content.test.js.snap b/tests/plugins/__snapshots__/content.test.js.snap
new file mode 100644
index 000000000..1d34f575c
--- /dev/null
+++ b/tests/plugins/__snapshots__/content.test.js.snap
@@ -0,0 +1,20 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'content' plugin 1`] = `
+"
+.content-\\[\\"hello_world\\"\\] {
+ --tw-content: "hello world";
+ content: var(--tw-content);
+}
+
+.content-\\[var\\(--my-value\\)\\] {
+ --tw-content: var(--my-value);
+ content: var(--tw-content);
+}
+
+.content-none {
+ --tw-content: none;
+ content: var(--tw-content);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/contrast.test.js.snap b/tests/plugins/__snapshots__/contrast.test.js.snap
new file mode 100644
index 000000000..1e7416d82
--- /dev/null
+++ b/tests/plugins/__snapshots__/contrast.test.js.snap
@@ -0,0 +1,50 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'contrast' plugin 1`] = `
+"
+.contrast-0 {
+ --tw-contrast: contrast(0);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.contrast-100 {
+ --tw-contrast: contrast(1);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.contrast-125 {
+ --tw-contrast: contrast(1.25);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.contrast-150 {
+ --tw-contrast: contrast(1.5);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.contrast-200 {
+ --tw-contrast: contrast(2);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.contrast-50 {
+ --tw-contrast: contrast(.5);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.contrast-75 {
+ --tw-contrast: contrast(.75);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.contrast-\\[\\.12\\] {
+ --tw-contrast: contrast(.12);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.contrast-\\[var\\(--my-value\\)\\] {
+ --tw-contrast: contrast(var(--my-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/cursor.test.js.snap b/tests/plugins/__snapshots__/cursor.test.js.snap
new file mode 100644
index 000000000..f2fd9c4a0
--- /dev/null
+++ b/tests/plugins/__snapshots__/cursor.test.js.snap
@@ -0,0 +1,157 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'cursor' plugin 1`] = `
+"
+.cursor-\\[url\\(\\/images\\/cursor\\.png\\)\\] {
+ cursor: url("/images/cursor.png");
+}
+
+.cursor-\\[var\\(--my-value\\)\\] {
+ cursor: var(--my-value);
+}
+
+.cursor-alias {
+ cursor: alias;
+}
+
+.cursor-all-scroll {
+ cursor: all-scroll;
+}
+
+.cursor-auto {
+ cursor: auto;
+}
+
+.cursor-cell {
+ cursor: cell;
+}
+
+.cursor-col-resize {
+ cursor: col-resize;
+}
+
+.cursor-context-menu {
+ cursor: context-menu;
+}
+
+.cursor-copy {
+ cursor: copy;
+}
+
+.cursor-crosshair {
+ cursor: crosshair;
+}
+
+.cursor-default {
+ cursor: default;
+}
+
+.cursor-e-resize {
+ cursor: e-resize;
+}
+
+.cursor-ew-resize {
+ cursor: ew-resize;
+}
+
+.cursor-grab {
+ cursor: grab;
+}
+
+.cursor-grabbing {
+ cursor: grabbing;
+}
+
+.cursor-help {
+ cursor: help;
+}
+
+.cursor-move {
+ cursor: move;
+}
+
+.cursor-n-resize {
+ cursor: n-resize;
+}
+
+.cursor-ne-resize {
+ cursor: ne-resize;
+}
+
+.cursor-nesw-resize {
+ cursor: nesw-resize;
+}
+
+.cursor-no-drop {
+ cursor: no-drop;
+}
+
+.cursor-none {
+ cursor: none;
+}
+
+.cursor-not-allowed {
+ cursor: not-allowed;
+}
+
+.cursor-ns-resize {
+ cursor: ns-resize;
+}
+
+.cursor-nw-resize {
+ cursor: nw-resize;
+}
+
+.cursor-nwse-resize {
+ cursor: nwse-resize;
+}
+
+.cursor-pointer {
+ cursor: pointer;
+}
+
+.cursor-progress {
+ cursor: progress;
+}
+
+.cursor-row-resize {
+ cursor: row-resize;
+}
+
+.cursor-s-resize {
+ cursor: s-resize;
+}
+
+.cursor-se-resize {
+ cursor: se-resize;
+}
+
+.cursor-sw-resize {
+ cursor: sw-resize;
+}
+
+.cursor-text {
+ cursor: text;
+}
+
+.cursor-vertical-text {
+ cursor: vertical-text;
+}
+
+.cursor-w-resize {
+ cursor: w-resize;
+}
+
+.cursor-wait {
+ cursor: wait;
+}
+
+.cursor-zoom-in {
+ cursor: zoom-in;
+}
+
+.cursor-zoom-out {
+ cursor: zoom-out;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/display.test.js.snap b/tests/plugins/__snapshots__/display.test.js.snap
new file mode 100644
index 000000000..7c2964646
--- /dev/null
+++ b/tests/plugins/__snapshots__/display.test.js.snap
@@ -0,0 +1,89 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'display' plugin 1`] = `
+"
+.block {
+ display: block;
+}
+
+.inline-block {
+ display: inline-block;
+}
+
+.inline {
+ display: inline;
+}
+
+.flex {
+ display: flex;
+}
+
+.inline-flex {
+ display: inline-flex;
+}
+
+.table {
+ display: table;
+}
+
+.inline-table {
+ display: inline-table;
+}
+
+.table-caption {
+ display: table-caption;
+}
+
+.table-cell {
+ display: table-cell;
+}
+
+.table-column {
+ display: table-column;
+}
+
+.table-column-group {
+ display: table-column-group;
+}
+
+.table-footer-group {
+ display: table-footer-group;
+}
+
+.table-header-group {
+ display: table-header-group;
+}
+
+.table-row-group {
+ display: table-row-group;
+}
+
+.table-row {
+ display: table-row;
+}
+
+.flow-root {
+ display: flow-root;
+}
+
+.grid {
+ display: grid;
+}
+
+.inline-grid {
+ display: inline-grid;
+}
+
+.contents {
+ display: contents;
+}
+
+.list-item {
+ display: list-item;
+}
+
+.hidden {
+ display: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/divideColor.test.js.snap b/tests/plugins/__snapshots__/divideColor.test.js.snap
new file mode 100644
index 000000000..8c462c022
--- /dev/null
+++ b/tests/plugins/__snapshots__/divideColor.test.js.snap
@@ -0,0 +1,429 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'divideColor' plugin 1`] = `
+"
+.divide-\\[\\#0088cc\\] > :not([hidden]) ~ :not([hidden]) {
+ border-color: #08c;
+}
+
+.divide-\\[var\\(--my-value\\)\\] > :not([hidden]) ~ :not([hidden]) {
+ border-color: var(--my-value);
+}
+
+.divide-black > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000;
+}
+
+.divide-black\\/0 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0000;
+}
+
+.divide-black\\/10 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0000001a;
+}
+
+.divide-black\\/100 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000;
+}
+
+.divide-black\\/15 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #00000026;
+}
+
+.divide-black\\/20 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0003;
+}
+
+.divide-black\\/25 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #00000040;
+}
+
+.divide-black\\/30 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0000004d;
+}
+
+.divide-black\\/35 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #00000059;
+}
+
+.divide-black\\/40 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0006;
+}
+
+.divide-black\\/45 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #00000073;
+}
+
+.divide-black\\/5 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0000000d;
+}
+
+.divide-black\\/50 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #00000080;
+}
+
+.divide-black\\/55 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0000008c;
+}
+
+.divide-black\\/60 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0009;
+}
+
+.divide-black\\/65 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000000a6;
+}
+
+.divide-black\\/70 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000000b3;
+}
+
+.divide-black\\/75 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000000bf;
+}
+
+.divide-black\\/80 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000c;
+}
+
+.divide-black\\/85 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000000d9;
+}
+
+.divide-black\\/90 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000000e6;
+}
+
+.divide-black\\/95 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000000f2;
+}
+
+.divide-red-100 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e2;
+}
+
+.divide-red-100\\/0 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e200;
+}
+
+.divide-red-100\\/10 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e21a;
+}
+
+.divide-red-100\\/100 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e2;
+}
+
+.divide-red-100\\/15 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e226;
+}
+
+.divide-red-100\\/20 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e233;
+}
+
+.divide-red-100\\/25 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e240;
+}
+
+.divide-red-100\\/30 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e24d;
+}
+
+.divide-red-100\\/35 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e259;
+}
+
+.divide-red-100\\/40 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e266;
+}
+
+.divide-red-100\\/45 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e273;
+}
+
+.divide-red-100\\/5 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e20d;
+}
+
+.divide-red-100\\/50 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e280;
+}
+
+.divide-red-100\\/55 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e28c;
+}
+
+.divide-red-100\\/60 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e299;
+}
+
+.divide-red-100\\/65 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e2a6;
+}
+
+.divide-red-100\\/70 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e2b3;
+}
+
+.divide-red-100\\/75 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e2bf;
+}
+
+.divide-red-100\\/80 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e2cc;
+}
+
+.divide-red-100\\/85 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e2d9;
+}
+
+.divide-red-100\\/90 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e2e6;
+}
+
+.divide-red-100\\/95 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e2f2;
+}
+
+.divide-red-200 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca;
+}
+
+.divide-red-200\\/0 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca00;
+}
+
+.divide-red-200\\/10 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca1a;
+}
+
+.divide-red-200\\/100 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca;
+}
+
+.divide-red-200\\/15 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca26;
+}
+
+.divide-red-200\\/20 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca33;
+}
+
+.divide-red-200\\/25 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca40;
+}
+
+.divide-red-200\\/30 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca4d;
+}
+
+.divide-red-200\\/35 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca59;
+}
+
+.divide-red-200\\/40 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca66;
+}
+
+.divide-red-200\\/45 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca73;
+}
+
+.divide-red-200\\/5 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca0d;
+}
+
+.divide-red-200\\/50 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca80;
+}
+
+.divide-red-200\\/55 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca8c;
+}
+
+.divide-red-200\\/60 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca99;
+}
+
+.divide-red-200\\/65 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecacaa6;
+}
+
+.divide-red-200\\/70 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecacab3;
+}
+
+.divide-red-200\\/75 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecacabf;
+}
+
+.divide-red-200\\/80 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecacacc;
+}
+
+.divide-red-200\\/85 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecacad9;
+}
+
+.divide-red-200\\/90 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecacae6;
+}
+
+.divide-red-200\\/95 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecacaf2;
+}
+
+.divide-transparent > :not([hidden]) ~ :not([hidden]), .divide-transparent\\/0 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0000;
+}
+
+.divide-transparent\\/10 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0000001a;
+}
+
+.divide-transparent\\/100 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000;
+}
+
+.divide-transparent\\/15 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #00000026;
+}
+
+.divide-transparent\\/20 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0003;
+}
+
+.divide-transparent\\/25 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #00000040;
+}
+
+.divide-transparent\\/30 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0000004d;
+}
+
+.divide-transparent\\/35 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #00000059;
+}
+
+.divide-transparent\\/40 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0006;
+}
+
+.divide-transparent\\/45 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #00000073;
+}
+
+.divide-transparent\\/5 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0000000d;
+}
+
+.divide-transparent\\/50 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #00000080;
+}
+
+.divide-transparent\\/55 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0000008c;
+}
+
+.divide-transparent\\/60 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0009;
+}
+
+.divide-transparent\\/65 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000000a6;
+}
+
+.divide-transparent\\/70 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000000b3;
+}
+
+.divide-transparent\\/75 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000000bf;
+}
+
+.divide-transparent\\/80 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000c;
+}
+
+.divide-transparent\\/85 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000000d9;
+}
+
+.divide-transparent\\/90 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000000e6;
+}
+
+.divide-transparent\\/95 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #000000f2;
+}
+"
+`;
+
+exports[`should test the 'divideColor' plugin 2`] = `
+"
+.divide-\\[\\#0088cc\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: 1;
+ border-color: rgb(0 136 204 / var(--tw-divide-opacity));
+}
+
+.divide-\\[var\\(--my-value\\)\\] > :not([hidden]) ~ :not([hidden]) {
+ border-color: var(--my-value);
+}
+
+.divide-black > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: 1;
+ border-color: rgb(0 0 0 / var(--tw-divide-opacity));
+}
+
+.divide-black\\/0 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0000;
+}
+
+.divide-black\\/50 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #00000080;
+}
+
+.divide-red-100 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: 1;
+ border-color: rgb(254 226 226 / var(--tw-divide-opacity));
+}
+
+.divide-red-100\\/0 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e200;
+}
+
+.divide-red-100\\/50 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fee2e280;
+}
+
+.divide-red-200 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: 1;
+ border-color: rgb(254 202 202 / var(--tw-divide-opacity));
+}
+
+.divide-red-200\\/0 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca00;
+}
+
+.divide-red-200\\/50 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #fecaca80;
+}
+
+.divide-transparent > :not([hidden]) ~ :not([hidden]), .divide-transparent\\/0 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #0000;
+}
+
+.divide-transparent\\/50 > :not([hidden]) ~ :not([hidden]) {
+ border-color: #00000080;
+}
+
+.divide-opacity-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: 0;
+}
+
+.divide-opacity-50 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: .5;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/divideOpacity.test.js.snap b/tests/plugins/__snapshots__/divideOpacity.test.js.snap
new file mode 100644
index 000000000..305124afc
--- /dev/null
+++ b/tests/plugins/__snapshots__/divideOpacity.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'divideOpacity' plugin 1`] = `
+"
+.divide-opacity-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: 0;
+}
+
+.divide-opacity-50 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: .5;
+}
+
+.divide-opacity-\\[0\\.12\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: .12;
+}
+
+.divide-opacity-\\[var\\(--my-value\\)\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-opacity: var(--my-value);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/divideStyle.test.js.snap b/tests/plugins/__snapshots__/divideStyle.test.js.snap
new file mode 100644
index 000000000..45ad785ea
--- /dev/null
+++ b/tests/plugins/__snapshots__/divideStyle.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'divideStyle' plugin 1`] = `
+"
+.divide-solid > :not([hidden]) ~ :not([hidden]) {
+ border-style: solid;
+}
+
+.divide-dashed > :not([hidden]) ~ :not([hidden]) {
+ border-style: dashed;
+}
+
+.divide-dotted > :not([hidden]) ~ :not([hidden]) {
+ border-style: dotted;
+}
+
+.divide-double > :not([hidden]) ~ :not([hidden]) {
+ border-style: double;
+}
+
+.divide-none > :not([hidden]) ~ :not([hidden]) {
+ border-style: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/divideWidth.test.js.snap b/tests/plugins/__snapshots__/divideWidth.test.js.snap
new file mode 100644
index 000000000..d4963c347
--- /dev/null
+++ b/tests/plugins/__snapshots__/divideWidth.test.js.snap
@@ -0,0 +1,217 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'divideWidth' plugin 1`] = `
+"
+.divide-x > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-right-width: calc(1px * var(--tw-divide-x-reverse));
+ border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-x-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-right-width: calc(0px * var(--tw-divide-x-reverse));
+ border-left-width: calc(0px * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-x-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-right-width: calc(2px * var(--tw-divide-x-reverse));
+ border-left-width: calc(2px * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-x-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-right-width: calc(4px * var(--tw-divide-x-reverse));
+ border-left-width: calc(4px * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-x-8 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-right-width: calc(8px * var(--tw-divide-x-reverse));
+ border-left-width: calc(8px * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-x-\\[0\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-right-width: calc(0px * var(--tw-divide-x-reverse));
+ border-left-width: calc(0px * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-x-\\[12px\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-right-width: calc(12px * var(--tw-divide-x-reverse));
+ border-left-width: calc(12px * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-x-\\[var\\(--my-value\\)\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-right-width: calc(var(--my-value) * var(--tw-divide-x-reverse));
+ border-left-width: calc(var(--my-value) * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-y > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
+}
+
+.divide-y-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(0px * var(--tw-divide-y-reverse));
+}
+
+.divide-y-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(2px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(2px * var(--tw-divide-y-reverse));
+}
+
+.divide-y-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(4px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(4px * var(--tw-divide-y-reverse));
+}
+
+.divide-y-8 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(8px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(8px * var(--tw-divide-y-reverse));
+}
+
+.divide-y-\\[0\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(0px * var(--tw-divide-y-reverse));
+}
+
+.divide-y-\\[34px\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(34px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(34px * var(--tw-divide-y-reverse));
+}
+
+.divide-y-\\[var\\(--my-value\\)\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(var(--my-value) * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(var(--my-value) * var(--tw-divide-y-reverse));
+}
+
+.divide-y-reverse > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 1;
+}
+
+.divide-x-reverse > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 1;
+}
+"
+`;
+
+exports[`should test the 'divideWidth' plugin 2`] = `
+"
+.divide-x > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-inline-end-width: calc(1px * var(--tw-divide-x-reverse));
+ border-inline-start-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-x-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-inline-end-width: calc(0px * var(--tw-divide-x-reverse));
+ border-inline-start-width: calc(0px * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-x-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-inline-end-width: calc(2px * var(--tw-divide-x-reverse));
+ border-inline-start-width: calc(2px * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-x-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-inline-end-width: calc(4px * var(--tw-divide-x-reverse));
+ border-inline-start-width: calc(4px * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-x-8 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-inline-end-width: calc(8px * var(--tw-divide-x-reverse));
+ border-inline-start-width: calc(8px * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-x-\\[0\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-inline-end-width: calc(0px * var(--tw-divide-x-reverse));
+ border-inline-start-width: calc(0px * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-x-\\[12px\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-inline-end-width: calc(12px * var(--tw-divide-x-reverse));
+ border-inline-start-width: calc(12px * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-x-\\[var\\(--my-value\\)\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-inline-end-width: calc(var(--my-value) * var(--tw-divide-x-reverse));
+ border-inline-start-width: calc(var(--my-value) * calc(1 - var(--tw-divide-x-reverse)));
+}
+
+.divide-y > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
+}
+
+.divide-y-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(0px * var(--tw-divide-y-reverse));
+}
+
+.divide-y-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(2px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(2px * var(--tw-divide-y-reverse));
+}
+
+.divide-y-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(4px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(4px * var(--tw-divide-y-reverse));
+}
+
+.divide-y-8 > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(8px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(8px * var(--tw-divide-y-reverse));
+}
+
+.divide-y-\\[0\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(0px * var(--tw-divide-y-reverse));
+}
+
+.divide-y-\\[34px\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(34px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(34px * var(--tw-divide-y-reverse));
+}
+
+.divide-y-\\[var\\(--my-value\\)\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(var(--my-value) * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(var(--my-value) * var(--tw-divide-y-reverse));
+}
+
+.divide-y-reverse > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 1;
+}
+
+.divide-x-reverse > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 1;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/dropShadow.test.js.snap b/tests/plugins/__snapshots__/dropShadow.test.js.snap
new file mode 100644
index 000000000..bca3108f3
--- /dev/null
+++ b/tests/plugins/__snapshots__/dropShadow.test.js.snap
@@ -0,0 +1,50 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'dropShadow' plugin 1`] = `
+"
+.drop-shadow {
+ --tw-drop-shadow: drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.drop-shadow-2xl {
+ --tw-drop-shadow: drop-shadow(0 25px 25px #00000026);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.drop-shadow-\\[0_1px_2px_\\#0088cc\\] {
+ --tw-drop-shadow: drop-shadow(0 1px 2px #08c);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.drop-shadow-\\[var\\(--my-value\\)\\] {
+ --tw-drop-shadow: drop-shadow(var(--my-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.drop-shadow-lg {
+ --tw-drop-shadow: drop-shadow(0 10px 8px #0000000a) drop-shadow(0 4px 3px #0000001a);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.drop-shadow-md {
+ --tw-drop-shadow: drop-shadow(0 4px 3px #00000012) drop-shadow(0 2px 2px #0000000f);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.drop-shadow-none {
+ --tw-drop-shadow: drop-shadow(0 0 #0000);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.drop-shadow-sm {
+ --tw-drop-shadow: drop-shadow(0 1px 1px #0000000d);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.drop-shadow-xl {
+ --tw-drop-shadow: drop-shadow(0 20px 13px #00000008) drop-shadow(0 8px 5px #00000014);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/fill.test.js.snap b/tests/plugins/__snapshots__/fill.test.js.snap
new file mode 100644
index 000000000..6ef9d3060
--- /dev/null
+++ b/tests/plugins/__snapshots__/fill.test.js.snap
@@ -0,0 +1,61 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'fill' plugin 1`] = `
+"
+.fill-\\[\\#0088cc\\] {
+ fill: #08c;
+}
+
+.fill-\\[var\\(--my-value\\)\\] {
+ fill: var(--my-value);
+}
+
+.fill-black {
+ fill: #000;
+}
+
+.fill-black\\/0 {
+ fill: #0000;
+}
+
+.fill-black\\/50 {
+ fill: #00000080;
+}
+
+.fill-none {
+ fill: none;
+}
+
+.fill-red-100 {
+ fill: #fee2e2;
+}
+
+.fill-red-100\\/0 {
+ fill: #fee2e200;
+}
+
+.fill-red-100\\/50 {
+ fill: #fee2e280;
+}
+
+.fill-red-200 {
+ fill: #fecaca;
+}
+
+.fill-red-200\\/0 {
+ fill: #fecaca00;
+}
+
+.fill-red-200\\/50 {
+ fill: #fecaca80;
+}
+
+.fill-transparent, .fill-transparent\\/0 {
+ fill: #0000;
+}
+
+.fill-transparent\\/50 {
+ fill: #00000080;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/filter.test.js.snap b/tests/plugins/__snapshots__/filter.test.js.snap
new file mode 100644
index 000000000..9abdc658b
--- /dev/null
+++ b/tests/plugins/__snapshots__/filter.test.js.snap
@@ -0,0 +1,37 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'filter' plugin 1`] = `
+"
+*, :before, :after {
+ --tw-blur: ;
+ --tw-brightness: ;
+ --tw-contrast: ;
+ --tw-grayscale: ;
+ --tw-hue-rotate: ;
+ --tw-invert: ;
+ --tw-saturate: ;
+ --tw-sepia: ;
+ --tw-drop-shadow: ;
+}
+
+::backdrop {
+ --tw-blur: ;
+ --tw-brightness: ;
+ --tw-contrast: ;
+ --tw-grayscale: ;
+ --tw-hue-rotate: ;
+ --tw-invert: ;
+ --tw-saturate: ;
+ --tw-sepia: ;
+ --tw-drop-shadow: ;
+}
+
+.filter {
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.filter-none {
+ filter: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/flex.test.js.snap b/tests/plugins/__snapshots__/flex.test.js.snap
new file mode 100644
index 000000000..1be5c5c61
--- /dev/null
+++ b/tests/plugins/__snapshots__/flex.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'flex' plugin 1`] = `
+"
+.flex-1 {
+ flex: 1;
+}
+
+.flex-\\[12_auto\\] {
+ flex: 12 auto;
+}
+
+.flex-\\[var\\(--my-value\\)\\] {
+ flex: var(--my-value);
+}
+
+.flex-auto {
+ flex: auto;
+}
+
+.flex-initial {
+ flex: 0 auto;
+}
+
+.flex-none {
+ flex: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/flexBasis.test.js.snap b/tests/plugins/__snapshots__/flexBasis.test.js.snap
new file mode 100644
index 000000000..f30cee6bc
--- /dev/null
+++ b/tests/plugins/__snapshots__/flexBasis.test.js.snap
@@ -0,0 +1,265 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'flexBasis' plugin 1`] = `
+"
+.basis-0 {
+ flex-basis: 0;
+}
+
+.basis-0\\.5 {
+ flex-basis: .125rem;
+}
+
+.basis-1 {
+ flex-basis: .25rem;
+}
+
+.basis-1\\.5 {
+ flex-basis: .375rem;
+}
+
+.basis-1\\/12 {
+ flex-basis: 8.33333%;
+}
+
+.basis-1\\/2 {
+ flex-basis: 50%;
+}
+
+.basis-1\\/3 {
+ flex-basis: 33.3333%;
+}
+
+.basis-1\\/4 {
+ flex-basis: 25%;
+}
+
+.basis-1\\/5 {
+ flex-basis: 20%;
+}
+
+.basis-1\\/6 {
+ flex-basis: 16.6667%;
+}
+
+.basis-10 {
+ flex-basis: 2.5rem;
+}
+
+.basis-10\\/12 {
+ flex-basis: 83.3333%;
+}
+
+.basis-11 {
+ flex-basis: 2.75rem;
+}
+
+.basis-11\\/12 {
+ flex-basis: 91.6667%;
+}
+
+.basis-12 {
+ flex-basis: 3rem;
+}
+
+.basis-14 {
+ flex-basis: 3.5rem;
+}
+
+.basis-16 {
+ flex-basis: 4rem;
+}
+
+.basis-2 {
+ flex-basis: .5rem;
+}
+
+.basis-2\\.5 {
+ flex-basis: .625rem;
+}
+
+.basis-2\\/12 {
+ flex-basis: 16.6667%;
+}
+
+.basis-2\\/3 {
+ flex-basis: 66.6667%;
+}
+
+.basis-2\\/4 {
+ flex-basis: 50%;
+}
+
+.basis-2\\/5 {
+ flex-basis: 40%;
+}
+
+.basis-2\\/6 {
+ flex-basis: 33.3333%;
+}
+
+.basis-20 {
+ flex-basis: 5rem;
+}
+
+.basis-24 {
+ flex-basis: 6rem;
+}
+
+.basis-28 {
+ flex-basis: 7rem;
+}
+
+.basis-3 {
+ flex-basis: .75rem;
+}
+
+.basis-3\\.5 {
+ flex-basis: .875rem;
+}
+
+.basis-3\\/12 {
+ flex-basis: 25%;
+}
+
+.basis-3\\/4 {
+ flex-basis: 75%;
+}
+
+.basis-3\\/5 {
+ flex-basis: 60%;
+}
+
+.basis-3\\/6 {
+ flex-basis: 50%;
+}
+
+.basis-32 {
+ flex-basis: 8rem;
+}
+
+.basis-36 {
+ flex-basis: 9rem;
+}
+
+.basis-4 {
+ flex-basis: 1rem;
+}
+
+.basis-4\\/12 {
+ flex-basis: 33.3333%;
+}
+
+.basis-4\\/5 {
+ flex-basis: 80%;
+}
+
+.basis-4\\/6 {
+ flex-basis: 66.6667%;
+}
+
+.basis-40 {
+ flex-basis: 10rem;
+}
+
+.basis-44 {
+ flex-basis: 11rem;
+}
+
+.basis-48 {
+ flex-basis: 12rem;
+}
+
+.basis-5 {
+ flex-basis: 1.25rem;
+}
+
+.basis-5\\/12 {
+ flex-basis: 41.6667%;
+}
+
+.basis-5\\/6 {
+ flex-basis: 83.3333%;
+}
+
+.basis-52 {
+ flex-basis: 13rem;
+}
+
+.basis-56 {
+ flex-basis: 14rem;
+}
+
+.basis-6 {
+ flex-basis: 1.5rem;
+}
+
+.basis-6\\/12 {
+ flex-basis: 50%;
+}
+
+.basis-60 {
+ flex-basis: 15rem;
+}
+
+.basis-64 {
+ flex-basis: 16rem;
+}
+
+.basis-7 {
+ flex-basis: 1.75rem;
+}
+
+.basis-7\\/12 {
+ flex-basis: 58.3333%;
+}
+
+.basis-72 {
+ flex-basis: 18rem;
+}
+
+.basis-8 {
+ flex-basis: 2rem;
+}
+
+.basis-8\\/12 {
+ flex-basis: 66.6667%;
+}
+
+.basis-80 {
+ flex-basis: 20rem;
+}
+
+.basis-9 {
+ flex-basis: 2.25rem;
+}
+
+.basis-9\\/12 {
+ flex-basis: 75%;
+}
+
+.basis-96 {
+ flex-basis: 24rem;
+}
+
+.basis-\\[12px\\] {
+ flex-basis: 12px;
+}
+
+.basis-\\[var\\(--my-value\\)\\] {
+ flex-basis: var(--my-value);
+}
+
+.basis-auto {
+ flex-basis: auto;
+}
+
+.basis-full {
+ flex-basis: 100%;
+}
+
+.basis-px {
+ flex-basis: 1px;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/flexDirection.test.js.snap b/tests/plugins/__snapshots__/flexDirection.test.js.snap
new file mode 100644
index 000000000..3f5307b37
--- /dev/null
+++ b/tests/plugins/__snapshots__/flexDirection.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'flexDirection' plugin 1`] = `
+"
+.flex-row {
+ flex-direction: row;
+}
+
+.flex-row-reverse {
+ flex-direction: row-reverse;
+}
+
+.flex-col {
+ flex-direction: column;
+}
+
+.flex-col-reverse {
+ flex-direction: column-reverse;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/flexGrow.test.js.snap b/tests/plugins/__snapshots__/flexGrow.test.js.snap
new file mode 100644
index 000000000..cb59d83af
--- /dev/null
+++ b/tests/plugins/__snapshots__/flexGrow.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'flexGrow' plugin 1`] = `
+"
+.flex-grow {
+ flex-grow: 1;
+}
+
+.flex-grow-0 {
+ flex-grow: 0;
+}
+
+.grow {
+ flex-grow: 1;
+}
+
+.grow-0 {
+ flex-grow: 0;
+}
+
+.grow-\\[12\\] {
+ flex-grow: 12;
+}
+
+.grow-\\[var\\(--my-value\\)\\] {
+ flex-grow: var(--my-value);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/flexShrink.test.js.snap b/tests/plugins/__snapshots__/flexShrink.test.js.snap
new file mode 100644
index 000000000..295181155
--- /dev/null
+++ b/tests/plugins/__snapshots__/flexShrink.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'flexShrink' plugin 1`] = `
+"
+.flex-shrink {
+ flex-shrink: 1;
+}
+
+.flex-shrink-0 {
+ flex-shrink: 0;
+}
+
+.shrink {
+ flex-shrink: 1;
+}
+
+.shrink-0 {
+ flex-shrink: 0;
+}
+
+.shrink-\\[12\\] {
+ flex-shrink: 12;
+}
+
+.shrink-\\[var\\(--my-value\\)\\] {
+ flex-shrink: var(--my-value);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/flexWrap.test.js.snap b/tests/plugins/__snapshots__/flexWrap.test.js.snap
new file mode 100644
index 000000000..5a8c532c0
--- /dev/null
+++ b/tests/plugins/__snapshots__/flexWrap.test.js.snap
@@ -0,0 +1,17 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'flexWrap' plugin 1`] = `
+"
+.flex-wrap {
+ flex-wrap: wrap;
+}
+
+.flex-wrap-reverse {
+ flex-wrap: wrap-reverse;
+}
+
+.flex-nowrap {
+ flex-wrap: nowrap;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/float.test.js.snap b/tests/plugins/__snapshots__/float.test.js.snap
new file mode 100644
index 000000000..c8e1b2328
--- /dev/null
+++ b/tests/plugins/__snapshots__/float.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'float' plugin 1`] = `
+"
+.float-start {
+ float: inline-start;
+}
+
+.float-end {
+ float: inline-end;
+}
+
+.float-right {
+ float: right;
+}
+
+.float-left {
+ float: left;
+}
+
+.float-none {
+ float: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/fontFamily.test.js.snap b/tests/plugins/__snapshots__/fontFamily.test.js.snap
new file mode 100644
index 000000000..f27f38787
--- /dev/null
+++ b/tests/plugins/__snapshots__/fontFamily.test.js.snap
@@ -0,0 +1,17 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'fontFamily' plugin 1`] = `
+"
+.font-mono {
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;
+}
+
+.font-sans {
+ font-family: ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;
+}
+
+.font-serif {
+ font-family: ui-serif, Georgia, Cambria, Times New Roman, Times, serif;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/fontSize.test.js.snap b/tests/plugins/__snapshots__/fontSize.test.js.snap
new file mode 100644
index 000000000..b987fb31d
--- /dev/null
+++ b/tests/plugins/__snapshots__/fontSize.test.js.snap
@@ -0,0 +1,70 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'fontSize' plugin 1`] = `
+"
+.text-2xl {
+ font-size: 1.5rem;
+ line-height: 2rem;
+}
+
+.text-3xl {
+ font-size: 1.875rem;
+ line-height: 2.25rem;
+}
+
+.text-4xl {
+ font-size: 2.25rem;
+ line-height: 2.5rem;
+}
+
+.text-5xl {
+ font-size: 3rem;
+ line-height: 1;
+}
+
+.text-6xl {
+ font-size: 3.75rem;
+ line-height: 1;
+}
+
+.text-7xl {
+ font-size: 4.5rem;
+ line-height: 1;
+}
+
+.text-8xl {
+ font-size: 6rem;
+ line-height: 1;
+}
+
+.text-9xl {
+ font-size: 8rem;
+ line-height: 1;
+}
+
+.text-base {
+ font-size: 1rem;
+ line-height: 1.5rem;
+}
+
+.text-lg {
+ font-size: 1.125rem;
+ line-height: 1.75rem;
+}
+
+.text-sm {
+ font-size: .875rem;
+ line-height: 1.25rem;
+}
+
+.text-xl {
+ font-size: 1.25rem;
+ line-height: 1.75rem;
+}
+
+.text-xs {
+ font-size: .75rem;
+ line-height: 1rem;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/fontSmoothing.test.js.snap b/tests/plugins/__snapshots__/fontSmoothing.test.js.snap
new file mode 100644
index 000000000..4920af4ec
--- /dev/null
+++ b/tests/plugins/__snapshots__/fontSmoothing.test.js.snap
@@ -0,0 +1,15 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'fontSmoothing' plugin 1`] = `
+"
+.antialiased {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.subpixel-antialiased {
+ -webkit-font-smoothing: auto;
+ -moz-osx-font-smoothing: auto;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/fontStyle.test.js.snap b/tests/plugins/__snapshots__/fontStyle.test.js.snap
new file mode 100644
index 000000000..098117e87
--- /dev/null
+++ b/tests/plugins/__snapshots__/fontStyle.test.js.snap
@@ -0,0 +1,13 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'fontStyle' plugin 1`] = `
+"
+.italic {
+ font-style: italic;
+}
+
+.not-italic {
+ font-style: normal;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/fontVariantNumeric.test.js.snap b/tests/plugins/__snapshots__/fontVariantNumeric.test.js.snap
new file mode 100644
index 000000000..dcacc9a1a
--- /dev/null
+++ b/tests/plugins/__snapshots__/fontVariantNumeric.test.js.snap
@@ -0,0 +1,65 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'fontVariantNumeric' plugin 1`] = `
+"
+*, :before, :after {
+ --tw-ordinal: ;
+ --tw-slashed-zero: ;
+ --tw-numeric-figure: ;
+ --tw-numeric-spacing: ;
+ --tw-numeric-fraction: ;
+}
+
+::backdrop {
+ --tw-ordinal: ;
+ --tw-slashed-zero: ;
+ --tw-numeric-figure: ;
+ --tw-numeric-spacing: ;
+ --tw-numeric-fraction: ;
+}
+
+.normal-nums {
+ font-variant-numeric: normal;
+}
+
+.ordinal {
+ --tw-ordinal: ordinal;
+ font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
+}
+
+.slashed-zero {
+ --tw-slashed-zero: slashed-zero;
+ font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
+}
+
+.lining-nums {
+ --tw-numeric-figure: lining-nums;
+ font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
+}
+
+.oldstyle-nums {
+ --tw-numeric-figure: oldstyle-nums;
+ font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
+}
+
+.proportional-nums {
+ --tw-numeric-spacing: proportional-nums;
+ font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
+}
+
+.tabular-nums {
+ --tw-numeric-spacing: tabular-nums;
+ font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
+}
+
+.diagonal-fractions {
+ --tw-numeric-fraction: diagonal-fractions;
+ font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
+}
+
+.stacked-fractions {
+ --tw-numeric-fraction: stacked-fractions;
+ font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/fontWeight.test.js.snap b/tests/plugins/__snapshots__/fontWeight.test.js.snap
new file mode 100644
index 000000000..e298ff22b
--- /dev/null
+++ b/tests/plugins/__snapshots__/fontWeight.test.js.snap
@@ -0,0 +1,53 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'fontWeight' plugin 1`] = `
+"
+.font-\\[650\\] {
+ font-weight: 650;
+}
+
+.font-\\[bold\\] {
+ font-weight: bold;
+}
+
+.font-\\[var\\(--my-value\\)\\] {
+ font-weight: var(--my-value);
+}
+
+.font-black {
+ font-weight: 900;
+}
+
+.font-bold {
+ font-weight: 700;
+}
+
+.font-extrabold {
+ font-weight: 800;
+}
+
+.font-extralight {
+ font-weight: 200;
+}
+
+.font-light {
+ font-weight: 300;
+}
+
+.font-medium {
+ font-weight: 500;
+}
+
+.font-normal {
+ font-weight: 400;
+}
+
+.font-semibold {
+ font-weight: 600;
+}
+
+.font-thin {
+ font-weight: 100;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/forcedColorAdjust.test.js.snap b/tests/plugins/__snapshots__/forcedColorAdjust.test.js.snap
new file mode 100644
index 000000000..b81fd812d
--- /dev/null
+++ b/tests/plugins/__snapshots__/forcedColorAdjust.test.js.snap
@@ -0,0 +1,13 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'forcedColorAdjust' plugin 1`] = `
+"
+.forced-color-adjust-auto {
+ forced-color-adjust: auto;
+}
+
+.forced-color-adjust-none {
+ forced-color-adjust: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/gap.test.js.snap b/tests/plugins/__snapshots__/gap.test.js.snap
new file mode 100644
index 000000000..25cf04c9e
--- /dev/null
+++ b/tests/plugins/__snapshots__/gap.test.js.snap
@@ -0,0 +1,449 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'gap' plugin 1`] = `
+"
+.gap-0 {
+ gap: 0;
+}
+
+.gap-0\\.5 {
+ gap: .125rem;
+}
+
+.gap-1 {
+ gap: .25rem;
+}
+
+.gap-1\\.5 {
+ gap: .375rem;
+}
+
+.gap-10 {
+ gap: 2.5rem;
+}
+
+.gap-11 {
+ gap: 2.75rem;
+}
+
+.gap-12 {
+ gap: 3rem;
+}
+
+.gap-14 {
+ gap: 3.5rem;
+}
+
+.gap-16 {
+ gap: 4rem;
+}
+
+.gap-2 {
+ gap: .5rem;
+}
+
+.gap-2\\.5 {
+ gap: .625rem;
+}
+
+.gap-20 {
+ gap: 5rem;
+}
+
+.gap-24 {
+ gap: 6rem;
+}
+
+.gap-28 {
+ gap: 7rem;
+}
+
+.gap-3 {
+ gap: .75rem;
+}
+
+.gap-3\\.5 {
+ gap: .875rem;
+}
+
+.gap-32 {
+ gap: 8rem;
+}
+
+.gap-36 {
+ gap: 9rem;
+}
+
+.gap-4 {
+ gap: 1rem;
+}
+
+.gap-40 {
+ gap: 10rem;
+}
+
+.gap-44 {
+ gap: 11rem;
+}
+
+.gap-48 {
+ gap: 12rem;
+}
+
+.gap-5 {
+ gap: 1.25rem;
+}
+
+.gap-52 {
+ gap: 13rem;
+}
+
+.gap-56 {
+ gap: 14rem;
+}
+
+.gap-6 {
+ gap: 1.5rem;
+}
+
+.gap-60 {
+ gap: 15rem;
+}
+
+.gap-64 {
+ gap: 16rem;
+}
+
+.gap-7 {
+ gap: 1.75rem;
+}
+
+.gap-72 {
+ gap: 18rem;
+}
+
+.gap-8 {
+ gap: 2rem;
+}
+
+.gap-80 {
+ gap: 20rem;
+}
+
+.gap-9 {
+ gap: 2.25rem;
+}
+
+.gap-96 {
+ gap: 24rem;
+}
+
+.gap-\\[12px\\] {
+ gap: 12px;
+}
+
+.gap-\\[var\\(--my-value\\)\\] {
+ gap: var(--my-value);
+}
+
+.gap-px {
+ gap: 1px;
+}
+
+.gap-x-0 {
+ column-gap: 0;
+}
+
+.gap-x-0\\.5 {
+ column-gap: .125rem;
+}
+
+.gap-x-1 {
+ column-gap: .25rem;
+}
+
+.gap-x-1\\.5 {
+ column-gap: .375rem;
+}
+
+.gap-x-10 {
+ column-gap: 2.5rem;
+}
+
+.gap-x-11 {
+ column-gap: 2.75rem;
+}
+
+.gap-x-12 {
+ column-gap: 3rem;
+}
+
+.gap-x-14 {
+ column-gap: 3.5rem;
+}
+
+.gap-x-16 {
+ column-gap: 4rem;
+}
+
+.gap-x-2 {
+ column-gap: .5rem;
+}
+
+.gap-x-2\\.5 {
+ column-gap: .625rem;
+}
+
+.gap-x-20 {
+ column-gap: 5rem;
+}
+
+.gap-x-24 {
+ column-gap: 6rem;
+}
+
+.gap-x-28 {
+ column-gap: 7rem;
+}
+
+.gap-x-3 {
+ column-gap: .75rem;
+}
+
+.gap-x-3\\.5 {
+ column-gap: .875rem;
+}
+
+.gap-x-32 {
+ column-gap: 8rem;
+}
+
+.gap-x-36 {
+ column-gap: 9rem;
+}
+
+.gap-x-4 {
+ column-gap: 1rem;
+}
+
+.gap-x-40 {
+ column-gap: 10rem;
+}
+
+.gap-x-44 {
+ column-gap: 11rem;
+}
+
+.gap-x-48 {
+ column-gap: 12rem;
+}
+
+.gap-x-5 {
+ column-gap: 1.25rem;
+}
+
+.gap-x-52 {
+ column-gap: 13rem;
+}
+
+.gap-x-56 {
+ column-gap: 14rem;
+}
+
+.gap-x-6 {
+ column-gap: 1.5rem;
+}
+
+.gap-x-60 {
+ column-gap: 15rem;
+}
+
+.gap-x-64 {
+ column-gap: 16rem;
+}
+
+.gap-x-7 {
+ column-gap: 1.75rem;
+}
+
+.gap-x-72 {
+ column-gap: 18rem;
+}
+
+.gap-x-8 {
+ column-gap: 2rem;
+}
+
+.gap-x-80 {
+ column-gap: 20rem;
+}
+
+.gap-x-9 {
+ column-gap: 2.25rem;
+}
+
+.gap-x-96 {
+ column-gap: 24rem;
+}
+
+.gap-x-\\[34px\\] {
+ column-gap: 34px;
+}
+
+.gap-x-\\[var\\(--my-value\\)\\] {
+ column-gap: var(--my-value);
+}
+
+.gap-x-px {
+ column-gap: 1px;
+}
+
+.gap-y-0 {
+ row-gap: 0;
+}
+
+.gap-y-0\\.5 {
+ row-gap: .125rem;
+}
+
+.gap-y-1 {
+ row-gap: .25rem;
+}
+
+.gap-y-1\\.5 {
+ row-gap: .375rem;
+}
+
+.gap-y-10 {
+ row-gap: 2.5rem;
+}
+
+.gap-y-11 {
+ row-gap: 2.75rem;
+}
+
+.gap-y-12 {
+ row-gap: 3rem;
+}
+
+.gap-y-14 {
+ row-gap: 3.5rem;
+}
+
+.gap-y-16 {
+ row-gap: 4rem;
+}
+
+.gap-y-2 {
+ row-gap: .5rem;
+}
+
+.gap-y-2\\.5 {
+ row-gap: .625rem;
+}
+
+.gap-y-20 {
+ row-gap: 5rem;
+}
+
+.gap-y-24 {
+ row-gap: 6rem;
+}
+
+.gap-y-28 {
+ row-gap: 7rem;
+}
+
+.gap-y-3 {
+ row-gap: .75rem;
+}
+
+.gap-y-3\\.5 {
+ row-gap: .875rem;
+}
+
+.gap-y-32 {
+ row-gap: 8rem;
+}
+
+.gap-y-36 {
+ row-gap: 9rem;
+}
+
+.gap-y-4 {
+ row-gap: 1rem;
+}
+
+.gap-y-40 {
+ row-gap: 10rem;
+}
+
+.gap-y-44 {
+ row-gap: 11rem;
+}
+
+.gap-y-48 {
+ row-gap: 12rem;
+}
+
+.gap-y-5 {
+ row-gap: 1.25rem;
+}
+
+.gap-y-52 {
+ row-gap: 13rem;
+}
+
+.gap-y-56 {
+ row-gap: 14rem;
+}
+
+.gap-y-6 {
+ row-gap: 1.5rem;
+}
+
+.gap-y-60 {
+ row-gap: 15rem;
+}
+
+.gap-y-64 {
+ row-gap: 16rem;
+}
+
+.gap-y-7 {
+ row-gap: 1.75rem;
+}
+
+.gap-y-72 {
+ row-gap: 18rem;
+}
+
+.gap-y-8 {
+ row-gap: 2rem;
+}
+
+.gap-y-80 {
+ row-gap: 20rem;
+}
+
+.gap-y-9 {
+ row-gap: 2.25rem;
+}
+
+.gap-y-96 {
+ row-gap: 24rem;
+}
+
+.gap-y-\\[56px\\] {
+ row-gap: 56px;
+}
+
+.gap-y-\\[var\\(--my-value\\)\\] {
+ row-gap: var(--my-value);
+}
+
+.gap-y-px {
+ row-gap: 1px;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/grayscale.test.js.snap b/tests/plugins/__snapshots__/grayscale.test.js.snap
new file mode 100644
index 000000000..286716a44
--- /dev/null
+++ b/tests/plugins/__snapshots__/grayscale.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'grayscale' plugin 1`] = `
+"
+.grayscale {
+ --tw-grayscale: grayscale(100%);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.grayscale-0 {
+ --tw-grayscale: grayscale(0);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.grayscale-\\[50\\%\\] {
+ --tw-grayscale: grayscale(50%);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.grayscale-\\[var\\(--my-value\\)\\] {
+ --tw-grayscale: grayscale(var(--my-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/gridAutoColumns.test.js.snap b/tests/plugins/__snapshots__/gridAutoColumns.test.js.snap
new file mode 100644
index 000000000..af64bf473
--- /dev/null
+++ b/tests/plugins/__snapshots__/gridAutoColumns.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'gridAutoColumns' plugin 1`] = `
+"
+.auto-cols-\\[12px\\] {
+ grid-auto-columns: 12px;
+}
+
+.auto-cols-\\[var\\(--my-value\\)\\] {
+ grid-auto-columns: var(--my-value);
+}
+
+.auto-cols-auto {
+ grid-auto-columns: auto;
+}
+
+.auto-cols-fr {
+ grid-auto-columns: minmax(0, 1fr);
+}
+
+.auto-cols-max {
+ grid-auto-columns: max-content;
+}
+
+.auto-cols-min {
+ grid-auto-columns: min-content;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/gridAutoFlow.test.js.snap b/tests/plugins/__snapshots__/gridAutoFlow.test.js.snap
new file mode 100644
index 000000000..5351e4b2e
--- /dev/null
+++ b/tests/plugins/__snapshots__/gridAutoFlow.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'gridAutoFlow' plugin 1`] = `
+"
+.grid-flow-row {
+ grid-auto-flow: row;
+}
+
+.grid-flow-col {
+ grid-auto-flow: column;
+}
+
+.grid-flow-dense {
+ grid-auto-flow: dense;
+}
+
+.grid-flow-row-dense {
+ grid-auto-flow: row dense;
+}
+
+.grid-flow-col-dense {
+ grid-auto-flow: column dense;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/gridAutoRows.test.js.snap b/tests/plugins/__snapshots__/gridAutoRows.test.js.snap
new file mode 100644
index 000000000..7ba3fe089
--- /dev/null
+++ b/tests/plugins/__snapshots__/gridAutoRows.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'gridAutoRows' plugin 1`] = `
+"
+.auto-rows-\\[12px\\] {
+ grid-auto-rows: 12px;
+}
+
+.auto-rows-\\[var\\(--my-value\\)\\] {
+ grid-auto-rows: var(--my-value);
+}
+
+.auto-rows-auto {
+ grid-auto-rows: auto;
+}
+
+.auto-rows-fr {
+ grid-auto-rows: minmax(0, 1fr);
+}
+
+.auto-rows-max {
+ grid-auto-rows: max-content;
+}
+
+.auto-rows-min {
+ grid-auto-rows: min-content;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/gridColumn.test.js.snap b/tests/plugins/__snapshots__/gridColumn.test.js.snap
new file mode 100644
index 000000000..f8ee821ff
--- /dev/null
+++ b/tests/plugins/__snapshots__/gridColumn.test.js.snap
@@ -0,0 +1,69 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'gridColumn' plugin 1`] = `
+"
+.col-\\[span_1_\\/_span_1\\] {
+ grid-column: span 1 / span 1;
+}
+
+.col-\\[var\\(--my-value\\)\\] {
+ grid-column: var(--my-value);
+}
+
+.col-auto {
+ grid-column: auto;
+}
+
+.col-span-1 {
+ grid-column: span 1 / span 1;
+}
+
+.col-span-10 {
+ grid-column: span 10 / span 10;
+}
+
+.col-span-11 {
+ grid-column: span 11 / span 11;
+}
+
+.col-span-12 {
+ grid-column: span 12 / span 12;
+}
+
+.col-span-2 {
+ grid-column: span 2 / span 2;
+}
+
+.col-span-3 {
+ grid-column: span 3 / span 3;
+}
+
+.col-span-4 {
+ grid-column: span 4 / span 4;
+}
+
+.col-span-5 {
+ grid-column: span 5 / span 5;
+}
+
+.col-span-6 {
+ grid-column: span 6 / span 6;
+}
+
+.col-span-7 {
+ grid-column: span 7 / span 7;
+}
+
+.col-span-8 {
+ grid-column: span 8 / span 8;
+}
+
+.col-span-9 {
+ grid-column: span 9 / span 9;
+}
+
+.col-span-full {
+ grid-column: 1 / -1;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/gridColumnEnd.test.js.snap b/tests/plugins/__snapshots__/gridColumnEnd.test.js.snap
new file mode 100644
index 000000000..31254d86b
--- /dev/null
+++ b/tests/plugins/__snapshots__/gridColumnEnd.test.js.snap
@@ -0,0 +1,69 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'gridColumnEnd' plugin 1`] = `
+"
+.col-end-1 {
+ grid-column-end: 1;
+}
+
+.col-end-10 {
+ grid-column-end: 10;
+}
+
+.col-end-11 {
+ grid-column-end: 11;
+}
+
+.col-end-12 {
+ grid-column-end: 12;
+}
+
+.col-end-13 {
+ grid-column-end: 13;
+}
+
+.col-end-2 {
+ grid-column-end: 2;
+}
+
+.col-end-3 {
+ grid-column-end: 3;
+}
+
+.col-end-4 {
+ grid-column-end: 4;
+}
+
+.col-end-5 {
+ grid-column-end: 5;
+}
+
+.col-end-6 {
+ grid-column-end: 6;
+}
+
+.col-end-7 {
+ grid-column-end: 7;
+}
+
+.col-end-8 {
+ grid-column-end: 8;
+}
+
+.col-end-9 {
+ grid-column-end: 9;
+}
+
+.col-end-\\[123\\] {
+ grid-column-end: 123;
+}
+
+.col-end-\\[var\\(--my-value\\)\\] {
+ grid-column-end: var(--my-value);
+}
+
+.col-end-auto {
+ grid-column-end: auto;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/gridColumnStart.test.js.snap b/tests/plugins/__snapshots__/gridColumnStart.test.js.snap
new file mode 100644
index 000000000..d4a21a889
--- /dev/null
+++ b/tests/plugins/__snapshots__/gridColumnStart.test.js.snap
@@ -0,0 +1,69 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'gridColumnStart' plugin 1`] = `
+"
+.col-start-1 {
+ grid-column-start: 1;
+}
+
+.col-start-10 {
+ grid-column-start: 10;
+}
+
+.col-start-11 {
+ grid-column-start: 11;
+}
+
+.col-start-12 {
+ grid-column-start: 12;
+}
+
+.col-start-13 {
+ grid-column-start: 13;
+}
+
+.col-start-2 {
+ grid-column-start: 2;
+}
+
+.col-start-3 {
+ grid-column-start: 3;
+}
+
+.col-start-4 {
+ grid-column-start: 4;
+}
+
+.col-start-5 {
+ grid-column-start: 5;
+}
+
+.col-start-6 {
+ grid-column-start: 6;
+}
+
+.col-start-7 {
+ grid-column-start: 7;
+}
+
+.col-start-8 {
+ grid-column-start: 8;
+}
+
+.col-start-9 {
+ grid-column-start: 9;
+}
+
+.col-start-\\[123\\] {
+ grid-column-start: 123;
+}
+
+.col-start-\\[var\\(--my-value\\)\\] {
+ grid-column-start: var(--my-value);
+}
+
+.col-start-auto {
+ grid-column-start: auto;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/gridRow.test.js.snap b/tests/plugins/__snapshots__/gridRow.test.js.snap
new file mode 100644
index 000000000..c4db06410
--- /dev/null
+++ b/tests/plugins/__snapshots__/gridRow.test.js.snap
@@ -0,0 +1,69 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'gridRow' plugin 1`] = `
+"
+.row-\\[span_1_\\/_span_1\\] {
+ grid-row: span 1 / span 1;
+}
+
+.row-\\[var\\(--my-value\\)\\] {
+ grid-row: var(--my-value);
+}
+
+.row-auto {
+ grid-row: auto;
+}
+
+.row-span-1 {
+ grid-row: span 1 / span 1;
+}
+
+.row-span-10 {
+ grid-row: span 10 / span 10;
+}
+
+.row-span-11 {
+ grid-row: span 11 / span 11;
+}
+
+.row-span-12 {
+ grid-row: span 12 / span 12;
+}
+
+.row-span-2 {
+ grid-row: span 2 / span 2;
+}
+
+.row-span-3 {
+ grid-row: span 3 / span 3;
+}
+
+.row-span-4 {
+ grid-row: span 4 / span 4;
+}
+
+.row-span-5 {
+ grid-row: span 5 / span 5;
+}
+
+.row-span-6 {
+ grid-row: span 6 / span 6;
+}
+
+.row-span-7 {
+ grid-row: span 7 / span 7;
+}
+
+.row-span-8 {
+ grid-row: span 8 / span 8;
+}
+
+.row-span-9 {
+ grid-row: span 9 / span 9;
+}
+
+.row-span-full {
+ grid-row: 1 / -1;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/gridRowEnd.test.js.snap b/tests/plugins/__snapshots__/gridRowEnd.test.js.snap
new file mode 100644
index 000000000..b1bd3f885
--- /dev/null
+++ b/tests/plugins/__snapshots__/gridRowEnd.test.js.snap
@@ -0,0 +1,69 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'gridRowEnd' plugin 1`] = `
+"
+.row-end-1 {
+ grid-row-end: 1;
+}
+
+.row-end-10 {
+ grid-row-end: 10;
+}
+
+.row-end-11 {
+ grid-row-end: 11;
+}
+
+.row-end-12 {
+ grid-row-end: 12;
+}
+
+.row-end-13 {
+ grid-row-end: 13;
+}
+
+.row-end-2 {
+ grid-row-end: 2;
+}
+
+.row-end-3 {
+ grid-row-end: 3;
+}
+
+.row-end-4 {
+ grid-row-end: 4;
+}
+
+.row-end-5 {
+ grid-row-end: 5;
+}
+
+.row-end-6 {
+ grid-row-end: 6;
+}
+
+.row-end-7 {
+ grid-row-end: 7;
+}
+
+.row-end-8 {
+ grid-row-end: 8;
+}
+
+.row-end-9 {
+ grid-row-end: 9;
+}
+
+.row-end-\\[123\\] {
+ grid-row-end: 123;
+}
+
+.row-end-\\[var\\(--my-value\\)\\] {
+ grid-row-end: var(--my-value);
+}
+
+.row-end-auto {
+ grid-row-end: auto;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/gridRowStart.test.js.snap b/tests/plugins/__snapshots__/gridRowStart.test.js.snap
new file mode 100644
index 000000000..c84bff0f0
--- /dev/null
+++ b/tests/plugins/__snapshots__/gridRowStart.test.js.snap
@@ -0,0 +1,69 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'gridRowStart' plugin 1`] = `
+"
+.row-start-1 {
+ grid-row-start: 1;
+}
+
+.row-start-10 {
+ grid-row-start: 10;
+}
+
+.row-start-11 {
+ grid-row-start: 11;
+}
+
+.row-start-12 {
+ grid-row-start: 12;
+}
+
+.row-start-13 {
+ grid-row-start: 13;
+}
+
+.row-start-2 {
+ grid-row-start: 2;
+}
+
+.row-start-3 {
+ grid-row-start: 3;
+}
+
+.row-start-4 {
+ grid-row-start: 4;
+}
+
+.row-start-5 {
+ grid-row-start: 5;
+}
+
+.row-start-6 {
+ grid-row-start: 6;
+}
+
+.row-start-7 {
+ grid-row-start: 7;
+}
+
+.row-start-8 {
+ grid-row-start: 8;
+}
+
+.row-start-9 {
+ grid-row-start: 9;
+}
+
+.row-start-\\[123\\] {
+ grid-row-start: 123;
+}
+
+.row-start-\\[var\\(--my-value\\)\\] {
+ grid-row-start: var(--my-value);
+}
+
+.row-start-auto {
+ grid-row-start: auto;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/gridTemplateColumns.test.js.snap b/tests/plugins/__snapshots__/gridTemplateColumns.test.js.snap
new file mode 100644
index 000000000..a5bf0763b
--- /dev/null
+++ b/tests/plugins/__snapshots__/gridTemplateColumns.test.js.snap
@@ -0,0 +1,69 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'gridTemplateColumns' plugin 1`] = `
+"
+.grid-cols-1 {
+ grid-template-columns: repeat(1, minmax(0, 1fr));
+}
+
+.grid-cols-10 {
+ grid-template-columns: repeat(10, minmax(0, 1fr));
+}
+
+.grid-cols-11 {
+ grid-template-columns: repeat(11, minmax(0, 1fr));
+}
+
+.grid-cols-12 {
+ grid-template-columns: repeat(12, minmax(0, 1fr));
+}
+
+.grid-cols-2 {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+}
+
+.grid-cols-3 {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+}
+
+.grid-cols-4 {
+ grid-template-columns: repeat(4, minmax(0, 1fr));
+}
+
+.grid-cols-5 {
+ grid-template-columns: repeat(5, minmax(0, 1fr));
+}
+
+.grid-cols-6 {
+ grid-template-columns: repeat(6, minmax(0, 1fr));
+}
+
+.grid-cols-7 {
+ grid-template-columns: repeat(7, minmax(0, 1fr));
+}
+
+.grid-cols-8 {
+ grid-template-columns: repeat(8, minmax(0, 1fr));
+}
+
+.grid-cols-9 {
+ grid-template-columns: repeat(9, minmax(0, 1fr));
+}
+
+.grid-cols-\\[12\\] {
+ grid-template-columns: 12px;
+}
+
+.grid-cols-\\[var\\(--my-value\\)\\] {
+ grid-template-columns: var(--my-value);
+}
+
+.grid-cols-none {
+ grid-template-columns: none;
+}
+
+.grid-cols-subgrid {
+ grid-template-columns: subgrid;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/gridTemplateRows.test.js.snap b/tests/plugins/__snapshots__/gridTemplateRows.test.js.snap
new file mode 100644
index 000000000..4229c2b6a
--- /dev/null
+++ b/tests/plugins/__snapshots__/gridTemplateRows.test.js.snap
@@ -0,0 +1,69 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'gridTemplateRows' plugin 1`] = `
+"
+.grid-rows-1 {
+ grid-template-rows: repeat(1, minmax(0, 1fr));
+}
+
+.grid-rows-10 {
+ grid-template-rows: repeat(10, minmax(0, 1fr));
+}
+
+.grid-rows-11 {
+ grid-template-rows: repeat(11, minmax(0, 1fr));
+}
+
+.grid-rows-12 {
+ grid-template-rows: repeat(12, minmax(0, 1fr));
+}
+
+.grid-rows-2 {
+ grid-template-rows: repeat(2, minmax(0, 1fr));
+}
+
+.grid-rows-3 {
+ grid-template-rows: repeat(3, minmax(0, 1fr));
+}
+
+.grid-rows-4 {
+ grid-template-rows: repeat(4, minmax(0, 1fr));
+}
+
+.grid-rows-5 {
+ grid-template-rows: repeat(5, minmax(0, 1fr));
+}
+
+.grid-rows-6 {
+ grid-template-rows: repeat(6, minmax(0, 1fr));
+}
+
+.grid-rows-7 {
+ grid-template-rows: repeat(7, minmax(0, 1fr));
+}
+
+.grid-rows-8 {
+ grid-template-rows: repeat(8, minmax(0, 1fr));
+}
+
+.grid-rows-9 {
+ grid-template-rows: repeat(9, minmax(0, 1fr));
+}
+
+.grid-rows-\\[12\\] {
+ grid-template-rows: 12px;
+}
+
+.grid-rows-\\[var\\(--my-value\\)\\] {
+ grid-template-rows: var(--my-value);
+}
+
+.grid-rows-none {
+ grid-template-rows: none;
+}
+
+.grid-rows-subgrid {
+ grid-template-rows: subgrid;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/height.test.js.snap b/tests/plugins/__snapshots__/height.test.js.snap
new file mode 100644
index 000000000..951c32a7d
--- /dev/null
+++ b/tests/plugins/__snapshots__/height.test.js.snap
@@ -0,0 +1,250 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'height' plugin 1`] = `
+"
+.h-0 {
+ height: 0;
+}
+
+.h-0\\.5 {
+ height: .125rem;
+}
+
+.h-1 {
+ height: .25rem;
+}
+
+.h-1\\.5 {
+ height: .375rem;
+}
+
+.h-1\\/2 {
+ height: 50%;
+}
+
+.h-1\\/3 {
+ height: 33.3333%;
+}
+
+.h-1\\/4 {
+ height: 25%;
+}
+
+.h-1\\/5 {
+ height: 20%;
+}
+
+.h-1\\/6 {
+ height: 16.6667%;
+}
+
+.h-10 {
+ height: 2.5rem;
+}
+
+.h-11 {
+ height: 2.75rem;
+}
+
+.h-12 {
+ height: 3rem;
+}
+
+.h-14 {
+ height: 3.5rem;
+}
+
+.h-16 {
+ height: 4rem;
+}
+
+.h-2 {
+ height: .5rem;
+}
+
+.h-2\\.5 {
+ height: .625rem;
+}
+
+.h-2\\/3 {
+ height: 66.6667%;
+}
+
+.h-2\\/4 {
+ height: 50%;
+}
+
+.h-2\\/5 {
+ height: 40%;
+}
+
+.h-2\\/6 {
+ height: 33.3333%;
+}
+
+.h-20 {
+ height: 5rem;
+}
+
+.h-24 {
+ height: 6rem;
+}
+
+.h-28 {
+ height: 7rem;
+}
+
+.h-3 {
+ height: .75rem;
+}
+
+.h-3\\.5 {
+ height: .875rem;
+}
+
+.h-3\\/4 {
+ height: 75%;
+}
+
+.h-3\\/5 {
+ height: 60%;
+}
+
+.h-3\\/6 {
+ height: 50%;
+}
+
+.h-32 {
+ height: 8rem;
+}
+
+.h-36 {
+ height: 9rem;
+}
+
+.h-4 {
+ height: 1rem;
+}
+
+.h-4\\/5 {
+ height: 80%;
+}
+
+.h-4\\/6 {
+ height: 66.6667%;
+}
+
+.h-40 {
+ height: 10rem;
+}
+
+.h-44 {
+ height: 11rem;
+}
+
+.h-48 {
+ height: 12rem;
+}
+
+.h-5 {
+ height: 1.25rem;
+}
+
+.h-5\\/6 {
+ height: 83.3333%;
+}
+
+.h-52 {
+ height: 13rem;
+}
+
+.h-56 {
+ height: 14rem;
+}
+
+.h-6 {
+ height: 1.5rem;
+}
+
+.h-60 {
+ height: 15rem;
+}
+
+.h-64 {
+ height: 16rem;
+}
+
+.h-7 {
+ height: 1.75rem;
+}
+
+.h-72 {
+ height: 18rem;
+}
+
+.h-8 {
+ height: 2rem;
+}
+
+.h-80 {
+ height: 20rem;
+}
+
+.h-9 {
+ height: 2.25rem;
+}
+
+.h-96 {
+ height: 24rem;
+}
+
+.h-\\[12px\\] {
+ height: 12px;
+}
+
+.h-\\[var\\(--my-value\\)\\] {
+ height: var(--my-value);
+}
+
+.h-auto {
+ height: auto;
+}
+
+.h-dvh {
+ height: 100dvh;
+}
+
+.h-fit {
+ height: -moz-fit-content;
+ height: fit-content;
+}
+
+.h-full {
+ height: 100%;
+}
+
+.h-lvh {
+ height: 100lvh;
+}
+
+.h-max {
+ height: max-content;
+}
+
+.h-min {
+ height: min-content;
+}
+
+.h-px {
+ height: 1px;
+}
+
+.h-screen {
+ height: 100vh;
+}
+
+.h-svh {
+ height: 100svh;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/hueRotate.test.js.snap b/tests/plugins/__snapshots__/hueRotate.test.js.snap
new file mode 100644
index 000000000..0bbe9d6be
--- /dev/null
+++ b/tests/plugins/__snapshots__/hueRotate.test.js.snap
@@ -0,0 +1,75 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'hueRotate' plugin 1`] = `
+"
+.-hue-rotate-0 {
+ --tw-hue-rotate: hue-rotate(-0deg);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.-hue-rotate-15 {
+ --tw-hue-rotate: hue-rotate(-15deg);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.-hue-rotate-180 {
+ --tw-hue-rotate: hue-rotate(-180deg);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.-hue-rotate-30 {
+ --tw-hue-rotate: hue-rotate(-30deg);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.-hue-rotate-60 {
+ --tw-hue-rotate: hue-rotate(-60deg);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.-hue-rotate-90 {
+ --tw-hue-rotate: hue-rotate(-90deg);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.hue-rotate-0 {
+ --tw-hue-rotate: hue-rotate(0deg);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.hue-rotate-15 {
+ --tw-hue-rotate: hue-rotate(15deg);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.hue-rotate-180 {
+ --tw-hue-rotate: hue-rotate(180deg);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.hue-rotate-30 {
+ --tw-hue-rotate: hue-rotate(30deg);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.hue-rotate-60 {
+ --tw-hue-rotate: hue-rotate(60deg);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.hue-rotate-90 {
+ --tw-hue-rotate: hue-rotate(90deg);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.hue-rotate-\\[12deg\\] {
+ --tw-hue-rotate: hue-rotate(12deg);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.hue-rotate-\\[var\\(--my-value\\)\\] {
+ --tw-hue-rotate: hue-rotate(var(--my-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/hyphens.test.js.snap b/tests/plugins/__snapshots__/hyphens.test.js.snap
new file mode 100644
index 000000000..9b44155a2
--- /dev/null
+++ b/tests/plugins/__snapshots__/hyphens.test.js.snap
@@ -0,0 +1,20 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'hyphens' plugin 1`] = `
+"
+.hyphens-none {
+ -webkit-hyphens: none;
+ hyphens: none;
+}
+
+.hyphens-manual {
+ -webkit-hyphens: manual;
+ hyphens: manual;
+}
+
+.hyphens-auto {
+ -webkit-hyphens: auto;
+ hyphens: auto;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/inset.test.js.snap b/tests/plugins/__snapshots__/inset.test.js.snap
new file mode 100644
index 000000000..ac1dd32b5
--- /dev/null
+++ b/tests/plugins/__snapshots__/inset.test.js.snap
@@ -0,0 +1,3243 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'inset' plugin 1`] = `
+"
+.-inset-0 {
+ inset: 0;
+}
+
+.-inset-0\\.5 {
+ inset: -.125rem;
+}
+
+.-inset-1 {
+ inset: -.25rem;
+}
+
+.-inset-1\\.5 {
+ inset: -.375rem;
+}
+
+.-inset-1\\/2 {
+ inset: -50%;
+}
+
+.-inset-1\\/3 {
+ inset: -33.3333%;
+}
+
+.-inset-1\\/4 {
+ inset: -25%;
+}
+
+.-inset-10 {
+ inset: -2.5rem;
+}
+
+.-inset-11 {
+ inset: -2.75rem;
+}
+
+.-inset-12 {
+ inset: -3rem;
+}
+
+.-inset-14 {
+ inset: -3.5rem;
+}
+
+.-inset-16 {
+ inset: -4rem;
+}
+
+.-inset-2 {
+ inset: -.5rem;
+}
+
+.-inset-2\\.5 {
+ inset: -.625rem;
+}
+
+.-inset-2\\/3 {
+ inset: -66.6667%;
+}
+
+.-inset-2\\/4 {
+ inset: -50%;
+}
+
+.-inset-20 {
+ inset: -5rem;
+}
+
+.-inset-24 {
+ inset: -6rem;
+}
+
+.-inset-28 {
+ inset: -7rem;
+}
+
+.-inset-3 {
+ inset: -.75rem;
+}
+
+.-inset-3\\.5 {
+ inset: -.875rem;
+}
+
+.-inset-3\\/4 {
+ inset: -75%;
+}
+
+.-inset-32 {
+ inset: -8rem;
+}
+
+.-inset-36 {
+ inset: -9rem;
+}
+
+.-inset-4 {
+ inset: -1rem;
+}
+
+.-inset-40 {
+ inset: -10rem;
+}
+
+.-inset-44 {
+ inset: -11rem;
+}
+
+.-inset-48 {
+ inset: -12rem;
+}
+
+.-inset-5 {
+ inset: -1.25rem;
+}
+
+.-inset-52 {
+ inset: -13rem;
+}
+
+.-inset-56 {
+ inset: -14rem;
+}
+
+.-inset-6 {
+ inset: -1.5rem;
+}
+
+.-inset-60 {
+ inset: -15rem;
+}
+
+.-inset-64 {
+ inset: -16rem;
+}
+
+.-inset-7 {
+ inset: -1.75rem;
+}
+
+.-inset-72 {
+ inset: -18rem;
+}
+
+.-inset-8 {
+ inset: -2rem;
+}
+
+.-inset-80 {
+ inset: -20rem;
+}
+
+.-inset-9 {
+ inset: -2.25rem;
+}
+
+.-inset-96 {
+ inset: -24rem;
+}
+
+.-inset-full {
+ inset: -100%;
+}
+
+.-inset-px {
+ inset: -1px;
+}
+
+.inset-0 {
+ inset: 0;
+}
+
+.inset-0\\.5 {
+ inset: .125rem;
+}
+
+.inset-1 {
+ inset: .25rem;
+}
+
+.inset-1\\.5 {
+ inset: .375rem;
+}
+
+.inset-1\\/2 {
+ inset: 50%;
+}
+
+.inset-1\\/3 {
+ inset: 33.3333%;
+}
+
+.inset-1\\/4 {
+ inset: 25%;
+}
+
+.inset-10 {
+ inset: 2.5rem;
+}
+
+.inset-11 {
+ inset: 2.75rem;
+}
+
+.inset-12 {
+ inset: 3rem;
+}
+
+.inset-14 {
+ inset: 3.5rem;
+}
+
+.inset-16 {
+ inset: 4rem;
+}
+
+.inset-2 {
+ inset: .5rem;
+}
+
+.inset-2\\.5 {
+ inset: .625rem;
+}
+
+.inset-2\\/3 {
+ inset: 66.6667%;
+}
+
+.inset-2\\/4 {
+ inset: 50%;
+}
+
+.inset-20 {
+ inset: 5rem;
+}
+
+.inset-24 {
+ inset: 6rem;
+}
+
+.inset-28 {
+ inset: 7rem;
+}
+
+.inset-3 {
+ inset: .75rem;
+}
+
+.inset-3\\.5 {
+ inset: .875rem;
+}
+
+.inset-3\\/4 {
+ inset: 75%;
+}
+
+.inset-32 {
+ inset: 8rem;
+}
+
+.inset-36 {
+ inset: 9rem;
+}
+
+.inset-4 {
+ inset: 1rem;
+}
+
+.inset-40 {
+ inset: 10rem;
+}
+
+.inset-44 {
+ inset: 11rem;
+}
+
+.inset-48 {
+ inset: 12rem;
+}
+
+.inset-5 {
+ inset: 1.25rem;
+}
+
+.inset-52 {
+ inset: 13rem;
+}
+
+.inset-56 {
+ inset: 14rem;
+}
+
+.inset-6 {
+ inset: 1.5rem;
+}
+
+.inset-60 {
+ inset: 15rem;
+}
+
+.inset-64 {
+ inset: 16rem;
+}
+
+.inset-7 {
+ inset: 1.75rem;
+}
+
+.inset-72 {
+ inset: 18rem;
+}
+
+.inset-8 {
+ inset: 2rem;
+}
+
+.inset-80 {
+ inset: 20rem;
+}
+
+.inset-9 {
+ inset: 2.25rem;
+}
+
+.inset-96 {
+ inset: 24rem;
+}
+
+.inset-\\[12px\\] {
+ inset: 12px;
+}
+
+.inset-\\[var\\(--my-value\\)\\] {
+ inset: var(--my-value);
+}
+
+.inset-auto {
+ inset: auto;
+}
+
+.inset-full {
+ inset: 100%;
+}
+
+.inset-px {
+ inset: 1px;
+}
+
+.-inset-x-0 {
+ left: 0;
+ right: 0;
+}
+
+.-inset-x-0\\.5 {
+ left: -.125rem;
+ right: -.125rem;
+}
+
+.-inset-x-1 {
+ left: -.25rem;
+ right: -.25rem;
+}
+
+.-inset-x-1\\.5 {
+ left: -.375rem;
+ right: -.375rem;
+}
+
+.-inset-x-1\\/2 {
+ left: -50%;
+ right: -50%;
+}
+
+.-inset-x-1\\/3 {
+ left: -33.3333%;
+ right: -33.3333%;
+}
+
+.-inset-x-1\\/4 {
+ left: -25%;
+ right: -25%;
+}
+
+.-inset-x-10 {
+ left: -2.5rem;
+ right: -2.5rem;
+}
+
+.-inset-x-11 {
+ left: -2.75rem;
+ right: -2.75rem;
+}
+
+.-inset-x-12 {
+ left: -3rem;
+ right: -3rem;
+}
+
+.-inset-x-14 {
+ left: -3.5rem;
+ right: -3.5rem;
+}
+
+.-inset-x-16 {
+ left: -4rem;
+ right: -4rem;
+}
+
+.-inset-x-2 {
+ left: -.5rem;
+ right: -.5rem;
+}
+
+.-inset-x-2\\.5 {
+ left: -.625rem;
+ right: -.625rem;
+}
+
+.-inset-x-2\\/3 {
+ left: -66.6667%;
+ right: -66.6667%;
+}
+
+.-inset-x-2\\/4 {
+ left: -50%;
+ right: -50%;
+}
+
+.-inset-x-20 {
+ left: -5rem;
+ right: -5rem;
+}
+
+.-inset-x-24 {
+ left: -6rem;
+ right: -6rem;
+}
+
+.-inset-x-28 {
+ left: -7rem;
+ right: -7rem;
+}
+
+.-inset-x-3 {
+ left: -.75rem;
+ right: -.75rem;
+}
+
+.-inset-x-3\\.5 {
+ left: -.875rem;
+ right: -.875rem;
+}
+
+.-inset-x-3\\/4 {
+ left: -75%;
+ right: -75%;
+}
+
+.-inset-x-32 {
+ left: -8rem;
+ right: -8rem;
+}
+
+.-inset-x-36 {
+ left: -9rem;
+ right: -9rem;
+}
+
+.-inset-x-4 {
+ left: -1rem;
+ right: -1rem;
+}
+
+.-inset-x-40 {
+ left: -10rem;
+ right: -10rem;
+}
+
+.-inset-x-44 {
+ left: -11rem;
+ right: -11rem;
+}
+
+.-inset-x-48 {
+ left: -12rem;
+ right: -12rem;
+}
+
+.-inset-x-5 {
+ left: -1.25rem;
+ right: -1.25rem;
+}
+
+.-inset-x-52 {
+ left: -13rem;
+ right: -13rem;
+}
+
+.-inset-x-56 {
+ left: -14rem;
+ right: -14rem;
+}
+
+.-inset-x-6 {
+ left: -1.5rem;
+ right: -1.5rem;
+}
+
+.-inset-x-60 {
+ left: -15rem;
+ right: -15rem;
+}
+
+.-inset-x-64 {
+ left: -16rem;
+ right: -16rem;
+}
+
+.-inset-x-7 {
+ left: -1.75rem;
+ right: -1.75rem;
+}
+
+.-inset-x-72 {
+ left: -18rem;
+ right: -18rem;
+}
+
+.-inset-x-8 {
+ left: -2rem;
+ right: -2rem;
+}
+
+.-inset-x-80 {
+ left: -20rem;
+ right: -20rem;
+}
+
+.-inset-x-9 {
+ left: -2.25rem;
+ right: -2.25rem;
+}
+
+.-inset-x-96 {
+ left: -24rem;
+ right: -24rem;
+}
+
+.-inset-x-full {
+ left: -100%;
+ right: -100%;
+}
+
+.-inset-x-px {
+ left: -1px;
+ right: -1px;
+}
+
+.-inset-y-0 {
+ top: 0;
+ bottom: 0;
+}
+
+.-inset-y-0\\.5 {
+ top: -.125rem;
+ bottom: -.125rem;
+}
+
+.-inset-y-1 {
+ top: -.25rem;
+ bottom: -.25rem;
+}
+
+.-inset-y-1\\.5 {
+ top: -.375rem;
+ bottom: -.375rem;
+}
+
+.-inset-y-1\\/2 {
+ top: -50%;
+ bottom: -50%;
+}
+
+.-inset-y-1\\/3 {
+ top: -33.3333%;
+ bottom: -33.3333%;
+}
+
+.-inset-y-1\\/4 {
+ top: -25%;
+ bottom: -25%;
+}
+
+.-inset-y-10 {
+ top: -2.5rem;
+ bottom: -2.5rem;
+}
+
+.-inset-y-11 {
+ top: -2.75rem;
+ bottom: -2.75rem;
+}
+
+.-inset-y-12 {
+ top: -3rem;
+ bottom: -3rem;
+}
+
+.-inset-y-14 {
+ top: -3.5rem;
+ bottom: -3.5rem;
+}
+
+.-inset-y-16 {
+ top: -4rem;
+ bottom: -4rem;
+}
+
+.-inset-y-2 {
+ top: -.5rem;
+ bottom: -.5rem;
+}
+
+.-inset-y-2\\.5 {
+ top: -.625rem;
+ bottom: -.625rem;
+}
+
+.-inset-y-2\\/3 {
+ top: -66.6667%;
+ bottom: -66.6667%;
+}
+
+.-inset-y-2\\/4 {
+ top: -50%;
+ bottom: -50%;
+}
+
+.-inset-y-20 {
+ top: -5rem;
+ bottom: -5rem;
+}
+
+.-inset-y-24 {
+ top: -6rem;
+ bottom: -6rem;
+}
+
+.-inset-y-28 {
+ top: -7rem;
+ bottom: -7rem;
+}
+
+.-inset-y-3 {
+ top: -.75rem;
+ bottom: -.75rem;
+}
+
+.-inset-y-3\\.5 {
+ top: -.875rem;
+ bottom: -.875rem;
+}
+
+.-inset-y-3\\/4 {
+ top: -75%;
+ bottom: -75%;
+}
+
+.-inset-y-32 {
+ top: -8rem;
+ bottom: -8rem;
+}
+
+.-inset-y-36 {
+ top: -9rem;
+ bottom: -9rem;
+}
+
+.-inset-y-4 {
+ top: -1rem;
+ bottom: -1rem;
+}
+
+.-inset-y-40 {
+ top: -10rem;
+ bottom: -10rem;
+}
+
+.-inset-y-44 {
+ top: -11rem;
+ bottom: -11rem;
+}
+
+.-inset-y-48 {
+ top: -12rem;
+ bottom: -12rem;
+}
+
+.-inset-y-5 {
+ top: -1.25rem;
+ bottom: -1.25rem;
+}
+
+.-inset-y-52 {
+ top: -13rem;
+ bottom: -13rem;
+}
+
+.-inset-y-56 {
+ top: -14rem;
+ bottom: -14rem;
+}
+
+.-inset-y-6 {
+ top: -1.5rem;
+ bottom: -1.5rem;
+}
+
+.-inset-y-60 {
+ top: -15rem;
+ bottom: -15rem;
+}
+
+.-inset-y-64 {
+ top: -16rem;
+ bottom: -16rem;
+}
+
+.-inset-y-7 {
+ top: -1.75rem;
+ bottom: -1.75rem;
+}
+
+.-inset-y-72 {
+ top: -18rem;
+ bottom: -18rem;
+}
+
+.-inset-y-8 {
+ top: -2rem;
+ bottom: -2rem;
+}
+
+.-inset-y-80 {
+ top: -20rem;
+ bottom: -20rem;
+}
+
+.-inset-y-9 {
+ top: -2.25rem;
+ bottom: -2.25rem;
+}
+
+.-inset-y-96 {
+ top: -24rem;
+ bottom: -24rem;
+}
+
+.-inset-y-full {
+ top: -100%;
+ bottom: -100%;
+}
+
+.-inset-y-px {
+ top: -1px;
+ bottom: -1px;
+}
+
+.inset-x-0 {
+ left: 0;
+ right: 0;
+}
+
+.inset-x-0\\.5 {
+ left: .125rem;
+ right: .125rem;
+}
+
+.inset-x-1 {
+ left: .25rem;
+ right: .25rem;
+}
+
+.inset-x-1\\.5 {
+ left: .375rem;
+ right: .375rem;
+}
+
+.inset-x-1\\/2 {
+ left: 50%;
+ right: 50%;
+}
+
+.inset-x-1\\/3 {
+ left: 33.3333%;
+ right: 33.3333%;
+}
+
+.inset-x-1\\/4 {
+ left: 25%;
+ right: 25%;
+}
+
+.inset-x-10 {
+ left: 2.5rem;
+ right: 2.5rem;
+}
+
+.inset-x-11 {
+ left: 2.75rem;
+ right: 2.75rem;
+}
+
+.inset-x-12 {
+ left: 3rem;
+ right: 3rem;
+}
+
+.inset-x-14 {
+ left: 3.5rem;
+ right: 3.5rem;
+}
+
+.inset-x-16 {
+ left: 4rem;
+ right: 4rem;
+}
+
+.inset-x-2 {
+ left: .5rem;
+ right: .5rem;
+}
+
+.inset-x-2\\.5 {
+ left: .625rem;
+ right: .625rem;
+}
+
+.inset-x-2\\/3 {
+ left: 66.6667%;
+ right: 66.6667%;
+}
+
+.inset-x-2\\/4 {
+ left: 50%;
+ right: 50%;
+}
+
+.inset-x-20 {
+ left: 5rem;
+ right: 5rem;
+}
+
+.inset-x-24 {
+ left: 6rem;
+ right: 6rem;
+}
+
+.inset-x-28 {
+ left: 7rem;
+ right: 7rem;
+}
+
+.inset-x-3 {
+ left: .75rem;
+ right: .75rem;
+}
+
+.inset-x-3\\.5 {
+ left: .875rem;
+ right: .875rem;
+}
+
+.inset-x-3\\/4 {
+ left: 75%;
+ right: 75%;
+}
+
+.inset-x-32 {
+ left: 8rem;
+ right: 8rem;
+}
+
+.inset-x-36 {
+ left: 9rem;
+ right: 9rem;
+}
+
+.inset-x-4 {
+ left: 1rem;
+ right: 1rem;
+}
+
+.inset-x-40 {
+ left: 10rem;
+ right: 10rem;
+}
+
+.inset-x-44 {
+ left: 11rem;
+ right: 11rem;
+}
+
+.inset-x-48 {
+ left: 12rem;
+ right: 12rem;
+}
+
+.inset-x-5 {
+ left: 1.25rem;
+ right: 1.25rem;
+}
+
+.inset-x-52 {
+ left: 13rem;
+ right: 13rem;
+}
+
+.inset-x-56 {
+ left: 14rem;
+ right: 14rem;
+}
+
+.inset-x-6 {
+ left: 1.5rem;
+ right: 1.5rem;
+}
+
+.inset-x-60 {
+ left: 15rem;
+ right: 15rem;
+}
+
+.inset-x-64 {
+ left: 16rem;
+ right: 16rem;
+}
+
+.inset-x-7 {
+ left: 1.75rem;
+ right: 1.75rem;
+}
+
+.inset-x-72 {
+ left: 18rem;
+ right: 18rem;
+}
+
+.inset-x-8 {
+ left: 2rem;
+ right: 2rem;
+}
+
+.inset-x-80 {
+ left: 20rem;
+ right: 20rem;
+}
+
+.inset-x-9 {
+ left: 2.25rem;
+ right: 2.25rem;
+}
+
+.inset-x-96 {
+ left: 24rem;
+ right: 24rem;
+}
+
+.inset-x-auto {
+ left: auto;
+ right: auto;
+}
+
+.inset-x-full {
+ left: 100%;
+ right: 100%;
+}
+
+.inset-x-px {
+ left: 1px;
+ right: 1px;
+}
+
+.inset-y-0 {
+ top: 0;
+ bottom: 0;
+}
+
+.inset-y-0\\.5 {
+ top: .125rem;
+ bottom: .125rem;
+}
+
+.inset-y-1 {
+ top: .25rem;
+ bottom: .25rem;
+}
+
+.inset-y-1\\.5 {
+ top: .375rem;
+ bottom: .375rem;
+}
+
+.inset-y-1\\/2 {
+ top: 50%;
+ bottom: 50%;
+}
+
+.inset-y-1\\/3 {
+ top: 33.3333%;
+ bottom: 33.3333%;
+}
+
+.inset-y-1\\/4 {
+ top: 25%;
+ bottom: 25%;
+}
+
+.inset-y-10 {
+ top: 2.5rem;
+ bottom: 2.5rem;
+}
+
+.inset-y-11 {
+ top: 2.75rem;
+ bottom: 2.75rem;
+}
+
+.inset-y-12 {
+ top: 3rem;
+ bottom: 3rem;
+}
+
+.inset-y-14 {
+ top: 3.5rem;
+ bottom: 3.5rem;
+}
+
+.inset-y-16 {
+ top: 4rem;
+ bottom: 4rem;
+}
+
+.inset-y-2 {
+ top: .5rem;
+ bottom: .5rem;
+}
+
+.inset-y-2\\.5 {
+ top: .625rem;
+ bottom: .625rem;
+}
+
+.inset-y-2\\/3 {
+ top: 66.6667%;
+ bottom: 66.6667%;
+}
+
+.inset-y-2\\/4 {
+ top: 50%;
+ bottom: 50%;
+}
+
+.inset-y-20 {
+ top: 5rem;
+ bottom: 5rem;
+}
+
+.inset-y-24 {
+ top: 6rem;
+ bottom: 6rem;
+}
+
+.inset-y-28 {
+ top: 7rem;
+ bottom: 7rem;
+}
+
+.inset-y-3 {
+ top: .75rem;
+ bottom: .75rem;
+}
+
+.inset-y-3\\.5 {
+ top: .875rem;
+ bottom: .875rem;
+}
+
+.inset-y-3\\/4 {
+ top: 75%;
+ bottom: 75%;
+}
+
+.inset-y-32 {
+ top: 8rem;
+ bottom: 8rem;
+}
+
+.inset-y-36 {
+ top: 9rem;
+ bottom: 9rem;
+}
+
+.inset-y-4 {
+ top: 1rem;
+ bottom: 1rem;
+}
+
+.inset-y-40 {
+ top: 10rem;
+ bottom: 10rem;
+}
+
+.inset-y-44 {
+ top: 11rem;
+ bottom: 11rem;
+}
+
+.inset-y-48 {
+ top: 12rem;
+ bottom: 12rem;
+}
+
+.inset-y-5 {
+ top: 1.25rem;
+ bottom: 1.25rem;
+}
+
+.inset-y-52 {
+ top: 13rem;
+ bottom: 13rem;
+}
+
+.inset-y-56 {
+ top: 14rem;
+ bottom: 14rem;
+}
+
+.inset-y-6 {
+ top: 1.5rem;
+ bottom: 1.5rem;
+}
+
+.inset-y-60 {
+ top: 15rem;
+ bottom: 15rem;
+}
+
+.inset-y-64 {
+ top: 16rem;
+ bottom: 16rem;
+}
+
+.inset-y-7 {
+ top: 1.75rem;
+ bottom: 1.75rem;
+}
+
+.inset-y-72 {
+ top: 18rem;
+ bottom: 18rem;
+}
+
+.inset-y-8 {
+ top: 2rem;
+ bottom: 2rem;
+}
+
+.inset-y-80 {
+ top: 20rem;
+ bottom: 20rem;
+}
+
+.inset-y-9 {
+ top: 2.25rem;
+ bottom: 2.25rem;
+}
+
+.inset-y-96 {
+ top: 24rem;
+ bottom: 24rem;
+}
+
+.inset-y-auto {
+ top: auto;
+ bottom: auto;
+}
+
+.inset-y-full {
+ top: 100%;
+ bottom: 100%;
+}
+
+.inset-y-px {
+ top: 1px;
+ bottom: 1px;
+}
+
+.-bottom-0 {
+ bottom: 0;
+}
+
+.-bottom-0\\.5 {
+ bottom: -.125rem;
+}
+
+.-bottom-1 {
+ bottom: -.25rem;
+}
+
+.-bottom-1\\.5 {
+ bottom: -.375rem;
+}
+
+.-bottom-1\\/2 {
+ bottom: -50%;
+}
+
+.-bottom-1\\/3 {
+ bottom: -33.3333%;
+}
+
+.-bottom-1\\/4 {
+ bottom: -25%;
+}
+
+.-bottom-10 {
+ bottom: -2.5rem;
+}
+
+.-bottom-11 {
+ bottom: -2.75rem;
+}
+
+.-bottom-12 {
+ bottom: -3rem;
+}
+
+.-bottom-14 {
+ bottom: -3.5rem;
+}
+
+.-bottom-16 {
+ bottom: -4rem;
+}
+
+.-bottom-2 {
+ bottom: -.5rem;
+}
+
+.-bottom-2\\.5 {
+ bottom: -.625rem;
+}
+
+.-bottom-2\\/3 {
+ bottom: -66.6667%;
+}
+
+.-bottom-2\\/4 {
+ bottom: -50%;
+}
+
+.-bottom-20 {
+ bottom: -5rem;
+}
+
+.-bottom-24 {
+ bottom: -6rem;
+}
+
+.-bottom-28 {
+ bottom: -7rem;
+}
+
+.-bottom-3 {
+ bottom: -.75rem;
+}
+
+.-bottom-3\\.5 {
+ bottom: -.875rem;
+}
+
+.-bottom-3\\/4 {
+ bottom: -75%;
+}
+
+.-bottom-32 {
+ bottom: -8rem;
+}
+
+.-bottom-36 {
+ bottom: -9rem;
+}
+
+.-bottom-4 {
+ bottom: -1rem;
+}
+
+.-bottom-40 {
+ bottom: -10rem;
+}
+
+.-bottom-44 {
+ bottom: -11rem;
+}
+
+.-bottom-48 {
+ bottom: -12rem;
+}
+
+.-bottom-5 {
+ bottom: -1.25rem;
+}
+
+.-bottom-52 {
+ bottom: -13rem;
+}
+
+.-bottom-56 {
+ bottom: -14rem;
+}
+
+.-bottom-6 {
+ bottom: -1.5rem;
+}
+
+.-bottom-60 {
+ bottom: -15rem;
+}
+
+.-bottom-64 {
+ bottom: -16rem;
+}
+
+.-bottom-7 {
+ bottom: -1.75rem;
+}
+
+.-bottom-72 {
+ bottom: -18rem;
+}
+
+.-bottom-8 {
+ bottom: -2rem;
+}
+
+.-bottom-80 {
+ bottom: -20rem;
+}
+
+.-bottom-9 {
+ bottom: -2.25rem;
+}
+
+.-bottom-96 {
+ bottom: -24rem;
+}
+
+.-bottom-full {
+ bottom: -100%;
+}
+
+.-bottom-px {
+ bottom: -1px;
+}
+
+.-end-0 {
+ inset-inline-end: 0;
+}
+
+.-end-0\\.5 {
+ inset-inline-end: -.125rem;
+}
+
+.-end-1 {
+ inset-inline-end: -.25rem;
+}
+
+.-end-1\\.5 {
+ inset-inline-end: -.375rem;
+}
+
+.-end-1\\/2 {
+ inset-inline-end: -50%;
+}
+
+.-end-1\\/3 {
+ inset-inline-end: -33.3333%;
+}
+
+.-end-1\\/4 {
+ inset-inline-end: -25%;
+}
+
+.-end-10 {
+ inset-inline-end: -2.5rem;
+}
+
+.-end-11 {
+ inset-inline-end: -2.75rem;
+}
+
+.-end-12 {
+ inset-inline-end: -3rem;
+}
+
+.-end-14 {
+ inset-inline-end: -3.5rem;
+}
+
+.-end-16 {
+ inset-inline-end: -4rem;
+}
+
+.-end-2 {
+ inset-inline-end: -.5rem;
+}
+
+.-end-2\\.5 {
+ inset-inline-end: -.625rem;
+}
+
+.-end-2\\/3 {
+ inset-inline-end: -66.6667%;
+}
+
+.-end-2\\/4 {
+ inset-inline-end: -50%;
+}
+
+.-end-20 {
+ inset-inline-end: -5rem;
+}
+
+.-end-24 {
+ inset-inline-end: -6rem;
+}
+
+.-end-28 {
+ inset-inline-end: -7rem;
+}
+
+.-end-3 {
+ inset-inline-end: -.75rem;
+}
+
+.-end-3\\.5 {
+ inset-inline-end: -.875rem;
+}
+
+.-end-3\\/4 {
+ inset-inline-end: -75%;
+}
+
+.-end-32 {
+ inset-inline-end: -8rem;
+}
+
+.-end-36 {
+ inset-inline-end: -9rem;
+}
+
+.-end-4 {
+ inset-inline-end: -1rem;
+}
+
+.-end-40 {
+ inset-inline-end: -10rem;
+}
+
+.-end-44 {
+ inset-inline-end: -11rem;
+}
+
+.-end-48 {
+ inset-inline-end: -12rem;
+}
+
+.-end-5 {
+ inset-inline-end: -1.25rem;
+}
+
+.-end-52 {
+ inset-inline-end: -13rem;
+}
+
+.-end-56 {
+ inset-inline-end: -14rem;
+}
+
+.-end-6 {
+ inset-inline-end: -1.5rem;
+}
+
+.-end-60 {
+ inset-inline-end: -15rem;
+}
+
+.-end-64 {
+ inset-inline-end: -16rem;
+}
+
+.-end-7 {
+ inset-inline-end: -1.75rem;
+}
+
+.-end-72 {
+ inset-inline-end: -18rem;
+}
+
+.-end-8 {
+ inset-inline-end: -2rem;
+}
+
+.-end-80 {
+ inset-inline-end: -20rem;
+}
+
+.-end-9 {
+ inset-inline-end: -2.25rem;
+}
+
+.-end-96 {
+ inset-inline-end: -24rem;
+}
+
+.-end-full {
+ inset-inline-end: -100%;
+}
+
+.-end-px {
+ inset-inline-end: -1px;
+}
+
+.-left-0 {
+ left: 0;
+}
+
+.-left-0\\.5 {
+ left: -.125rem;
+}
+
+.-left-1 {
+ left: -.25rem;
+}
+
+.-left-1\\.5 {
+ left: -.375rem;
+}
+
+.-left-1\\/2 {
+ left: -50%;
+}
+
+.-left-1\\/3 {
+ left: -33.3333%;
+}
+
+.-left-1\\/4 {
+ left: -25%;
+}
+
+.-left-10 {
+ left: -2.5rem;
+}
+
+.-left-11 {
+ left: -2.75rem;
+}
+
+.-left-12 {
+ left: -3rem;
+}
+
+.-left-14 {
+ left: -3.5rem;
+}
+
+.-left-16 {
+ left: -4rem;
+}
+
+.-left-2 {
+ left: -.5rem;
+}
+
+.-left-2\\.5 {
+ left: -.625rem;
+}
+
+.-left-2\\/3 {
+ left: -66.6667%;
+}
+
+.-left-2\\/4 {
+ left: -50%;
+}
+
+.-left-20 {
+ left: -5rem;
+}
+
+.-left-24 {
+ left: -6rem;
+}
+
+.-left-28 {
+ left: -7rem;
+}
+
+.-left-3 {
+ left: -.75rem;
+}
+
+.-left-3\\.5 {
+ left: -.875rem;
+}
+
+.-left-3\\/4 {
+ left: -75%;
+}
+
+.-left-32 {
+ left: -8rem;
+}
+
+.-left-36 {
+ left: -9rem;
+}
+
+.-left-4 {
+ left: -1rem;
+}
+
+.-left-40 {
+ left: -10rem;
+}
+
+.-left-44 {
+ left: -11rem;
+}
+
+.-left-48 {
+ left: -12rem;
+}
+
+.-left-5 {
+ left: -1.25rem;
+}
+
+.-left-52 {
+ left: -13rem;
+}
+
+.-left-56 {
+ left: -14rem;
+}
+
+.-left-6 {
+ left: -1.5rem;
+}
+
+.-left-60 {
+ left: -15rem;
+}
+
+.-left-64 {
+ left: -16rem;
+}
+
+.-left-7 {
+ left: -1.75rem;
+}
+
+.-left-72 {
+ left: -18rem;
+}
+
+.-left-8 {
+ left: -2rem;
+}
+
+.-left-80 {
+ left: -20rem;
+}
+
+.-left-9 {
+ left: -2.25rem;
+}
+
+.-left-96 {
+ left: -24rem;
+}
+
+.-left-full {
+ left: -100%;
+}
+
+.-left-px {
+ left: -1px;
+}
+
+.-right-0 {
+ right: 0;
+}
+
+.-right-0\\.5 {
+ right: -.125rem;
+}
+
+.-right-1 {
+ right: -.25rem;
+}
+
+.-right-1\\.5 {
+ right: -.375rem;
+}
+
+.-right-1\\/2 {
+ right: -50%;
+}
+
+.-right-1\\/3 {
+ right: -33.3333%;
+}
+
+.-right-1\\/4 {
+ right: -25%;
+}
+
+.-right-10 {
+ right: -2.5rem;
+}
+
+.-right-11 {
+ right: -2.75rem;
+}
+
+.-right-12 {
+ right: -3rem;
+}
+
+.-right-14 {
+ right: -3.5rem;
+}
+
+.-right-16 {
+ right: -4rem;
+}
+
+.-right-2 {
+ right: -.5rem;
+}
+
+.-right-2\\.5 {
+ right: -.625rem;
+}
+
+.-right-2\\/3 {
+ right: -66.6667%;
+}
+
+.-right-2\\/4 {
+ right: -50%;
+}
+
+.-right-20 {
+ right: -5rem;
+}
+
+.-right-24 {
+ right: -6rem;
+}
+
+.-right-28 {
+ right: -7rem;
+}
+
+.-right-3 {
+ right: -.75rem;
+}
+
+.-right-3\\.5 {
+ right: -.875rem;
+}
+
+.-right-3\\/4 {
+ right: -75%;
+}
+
+.-right-32 {
+ right: -8rem;
+}
+
+.-right-36 {
+ right: -9rem;
+}
+
+.-right-4 {
+ right: -1rem;
+}
+
+.-right-40 {
+ right: -10rem;
+}
+
+.-right-44 {
+ right: -11rem;
+}
+
+.-right-48 {
+ right: -12rem;
+}
+
+.-right-5 {
+ right: -1.25rem;
+}
+
+.-right-52 {
+ right: -13rem;
+}
+
+.-right-56 {
+ right: -14rem;
+}
+
+.-right-6 {
+ right: -1.5rem;
+}
+
+.-right-60 {
+ right: -15rem;
+}
+
+.-right-64 {
+ right: -16rem;
+}
+
+.-right-7 {
+ right: -1.75rem;
+}
+
+.-right-72 {
+ right: -18rem;
+}
+
+.-right-8 {
+ right: -2rem;
+}
+
+.-right-80 {
+ right: -20rem;
+}
+
+.-right-9 {
+ right: -2.25rem;
+}
+
+.-right-96 {
+ right: -24rem;
+}
+
+.-right-full {
+ right: -100%;
+}
+
+.-right-px {
+ right: -1px;
+}
+
+.-start-0 {
+ inset-inline-start: 0;
+}
+
+.-start-0\\.5 {
+ inset-inline-start: -.125rem;
+}
+
+.-start-1 {
+ inset-inline-start: -.25rem;
+}
+
+.-start-1\\.5 {
+ inset-inline-start: -.375rem;
+}
+
+.-start-1\\/2 {
+ inset-inline-start: -50%;
+}
+
+.-start-1\\/3 {
+ inset-inline-start: -33.3333%;
+}
+
+.-start-1\\/4 {
+ inset-inline-start: -25%;
+}
+
+.-start-10 {
+ inset-inline-start: -2.5rem;
+}
+
+.-start-11 {
+ inset-inline-start: -2.75rem;
+}
+
+.-start-12 {
+ inset-inline-start: -3rem;
+}
+
+.-start-14 {
+ inset-inline-start: -3.5rem;
+}
+
+.-start-16 {
+ inset-inline-start: -4rem;
+}
+
+.-start-2 {
+ inset-inline-start: -.5rem;
+}
+
+.-start-2\\.5 {
+ inset-inline-start: -.625rem;
+}
+
+.-start-2\\/3 {
+ inset-inline-start: -66.6667%;
+}
+
+.-start-2\\/4 {
+ inset-inline-start: -50%;
+}
+
+.-start-20 {
+ inset-inline-start: -5rem;
+}
+
+.-start-24 {
+ inset-inline-start: -6rem;
+}
+
+.-start-28 {
+ inset-inline-start: -7rem;
+}
+
+.-start-3 {
+ inset-inline-start: -.75rem;
+}
+
+.-start-3\\.5 {
+ inset-inline-start: -.875rem;
+}
+
+.-start-3\\/4 {
+ inset-inline-start: -75%;
+}
+
+.-start-32 {
+ inset-inline-start: -8rem;
+}
+
+.-start-36 {
+ inset-inline-start: -9rem;
+}
+
+.-start-4 {
+ inset-inline-start: -1rem;
+}
+
+.-start-40 {
+ inset-inline-start: -10rem;
+}
+
+.-start-44 {
+ inset-inline-start: -11rem;
+}
+
+.-start-48 {
+ inset-inline-start: -12rem;
+}
+
+.-start-5 {
+ inset-inline-start: -1.25rem;
+}
+
+.-start-52 {
+ inset-inline-start: -13rem;
+}
+
+.-start-56 {
+ inset-inline-start: -14rem;
+}
+
+.-start-6 {
+ inset-inline-start: -1.5rem;
+}
+
+.-start-60 {
+ inset-inline-start: -15rem;
+}
+
+.-start-64 {
+ inset-inline-start: -16rem;
+}
+
+.-start-7 {
+ inset-inline-start: -1.75rem;
+}
+
+.-start-72 {
+ inset-inline-start: -18rem;
+}
+
+.-start-8 {
+ inset-inline-start: -2rem;
+}
+
+.-start-80 {
+ inset-inline-start: -20rem;
+}
+
+.-start-9 {
+ inset-inline-start: -2.25rem;
+}
+
+.-start-96 {
+ inset-inline-start: -24rem;
+}
+
+.-start-full {
+ inset-inline-start: -100%;
+}
+
+.-start-px {
+ inset-inline-start: -1px;
+}
+
+.-top-0 {
+ top: 0;
+}
+
+.-top-0\\.5 {
+ top: -.125rem;
+}
+
+.-top-1 {
+ top: -.25rem;
+}
+
+.-top-1\\.5 {
+ top: -.375rem;
+}
+
+.-top-1\\/2 {
+ top: -50%;
+}
+
+.-top-1\\/3 {
+ top: -33.3333%;
+}
+
+.-top-1\\/4 {
+ top: -25%;
+}
+
+.-top-10 {
+ top: -2.5rem;
+}
+
+.-top-11 {
+ top: -2.75rem;
+}
+
+.-top-12 {
+ top: -3rem;
+}
+
+.-top-14 {
+ top: -3.5rem;
+}
+
+.-top-16 {
+ top: -4rem;
+}
+
+.-top-2 {
+ top: -.5rem;
+}
+
+.-top-2\\.5 {
+ top: -.625rem;
+}
+
+.-top-2\\/3 {
+ top: -66.6667%;
+}
+
+.-top-2\\/4 {
+ top: -50%;
+}
+
+.-top-20 {
+ top: -5rem;
+}
+
+.-top-24 {
+ top: -6rem;
+}
+
+.-top-28 {
+ top: -7rem;
+}
+
+.-top-3 {
+ top: -.75rem;
+}
+
+.-top-3\\.5 {
+ top: -.875rem;
+}
+
+.-top-3\\/4 {
+ top: -75%;
+}
+
+.-top-32 {
+ top: -8rem;
+}
+
+.-top-36 {
+ top: -9rem;
+}
+
+.-top-4 {
+ top: -1rem;
+}
+
+.-top-40 {
+ top: -10rem;
+}
+
+.-top-44 {
+ top: -11rem;
+}
+
+.-top-48 {
+ top: -12rem;
+}
+
+.-top-5 {
+ top: -1.25rem;
+}
+
+.-top-52 {
+ top: -13rem;
+}
+
+.-top-56 {
+ top: -14rem;
+}
+
+.-top-6 {
+ top: -1.5rem;
+}
+
+.-top-60 {
+ top: -15rem;
+}
+
+.-top-64 {
+ top: -16rem;
+}
+
+.-top-7 {
+ top: -1.75rem;
+}
+
+.-top-72 {
+ top: -18rem;
+}
+
+.-top-8 {
+ top: -2rem;
+}
+
+.-top-80 {
+ top: -20rem;
+}
+
+.-top-9 {
+ top: -2.25rem;
+}
+
+.-top-96 {
+ top: -24rem;
+}
+
+.-top-full {
+ top: -100%;
+}
+
+.-top-px {
+ top: -1px;
+}
+
+.bottom-0 {
+ bottom: 0;
+}
+
+.bottom-0\\.5 {
+ bottom: .125rem;
+}
+
+.bottom-1 {
+ bottom: .25rem;
+}
+
+.bottom-1\\.5 {
+ bottom: .375rem;
+}
+
+.bottom-1\\/2 {
+ bottom: 50%;
+}
+
+.bottom-1\\/3 {
+ bottom: 33.3333%;
+}
+
+.bottom-1\\/4 {
+ bottom: 25%;
+}
+
+.bottom-10 {
+ bottom: 2.5rem;
+}
+
+.bottom-11 {
+ bottom: 2.75rem;
+}
+
+.bottom-12 {
+ bottom: 3rem;
+}
+
+.bottom-14 {
+ bottom: 3.5rem;
+}
+
+.bottom-16 {
+ bottom: 4rem;
+}
+
+.bottom-2 {
+ bottom: .5rem;
+}
+
+.bottom-2\\.5 {
+ bottom: .625rem;
+}
+
+.bottom-2\\/3 {
+ bottom: 66.6667%;
+}
+
+.bottom-2\\/4 {
+ bottom: 50%;
+}
+
+.bottom-20 {
+ bottom: 5rem;
+}
+
+.bottom-24 {
+ bottom: 6rem;
+}
+
+.bottom-28 {
+ bottom: 7rem;
+}
+
+.bottom-3 {
+ bottom: .75rem;
+}
+
+.bottom-3\\.5 {
+ bottom: .875rem;
+}
+
+.bottom-3\\/4 {
+ bottom: 75%;
+}
+
+.bottom-32 {
+ bottom: 8rem;
+}
+
+.bottom-36 {
+ bottom: 9rem;
+}
+
+.bottom-4 {
+ bottom: 1rem;
+}
+
+.bottom-40 {
+ bottom: 10rem;
+}
+
+.bottom-44 {
+ bottom: 11rem;
+}
+
+.bottom-48 {
+ bottom: 12rem;
+}
+
+.bottom-5 {
+ bottom: 1.25rem;
+}
+
+.bottom-52 {
+ bottom: 13rem;
+}
+
+.bottom-56 {
+ bottom: 14rem;
+}
+
+.bottom-6 {
+ bottom: 1.5rem;
+}
+
+.bottom-60 {
+ bottom: 15rem;
+}
+
+.bottom-64 {
+ bottom: 16rem;
+}
+
+.bottom-7 {
+ bottom: 1.75rem;
+}
+
+.bottom-72 {
+ bottom: 18rem;
+}
+
+.bottom-8 {
+ bottom: 2rem;
+}
+
+.bottom-80 {
+ bottom: 20rem;
+}
+
+.bottom-9 {
+ bottom: 2.25rem;
+}
+
+.bottom-96 {
+ bottom: 24rem;
+}
+
+.bottom-auto {
+ bottom: auto;
+}
+
+.bottom-full {
+ bottom: 100%;
+}
+
+.bottom-px {
+ bottom: 1px;
+}
+
+.end-0 {
+ inset-inline-end: 0;
+}
+
+.end-0\\.5 {
+ inset-inline-end: .125rem;
+}
+
+.end-1 {
+ inset-inline-end: .25rem;
+}
+
+.end-1\\.5 {
+ inset-inline-end: .375rem;
+}
+
+.end-1\\/2 {
+ inset-inline-end: 50%;
+}
+
+.end-1\\/3 {
+ inset-inline-end: 33.3333%;
+}
+
+.end-1\\/4 {
+ inset-inline-end: 25%;
+}
+
+.end-10 {
+ inset-inline-end: 2.5rem;
+}
+
+.end-11 {
+ inset-inline-end: 2.75rem;
+}
+
+.end-12 {
+ inset-inline-end: 3rem;
+}
+
+.end-14 {
+ inset-inline-end: 3.5rem;
+}
+
+.end-16 {
+ inset-inline-end: 4rem;
+}
+
+.end-2 {
+ inset-inline-end: .5rem;
+}
+
+.end-2\\.5 {
+ inset-inline-end: .625rem;
+}
+
+.end-2\\/3 {
+ inset-inline-end: 66.6667%;
+}
+
+.end-2\\/4 {
+ inset-inline-end: 50%;
+}
+
+.end-20 {
+ inset-inline-end: 5rem;
+}
+
+.end-24 {
+ inset-inline-end: 6rem;
+}
+
+.end-28 {
+ inset-inline-end: 7rem;
+}
+
+.end-3 {
+ inset-inline-end: .75rem;
+}
+
+.end-3\\.5 {
+ inset-inline-end: .875rem;
+}
+
+.end-3\\/4 {
+ inset-inline-end: 75%;
+}
+
+.end-32 {
+ inset-inline-end: 8rem;
+}
+
+.end-36 {
+ inset-inline-end: 9rem;
+}
+
+.end-4 {
+ inset-inline-end: 1rem;
+}
+
+.end-40 {
+ inset-inline-end: 10rem;
+}
+
+.end-44 {
+ inset-inline-end: 11rem;
+}
+
+.end-48 {
+ inset-inline-end: 12rem;
+}
+
+.end-5 {
+ inset-inline-end: 1.25rem;
+}
+
+.end-52 {
+ inset-inline-end: 13rem;
+}
+
+.end-56 {
+ inset-inline-end: 14rem;
+}
+
+.end-6 {
+ inset-inline-end: 1.5rem;
+}
+
+.end-60 {
+ inset-inline-end: 15rem;
+}
+
+.end-64 {
+ inset-inline-end: 16rem;
+}
+
+.end-7 {
+ inset-inline-end: 1.75rem;
+}
+
+.end-72 {
+ inset-inline-end: 18rem;
+}
+
+.end-8 {
+ inset-inline-end: 2rem;
+}
+
+.end-80 {
+ inset-inline-end: 20rem;
+}
+
+.end-9 {
+ inset-inline-end: 2.25rem;
+}
+
+.end-96 {
+ inset-inline-end: 24rem;
+}
+
+.end-auto {
+ inset-inline-end: auto;
+}
+
+.end-full {
+ inset-inline-end: 100%;
+}
+
+.end-px {
+ inset-inline-end: 1px;
+}
+
+.left-0 {
+ left: 0;
+}
+
+.left-0\\.5 {
+ left: .125rem;
+}
+
+.left-1 {
+ left: .25rem;
+}
+
+.left-1\\.5 {
+ left: .375rem;
+}
+
+.left-1\\/2 {
+ left: 50%;
+}
+
+.left-1\\/3 {
+ left: 33.3333%;
+}
+
+.left-1\\/4 {
+ left: 25%;
+}
+
+.left-10 {
+ left: 2.5rem;
+}
+
+.left-11 {
+ left: 2.75rem;
+}
+
+.left-12 {
+ left: 3rem;
+}
+
+.left-14 {
+ left: 3.5rem;
+}
+
+.left-16 {
+ left: 4rem;
+}
+
+.left-2 {
+ left: .5rem;
+}
+
+.left-2\\.5 {
+ left: .625rem;
+}
+
+.left-2\\/3 {
+ left: 66.6667%;
+}
+
+.left-2\\/4 {
+ left: 50%;
+}
+
+.left-20 {
+ left: 5rem;
+}
+
+.left-24 {
+ left: 6rem;
+}
+
+.left-28 {
+ left: 7rem;
+}
+
+.left-3 {
+ left: .75rem;
+}
+
+.left-3\\.5 {
+ left: .875rem;
+}
+
+.left-3\\/4 {
+ left: 75%;
+}
+
+.left-32 {
+ left: 8rem;
+}
+
+.left-36 {
+ left: 9rem;
+}
+
+.left-4 {
+ left: 1rem;
+}
+
+.left-40 {
+ left: 10rem;
+}
+
+.left-44 {
+ left: 11rem;
+}
+
+.left-48 {
+ left: 12rem;
+}
+
+.left-5 {
+ left: 1.25rem;
+}
+
+.left-52 {
+ left: 13rem;
+}
+
+.left-56 {
+ left: 14rem;
+}
+
+.left-6 {
+ left: 1.5rem;
+}
+
+.left-60 {
+ left: 15rem;
+}
+
+.left-64 {
+ left: 16rem;
+}
+
+.left-7 {
+ left: 1.75rem;
+}
+
+.left-72 {
+ left: 18rem;
+}
+
+.left-8 {
+ left: 2rem;
+}
+
+.left-80 {
+ left: 20rem;
+}
+
+.left-9 {
+ left: 2.25rem;
+}
+
+.left-96 {
+ left: 24rem;
+}
+
+.left-auto {
+ left: auto;
+}
+
+.left-full {
+ left: 100%;
+}
+
+.left-px {
+ left: 1px;
+}
+
+.right-0 {
+ right: 0;
+}
+
+.right-0\\.5 {
+ right: .125rem;
+}
+
+.right-1 {
+ right: .25rem;
+}
+
+.right-1\\.5 {
+ right: .375rem;
+}
+
+.right-1\\/2 {
+ right: 50%;
+}
+
+.right-1\\/3 {
+ right: 33.3333%;
+}
+
+.right-1\\/4 {
+ right: 25%;
+}
+
+.right-10 {
+ right: 2.5rem;
+}
+
+.right-11 {
+ right: 2.75rem;
+}
+
+.right-12 {
+ right: 3rem;
+}
+
+.right-14 {
+ right: 3.5rem;
+}
+
+.right-16 {
+ right: 4rem;
+}
+
+.right-2 {
+ right: .5rem;
+}
+
+.right-2\\.5 {
+ right: .625rem;
+}
+
+.right-2\\/3 {
+ right: 66.6667%;
+}
+
+.right-2\\/4 {
+ right: 50%;
+}
+
+.right-20 {
+ right: 5rem;
+}
+
+.right-24 {
+ right: 6rem;
+}
+
+.right-28 {
+ right: 7rem;
+}
+
+.right-3 {
+ right: .75rem;
+}
+
+.right-3\\.5 {
+ right: .875rem;
+}
+
+.right-3\\/4 {
+ right: 75%;
+}
+
+.right-32 {
+ right: 8rem;
+}
+
+.right-36 {
+ right: 9rem;
+}
+
+.right-4 {
+ right: 1rem;
+}
+
+.right-40 {
+ right: 10rem;
+}
+
+.right-44 {
+ right: 11rem;
+}
+
+.right-48 {
+ right: 12rem;
+}
+
+.right-5 {
+ right: 1.25rem;
+}
+
+.right-52 {
+ right: 13rem;
+}
+
+.right-56 {
+ right: 14rem;
+}
+
+.right-6 {
+ right: 1.5rem;
+}
+
+.right-60 {
+ right: 15rem;
+}
+
+.right-64 {
+ right: 16rem;
+}
+
+.right-7 {
+ right: 1.75rem;
+}
+
+.right-72 {
+ right: 18rem;
+}
+
+.right-8 {
+ right: 2rem;
+}
+
+.right-80 {
+ right: 20rem;
+}
+
+.right-9 {
+ right: 2.25rem;
+}
+
+.right-96 {
+ right: 24rem;
+}
+
+.right-auto {
+ right: auto;
+}
+
+.right-full {
+ right: 100%;
+}
+
+.right-px {
+ right: 1px;
+}
+
+.start-0 {
+ inset-inline-start: 0;
+}
+
+.start-0\\.5 {
+ inset-inline-start: .125rem;
+}
+
+.start-1 {
+ inset-inline-start: .25rem;
+}
+
+.start-1\\.5 {
+ inset-inline-start: .375rem;
+}
+
+.start-1\\/2 {
+ inset-inline-start: 50%;
+}
+
+.start-1\\/3 {
+ inset-inline-start: 33.3333%;
+}
+
+.start-1\\/4 {
+ inset-inline-start: 25%;
+}
+
+.start-10 {
+ inset-inline-start: 2.5rem;
+}
+
+.start-11 {
+ inset-inline-start: 2.75rem;
+}
+
+.start-12 {
+ inset-inline-start: 3rem;
+}
+
+.start-14 {
+ inset-inline-start: 3.5rem;
+}
+
+.start-16 {
+ inset-inline-start: 4rem;
+}
+
+.start-2 {
+ inset-inline-start: .5rem;
+}
+
+.start-2\\.5 {
+ inset-inline-start: .625rem;
+}
+
+.start-2\\/3 {
+ inset-inline-start: 66.6667%;
+}
+
+.start-2\\/4 {
+ inset-inline-start: 50%;
+}
+
+.start-20 {
+ inset-inline-start: 5rem;
+}
+
+.start-24 {
+ inset-inline-start: 6rem;
+}
+
+.start-28 {
+ inset-inline-start: 7rem;
+}
+
+.start-3 {
+ inset-inline-start: .75rem;
+}
+
+.start-3\\.5 {
+ inset-inline-start: .875rem;
+}
+
+.start-3\\/4 {
+ inset-inline-start: 75%;
+}
+
+.start-32 {
+ inset-inline-start: 8rem;
+}
+
+.start-36 {
+ inset-inline-start: 9rem;
+}
+
+.start-4 {
+ inset-inline-start: 1rem;
+}
+
+.start-40 {
+ inset-inline-start: 10rem;
+}
+
+.start-44 {
+ inset-inline-start: 11rem;
+}
+
+.start-48 {
+ inset-inline-start: 12rem;
+}
+
+.start-5 {
+ inset-inline-start: 1.25rem;
+}
+
+.start-52 {
+ inset-inline-start: 13rem;
+}
+
+.start-56 {
+ inset-inline-start: 14rem;
+}
+
+.start-6 {
+ inset-inline-start: 1.5rem;
+}
+
+.start-60 {
+ inset-inline-start: 15rem;
+}
+
+.start-64 {
+ inset-inline-start: 16rem;
+}
+
+.start-7 {
+ inset-inline-start: 1.75rem;
+}
+
+.start-72 {
+ inset-inline-start: 18rem;
+}
+
+.start-8 {
+ inset-inline-start: 2rem;
+}
+
+.start-80 {
+ inset-inline-start: 20rem;
+}
+
+.start-9 {
+ inset-inline-start: 2.25rem;
+}
+
+.start-96 {
+ inset-inline-start: 24rem;
+}
+
+.start-auto {
+ inset-inline-start: auto;
+}
+
+.start-full {
+ inset-inline-start: 100%;
+}
+
+.start-px {
+ inset-inline-start: 1px;
+}
+
+.top-0 {
+ top: 0;
+}
+
+.top-0\\.5 {
+ top: .125rem;
+}
+
+.top-1 {
+ top: .25rem;
+}
+
+.top-1\\.5 {
+ top: .375rem;
+}
+
+.top-1\\/2 {
+ top: 50%;
+}
+
+.top-1\\/3 {
+ top: 33.3333%;
+}
+
+.top-1\\/4 {
+ top: 25%;
+}
+
+.top-10 {
+ top: 2.5rem;
+}
+
+.top-11 {
+ top: 2.75rem;
+}
+
+.top-12 {
+ top: 3rem;
+}
+
+.top-14 {
+ top: 3.5rem;
+}
+
+.top-16 {
+ top: 4rem;
+}
+
+.top-2 {
+ top: .5rem;
+}
+
+.top-2\\.5 {
+ top: .625rem;
+}
+
+.top-2\\/3 {
+ top: 66.6667%;
+}
+
+.top-2\\/4 {
+ top: 50%;
+}
+
+.top-20 {
+ top: 5rem;
+}
+
+.top-24 {
+ top: 6rem;
+}
+
+.top-28 {
+ top: 7rem;
+}
+
+.top-3 {
+ top: .75rem;
+}
+
+.top-3\\.5 {
+ top: .875rem;
+}
+
+.top-3\\/4 {
+ top: 75%;
+}
+
+.top-32 {
+ top: 8rem;
+}
+
+.top-36 {
+ top: 9rem;
+}
+
+.top-4 {
+ top: 1rem;
+}
+
+.top-40 {
+ top: 10rem;
+}
+
+.top-44 {
+ top: 11rem;
+}
+
+.top-48 {
+ top: 12rem;
+}
+
+.top-5 {
+ top: 1.25rem;
+}
+
+.top-52 {
+ top: 13rem;
+}
+
+.top-56 {
+ top: 14rem;
+}
+
+.top-6 {
+ top: 1.5rem;
+}
+
+.top-60 {
+ top: 15rem;
+}
+
+.top-64 {
+ top: 16rem;
+}
+
+.top-7 {
+ top: 1.75rem;
+}
+
+.top-72 {
+ top: 18rem;
+}
+
+.top-8 {
+ top: 2rem;
+}
+
+.top-80 {
+ top: 20rem;
+}
+
+.top-9 {
+ top: 2.25rem;
+}
+
+.top-96 {
+ top: 24rem;
+}
+
+.top-auto {
+ top: auto;
+}
+
+.top-full {
+ top: 100%;
+}
+
+.top-px {
+ top: 1px;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/invert.test.js.snap b/tests/plugins/__snapshots__/invert.test.js.snap
new file mode 100644
index 000000000..eb1dbc37b
--- /dev/null
+++ b/tests/plugins/__snapshots__/invert.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'invert' plugin 1`] = `
+"
+.invert {
+ --tw-invert: invert(100%);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.invert-0 {
+ --tw-invert: invert(0);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.invert-\\[50\\%\\] {
+ --tw-invert: invert(50%);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.invert-\\[var\\(--my-value\\)\\] {
+ --tw-invert: invert(var(--my-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/isolation.test.js.snap b/tests/plugins/__snapshots__/isolation.test.js.snap
new file mode 100644
index 000000000..b307d6ad8
--- /dev/null
+++ b/tests/plugins/__snapshots__/isolation.test.js.snap
@@ -0,0 +1,13 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'isolation' plugin 1`] = `
+"
+.isolate {
+ isolation: isolate;
+}
+
+.isolation-auto {
+ isolation: auto;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/justifyContent.test.js.snap b/tests/plugins/__snapshots__/justifyContent.test.js.snap
new file mode 100644
index 000000000..739798c82
--- /dev/null
+++ b/tests/plugins/__snapshots__/justifyContent.test.js.snap
@@ -0,0 +1,37 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'justifyContent' plugin 1`] = `
+"
+.justify-normal {
+ justify-content: normal;
+}
+
+.justify-start {
+ justify-content: flex-start;
+}
+
+.justify-end {
+ justify-content: flex-end;
+}
+
+.justify-center {
+ justify-content: center;
+}
+
+.justify-between {
+ justify-content: space-between;
+}
+
+.justify-around {
+ justify-content: space-around;
+}
+
+.justify-evenly {
+ justify-content: space-evenly;
+}
+
+.justify-stretch {
+ justify-content: stretch;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/justifyItems.test.js.snap b/tests/plugins/__snapshots__/justifyItems.test.js.snap
new file mode 100644
index 000000000..df69efa56
--- /dev/null
+++ b/tests/plugins/__snapshots__/justifyItems.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'justifyItems' plugin 1`] = `
+"
+.justify-items-start {
+ justify-items: start;
+}
+
+.justify-items-end {
+ justify-items: end;
+}
+
+.justify-items-center {
+ justify-items: center;
+}
+
+.justify-items-stretch {
+ justify-items: stretch;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/justifySelf.test.js.snap b/tests/plugins/__snapshots__/justifySelf.test.js.snap
new file mode 100644
index 000000000..c3fd70aac
--- /dev/null
+++ b/tests/plugins/__snapshots__/justifySelf.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'justifySelf' plugin 1`] = `
+"
+.justify-self-auto {
+ justify-self: auto;
+}
+
+.justify-self-start {
+ justify-self: start;
+}
+
+.justify-self-end {
+ justify-self: end;
+}
+
+.justify-self-center {
+ justify-self: center;
+}
+
+.justify-self-stretch {
+ justify-self: stretch;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/letterSpacing.test.js.snap b/tests/plugins/__snapshots__/letterSpacing.test.js.snap
new file mode 100644
index 000000000..c6ecd7067
--- /dev/null
+++ b/tests/plugins/__snapshots__/letterSpacing.test.js.snap
@@ -0,0 +1,61 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'letterSpacing' plugin 1`] = `
+"
+.-tracking-normal {
+ letter-spacing: 0;
+}
+
+.-tracking-tight {
+ letter-spacing: .025em;
+}
+
+.-tracking-tighter {
+ letter-spacing: .05em;
+}
+
+.-tracking-wide {
+ letter-spacing: -.025em;
+}
+
+.-tracking-wider {
+ letter-spacing: -.05em;
+}
+
+.-tracking-widest {
+ letter-spacing: -.1em;
+}
+
+.tracking-\\[12px\\] {
+ letter-spacing: 12px;
+}
+
+.tracking-\\[var\\(--my-value\\)\\] {
+ letter-spacing: var(--my-value);
+}
+
+.tracking-normal {
+ letter-spacing: 0;
+}
+
+.tracking-tight {
+ letter-spacing: -.025em;
+}
+
+.tracking-tighter {
+ letter-spacing: -.05em;
+}
+
+.tracking-wide {
+ letter-spacing: .025em;
+}
+
+.tracking-wider {
+ letter-spacing: .05em;
+}
+
+.tracking-widest {
+ letter-spacing: .1em;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/lineClamp.test.js.snap b/tests/plugins/__snapshots__/lineClamp.test.js.snap
new file mode 100644
index 000000000..5e7140540
--- /dev/null
+++ b/tests/plugins/__snapshots__/lineClamp.test.js.snap
@@ -0,0 +1,68 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'lineClamp' plugin 1`] = `
+"
+.line-clamp-1 {
+ -webkit-line-clamp: 1;
+ -webkit-box-orient: vertical;
+ display: -webkit-box;
+ overflow: hidden;
+}
+
+.line-clamp-2 {
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ display: -webkit-box;
+ overflow: hidden;
+}
+
+.line-clamp-3 {
+ -webkit-line-clamp: 3;
+ -webkit-box-orient: vertical;
+ display: -webkit-box;
+ overflow: hidden;
+}
+
+.line-clamp-4 {
+ -webkit-line-clamp: 4;
+ -webkit-box-orient: vertical;
+ display: -webkit-box;
+ overflow: hidden;
+}
+
+.line-clamp-5 {
+ -webkit-line-clamp: 5;
+ -webkit-box-orient: vertical;
+ display: -webkit-box;
+ overflow: hidden;
+}
+
+.line-clamp-6 {
+ -webkit-line-clamp: 6;
+ -webkit-box-orient: vertical;
+ display: -webkit-box;
+ overflow: hidden;
+}
+
+.line-clamp-\\[12px\\] {
+ -webkit-line-clamp: 12px;
+ -webkit-box-orient: vertical;
+ display: -webkit-box;
+ overflow: hidden;
+}
+
+.line-clamp-\\[var\\(--my-value\\)\\] {
+ -webkit-line-clamp: var(--my-value);
+ -webkit-box-orient: vertical;
+ display: -webkit-box;
+ overflow: hidden;
+}
+
+.line-clamp-none {
+ -webkit-line-clamp: none;
+ -webkit-box-orient: horizontal;
+ display: block;
+ overflow: visible;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/lineHeight.test.js.snap b/tests/plugins/__snapshots__/lineHeight.test.js.snap
new file mode 100644
index 000000000..35a3c2614
--- /dev/null
+++ b/tests/plugins/__snapshots__/lineHeight.test.js.snap
@@ -0,0 +1,69 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'lineHeight' plugin 1`] = `
+"
+.leading-10 {
+ line-height: 2.5rem;
+}
+
+.leading-3 {
+ line-height: .75rem;
+}
+
+.leading-4 {
+ line-height: 1rem;
+}
+
+.leading-5 {
+ line-height: 1.25rem;
+}
+
+.leading-6 {
+ line-height: 1.5rem;
+}
+
+.leading-7 {
+ line-height: 1.75rem;
+}
+
+.leading-8 {
+ line-height: 2rem;
+}
+
+.leading-9 {
+ line-height: 2.25rem;
+}
+
+.leading-\\[12px\\] {
+ line-height: 12px;
+}
+
+.leading-\\[var\\(--my-value\\)\\] {
+ line-height: var(--my-value);
+}
+
+.leading-loose {
+ line-height: 2;
+}
+
+.leading-none {
+ line-height: 1;
+}
+
+.leading-normal {
+ line-height: 1.5;
+}
+
+.leading-relaxed {
+ line-height: 1.625;
+}
+
+.leading-snug {
+ line-height: 1.375;
+}
+
+.leading-tight {
+ line-height: 1.25;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/listStyleImage.test.js.snap b/tests/plugins/__snapshots__/listStyleImage.test.js.snap
new file mode 100644
index 000000000..1c42bf5dd
--- /dev/null
+++ b/tests/plugins/__snapshots__/listStyleImage.test.js.snap
@@ -0,0 +1,17 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'listStyleImage' plugin 1`] = `
+"
+.list-image-\\[url\\(https\\:\\/\\/example\\.com\\/image\\.png\\)\\] {
+ list-style-image: url("https://example.com/image.png");
+}
+
+.list-image-\\[var\\(--my-value\\)\\] {
+ list-style-image: var(--my-value);
+}
+
+.list-image-none {
+ list-style-image: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/listStylePosition.test.js.snap b/tests/plugins/__snapshots__/listStylePosition.test.js.snap
new file mode 100644
index 000000000..1ba0294e7
--- /dev/null
+++ b/tests/plugins/__snapshots__/listStylePosition.test.js.snap
@@ -0,0 +1,13 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'listStylePosition' plugin 1`] = `
+"
+.list-inside {
+ list-style-position: inside;
+}
+
+.list-outside {
+ list-style-position: outside;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/listStyleType.test.js.snap b/tests/plugins/__snapshots__/listStyleType.test.js.snap
new file mode 100644
index 000000000..5070249a8
--- /dev/null
+++ b/tests/plugins/__snapshots__/listStyleType.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'listStyleType' plugin 1`] = `
+"
+.list-\\[cube\\] {
+ list-style-type: cube;
+}
+
+.list-\\[var\\(--my-value\\)\\] {
+ list-style-type: var(--my-value);
+}
+
+.list-decimal {
+ list-style-type: decimal;
+}
+
+.list-disc {
+ list-style-type: disc;
+}
+
+.list-none {
+ list-style-type: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/margin.test.js.snap b/tests/plugins/__snapshots__/margin.test.js.snap
new file mode 100644
index 000000000..588e85ba9
--- /dev/null
+++ b/tests/plugins/__snapshots__/margin.test.js.snap
@@ -0,0 +1,2711 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'margin' plugin 1`] = `
+"
+.-m-0 {
+ margin: 0;
+}
+
+.-m-0\\.5 {
+ margin: -.125rem;
+}
+
+.-m-1 {
+ margin: -.25rem;
+}
+
+.-m-1\\.5 {
+ margin: -.375rem;
+}
+
+.-m-10 {
+ margin: -2.5rem;
+}
+
+.-m-11 {
+ margin: -2.75rem;
+}
+
+.-m-12 {
+ margin: -3rem;
+}
+
+.-m-14 {
+ margin: -3.5rem;
+}
+
+.-m-16 {
+ margin: -4rem;
+}
+
+.-m-2 {
+ margin: -.5rem;
+}
+
+.-m-2\\.5 {
+ margin: -.625rem;
+}
+
+.-m-20 {
+ margin: -5rem;
+}
+
+.-m-24 {
+ margin: -6rem;
+}
+
+.-m-28 {
+ margin: -7rem;
+}
+
+.-m-3 {
+ margin: -.75rem;
+}
+
+.-m-3\\.5 {
+ margin: -.875rem;
+}
+
+.-m-32 {
+ margin: -8rem;
+}
+
+.-m-36 {
+ margin: -9rem;
+}
+
+.-m-4 {
+ margin: -1rem;
+}
+
+.-m-40 {
+ margin: -10rem;
+}
+
+.-m-44 {
+ margin: -11rem;
+}
+
+.-m-48 {
+ margin: -12rem;
+}
+
+.-m-5 {
+ margin: -1.25rem;
+}
+
+.-m-52 {
+ margin: -13rem;
+}
+
+.-m-56 {
+ margin: -14rem;
+}
+
+.-m-6 {
+ margin: -1.5rem;
+}
+
+.-m-60 {
+ margin: -15rem;
+}
+
+.-m-64 {
+ margin: -16rem;
+}
+
+.-m-7 {
+ margin: -1.75rem;
+}
+
+.-m-72 {
+ margin: -18rem;
+}
+
+.-m-8 {
+ margin: -2rem;
+}
+
+.-m-80 {
+ margin: -20rem;
+}
+
+.-m-9 {
+ margin: -2.25rem;
+}
+
+.-m-96 {
+ margin: -24rem;
+}
+
+.-m-px {
+ margin: -1px;
+}
+
+.m-0 {
+ margin: 0;
+}
+
+.m-0\\.5 {
+ margin: .125rem;
+}
+
+.m-1 {
+ margin: .25rem;
+}
+
+.m-1\\.5 {
+ margin: .375rem;
+}
+
+.m-10 {
+ margin: 2.5rem;
+}
+
+.m-11 {
+ margin: 2.75rem;
+}
+
+.m-12 {
+ margin: 3rem;
+}
+
+.m-14 {
+ margin: 3.5rem;
+}
+
+.m-16 {
+ margin: 4rem;
+}
+
+.m-2 {
+ margin: .5rem;
+}
+
+.m-2\\.5 {
+ margin: .625rem;
+}
+
+.m-20 {
+ margin: 5rem;
+}
+
+.m-24 {
+ margin: 6rem;
+}
+
+.m-28 {
+ margin: 7rem;
+}
+
+.m-3 {
+ margin: .75rem;
+}
+
+.m-3\\.5 {
+ margin: .875rem;
+}
+
+.m-32 {
+ margin: 8rem;
+}
+
+.m-36 {
+ margin: 9rem;
+}
+
+.m-4 {
+ margin: 1rem;
+}
+
+.m-40 {
+ margin: 10rem;
+}
+
+.m-44 {
+ margin: 11rem;
+}
+
+.m-48 {
+ margin: 12rem;
+}
+
+.m-5 {
+ margin: 1.25rem;
+}
+
+.m-52 {
+ margin: 13rem;
+}
+
+.m-56 {
+ margin: 14rem;
+}
+
+.m-6 {
+ margin: 1.5rem;
+}
+
+.m-60 {
+ margin: 15rem;
+}
+
+.m-64 {
+ margin: 16rem;
+}
+
+.m-7 {
+ margin: 1.75rem;
+}
+
+.m-72 {
+ margin: 18rem;
+}
+
+.m-8 {
+ margin: 2rem;
+}
+
+.m-80 {
+ margin: 20rem;
+}
+
+.m-9 {
+ margin: 2.25rem;
+}
+
+.m-96 {
+ margin: 24rem;
+}
+
+.m-\\[12px\\] {
+ margin: 12px;
+}
+
+.m-\\[var\\(--my-value\\)\\] {
+ margin: var(--my-value);
+}
+
+.m-auto {
+ margin: auto;
+}
+
+.m-px {
+ margin: 1px;
+}
+
+.-mx-0 {
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.-mx-0\\.5 {
+ margin-left: -.125rem;
+ margin-right: -.125rem;
+}
+
+.-mx-1 {
+ margin-left: -.25rem;
+ margin-right: -.25rem;
+}
+
+.-mx-1\\.5 {
+ margin-left: -.375rem;
+ margin-right: -.375rem;
+}
+
+.-mx-10 {
+ margin-left: -2.5rem;
+ margin-right: -2.5rem;
+}
+
+.-mx-11 {
+ margin-left: -2.75rem;
+ margin-right: -2.75rem;
+}
+
+.-mx-12 {
+ margin-left: -3rem;
+ margin-right: -3rem;
+}
+
+.-mx-14 {
+ margin-left: -3.5rem;
+ margin-right: -3.5rem;
+}
+
+.-mx-16 {
+ margin-left: -4rem;
+ margin-right: -4rem;
+}
+
+.-mx-2 {
+ margin-left: -.5rem;
+ margin-right: -.5rem;
+}
+
+.-mx-2\\.5 {
+ margin-left: -.625rem;
+ margin-right: -.625rem;
+}
+
+.-mx-20 {
+ margin-left: -5rem;
+ margin-right: -5rem;
+}
+
+.-mx-24 {
+ margin-left: -6rem;
+ margin-right: -6rem;
+}
+
+.-mx-28 {
+ margin-left: -7rem;
+ margin-right: -7rem;
+}
+
+.-mx-3 {
+ margin-left: -.75rem;
+ margin-right: -.75rem;
+}
+
+.-mx-3\\.5 {
+ margin-left: -.875rem;
+ margin-right: -.875rem;
+}
+
+.-mx-32 {
+ margin-left: -8rem;
+ margin-right: -8rem;
+}
+
+.-mx-36 {
+ margin-left: -9rem;
+ margin-right: -9rem;
+}
+
+.-mx-4 {
+ margin-left: -1rem;
+ margin-right: -1rem;
+}
+
+.-mx-40 {
+ margin-left: -10rem;
+ margin-right: -10rem;
+}
+
+.-mx-44 {
+ margin-left: -11rem;
+ margin-right: -11rem;
+}
+
+.-mx-48 {
+ margin-left: -12rem;
+ margin-right: -12rem;
+}
+
+.-mx-5 {
+ margin-left: -1.25rem;
+ margin-right: -1.25rem;
+}
+
+.-mx-52 {
+ margin-left: -13rem;
+ margin-right: -13rem;
+}
+
+.-mx-56 {
+ margin-left: -14rem;
+ margin-right: -14rem;
+}
+
+.-mx-6 {
+ margin-left: -1.5rem;
+ margin-right: -1.5rem;
+}
+
+.-mx-60 {
+ margin-left: -15rem;
+ margin-right: -15rem;
+}
+
+.-mx-64 {
+ margin-left: -16rem;
+ margin-right: -16rem;
+}
+
+.-mx-7 {
+ margin-left: -1.75rem;
+ margin-right: -1.75rem;
+}
+
+.-mx-72 {
+ margin-left: -18rem;
+ margin-right: -18rem;
+}
+
+.-mx-8 {
+ margin-left: -2rem;
+ margin-right: -2rem;
+}
+
+.-mx-80 {
+ margin-left: -20rem;
+ margin-right: -20rem;
+}
+
+.-mx-9 {
+ margin-left: -2.25rem;
+ margin-right: -2.25rem;
+}
+
+.-mx-96 {
+ margin-left: -24rem;
+ margin-right: -24rem;
+}
+
+.-mx-px {
+ margin-left: -1px;
+ margin-right: -1px;
+}
+
+.-my-0 {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.-my-0\\.5 {
+ margin-top: -.125rem;
+ margin-bottom: -.125rem;
+}
+
+.-my-1 {
+ margin-top: -.25rem;
+ margin-bottom: -.25rem;
+}
+
+.-my-1\\.5 {
+ margin-top: -.375rem;
+ margin-bottom: -.375rem;
+}
+
+.-my-10 {
+ margin-top: -2.5rem;
+ margin-bottom: -2.5rem;
+}
+
+.-my-11 {
+ margin-top: -2.75rem;
+ margin-bottom: -2.75rem;
+}
+
+.-my-12 {
+ margin-top: -3rem;
+ margin-bottom: -3rem;
+}
+
+.-my-14 {
+ margin-top: -3.5rem;
+ margin-bottom: -3.5rem;
+}
+
+.-my-16 {
+ margin-top: -4rem;
+ margin-bottom: -4rem;
+}
+
+.-my-2 {
+ margin-top: -.5rem;
+ margin-bottom: -.5rem;
+}
+
+.-my-2\\.5 {
+ margin-top: -.625rem;
+ margin-bottom: -.625rem;
+}
+
+.-my-20 {
+ margin-top: -5rem;
+ margin-bottom: -5rem;
+}
+
+.-my-24 {
+ margin-top: -6rem;
+ margin-bottom: -6rem;
+}
+
+.-my-28 {
+ margin-top: -7rem;
+ margin-bottom: -7rem;
+}
+
+.-my-3 {
+ margin-top: -.75rem;
+ margin-bottom: -.75rem;
+}
+
+.-my-3\\.5 {
+ margin-top: -.875rem;
+ margin-bottom: -.875rem;
+}
+
+.-my-32 {
+ margin-top: -8rem;
+ margin-bottom: -8rem;
+}
+
+.-my-36 {
+ margin-top: -9rem;
+ margin-bottom: -9rem;
+}
+
+.-my-4 {
+ margin-top: -1rem;
+ margin-bottom: -1rem;
+}
+
+.-my-40 {
+ margin-top: -10rem;
+ margin-bottom: -10rem;
+}
+
+.-my-44 {
+ margin-top: -11rem;
+ margin-bottom: -11rem;
+}
+
+.-my-48 {
+ margin-top: -12rem;
+ margin-bottom: -12rem;
+}
+
+.-my-5 {
+ margin-top: -1.25rem;
+ margin-bottom: -1.25rem;
+}
+
+.-my-52 {
+ margin-top: -13rem;
+ margin-bottom: -13rem;
+}
+
+.-my-56 {
+ margin-top: -14rem;
+ margin-bottom: -14rem;
+}
+
+.-my-6 {
+ margin-top: -1.5rem;
+ margin-bottom: -1.5rem;
+}
+
+.-my-60 {
+ margin-top: -15rem;
+ margin-bottom: -15rem;
+}
+
+.-my-64 {
+ margin-top: -16rem;
+ margin-bottom: -16rem;
+}
+
+.-my-7 {
+ margin-top: -1.75rem;
+ margin-bottom: -1.75rem;
+}
+
+.-my-72 {
+ margin-top: -18rem;
+ margin-bottom: -18rem;
+}
+
+.-my-8 {
+ margin-top: -2rem;
+ margin-bottom: -2rem;
+}
+
+.-my-80 {
+ margin-top: -20rem;
+ margin-bottom: -20rem;
+}
+
+.-my-9 {
+ margin-top: -2.25rem;
+ margin-bottom: -2.25rem;
+}
+
+.-my-96 {
+ margin-top: -24rem;
+ margin-bottom: -24rem;
+}
+
+.-my-px {
+ margin-top: -1px;
+ margin-bottom: -1px;
+}
+
+.mx-0 {
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.mx-0\\.5 {
+ margin-left: .125rem;
+ margin-right: .125rem;
+}
+
+.mx-1 {
+ margin-left: .25rem;
+ margin-right: .25rem;
+}
+
+.mx-1\\.5 {
+ margin-left: .375rem;
+ margin-right: .375rem;
+}
+
+.mx-10 {
+ margin-left: 2.5rem;
+ margin-right: 2.5rem;
+}
+
+.mx-11 {
+ margin-left: 2.75rem;
+ margin-right: 2.75rem;
+}
+
+.mx-12 {
+ margin-left: 3rem;
+ margin-right: 3rem;
+}
+
+.mx-14 {
+ margin-left: 3.5rem;
+ margin-right: 3.5rem;
+}
+
+.mx-16 {
+ margin-left: 4rem;
+ margin-right: 4rem;
+}
+
+.mx-2 {
+ margin-left: .5rem;
+ margin-right: .5rem;
+}
+
+.mx-2\\.5 {
+ margin-left: .625rem;
+ margin-right: .625rem;
+}
+
+.mx-20 {
+ margin-left: 5rem;
+ margin-right: 5rem;
+}
+
+.mx-24 {
+ margin-left: 6rem;
+ margin-right: 6rem;
+}
+
+.mx-28 {
+ margin-left: 7rem;
+ margin-right: 7rem;
+}
+
+.mx-3 {
+ margin-left: .75rem;
+ margin-right: .75rem;
+}
+
+.mx-3\\.5 {
+ margin-left: .875rem;
+ margin-right: .875rem;
+}
+
+.mx-32 {
+ margin-left: 8rem;
+ margin-right: 8rem;
+}
+
+.mx-36 {
+ margin-left: 9rem;
+ margin-right: 9rem;
+}
+
+.mx-4 {
+ margin-left: 1rem;
+ margin-right: 1rem;
+}
+
+.mx-40 {
+ margin-left: 10rem;
+ margin-right: 10rem;
+}
+
+.mx-44 {
+ margin-left: 11rem;
+ margin-right: 11rem;
+}
+
+.mx-48 {
+ margin-left: 12rem;
+ margin-right: 12rem;
+}
+
+.mx-5 {
+ margin-left: 1.25rem;
+ margin-right: 1.25rem;
+}
+
+.mx-52 {
+ margin-left: 13rem;
+ margin-right: 13rem;
+}
+
+.mx-56 {
+ margin-left: 14rem;
+ margin-right: 14rem;
+}
+
+.mx-6 {
+ margin-left: 1.5rem;
+ margin-right: 1.5rem;
+}
+
+.mx-60 {
+ margin-left: 15rem;
+ margin-right: 15rem;
+}
+
+.mx-64 {
+ margin-left: 16rem;
+ margin-right: 16rem;
+}
+
+.mx-7 {
+ margin-left: 1.75rem;
+ margin-right: 1.75rem;
+}
+
+.mx-72 {
+ margin-left: 18rem;
+ margin-right: 18rem;
+}
+
+.mx-8 {
+ margin-left: 2rem;
+ margin-right: 2rem;
+}
+
+.mx-80 {
+ margin-left: 20rem;
+ margin-right: 20rem;
+}
+
+.mx-9 {
+ margin-left: 2.25rem;
+ margin-right: 2.25rem;
+}
+
+.mx-96 {
+ margin-left: 24rem;
+ margin-right: 24rem;
+}
+
+.mx-auto {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.mx-px {
+ margin-left: 1px;
+ margin-right: 1px;
+}
+
+.my-0 {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.my-0\\.5 {
+ margin-top: .125rem;
+ margin-bottom: .125rem;
+}
+
+.my-1 {
+ margin-top: .25rem;
+ margin-bottom: .25rem;
+}
+
+.my-1\\.5 {
+ margin-top: .375rem;
+ margin-bottom: .375rem;
+}
+
+.my-10 {
+ margin-top: 2.5rem;
+ margin-bottom: 2.5rem;
+}
+
+.my-11 {
+ margin-top: 2.75rem;
+ margin-bottom: 2.75rem;
+}
+
+.my-12 {
+ margin-top: 3rem;
+ margin-bottom: 3rem;
+}
+
+.my-14 {
+ margin-top: 3.5rem;
+ margin-bottom: 3.5rem;
+}
+
+.my-16 {
+ margin-top: 4rem;
+ margin-bottom: 4rem;
+}
+
+.my-2 {
+ margin-top: .5rem;
+ margin-bottom: .5rem;
+}
+
+.my-2\\.5 {
+ margin-top: .625rem;
+ margin-bottom: .625rem;
+}
+
+.my-20 {
+ margin-top: 5rem;
+ margin-bottom: 5rem;
+}
+
+.my-24 {
+ margin-top: 6rem;
+ margin-bottom: 6rem;
+}
+
+.my-28 {
+ margin-top: 7rem;
+ margin-bottom: 7rem;
+}
+
+.my-3 {
+ margin-top: .75rem;
+ margin-bottom: .75rem;
+}
+
+.my-3\\.5 {
+ margin-top: .875rem;
+ margin-bottom: .875rem;
+}
+
+.my-32 {
+ margin-top: 8rem;
+ margin-bottom: 8rem;
+}
+
+.my-36 {
+ margin-top: 9rem;
+ margin-bottom: 9rem;
+}
+
+.my-4 {
+ margin-top: 1rem;
+ margin-bottom: 1rem;
+}
+
+.my-40 {
+ margin-top: 10rem;
+ margin-bottom: 10rem;
+}
+
+.my-44 {
+ margin-top: 11rem;
+ margin-bottom: 11rem;
+}
+
+.my-48 {
+ margin-top: 12rem;
+ margin-bottom: 12rem;
+}
+
+.my-5 {
+ margin-top: 1.25rem;
+ margin-bottom: 1.25rem;
+}
+
+.my-52 {
+ margin-top: 13rem;
+ margin-bottom: 13rem;
+}
+
+.my-56 {
+ margin-top: 14rem;
+ margin-bottom: 14rem;
+}
+
+.my-6 {
+ margin-top: 1.5rem;
+ margin-bottom: 1.5rem;
+}
+
+.my-60 {
+ margin-top: 15rem;
+ margin-bottom: 15rem;
+}
+
+.my-64 {
+ margin-top: 16rem;
+ margin-bottom: 16rem;
+}
+
+.my-7 {
+ margin-top: 1.75rem;
+ margin-bottom: 1.75rem;
+}
+
+.my-72 {
+ margin-top: 18rem;
+ margin-bottom: 18rem;
+}
+
+.my-8 {
+ margin-top: 2rem;
+ margin-bottom: 2rem;
+}
+
+.my-80 {
+ margin-top: 20rem;
+ margin-bottom: 20rem;
+}
+
+.my-9 {
+ margin-top: 2.25rem;
+ margin-bottom: 2.25rem;
+}
+
+.my-96 {
+ margin-top: 24rem;
+ margin-bottom: 24rem;
+}
+
+.my-auto {
+ margin-top: auto;
+ margin-bottom: auto;
+}
+
+.my-px {
+ margin-top: 1px;
+ margin-bottom: 1px;
+}
+
+.-mb-0 {
+ margin-bottom: 0;
+}
+
+.-mb-0\\.5 {
+ margin-bottom: -.125rem;
+}
+
+.-mb-1 {
+ margin-bottom: -.25rem;
+}
+
+.-mb-1\\.5 {
+ margin-bottom: -.375rem;
+}
+
+.-mb-10 {
+ margin-bottom: -2.5rem;
+}
+
+.-mb-11 {
+ margin-bottom: -2.75rem;
+}
+
+.-mb-12 {
+ margin-bottom: -3rem;
+}
+
+.-mb-14 {
+ margin-bottom: -3.5rem;
+}
+
+.-mb-16 {
+ margin-bottom: -4rem;
+}
+
+.-mb-2 {
+ margin-bottom: -.5rem;
+}
+
+.-mb-2\\.5 {
+ margin-bottom: -.625rem;
+}
+
+.-mb-20 {
+ margin-bottom: -5rem;
+}
+
+.-mb-24 {
+ margin-bottom: -6rem;
+}
+
+.-mb-28 {
+ margin-bottom: -7rem;
+}
+
+.-mb-3 {
+ margin-bottom: -.75rem;
+}
+
+.-mb-3\\.5 {
+ margin-bottom: -.875rem;
+}
+
+.-mb-32 {
+ margin-bottom: -8rem;
+}
+
+.-mb-36 {
+ margin-bottom: -9rem;
+}
+
+.-mb-4 {
+ margin-bottom: -1rem;
+}
+
+.-mb-40 {
+ margin-bottom: -10rem;
+}
+
+.-mb-44 {
+ margin-bottom: -11rem;
+}
+
+.-mb-48 {
+ margin-bottom: -12rem;
+}
+
+.-mb-5 {
+ margin-bottom: -1.25rem;
+}
+
+.-mb-52 {
+ margin-bottom: -13rem;
+}
+
+.-mb-56 {
+ margin-bottom: -14rem;
+}
+
+.-mb-6 {
+ margin-bottom: -1.5rem;
+}
+
+.-mb-60 {
+ margin-bottom: -15rem;
+}
+
+.-mb-64 {
+ margin-bottom: -16rem;
+}
+
+.-mb-7 {
+ margin-bottom: -1.75rem;
+}
+
+.-mb-72 {
+ margin-bottom: -18rem;
+}
+
+.-mb-8 {
+ margin-bottom: -2rem;
+}
+
+.-mb-80 {
+ margin-bottom: -20rem;
+}
+
+.-mb-9 {
+ margin-bottom: -2.25rem;
+}
+
+.-mb-96 {
+ margin-bottom: -24rem;
+}
+
+.-mb-px {
+ margin-bottom: -1px;
+}
+
+.-me-0 {
+ margin-inline-end: 0;
+}
+
+.-me-0\\.5 {
+ margin-inline-end: -.125rem;
+}
+
+.-me-1 {
+ margin-inline-end: -.25rem;
+}
+
+.-me-1\\.5 {
+ margin-inline-end: -.375rem;
+}
+
+.-me-10 {
+ margin-inline-end: -2.5rem;
+}
+
+.-me-11 {
+ margin-inline-end: -2.75rem;
+}
+
+.-me-12 {
+ margin-inline-end: -3rem;
+}
+
+.-me-14 {
+ margin-inline-end: -3.5rem;
+}
+
+.-me-16 {
+ margin-inline-end: -4rem;
+}
+
+.-me-2 {
+ margin-inline-end: -.5rem;
+}
+
+.-me-2\\.5 {
+ margin-inline-end: -.625rem;
+}
+
+.-me-20 {
+ margin-inline-end: -5rem;
+}
+
+.-me-24 {
+ margin-inline-end: -6rem;
+}
+
+.-me-28 {
+ margin-inline-end: -7rem;
+}
+
+.-me-3 {
+ margin-inline-end: -.75rem;
+}
+
+.-me-3\\.5 {
+ margin-inline-end: -.875rem;
+}
+
+.-me-32 {
+ margin-inline-end: -8rem;
+}
+
+.-me-36 {
+ margin-inline-end: -9rem;
+}
+
+.-me-4 {
+ margin-inline-end: -1rem;
+}
+
+.-me-40 {
+ margin-inline-end: -10rem;
+}
+
+.-me-44 {
+ margin-inline-end: -11rem;
+}
+
+.-me-48 {
+ margin-inline-end: -12rem;
+}
+
+.-me-5 {
+ margin-inline-end: -1.25rem;
+}
+
+.-me-52 {
+ margin-inline-end: -13rem;
+}
+
+.-me-56 {
+ margin-inline-end: -14rem;
+}
+
+.-me-6 {
+ margin-inline-end: -1.5rem;
+}
+
+.-me-60 {
+ margin-inline-end: -15rem;
+}
+
+.-me-64 {
+ margin-inline-end: -16rem;
+}
+
+.-me-7 {
+ margin-inline-end: -1.75rem;
+}
+
+.-me-72 {
+ margin-inline-end: -18rem;
+}
+
+.-me-8 {
+ margin-inline-end: -2rem;
+}
+
+.-me-80 {
+ margin-inline-end: -20rem;
+}
+
+.-me-9 {
+ margin-inline-end: -2.25rem;
+}
+
+.-me-96 {
+ margin-inline-end: -24rem;
+}
+
+.-me-px {
+ margin-inline-end: -1px;
+}
+
+.-ml-0 {
+ margin-left: 0;
+}
+
+.-ml-0\\.5 {
+ margin-left: -.125rem;
+}
+
+.-ml-1 {
+ margin-left: -.25rem;
+}
+
+.-ml-1\\.5 {
+ margin-left: -.375rem;
+}
+
+.-ml-10 {
+ margin-left: -2.5rem;
+}
+
+.-ml-11 {
+ margin-left: -2.75rem;
+}
+
+.-ml-12 {
+ margin-left: -3rem;
+}
+
+.-ml-14 {
+ margin-left: -3.5rem;
+}
+
+.-ml-16 {
+ margin-left: -4rem;
+}
+
+.-ml-2 {
+ margin-left: -.5rem;
+}
+
+.-ml-2\\.5 {
+ margin-left: -.625rem;
+}
+
+.-ml-20 {
+ margin-left: -5rem;
+}
+
+.-ml-24 {
+ margin-left: -6rem;
+}
+
+.-ml-28 {
+ margin-left: -7rem;
+}
+
+.-ml-3 {
+ margin-left: -.75rem;
+}
+
+.-ml-3\\.5 {
+ margin-left: -.875rem;
+}
+
+.-ml-32 {
+ margin-left: -8rem;
+}
+
+.-ml-36 {
+ margin-left: -9rem;
+}
+
+.-ml-4 {
+ margin-left: -1rem;
+}
+
+.-ml-40 {
+ margin-left: -10rem;
+}
+
+.-ml-44 {
+ margin-left: -11rem;
+}
+
+.-ml-48 {
+ margin-left: -12rem;
+}
+
+.-ml-5 {
+ margin-left: -1.25rem;
+}
+
+.-ml-52 {
+ margin-left: -13rem;
+}
+
+.-ml-56 {
+ margin-left: -14rem;
+}
+
+.-ml-6 {
+ margin-left: -1.5rem;
+}
+
+.-ml-60 {
+ margin-left: -15rem;
+}
+
+.-ml-64 {
+ margin-left: -16rem;
+}
+
+.-ml-7 {
+ margin-left: -1.75rem;
+}
+
+.-ml-72 {
+ margin-left: -18rem;
+}
+
+.-ml-8 {
+ margin-left: -2rem;
+}
+
+.-ml-80 {
+ margin-left: -20rem;
+}
+
+.-ml-9 {
+ margin-left: -2.25rem;
+}
+
+.-ml-96 {
+ margin-left: -24rem;
+}
+
+.-ml-px {
+ margin-left: -1px;
+}
+
+.-mr-0 {
+ margin-right: 0;
+}
+
+.-mr-0\\.5 {
+ margin-right: -.125rem;
+}
+
+.-mr-1 {
+ margin-right: -.25rem;
+}
+
+.-mr-1\\.5 {
+ margin-right: -.375rem;
+}
+
+.-mr-10 {
+ margin-right: -2.5rem;
+}
+
+.-mr-11 {
+ margin-right: -2.75rem;
+}
+
+.-mr-12 {
+ margin-right: -3rem;
+}
+
+.-mr-14 {
+ margin-right: -3.5rem;
+}
+
+.-mr-16 {
+ margin-right: -4rem;
+}
+
+.-mr-2 {
+ margin-right: -.5rem;
+}
+
+.-mr-2\\.5 {
+ margin-right: -.625rem;
+}
+
+.-mr-20 {
+ margin-right: -5rem;
+}
+
+.-mr-24 {
+ margin-right: -6rem;
+}
+
+.-mr-28 {
+ margin-right: -7rem;
+}
+
+.-mr-3 {
+ margin-right: -.75rem;
+}
+
+.-mr-3\\.5 {
+ margin-right: -.875rem;
+}
+
+.-mr-32 {
+ margin-right: -8rem;
+}
+
+.-mr-36 {
+ margin-right: -9rem;
+}
+
+.-mr-4 {
+ margin-right: -1rem;
+}
+
+.-mr-40 {
+ margin-right: -10rem;
+}
+
+.-mr-44 {
+ margin-right: -11rem;
+}
+
+.-mr-48 {
+ margin-right: -12rem;
+}
+
+.-mr-5 {
+ margin-right: -1.25rem;
+}
+
+.-mr-52 {
+ margin-right: -13rem;
+}
+
+.-mr-56 {
+ margin-right: -14rem;
+}
+
+.-mr-6 {
+ margin-right: -1.5rem;
+}
+
+.-mr-60 {
+ margin-right: -15rem;
+}
+
+.-mr-64 {
+ margin-right: -16rem;
+}
+
+.-mr-7 {
+ margin-right: -1.75rem;
+}
+
+.-mr-72 {
+ margin-right: -18rem;
+}
+
+.-mr-8 {
+ margin-right: -2rem;
+}
+
+.-mr-80 {
+ margin-right: -20rem;
+}
+
+.-mr-9 {
+ margin-right: -2.25rem;
+}
+
+.-mr-96 {
+ margin-right: -24rem;
+}
+
+.-mr-px {
+ margin-right: -1px;
+}
+
+.-ms-0 {
+ margin-inline-start: 0;
+}
+
+.-ms-0\\.5 {
+ margin-inline-start: -.125rem;
+}
+
+.-ms-1 {
+ margin-inline-start: -.25rem;
+}
+
+.-ms-1\\.5 {
+ margin-inline-start: -.375rem;
+}
+
+.-ms-10 {
+ margin-inline-start: -2.5rem;
+}
+
+.-ms-11 {
+ margin-inline-start: -2.75rem;
+}
+
+.-ms-12 {
+ margin-inline-start: -3rem;
+}
+
+.-ms-14 {
+ margin-inline-start: -3.5rem;
+}
+
+.-ms-16 {
+ margin-inline-start: -4rem;
+}
+
+.-ms-2 {
+ margin-inline-start: -.5rem;
+}
+
+.-ms-2\\.5 {
+ margin-inline-start: -.625rem;
+}
+
+.-ms-20 {
+ margin-inline-start: -5rem;
+}
+
+.-ms-24 {
+ margin-inline-start: -6rem;
+}
+
+.-ms-28 {
+ margin-inline-start: -7rem;
+}
+
+.-ms-3 {
+ margin-inline-start: -.75rem;
+}
+
+.-ms-3\\.5 {
+ margin-inline-start: -.875rem;
+}
+
+.-ms-32 {
+ margin-inline-start: -8rem;
+}
+
+.-ms-36 {
+ margin-inline-start: -9rem;
+}
+
+.-ms-4 {
+ margin-inline-start: -1rem;
+}
+
+.-ms-40 {
+ margin-inline-start: -10rem;
+}
+
+.-ms-44 {
+ margin-inline-start: -11rem;
+}
+
+.-ms-48 {
+ margin-inline-start: -12rem;
+}
+
+.-ms-5 {
+ margin-inline-start: -1.25rem;
+}
+
+.-ms-52 {
+ margin-inline-start: -13rem;
+}
+
+.-ms-56 {
+ margin-inline-start: -14rem;
+}
+
+.-ms-6 {
+ margin-inline-start: -1.5rem;
+}
+
+.-ms-60 {
+ margin-inline-start: -15rem;
+}
+
+.-ms-64 {
+ margin-inline-start: -16rem;
+}
+
+.-ms-7 {
+ margin-inline-start: -1.75rem;
+}
+
+.-ms-72 {
+ margin-inline-start: -18rem;
+}
+
+.-ms-8 {
+ margin-inline-start: -2rem;
+}
+
+.-ms-80 {
+ margin-inline-start: -20rem;
+}
+
+.-ms-9 {
+ margin-inline-start: -2.25rem;
+}
+
+.-ms-96 {
+ margin-inline-start: -24rem;
+}
+
+.-ms-px {
+ margin-inline-start: -1px;
+}
+
+.-mt-0 {
+ margin-top: 0;
+}
+
+.-mt-0\\.5 {
+ margin-top: -.125rem;
+}
+
+.-mt-1 {
+ margin-top: -.25rem;
+}
+
+.-mt-1\\.5 {
+ margin-top: -.375rem;
+}
+
+.-mt-10 {
+ margin-top: -2.5rem;
+}
+
+.-mt-11 {
+ margin-top: -2.75rem;
+}
+
+.-mt-12 {
+ margin-top: -3rem;
+}
+
+.-mt-14 {
+ margin-top: -3.5rem;
+}
+
+.-mt-16 {
+ margin-top: -4rem;
+}
+
+.-mt-2 {
+ margin-top: -.5rem;
+}
+
+.-mt-2\\.5 {
+ margin-top: -.625rem;
+}
+
+.-mt-20 {
+ margin-top: -5rem;
+}
+
+.-mt-24 {
+ margin-top: -6rem;
+}
+
+.-mt-28 {
+ margin-top: -7rem;
+}
+
+.-mt-3 {
+ margin-top: -.75rem;
+}
+
+.-mt-3\\.5 {
+ margin-top: -.875rem;
+}
+
+.-mt-32 {
+ margin-top: -8rem;
+}
+
+.-mt-36 {
+ margin-top: -9rem;
+}
+
+.-mt-4 {
+ margin-top: -1rem;
+}
+
+.-mt-40 {
+ margin-top: -10rem;
+}
+
+.-mt-44 {
+ margin-top: -11rem;
+}
+
+.-mt-48 {
+ margin-top: -12rem;
+}
+
+.-mt-5 {
+ margin-top: -1.25rem;
+}
+
+.-mt-52 {
+ margin-top: -13rem;
+}
+
+.-mt-56 {
+ margin-top: -14rem;
+}
+
+.-mt-6 {
+ margin-top: -1.5rem;
+}
+
+.-mt-60 {
+ margin-top: -15rem;
+}
+
+.-mt-64 {
+ margin-top: -16rem;
+}
+
+.-mt-7 {
+ margin-top: -1.75rem;
+}
+
+.-mt-72 {
+ margin-top: -18rem;
+}
+
+.-mt-8 {
+ margin-top: -2rem;
+}
+
+.-mt-80 {
+ margin-top: -20rem;
+}
+
+.-mt-9 {
+ margin-top: -2.25rem;
+}
+
+.-mt-96 {
+ margin-top: -24rem;
+}
+
+.-mt-px {
+ margin-top: -1px;
+}
+
+.mb-0 {
+ margin-bottom: 0;
+}
+
+.mb-0\\.5 {
+ margin-bottom: .125rem;
+}
+
+.mb-1 {
+ margin-bottom: .25rem;
+}
+
+.mb-1\\.5 {
+ margin-bottom: .375rem;
+}
+
+.mb-10 {
+ margin-bottom: 2.5rem;
+}
+
+.mb-11 {
+ margin-bottom: 2.75rem;
+}
+
+.mb-12 {
+ margin-bottom: 3rem;
+}
+
+.mb-14 {
+ margin-bottom: 3.5rem;
+}
+
+.mb-16 {
+ margin-bottom: 4rem;
+}
+
+.mb-2 {
+ margin-bottom: .5rem;
+}
+
+.mb-2\\.5 {
+ margin-bottom: .625rem;
+}
+
+.mb-20 {
+ margin-bottom: 5rem;
+}
+
+.mb-24 {
+ margin-bottom: 6rem;
+}
+
+.mb-28 {
+ margin-bottom: 7rem;
+}
+
+.mb-3 {
+ margin-bottom: .75rem;
+}
+
+.mb-3\\.5 {
+ margin-bottom: .875rem;
+}
+
+.mb-32 {
+ margin-bottom: 8rem;
+}
+
+.mb-36 {
+ margin-bottom: 9rem;
+}
+
+.mb-4 {
+ margin-bottom: 1rem;
+}
+
+.mb-40 {
+ margin-bottom: 10rem;
+}
+
+.mb-44 {
+ margin-bottom: 11rem;
+}
+
+.mb-48 {
+ margin-bottom: 12rem;
+}
+
+.mb-5 {
+ margin-bottom: 1.25rem;
+}
+
+.mb-52 {
+ margin-bottom: 13rem;
+}
+
+.mb-56 {
+ margin-bottom: 14rem;
+}
+
+.mb-6 {
+ margin-bottom: 1.5rem;
+}
+
+.mb-60 {
+ margin-bottom: 15rem;
+}
+
+.mb-64 {
+ margin-bottom: 16rem;
+}
+
+.mb-7 {
+ margin-bottom: 1.75rem;
+}
+
+.mb-72 {
+ margin-bottom: 18rem;
+}
+
+.mb-8 {
+ margin-bottom: 2rem;
+}
+
+.mb-80 {
+ margin-bottom: 20rem;
+}
+
+.mb-9 {
+ margin-bottom: 2.25rem;
+}
+
+.mb-96 {
+ margin-bottom: 24rem;
+}
+
+.mb-auto {
+ margin-bottom: auto;
+}
+
+.mb-px {
+ margin-bottom: 1px;
+}
+
+.me-0 {
+ margin-inline-end: 0;
+}
+
+.me-0\\.5 {
+ margin-inline-end: .125rem;
+}
+
+.me-1 {
+ margin-inline-end: .25rem;
+}
+
+.me-1\\.5 {
+ margin-inline-end: .375rem;
+}
+
+.me-10 {
+ margin-inline-end: 2.5rem;
+}
+
+.me-11 {
+ margin-inline-end: 2.75rem;
+}
+
+.me-12 {
+ margin-inline-end: 3rem;
+}
+
+.me-14 {
+ margin-inline-end: 3.5rem;
+}
+
+.me-16 {
+ margin-inline-end: 4rem;
+}
+
+.me-2 {
+ margin-inline-end: .5rem;
+}
+
+.me-2\\.5 {
+ margin-inline-end: .625rem;
+}
+
+.me-20 {
+ margin-inline-end: 5rem;
+}
+
+.me-24 {
+ margin-inline-end: 6rem;
+}
+
+.me-28 {
+ margin-inline-end: 7rem;
+}
+
+.me-3 {
+ margin-inline-end: .75rem;
+}
+
+.me-3\\.5 {
+ margin-inline-end: .875rem;
+}
+
+.me-32 {
+ margin-inline-end: 8rem;
+}
+
+.me-36 {
+ margin-inline-end: 9rem;
+}
+
+.me-4 {
+ margin-inline-end: 1rem;
+}
+
+.me-40 {
+ margin-inline-end: 10rem;
+}
+
+.me-44 {
+ margin-inline-end: 11rem;
+}
+
+.me-48 {
+ margin-inline-end: 12rem;
+}
+
+.me-5 {
+ margin-inline-end: 1.25rem;
+}
+
+.me-52 {
+ margin-inline-end: 13rem;
+}
+
+.me-56 {
+ margin-inline-end: 14rem;
+}
+
+.me-6 {
+ margin-inline-end: 1.5rem;
+}
+
+.me-60 {
+ margin-inline-end: 15rem;
+}
+
+.me-64 {
+ margin-inline-end: 16rem;
+}
+
+.me-7 {
+ margin-inline-end: 1.75rem;
+}
+
+.me-72 {
+ margin-inline-end: 18rem;
+}
+
+.me-8 {
+ margin-inline-end: 2rem;
+}
+
+.me-80 {
+ margin-inline-end: 20rem;
+}
+
+.me-9 {
+ margin-inline-end: 2.25rem;
+}
+
+.me-96 {
+ margin-inline-end: 24rem;
+}
+
+.me-auto {
+ margin-inline-end: auto;
+}
+
+.me-px {
+ margin-inline-end: 1px;
+}
+
+.ml-0 {
+ margin-left: 0;
+}
+
+.ml-0\\.5 {
+ margin-left: .125rem;
+}
+
+.ml-1 {
+ margin-left: .25rem;
+}
+
+.ml-1\\.5 {
+ margin-left: .375rem;
+}
+
+.ml-10 {
+ margin-left: 2.5rem;
+}
+
+.ml-11 {
+ margin-left: 2.75rem;
+}
+
+.ml-12 {
+ margin-left: 3rem;
+}
+
+.ml-14 {
+ margin-left: 3.5rem;
+}
+
+.ml-16 {
+ margin-left: 4rem;
+}
+
+.ml-2 {
+ margin-left: .5rem;
+}
+
+.ml-2\\.5 {
+ margin-left: .625rem;
+}
+
+.ml-20 {
+ margin-left: 5rem;
+}
+
+.ml-24 {
+ margin-left: 6rem;
+}
+
+.ml-28 {
+ margin-left: 7rem;
+}
+
+.ml-3 {
+ margin-left: .75rem;
+}
+
+.ml-3\\.5 {
+ margin-left: .875rem;
+}
+
+.ml-32 {
+ margin-left: 8rem;
+}
+
+.ml-36 {
+ margin-left: 9rem;
+}
+
+.ml-4 {
+ margin-left: 1rem;
+}
+
+.ml-40 {
+ margin-left: 10rem;
+}
+
+.ml-44 {
+ margin-left: 11rem;
+}
+
+.ml-48 {
+ margin-left: 12rem;
+}
+
+.ml-5 {
+ margin-left: 1.25rem;
+}
+
+.ml-52 {
+ margin-left: 13rem;
+}
+
+.ml-56 {
+ margin-left: 14rem;
+}
+
+.ml-6 {
+ margin-left: 1.5rem;
+}
+
+.ml-60 {
+ margin-left: 15rem;
+}
+
+.ml-64 {
+ margin-left: 16rem;
+}
+
+.ml-7 {
+ margin-left: 1.75rem;
+}
+
+.ml-72 {
+ margin-left: 18rem;
+}
+
+.ml-8 {
+ margin-left: 2rem;
+}
+
+.ml-80 {
+ margin-left: 20rem;
+}
+
+.ml-9 {
+ margin-left: 2.25rem;
+}
+
+.ml-96 {
+ margin-left: 24rem;
+}
+
+.ml-auto {
+ margin-left: auto;
+}
+
+.ml-px {
+ margin-left: 1px;
+}
+
+.mr-0 {
+ margin-right: 0;
+}
+
+.mr-0\\.5 {
+ margin-right: .125rem;
+}
+
+.mr-1 {
+ margin-right: .25rem;
+}
+
+.mr-1\\.5 {
+ margin-right: .375rem;
+}
+
+.mr-10 {
+ margin-right: 2.5rem;
+}
+
+.mr-11 {
+ margin-right: 2.75rem;
+}
+
+.mr-12 {
+ margin-right: 3rem;
+}
+
+.mr-14 {
+ margin-right: 3.5rem;
+}
+
+.mr-16 {
+ margin-right: 4rem;
+}
+
+.mr-2 {
+ margin-right: .5rem;
+}
+
+.mr-2\\.5 {
+ margin-right: .625rem;
+}
+
+.mr-20 {
+ margin-right: 5rem;
+}
+
+.mr-24 {
+ margin-right: 6rem;
+}
+
+.mr-28 {
+ margin-right: 7rem;
+}
+
+.mr-3 {
+ margin-right: .75rem;
+}
+
+.mr-3\\.5 {
+ margin-right: .875rem;
+}
+
+.mr-32 {
+ margin-right: 8rem;
+}
+
+.mr-36 {
+ margin-right: 9rem;
+}
+
+.mr-4 {
+ margin-right: 1rem;
+}
+
+.mr-40 {
+ margin-right: 10rem;
+}
+
+.mr-44 {
+ margin-right: 11rem;
+}
+
+.mr-48 {
+ margin-right: 12rem;
+}
+
+.mr-5 {
+ margin-right: 1.25rem;
+}
+
+.mr-52 {
+ margin-right: 13rem;
+}
+
+.mr-56 {
+ margin-right: 14rem;
+}
+
+.mr-6 {
+ margin-right: 1.5rem;
+}
+
+.mr-60 {
+ margin-right: 15rem;
+}
+
+.mr-64 {
+ margin-right: 16rem;
+}
+
+.mr-7 {
+ margin-right: 1.75rem;
+}
+
+.mr-72 {
+ margin-right: 18rem;
+}
+
+.mr-8 {
+ margin-right: 2rem;
+}
+
+.mr-80 {
+ margin-right: 20rem;
+}
+
+.mr-9 {
+ margin-right: 2.25rem;
+}
+
+.mr-96 {
+ margin-right: 24rem;
+}
+
+.mr-auto {
+ margin-right: auto;
+}
+
+.mr-px {
+ margin-right: 1px;
+}
+
+.ms-0 {
+ margin-inline-start: 0;
+}
+
+.ms-0\\.5 {
+ margin-inline-start: .125rem;
+}
+
+.ms-1 {
+ margin-inline-start: .25rem;
+}
+
+.ms-1\\.5 {
+ margin-inline-start: .375rem;
+}
+
+.ms-10 {
+ margin-inline-start: 2.5rem;
+}
+
+.ms-11 {
+ margin-inline-start: 2.75rem;
+}
+
+.ms-12 {
+ margin-inline-start: 3rem;
+}
+
+.ms-14 {
+ margin-inline-start: 3.5rem;
+}
+
+.ms-16 {
+ margin-inline-start: 4rem;
+}
+
+.ms-2 {
+ margin-inline-start: .5rem;
+}
+
+.ms-2\\.5 {
+ margin-inline-start: .625rem;
+}
+
+.ms-20 {
+ margin-inline-start: 5rem;
+}
+
+.ms-24 {
+ margin-inline-start: 6rem;
+}
+
+.ms-28 {
+ margin-inline-start: 7rem;
+}
+
+.ms-3 {
+ margin-inline-start: .75rem;
+}
+
+.ms-3\\.5 {
+ margin-inline-start: .875rem;
+}
+
+.ms-32 {
+ margin-inline-start: 8rem;
+}
+
+.ms-36 {
+ margin-inline-start: 9rem;
+}
+
+.ms-4 {
+ margin-inline-start: 1rem;
+}
+
+.ms-40 {
+ margin-inline-start: 10rem;
+}
+
+.ms-44 {
+ margin-inline-start: 11rem;
+}
+
+.ms-48 {
+ margin-inline-start: 12rem;
+}
+
+.ms-5 {
+ margin-inline-start: 1.25rem;
+}
+
+.ms-52 {
+ margin-inline-start: 13rem;
+}
+
+.ms-56 {
+ margin-inline-start: 14rem;
+}
+
+.ms-6 {
+ margin-inline-start: 1.5rem;
+}
+
+.ms-60 {
+ margin-inline-start: 15rem;
+}
+
+.ms-64 {
+ margin-inline-start: 16rem;
+}
+
+.ms-7 {
+ margin-inline-start: 1.75rem;
+}
+
+.ms-72 {
+ margin-inline-start: 18rem;
+}
+
+.ms-8 {
+ margin-inline-start: 2rem;
+}
+
+.ms-80 {
+ margin-inline-start: 20rem;
+}
+
+.ms-9 {
+ margin-inline-start: 2.25rem;
+}
+
+.ms-96 {
+ margin-inline-start: 24rem;
+}
+
+.ms-auto {
+ margin-inline-start: auto;
+}
+
+.ms-px {
+ margin-inline-start: 1px;
+}
+
+.mt-0 {
+ margin-top: 0;
+}
+
+.mt-0\\.5 {
+ margin-top: .125rem;
+}
+
+.mt-1 {
+ margin-top: .25rem;
+}
+
+.mt-1\\.5 {
+ margin-top: .375rem;
+}
+
+.mt-10 {
+ margin-top: 2.5rem;
+}
+
+.mt-11 {
+ margin-top: 2.75rem;
+}
+
+.mt-12 {
+ margin-top: 3rem;
+}
+
+.mt-14 {
+ margin-top: 3.5rem;
+}
+
+.mt-16 {
+ margin-top: 4rem;
+}
+
+.mt-2 {
+ margin-top: .5rem;
+}
+
+.mt-2\\.5 {
+ margin-top: .625rem;
+}
+
+.mt-20 {
+ margin-top: 5rem;
+}
+
+.mt-24 {
+ margin-top: 6rem;
+}
+
+.mt-28 {
+ margin-top: 7rem;
+}
+
+.mt-3 {
+ margin-top: .75rem;
+}
+
+.mt-3\\.5 {
+ margin-top: .875rem;
+}
+
+.mt-32 {
+ margin-top: 8rem;
+}
+
+.mt-36 {
+ margin-top: 9rem;
+}
+
+.mt-4 {
+ margin-top: 1rem;
+}
+
+.mt-40 {
+ margin-top: 10rem;
+}
+
+.mt-44 {
+ margin-top: 11rem;
+}
+
+.mt-48 {
+ margin-top: 12rem;
+}
+
+.mt-5 {
+ margin-top: 1.25rem;
+}
+
+.mt-52 {
+ margin-top: 13rem;
+}
+
+.mt-56 {
+ margin-top: 14rem;
+}
+
+.mt-6 {
+ margin-top: 1.5rem;
+}
+
+.mt-60 {
+ margin-top: 15rem;
+}
+
+.mt-64 {
+ margin-top: 16rem;
+}
+
+.mt-7 {
+ margin-top: 1.75rem;
+}
+
+.mt-72 {
+ margin-top: 18rem;
+}
+
+.mt-8 {
+ margin-top: 2rem;
+}
+
+.mt-80 {
+ margin-top: 20rem;
+}
+
+.mt-9 {
+ margin-top: 2.25rem;
+}
+
+.mt-96 {
+ margin-top: 24rem;
+}
+
+.mt-auto {
+ margin-top: auto;
+}
+
+.mt-px {
+ margin-top: 1px;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/maxHeight.test.js.snap b/tests/plugins/__snapshots__/maxHeight.test.js.snap
new file mode 100644
index 000000000..9fd32cca0
--- /dev/null
+++ b/tests/plugins/__snapshots__/maxHeight.test.js.snap
@@ -0,0 +1,190 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'maxHeight' plugin 1`] = `
+"
+.max-h-0 {
+ max-height: 0;
+}
+
+.max-h-0\\.5 {
+ max-height: .125rem;
+}
+
+.max-h-1 {
+ max-height: .25rem;
+}
+
+.max-h-1\\.5 {
+ max-height: .375rem;
+}
+
+.max-h-10 {
+ max-height: 2.5rem;
+}
+
+.max-h-11 {
+ max-height: 2.75rem;
+}
+
+.max-h-12 {
+ max-height: 3rem;
+}
+
+.max-h-14 {
+ max-height: 3.5rem;
+}
+
+.max-h-16 {
+ max-height: 4rem;
+}
+
+.max-h-2 {
+ max-height: .5rem;
+}
+
+.max-h-2\\.5 {
+ max-height: .625rem;
+}
+
+.max-h-20 {
+ max-height: 5rem;
+}
+
+.max-h-24 {
+ max-height: 6rem;
+}
+
+.max-h-28 {
+ max-height: 7rem;
+}
+
+.max-h-3 {
+ max-height: .75rem;
+}
+
+.max-h-3\\.5 {
+ max-height: .875rem;
+}
+
+.max-h-32 {
+ max-height: 8rem;
+}
+
+.max-h-36 {
+ max-height: 9rem;
+}
+
+.max-h-4 {
+ max-height: 1rem;
+}
+
+.max-h-40 {
+ max-height: 10rem;
+}
+
+.max-h-44 {
+ max-height: 11rem;
+}
+
+.max-h-48 {
+ max-height: 12rem;
+}
+
+.max-h-5 {
+ max-height: 1.25rem;
+}
+
+.max-h-52 {
+ max-height: 13rem;
+}
+
+.max-h-56 {
+ max-height: 14rem;
+}
+
+.max-h-6 {
+ max-height: 1.5rem;
+}
+
+.max-h-60 {
+ max-height: 15rem;
+}
+
+.max-h-64 {
+ max-height: 16rem;
+}
+
+.max-h-7 {
+ max-height: 1.75rem;
+}
+
+.max-h-72 {
+ max-height: 18rem;
+}
+
+.max-h-8 {
+ max-height: 2rem;
+}
+
+.max-h-80 {
+ max-height: 20rem;
+}
+
+.max-h-9 {
+ max-height: 2.25rem;
+}
+
+.max-h-96 {
+ max-height: 24rem;
+}
+
+.max-h-\\[12px\\] {
+ max-height: 12px;
+}
+
+.max-h-\\[var\\(--my-value\\)\\] {
+ max-height: var(--my-value);
+}
+
+.max-h-dvh {
+ max-height: 100dvh;
+}
+
+.max-h-fit {
+ max-height: -moz-fit-content;
+ max-height: fit-content;
+}
+
+.max-h-full {
+ max-height: 100%;
+}
+
+.max-h-lvh {
+ max-height: 100lvh;
+}
+
+.max-h-max {
+ max-height: max-content;
+}
+
+.max-h-min {
+ max-height: min-content;
+}
+
+.max-h-none {
+ max-height: none;
+}
+
+.max-h-px {
+ max-height: 1px;
+}
+
+.max-h-screen {
+ max-height: 100vh;
+}
+
+.max-h-svh {
+ max-height: 100svh;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/maxWidth.test.js.snap b/tests/plugins/__snapshots__/maxWidth.test.js.snap
new file mode 100644
index 000000000..74c3e2e75
--- /dev/null
+++ b/tests/plugins/__snapshots__/maxWidth.test.js.snap
@@ -0,0 +1,242 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'maxWidth' plugin 1`] = `
+"
+.max-w-0 {
+ max-width: 0;
+}
+
+.max-w-0\\.5 {
+ max-width: .125rem;
+}
+
+.max-w-1 {
+ max-width: .25rem;
+}
+
+.max-w-1\\.5 {
+ max-width: .375rem;
+}
+
+.max-w-10 {
+ max-width: 2.5rem;
+}
+
+.max-w-11 {
+ max-width: 2.75rem;
+}
+
+.max-w-12 {
+ max-width: 3rem;
+}
+
+.max-w-14 {
+ max-width: 3.5rem;
+}
+
+.max-w-16 {
+ max-width: 4rem;
+}
+
+.max-w-2 {
+ max-width: .5rem;
+}
+
+.max-w-2\\.5 {
+ max-width: .625rem;
+}
+
+.max-w-20 {
+ max-width: 5rem;
+}
+
+.max-w-24 {
+ max-width: 6rem;
+}
+
+.max-w-28 {
+ max-width: 7rem;
+}
+
+.max-w-2xl {
+ max-width: 42rem;
+}
+
+.max-w-3 {
+ max-width: .75rem;
+}
+
+.max-w-3\\.5 {
+ max-width: .875rem;
+}
+
+.max-w-32 {
+ max-width: 8rem;
+}
+
+.max-w-36 {
+ max-width: 9rem;
+}
+
+.max-w-3xl {
+ max-width: 48rem;
+}
+
+.max-w-4 {
+ max-width: 1rem;
+}
+
+.max-w-40 {
+ max-width: 10rem;
+}
+
+.max-w-44 {
+ max-width: 11rem;
+}
+
+.max-w-48 {
+ max-width: 12rem;
+}
+
+.max-w-4xl {
+ max-width: 56rem;
+}
+
+.max-w-5 {
+ max-width: 1.25rem;
+}
+
+.max-w-52 {
+ max-width: 13rem;
+}
+
+.max-w-56 {
+ max-width: 14rem;
+}
+
+.max-w-5xl {
+ max-width: 64rem;
+}
+
+.max-w-6 {
+ max-width: 1.5rem;
+}
+
+.max-w-60 {
+ max-width: 15rem;
+}
+
+.max-w-64 {
+ max-width: 16rem;
+}
+
+.max-w-6xl {
+ max-width: 72rem;
+}
+
+.max-w-7 {
+ max-width: 1.75rem;
+}
+
+.max-w-72 {
+ max-width: 18rem;
+}
+
+.max-w-7xl {
+ max-width: 80rem;
+}
+
+.max-w-8 {
+ max-width: 2rem;
+}
+
+.max-w-80 {
+ max-width: 20rem;
+}
+
+.max-w-9 {
+ max-width: 2.25rem;
+}
+
+.max-w-96 {
+ max-width: 24rem;
+}
+
+.max-w-\\[12px\\] {
+ max-width: 12px;
+}
+
+.max-w-\\[var\\(--my-value\\)\\] {
+ max-width: var(--my-value);
+}
+
+.max-w-fit {
+ max-width: -moz-fit-content;
+ max-width: fit-content;
+}
+
+.max-w-full {
+ max-width: 100%;
+}
+
+.max-w-lg {
+ max-width: 32rem;
+}
+
+.max-w-max {
+ max-width: max-content;
+}
+
+.max-w-md {
+ max-width: 28rem;
+}
+
+.max-w-min {
+ max-width: min-content;
+}
+
+.max-w-none {
+ max-width: none;
+}
+
+.max-w-prose {
+ max-width: 65ch;
+}
+
+.max-w-px {
+ max-width: 1px;
+}
+
+.max-w-screen-2xl {
+ max-width: 1536px;
+}
+
+.max-w-screen-lg {
+ max-width: 1024px;
+}
+
+.max-w-screen-md {
+ max-width: 768px;
+}
+
+.max-w-screen-sm {
+ max-width: 640px;
+}
+
+.max-w-screen-xl {
+ max-width: 1280px;
+}
+
+.max-w-sm {
+ max-width: 24rem;
+}
+
+.max-w-xl {
+ max-width: 36rem;
+}
+
+.max-w-xs {
+ max-width: 20rem;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/minHeight.test.js.snap b/tests/plugins/__snapshots__/minHeight.test.js.snap
new file mode 100644
index 000000000..990c6bedf
--- /dev/null
+++ b/tests/plugins/__snapshots__/minHeight.test.js.snap
@@ -0,0 +1,186 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'minHeight' plugin 1`] = `
+"
+.min-h-0 {
+ min-height: 0;
+}
+
+.min-h-0\\.5 {
+ min-height: .125rem;
+}
+
+.min-h-1 {
+ min-height: .25rem;
+}
+
+.min-h-1\\.5 {
+ min-height: .375rem;
+}
+
+.min-h-10 {
+ min-height: 2.5rem;
+}
+
+.min-h-11 {
+ min-height: 2.75rem;
+}
+
+.min-h-12 {
+ min-height: 3rem;
+}
+
+.min-h-14 {
+ min-height: 3.5rem;
+}
+
+.min-h-16 {
+ min-height: 4rem;
+}
+
+.min-h-2 {
+ min-height: .5rem;
+}
+
+.min-h-2\\.5 {
+ min-height: .625rem;
+}
+
+.min-h-20 {
+ min-height: 5rem;
+}
+
+.min-h-24 {
+ min-height: 6rem;
+}
+
+.min-h-28 {
+ min-height: 7rem;
+}
+
+.min-h-3 {
+ min-height: .75rem;
+}
+
+.min-h-3\\.5 {
+ min-height: .875rem;
+}
+
+.min-h-32 {
+ min-height: 8rem;
+}
+
+.min-h-36 {
+ min-height: 9rem;
+}
+
+.min-h-4 {
+ min-height: 1rem;
+}
+
+.min-h-40 {
+ min-height: 10rem;
+}
+
+.min-h-44 {
+ min-height: 11rem;
+}
+
+.min-h-48 {
+ min-height: 12rem;
+}
+
+.min-h-5 {
+ min-height: 1.25rem;
+}
+
+.min-h-52 {
+ min-height: 13rem;
+}
+
+.min-h-56 {
+ min-height: 14rem;
+}
+
+.min-h-6 {
+ min-height: 1.5rem;
+}
+
+.min-h-60 {
+ min-height: 15rem;
+}
+
+.min-h-64 {
+ min-height: 16rem;
+}
+
+.min-h-7 {
+ min-height: 1.75rem;
+}
+
+.min-h-72 {
+ min-height: 18rem;
+}
+
+.min-h-8 {
+ min-height: 2rem;
+}
+
+.min-h-80 {
+ min-height: 20rem;
+}
+
+.min-h-9 {
+ min-height: 2.25rem;
+}
+
+.min-h-96 {
+ min-height: 24rem;
+}
+
+.min-h-\\[12px\\] {
+ min-height: 12px;
+}
+
+.min-h-\\[var\\(--my-value\\)\\] {
+ min-height: var(--my-value);
+}
+
+.min-h-dvh {
+ min-height: 100dvh;
+}
+
+.min-h-fit {
+ min-height: -moz-fit-content;
+ min-height: fit-content;
+}
+
+.min-h-full {
+ min-height: 100%;
+}
+
+.min-h-lvh {
+ min-height: 100lvh;
+}
+
+.min-h-max {
+ min-height: max-content;
+}
+
+.min-h-min {
+ min-height: min-content;
+}
+
+.min-h-px {
+ min-height: 1px;
+}
+
+.min-h-screen {
+ min-height: 100vh;
+}
+
+.min-h-svh {
+ min-height: 100svh;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/minWidth.test.js.snap b/tests/plugins/__snapshots__/minWidth.test.js.snap
new file mode 100644
index 000000000..5d8ad7d99
--- /dev/null
+++ b/tests/plugins/__snapshots__/minWidth.test.js.snap
@@ -0,0 +1,170 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'minWidth' plugin 1`] = `
+"
+.min-w-0 {
+ min-width: 0;
+}
+
+.min-w-0\\.5 {
+ min-width: .125rem;
+}
+
+.min-w-1 {
+ min-width: .25rem;
+}
+
+.min-w-1\\.5 {
+ min-width: .375rem;
+}
+
+.min-w-10 {
+ min-width: 2.5rem;
+}
+
+.min-w-11 {
+ min-width: 2.75rem;
+}
+
+.min-w-12 {
+ min-width: 3rem;
+}
+
+.min-w-14 {
+ min-width: 3.5rem;
+}
+
+.min-w-16 {
+ min-width: 4rem;
+}
+
+.min-w-2 {
+ min-width: .5rem;
+}
+
+.min-w-2\\.5 {
+ min-width: .625rem;
+}
+
+.min-w-20 {
+ min-width: 5rem;
+}
+
+.min-w-24 {
+ min-width: 6rem;
+}
+
+.min-w-28 {
+ min-width: 7rem;
+}
+
+.min-w-3 {
+ min-width: .75rem;
+}
+
+.min-w-3\\.5 {
+ min-width: .875rem;
+}
+
+.min-w-32 {
+ min-width: 8rem;
+}
+
+.min-w-36 {
+ min-width: 9rem;
+}
+
+.min-w-4 {
+ min-width: 1rem;
+}
+
+.min-w-40 {
+ min-width: 10rem;
+}
+
+.min-w-44 {
+ min-width: 11rem;
+}
+
+.min-w-48 {
+ min-width: 12rem;
+}
+
+.min-w-5 {
+ min-width: 1.25rem;
+}
+
+.min-w-52 {
+ min-width: 13rem;
+}
+
+.min-w-56 {
+ min-width: 14rem;
+}
+
+.min-w-6 {
+ min-width: 1.5rem;
+}
+
+.min-w-60 {
+ min-width: 15rem;
+}
+
+.min-w-64 {
+ min-width: 16rem;
+}
+
+.min-w-7 {
+ min-width: 1.75rem;
+}
+
+.min-w-72 {
+ min-width: 18rem;
+}
+
+.min-w-8 {
+ min-width: 2rem;
+}
+
+.min-w-80 {
+ min-width: 20rem;
+}
+
+.min-w-9 {
+ min-width: 2.25rem;
+}
+
+.min-w-96 {
+ min-width: 24rem;
+}
+
+.min-w-\\[12px\\] {
+ min-width: 12px;
+}
+
+.min-w-\\[var\\(--my-value\\)\\] {
+ min-width: var(--my-value);
+}
+
+.min-w-fit {
+ min-width: -moz-fit-content;
+ min-width: fit-content;
+}
+
+.min-w-full {
+ min-width: 100%;
+}
+
+.min-w-max {
+ min-width: max-content;
+}
+
+.min-w-min {
+ min-width: min-content;
+}
+
+.min-w-px {
+ min-width: 1px;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/mixBlendMode.test.js.snap b/tests/plugins/__snapshots__/mixBlendMode.test.js.snap
new file mode 100644
index 000000000..c8be25be0
--- /dev/null
+++ b/tests/plugins/__snapshots__/mixBlendMode.test.js.snap
@@ -0,0 +1,73 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'mixBlendMode' plugin 1`] = `
+"
+.mix-blend-normal {
+ mix-blend-mode: normal;
+}
+
+.mix-blend-multiply {
+ mix-blend-mode: multiply;
+}
+
+.mix-blend-screen {
+ mix-blend-mode: screen;
+}
+
+.mix-blend-overlay {
+ mix-blend-mode: overlay;
+}
+
+.mix-blend-darken {
+ mix-blend-mode: darken;
+}
+
+.mix-blend-lighten {
+ mix-blend-mode: lighten;
+}
+
+.mix-blend-color-dodge {
+ mix-blend-mode: color-dodge;
+}
+
+.mix-blend-color-burn {
+ mix-blend-mode: color-burn;
+}
+
+.mix-blend-hard-light {
+ mix-blend-mode: hard-light;
+}
+
+.mix-blend-soft-light {
+ mix-blend-mode: soft-light;
+}
+
+.mix-blend-difference {
+ mix-blend-mode: difference;
+}
+
+.mix-blend-exclusion {
+ mix-blend-mode: exclusion;
+}
+
+.mix-blend-hue {
+ mix-blend-mode: hue;
+}
+
+.mix-blend-saturation {
+ mix-blend-mode: saturation;
+}
+
+.mix-blend-color {
+ mix-blend-mode: color;
+}
+
+.mix-blend-luminosity {
+ mix-blend-mode: luminosity;
+}
+
+.mix-blend-plus-lighter {
+ mix-blend-mode: plus-lighter;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/objectFit.test.js.snap b/tests/plugins/__snapshots__/objectFit.test.js.snap
new file mode 100644
index 000000000..95795bde9
--- /dev/null
+++ b/tests/plugins/__snapshots__/objectFit.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'objectFit' plugin 1`] = `
+"
+.object-contain {
+ object-fit: contain;
+}
+
+.object-cover {
+ object-fit: cover;
+}
+
+.object-fill {
+ object-fit: fill;
+}
+
+.object-none {
+ object-fit: none;
+}
+
+.object-scale-down {
+ object-fit: scale-down;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/objectPosition.test.js.snap b/tests/plugins/__snapshots__/objectPosition.test.js.snap
new file mode 100644
index 000000000..77ab7998a
--- /dev/null
+++ b/tests/plugins/__snapshots__/objectPosition.test.js.snap
@@ -0,0 +1,49 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'objectPosition' plugin 1`] = `
+"
+.object-\\[top\\,center\\] {
+ object-position: top center;
+}
+
+.object-\\[var\\(--my-value\\)\\] {
+ object-position: var(--my-value);
+}
+
+.object-bottom {
+ object-position: bottom;
+}
+
+.object-center {
+ object-position: center;
+}
+
+.object-left {
+ object-position: left;
+}
+
+.object-left-bottom {
+ object-position: left bottom;
+}
+
+.object-left-top {
+ object-position: left top;
+}
+
+.object-right {
+ object-position: right;
+}
+
+.object-right-bottom {
+ object-position: right bottom;
+}
+
+.object-right-top {
+ object-position: right top;
+}
+
+.object-top {
+ object-position: top;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/opacity.test.js.snap b/tests/plugins/__snapshots__/opacity.test.js.snap
new file mode 100644
index 000000000..94de4e3b3
--- /dev/null
+++ b/tests/plugins/__snapshots__/opacity.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'opacity' plugin 1`] = `
+"
+.opacity-0 {
+ opacity: 0;
+}
+
+.opacity-50 {
+ opacity: .5;
+}
+
+.opacity-\\[12\\%\\] {
+ opacity: .12;
+}
+
+.opacity-\\[var\\(--my-value\\)\\] {
+ opacity: var(--my-value);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/order.test.js.snap b/tests/plugins/__snapshots__/order.test.js.snap
new file mode 100644
index 000000000..8e7d946b2
--- /dev/null
+++ b/tests/plugins/__snapshots__/order.test.js.snap
@@ -0,0 +1,133 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'order' plugin 1`] = `
+"
+.-order-1 {
+ order: -1;
+}
+
+.-order-10 {
+ order: -10;
+}
+
+.-order-11 {
+ order: -11;
+}
+
+.-order-12 {
+ order: -12;
+}
+
+.-order-2 {
+ order: -2;
+}
+
+.-order-3 {
+ order: -3;
+}
+
+.-order-4 {
+ order: -4;
+}
+
+.-order-5 {
+ order: -5;
+}
+
+.-order-6 {
+ order: -6;
+}
+
+.-order-7 {
+ order: -7;
+}
+
+.-order-8 {
+ order: -8;
+}
+
+.-order-9 {
+ order: -9;
+}
+
+.-order-first {
+ order: 9999;
+}
+
+.-order-last {
+ order: -9999;
+}
+
+.-order-none {
+ order: 0;
+}
+
+.order-1 {
+ order: 1;
+}
+
+.order-10 {
+ order: 10;
+}
+
+.order-11 {
+ order: 11;
+}
+
+.order-12 {
+ order: 12;
+}
+
+.order-2 {
+ order: 2;
+}
+
+.order-3 {
+ order: 3;
+}
+
+.order-4 {
+ order: 4;
+}
+
+.order-5 {
+ order: 5;
+}
+
+.order-6 {
+ order: 6;
+}
+
+.order-7 {
+ order: 7;
+}
+
+.order-8 {
+ order: 8;
+}
+
+.order-9 {
+ order: 9;
+}
+
+.order-\\[13\\] {
+ order: 13;
+}
+
+.order-\\[var\\(--my-value\\)\\] {
+ order: var(--my-value);
+}
+
+.order-first {
+ order: -9999;
+}
+
+.order-last {
+ order: 9999;
+}
+
+.order-none {
+ order: 0;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/outlineColor.test.js.snap b/tests/plugins/__snapshots__/outlineColor.test.js.snap
new file mode 100644
index 000000000..476a53c92
--- /dev/null
+++ b/tests/plugins/__snapshots__/outlineColor.test.js.snap
@@ -0,0 +1,57 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'outlineColor' plugin 1`] = `
+"
+.outline-\\[\\#0088cc\\] {
+ outline-color: #08c;
+}
+
+.outline-\\[var\\(--my-value\\)\\] {
+ outline-color: var(--my-value);
+}
+
+.outline-black {
+ outline-color: #000;
+}
+
+.outline-black\\/0 {
+ outline-color: #0000;
+}
+
+.outline-black\\/50 {
+ outline-color: #00000080;
+}
+
+.outline-red-100 {
+ outline-color: #fee2e2;
+}
+
+.outline-red-100\\/0 {
+ outline-color: #fee2e200;
+}
+
+.outline-red-100\\/50 {
+ outline-color: #fee2e280;
+}
+
+.outline-red-200 {
+ outline-color: #fecaca;
+}
+
+.outline-red-200\\/0 {
+ outline-color: #fecaca00;
+}
+
+.outline-red-200\\/50 {
+ outline-color: #fecaca80;
+}
+
+.outline-transparent, .outline-transparent\\/0 {
+ outline-color: #0000;
+}
+
+.outline-transparent\\/50 {
+ outline-color: #00000080;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/outlineOffset.test.js.snap b/tests/plugins/__snapshots__/outlineOffset.test.js.snap
new file mode 100644
index 000000000..3279ce753
--- /dev/null
+++ b/tests/plugins/__snapshots__/outlineOffset.test.js.snap
@@ -0,0 +1,61 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'outlineOffset' plugin 1`] = `
+"
+.-outline-offset-0 {
+ outline-offset: -0px;
+}
+
+.-outline-offset-1 {
+ outline-offset: -1px;
+}
+
+.-outline-offset-2 {
+ outline-offset: -2px;
+}
+
+.-outline-offset-4 {
+ outline-offset: -4px;
+}
+
+.-outline-offset-8 {
+ outline-offset: -8px;
+}
+
+.outline-offset-0 {
+ outline-offset: 0px;
+}
+
+.outline-offset-1 {
+ outline-offset: 1px;
+}
+
+.outline-offset-2 {
+ outline-offset: 2px;
+}
+
+.outline-offset-4 {
+ outline-offset: 4px;
+}
+
+.outline-offset-8 {
+ outline-offset: 8px;
+}
+
+.outline-offset-\\[12px\\] {
+ outline-offset: 12px;
+}
+
+.outline-offset-\\[34\\%\\] {
+ outline-offset: 34%;
+}
+
+.outline-offset-\\[56\\] {
+ outline-offset: 56;
+}
+
+.outline-offset-\\[var\\(--my-value\\)\\] {
+ outline-offset: var(--my-value);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/outlineStyle.test.js.snap b/tests/plugins/__snapshots__/outlineStyle.test.js.snap
new file mode 100644
index 000000000..33b37bbbb
--- /dev/null
+++ b/tests/plugins/__snapshots__/outlineStyle.test.js.snap
@@ -0,0 +1,26 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'outlineStyle' plugin 1`] = `
+"
+.outline-none {
+ outline-offset: 2px;
+ outline: 2px solid #0000;
+}
+
+.outline {
+ outline-style: solid;
+}
+
+.outline-dashed {
+ outline-style: dashed;
+}
+
+.outline-dotted {
+ outline-style: dotted;
+}
+
+.outline-double {
+ outline-style: double;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/outlineWidth.test.js.snap b/tests/plugins/__snapshots__/outlineWidth.test.js.snap
new file mode 100644
index 000000000..5a8dbaeac
--- /dev/null
+++ b/tests/plugins/__snapshots__/outlineWidth.test.js.snap
@@ -0,0 +1,37 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'outlineWidth' plugin 1`] = `
+"
+.outline-0 {
+ outline-width: 0;
+}
+
+.outline-1 {
+ outline-width: 1px;
+}
+
+.outline-2 {
+ outline-width: 2px;
+}
+
+.outline-4 {
+ outline-width: 4px;
+}
+
+.outline-8 {
+ outline-width: 8px;
+}
+
+.outline-\\[12px\\] {
+ outline-width: 12px;
+}
+
+.outline-\\[34\\%\\] {
+ outline-width: 34%;
+}
+
+.outline-\\[56\\] {
+ outline-width: 56px;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/overflow.test.js.snap b/tests/plugins/__snapshots__/overflow.test.js.snap
new file mode 100644
index 000000000..4b75be53c
--- /dev/null
+++ b/tests/plugins/__snapshots__/overflow.test.js.snap
@@ -0,0 +1,65 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'overflow' plugin 1`] = `
+"
+.overflow-auto {
+ overflow: auto;
+}
+
+.overflow-hidden {
+ overflow: hidden;
+}
+
+.overflow-clip {
+ overflow: clip;
+}
+
+.overflow-visible {
+ overflow: visible;
+}
+
+.overflow-scroll {
+ overflow: scroll;
+}
+
+.overflow-x-auto {
+ overflow-x: auto;
+}
+
+.overflow-y-auto {
+ overflow-y: auto;
+}
+
+.overflow-x-hidden {
+ overflow-x: hidden;
+}
+
+.overflow-y-hidden {
+ overflow-y: hidden;
+}
+
+.overflow-x-clip {
+ overflow-x: clip;
+}
+
+.overflow-y-clip {
+ overflow-y: clip;
+}
+
+.overflow-x-visible {
+ overflow-x: visible;
+}
+
+.overflow-y-visible {
+ overflow-y: visible;
+}
+
+.overflow-x-scroll {
+ overflow-x: scroll;
+}
+
+.overflow-y-scroll {
+ overflow-y: scroll;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/overscrollBehavior.test.js.snap b/tests/plugins/__snapshots__/overscrollBehavior.test.js.snap
new file mode 100644
index 000000000..bfa2d1e97
--- /dev/null
+++ b/tests/plugins/__snapshots__/overscrollBehavior.test.js.snap
@@ -0,0 +1,41 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'overscrollBehavior' plugin 1`] = `
+"
+.overscroll-auto {
+ overscroll-behavior: auto;
+}
+
+.overscroll-contain {
+ overscroll-behavior: contain;
+}
+
+.overscroll-none {
+ overscroll-behavior: none;
+}
+
+.overscroll-y-auto {
+ overscroll-behavior-y: auto;
+}
+
+.overscroll-y-contain {
+ overscroll-behavior-y: contain;
+}
+
+.overscroll-y-none {
+ overscroll-behavior-y: none;
+}
+
+.overscroll-x-auto {
+ overscroll-behavior-x: auto;
+}
+
+.overscroll-x-contain {
+ overscroll-behavior-x: contain;
+}
+
+.overscroll-x-none {
+ overscroll-behavior-x: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/padding.test.js.snap b/tests/plugins/__snapshots__/padding.test.js.snap
new file mode 100644
index 000000000..e40bcbda9
--- /dev/null
+++ b/tests/plugins/__snapshots__/padding.test.js.snap
@@ -0,0 +1,1343 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'padding' plugin 1`] = `
+"
+.p-0 {
+ padding: 0;
+}
+
+.p-0\\.5 {
+ padding: .125rem;
+}
+
+.p-1 {
+ padding: .25rem;
+}
+
+.p-1\\.5 {
+ padding: .375rem;
+}
+
+.p-10 {
+ padding: 2.5rem;
+}
+
+.p-11 {
+ padding: 2.75rem;
+}
+
+.p-12 {
+ padding: 3rem;
+}
+
+.p-14 {
+ padding: 3.5rem;
+}
+
+.p-16 {
+ padding: 4rem;
+}
+
+.p-2 {
+ padding: .5rem;
+}
+
+.p-2\\.5 {
+ padding: .625rem;
+}
+
+.p-20 {
+ padding: 5rem;
+}
+
+.p-24 {
+ padding: 6rem;
+}
+
+.p-28 {
+ padding: 7rem;
+}
+
+.p-3 {
+ padding: .75rem;
+}
+
+.p-3\\.5 {
+ padding: .875rem;
+}
+
+.p-32 {
+ padding: 8rem;
+}
+
+.p-36 {
+ padding: 9rem;
+}
+
+.p-4 {
+ padding: 1rem;
+}
+
+.p-40 {
+ padding: 10rem;
+}
+
+.p-44 {
+ padding: 11rem;
+}
+
+.p-48 {
+ padding: 12rem;
+}
+
+.p-5 {
+ padding: 1.25rem;
+}
+
+.p-52 {
+ padding: 13rem;
+}
+
+.p-56 {
+ padding: 14rem;
+}
+
+.p-6 {
+ padding: 1.5rem;
+}
+
+.p-60 {
+ padding: 15rem;
+}
+
+.p-64 {
+ padding: 16rem;
+}
+
+.p-7 {
+ padding: 1.75rem;
+}
+
+.p-72 {
+ padding: 18rem;
+}
+
+.p-8 {
+ padding: 2rem;
+}
+
+.p-80 {
+ padding: 20rem;
+}
+
+.p-9 {
+ padding: 2.25rem;
+}
+
+.p-96 {
+ padding: 24rem;
+}
+
+.p-\\[12px\\] {
+ padding: 12px;
+}
+
+.p-\\[var\\(--my-value\\)\\] {
+ padding: var(--my-value);
+}
+
+.p-px {
+ padding: 1px;
+}
+
+.px-0 {
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.px-0\\.5 {
+ padding-left: .125rem;
+ padding-right: .125rem;
+}
+
+.px-1 {
+ padding-left: .25rem;
+ padding-right: .25rem;
+}
+
+.px-1\\.5 {
+ padding-left: .375rem;
+ padding-right: .375rem;
+}
+
+.px-10 {
+ padding-left: 2.5rem;
+ padding-right: 2.5rem;
+}
+
+.px-11 {
+ padding-left: 2.75rem;
+ padding-right: 2.75rem;
+}
+
+.px-12 {
+ padding-left: 3rem;
+ padding-right: 3rem;
+}
+
+.px-14 {
+ padding-left: 3.5rem;
+ padding-right: 3.5rem;
+}
+
+.px-16 {
+ padding-left: 4rem;
+ padding-right: 4rem;
+}
+
+.px-2 {
+ padding-left: .5rem;
+ padding-right: .5rem;
+}
+
+.px-2\\.5 {
+ padding-left: .625rem;
+ padding-right: .625rem;
+}
+
+.px-20 {
+ padding-left: 5rem;
+ padding-right: 5rem;
+}
+
+.px-24 {
+ padding-left: 6rem;
+ padding-right: 6rem;
+}
+
+.px-28 {
+ padding-left: 7rem;
+ padding-right: 7rem;
+}
+
+.px-3 {
+ padding-left: .75rem;
+ padding-right: .75rem;
+}
+
+.px-3\\.5 {
+ padding-left: .875rem;
+ padding-right: .875rem;
+}
+
+.px-32 {
+ padding-left: 8rem;
+ padding-right: 8rem;
+}
+
+.px-36 {
+ padding-left: 9rem;
+ padding-right: 9rem;
+}
+
+.px-4 {
+ padding-left: 1rem;
+ padding-right: 1rem;
+}
+
+.px-40 {
+ padding-left: 10rem;
+ padding-right: 10rem;
+}
+
+.px-44 {
+ padding-left: 11rem;
+ padding-right: 11rem;
+}
+
+.px-48 {
+ padding-left: 12rem;
+ padding-right: 12rem;
+}
+
+.px-5 {
+ padding-left: 1.25rem;
+ padding-right: 1.25rem;
+}
+
+.px-52 {
+ padding-left: 13rem;
+ padding-right: 13rem;
+}
+
+.px-56 {
+ padding-left: 14rem;
+ padding-right: 14rem;
+}
+
+.px-6 {
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+}
+
+.px-60 {
+ padding-left: 15rem;
+ padding-right: 15rem;
+}
+
+.px-64 {
+ padding-left: 16rem;
+ padding-right: 16rem;
+}
+
+.px-7 {
+ padding-left: 1.75rem;
+ padding-right: 1.75rem;
+}
+
+.px-72 {
+ padding-left: 18rem;
+ padding-right: 18rem;
+}
+
+.px-8 {
+ padding-left: 2rem;
+ padding-right: 2rem;
+}
+
+.px-80 {
+ padding-left: 20rem;
+ padding-right: 20rem;
+}
+
+.px-9 {
+ padding-left: 2.25rem;
+ padding-right: 2.25rem;
+}
+
+.px-96 {
+ padding-left: 24rem;
+ padding-right: 24rem;
+}
+
+.px-px {
+ padding-left: 1px;
+ padding-right: 1px;
+}
+
+.py-0 {
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.py-0\\.5 {
+ padding-top: .125rem;
+ padding-bottom: .125rem;
+}
+
+.py-1 {
+ padding-top: .25rem;
+ padding-bottom: .25rem;
+}
+
+.py-1\\.5 {
+ padding-top: .375rem;
+ padding-bottom: .375rem;
+}
+
+.py-10 {
+ padding-top: 2.5rem;
+ padding-bottom: 2.5rem;
+}
+
+.py-11 {
+ padding-top: 2.75rem;
+ padding-bottom: 2.75rem;
+}
+
+.py-12 {
+ padding-top: 3rem;
+ padding-bottom: 3rem;
+}
+
+.py-14 {
+ padding-top: 3.5rem;
+ padding-bottom: 3.5rem;
+}
+
+.py-16 {
+ padding-top: 4rem;
+ padding-bottom: 4rem;
+}
+
+.py-2 {
+ padding-top: .5rem;
+ padding-bottom: .5rem;
+}
+
+.py-2\\.5 {
+ padding-top: .625rem;
+ padding-bottom: .625rem;
+}
+
+.py-20 {
+ padding-top: 5rem;
+ padding-bottom: 5rem;
+}
+
+.py-24 {
+ padding-top: 6rem;
+ padding-bottom: 6rem;
+}
+
+.py-28 {
+ padding-top: 7rem;
+ padding-bottom: 7rem;
+}
+
+.py-3 {
+ padding-top: .75rem;
+ padding-bottom: .75rem;
+}
+
+.py-3\\.5 {
+ padding-top: .875rem;
+ padding-bottom: .875rem;
+}
+
+.py-32 {
+ padding-top: 8rem;
+ padding-bottom: 8rem;
+}
+
+.py-36 {
+ padding-top: 9rem;
+ padding-bottom: 9rem;
+}
+
+.py-4 {
+ padding-top: 1rem;
+ padding-bottom: 1rem;
+}
+
+.py-40 {
+ padding-top: 10rem;
+ padding-bottom: 10rem;
+}
+
+.py-44 {
+ padding-top: 11rem;
+ padding-bottom: 11rem;
+}
+
+.py-48 {
+ padding-top: 12rem;
+ padding-bottom: 12rem;
+}
+
+.py-5 {
+ padding-top: 1.25rem;
+ padding-bottom: 1.25rem;
+}
+
+.py-52 {
+ padding-top: 13rem;
+ padding-bottom: 13rem;
+}
+
+.py-56 {
+ padding-top: 14rem;
+ padding-bottom: 14rem;
+}
+
+.py-6 {
+ padding-top: 1.5rem;
+ padding-bottom: 1.5rem;
+}
+
+.py-60 {
+ padding-top: 15rem;
+ padding-bottom: 15rem;
+}
+
+.py-64 {
+ padding-top: 16rem;
+ padding-bottom: 16rem;
+}
+
+.py-7 {
+ padding-top: 1.75rem;
+ padding-bottom: 1.75rem;
+}
+
+.py-72 {
+ padding-top: 18rem;
+ padding-bottom: 18rem;
+}
+
+.py-8 {
+ padding-top: 2rem;
+ padding-bottom: 2rem;
+}
+
+.py-80 {
+ padding-top: 20rem;
+ padding-bottom: 20rem;
+}
+
+.py-9 {
+ padding-top: 2.25rem;
+ padding-bottom: 2.25rem;
+}
+
+.py-96 {
+ padding-top: 24rem;
+ padding-bottom: 24rem;
+}
+
+.py-px {
+ padding-top: 1px;
+ padding-bottom: 1px;
+}
+
+.pb-0 {
+ padding-bottom: 0;
+}
+
+.pb-0\\.5 {
+ padding-bottom: .125rem;
+}
+
+.pb-1 {
+ padding-bottom: .25rem;
+}
+
+.pb-1\\.5 {
+ padding-bottom: .375rem;
+}
+
+.pb-10 {
+ padding-bottom: 2.5rem;
+}
+
+.pb-11 {
+ padding-bottom: 2.75rem;
+}
+
+.pb-12 {
+ padding-bottom: 3rem;
+}
+
+.pb-14 {
+ padding-bottom: 3.5rem;
+}
+
+.pb-16 {
+ padding-bottom: 4rem;
+}
+
+.pb-2 {
+ padding-bottom: .5rem;
+}
+
+.pb-2\\.5 {
+ padding-bottom: .625rem;
+}
+
+.pb-20 {
+ padding-bottom: 5rem;
+}
+
+.pb-24 {
+ padding-bottom: 6rem;
+}
+
+.pb-28 {
+ padding-bottom: 7rem;
+}
+
+.pb-3 {
+ padding-bottom: .75rem;
+}
+
+.pb-3\\.5 {
+ padding-bottom: .875rem;
+}
+
+.pb-32 {
+ padding-bottom: 8rem;
+}
+
+.pb-36 {
+ padding-bottom: 9rem;
+}
+
+.pb-4 {
+ padding-bottom: 1rem;
+}
+
+.pb-40 {
+ padding-bottom: 10rem;
+}
+
+.pb-44 {
+ padding-bottom: 11rem;
+}
+
+.pb-48 {
+ padding-bottom: 12rem;
+}
+
+.pb-5 {
+ padding-bottom: 1.25rem;
+}
+
+.pb-52 {
+ padding-bottom: 13rem;
+}
+
+.pb-56 {
+ padding-bottom: 14rem;
+}
+
+.pb-6 {
+ padding-bottom: 1.5rem;
+}
+
+.pb-60 {
+ padding-bottom: 15rem;
+}
+
+.pb-64 {
+ padding-bottom: 16rem;
+}
+
+.pb-7 {
+ padding-bottom: 1.75rem;
+}
+
+.pb-72 {
+ padding-bottom: 18rem;
+}
+
+.pb-8 {
+ padding-bottom: 2rem;
+}
+
+.pb-80 {
+ padding-bottom: 20rem;
+}
+
+.pb-9 {
+ padding-bottom: 2.25rem;
+}
+
+.pb-96 {
+ padding-bottom: 24rem;
+}
+
+.pb-px {
+ padding-bottom: 1px;
+}
+
+.pe-0 {
+ padding-inline-end: 0;
+}
+
+.pe-0\\.5 {
+ padding-inline-end: .125rem;
+}
+
+.pe-1 {
+ padding-inline-end: .25rem;
+}
+
+.pe-1\\.5 {
+ padding-inline-end: .375rem;
+}
+
+.pe-10 {
+ padding-inline-end: 2.5rem;
+}
+
+.pe-11 {
+ padding-inline-end: 2.75rem;
+}
+
+.pe-12 {
+ padding-inline-end: 3rem;
+}
+
+.pe-14 {
+ padding-inline-end: 3.5rem;
+}
+
+.pe-16 {
+ padding-inline-end: 4rem;
+}
+
+.pe-2 {
+ padding-inline-end: .5rem;
+}
+
+.pe-2\\.5 {
+ padding-inline-end: .625rem;
+}
+
+.pe-20 {
+ padding-inline-end: 5rem;
+}
+
+.pe-24 {
+ padding-inline-end: 6rem;
+}
+
+.pe-28 {
+ padding-inline-end: 7rem;
+}
+
+.pe-3 {
+ padding-inline-end: .75rem;
+}
+
+.pe-3\\.5 {
+ padding-inline-end: .875rem;
+}
+
+.pe-32 {
+ padding-inline-end: 8rem;
+}
+
+.pe-36 {
+ padding-inline-end: 9rem;
+}
+
+.pe-4 {
+ padding-inline-end: 1rem;
+}
+
+.pe-40 {
+ padding-inline-end: 10rem;
+}
+
+.pe-44 {
+ padding-inline-end: 11rem;
+}
+
+.pe-48 {
+ padding-inline-end: 12rem;
+}
+
+.pe-5 {
+ padding-inline-end: 1.25rem;
+}
+
+.pe-52 {
+ padding-inline-end: 13rem;
+}
+
+.pe-56 {
+ padding-inline-end: 14rem;
+}
+
+.pe-6 {
+ padding-inline-end: 1.5rem;
+}
+
+.pe-60 {
+ padding-inline-end: 15rem;
+}
+
+.pe-64 {
+ padding-inline-end: 16rem;
+}
+
+.pe-7 {
+ padding-inline-end: 1.75rem;
+}
+
+.pe-72 {
+ padding-inline-end: 18rem;
+}
+
+.pe-8 {
+ padding-inline-end: 2rem;
+}
+
+.pe-80 {
+ padding-inline-end: 20rem;
+}
+
+.pe-9 {
+ padding-inline-end: 2.25rem;
+}
+
+.pe-96 {
+ padding-inline-end: 24rem;
+}
+
+.pe-px {
+ padding-inline-end: 1px;
+}
+
+.pl-0 {
+ padding-left: 0;
+}
+
+.pl-0\\.5 {
+ padding-left: .125rem;
+}
+
+.pl-1 {
+ padding-left: .25rem;
+}
+
+.pl-1\\.5 {
+ padding-left: .375rem;
+}
+
+.pl-10 {
+ padding-left: 2.5rem;
+}
+
+.pl-11 {
+ padding-left: 2.75rem;
+}
+
+.pl-12 {
+ padding-left: 3rem;
+}
+
+.pl-14 {
+ padding-left: 3.5rem;
+}
+
+.pl-16 {
+ padding-left: 4rem;
+}
+
+.pl-2 {
+ padding-left: .5rem;
+}
+
+.pl-2\\.5 {
+ padding-left: .625rem;
+}
+
+.pl-20 {
+ padding-left: 5rem;
+}
+
+.pl-24 {
+ padding-left: 6rem;
+}
+
+.pl-28 {
+ padding-left: 7rem;
+}
+
+.pl-3 {
+ padding-left: .75rem;
+}
+
+.pl-3\\.5 {
+ padding-left: .875rem;
+}
+
+.pl-32 {
+ padding-left: 8rem;
+}
+
+.pl-36 {
+ padding-left: 9rem;
+}
+
+.pl-4 {
+ padding-left: 1rem;
+}
+
+.pl-40 {
+ padding-left: 10rem;
+}
+
+.pl-44 {
+ padding-left: 11rem;
+}
+
+.pl-48 {
+ padding-left: 12rem;
+}
+
+.pl-5 {
+ padding-left: 1.25rem;
+}
+
+.pl-52 {
+ padding-left: 13rem;
+}
+
+.pl-56 {
+ padding-left: 14rem;
+}
+
+.pl-6 {
+ padding-left: 1.5rem;
+}
+
+.pl-60 {
+ padding-left: 15rem;
+}
+
+.pl-64 {
+ padding-left: 16rem;
+}
+
+.pl-7 {
+ padding-left: 1.75rem;
+}
+
+.pl-72 {
+ padding-left: 18rem;
+}
+
+.pl-8 {
+ padding-left: 2rem;
+}
+
+.pl-80 {
+ padding-left: 20rem;
+}
+
+.pl-9 {
+ padding-left: 2.25rem;
+}
+
+.pl-96 {
+ padding-left: 24rem;
+}
+
+.pl-px {
+ padding-left: 1px;
+}
+
+.pr-0 {
+ padding-right: 0;
+}
+
+.pr-0\\.5 {
+ padding-right: .125rem;
+}
+
+.pr-1 {
+ padding-right: .25rem;
+}
+
+.pr-1\\.5 {
+ padding-right: .375rem;
+}
+
+.pr-10 {
+ padding-right: 2.5rem;
+}
+
+.pr-11 {
+ padding-right: 2.75rem;
+}
+
+.pr-12 {
+ padding-right: 3rem;
+}
+
+.pr-14 {
+ padding-right: 3.5rem;
+}
+
+.pr-16 {
+ padding-right: 4rem;
+}
+
+.pr-2 {
+ padding-right: .5rem;
+}
+
+.pr-2\\.5 {
+ padding-right: .625rem;
+}
+
+.pr-20 {
+ padding-right: 5rem;
+}
+
+.pr-24 {
+ padding-right: 6rem;
+}
+
+.pr-28 {
+ padding-right: 7rem;
+}
+
+.pr-3 {
+ padding-right: .75rem;
+}
+
+.pr-3\\.5 {
+ padding-right: .875rem;
+}
+
+.pr-32 {
+ padding-right: 8rem;
+}
+
+.pr-36 {
+ padding-right: 9rem;
+}
+
+.pr-4 {
+ padding-right: 1rem;
+}
+
+.pr-40 {
+ padding-right: 10rem;
+}
+
+.pr-44 {
+ padding-right: 11rem;
+}
+
+.pr-48 {
+ padding-right: 12rem;
+}
+
+.pr-5 {
+ padding-right: 1.25rem;
+}
+
+.pr-52 {
+ padding-right: 13rem;
+}
+
+.pr-56 {
+ padding-right: 14rem;
+}
+
+.pr-6 {
+ padding-right: 1.5rem;
+}
+
+.pr-60 {
+ padding-right: 15rem;
+}
+
+.pr-64 {
+ padding-right: 16rem;
+}
+
+.pr-7 {
+ padding-right: 1.75rem;
+}
+
+.pr-72 {
+ padding-right: 18rem;
+}
+
+.pr-8 {
+ padding-right: 2rem;
+}
+
+.pr-80 {
+ padding-right: 20rem;
+}
+
+.pr-9 {
+ padding-right: 2.25rem;
+}
+
+.pr-96 {
+ padding-right: 24rem;
+}
+
+.pr-px {
+ padding-right: 1px;
+}
+
+.ps-0 {
+ padding-inline-start: 0;
+}
+
+.ps-0\\.5 {
+ padding-inline-start: .125rem;
+}
+
+.ps-1 {
+ padding-inline-start: .25rem;
+}
+
+.ps-1\\.5 {
+ padding-inline-start: .375rem;
+}
+
+.ps-10 {
+ padding-inline-start: 2.5rem;
+}
+
+.ps-11 {
+ padding-inline-start: 2.75rem;
+}
+
+.ps-12 {
+ padding-inline-start: 3rem;
+}
+
+.ps-14 {
+ padding-inline-start: 3.5rem;
+}
+
+.ps-16 {
+ padding-inline-start: 4rem;
+}
+
+.ps-2 {
+ padding-inline-start: .5rem;
+}
+
+.ps-2\\.5 {
+ padding-inline-start: .625rem;
+}
+
+.ps-20 {
+ padding-inline-start: 5rem;
+}
+
+.ps-24 {
+ padding-inline-start: 6rem;
+}
+
+.ps-28 {
+ padding-inline-start: 7rem;
+}
+
+.ps-3 {
+ padding-inline-start: .75rem;
+}
+
+.ps-3\\.5 {
+ padding-inline-start: .875rem;
+}
+
+.ps-32 {
+ padding-inline-start: 8rem;
+}
+
+.ps-36 {
+ padding-inline-start: 9rem;
+}
+
+.ps-4 {
+ padding-inline-start: 1rem;
+}
+
+.ps-40 {
+ padding-inline-start: 10rem;
+}
+
+.ps-44 {
+ padding-inline-start: 11rem;
+}
+
+.ps-48 {
+ padding-inline-start: 12rem;
+}
+
+.ps-5 {
+ padding-inline-start: 1.25rem;
+}
+
+.ps-52 {
+ padding-inline-start: 13rem;
+}
+
+.ps-56 {
+ padding-inline-start: 14rem;
+}
+
+.ps-6 {
+ padding-inline-start: 1.5rem;
+}
+
+.ps-60 {
+ padding-inline-start: 15rem;
+}
+
+.ps-64 {
+ padding-inline-start: 16rem;
+}
+
+.ps-7 {
+ padding-inline-start: 1.75rem;
+}
+
+.ps-72 {
+ padding-inline-start: 18rem;
+}
+
+.ps-8 {
+ padding-inline-start: 2rem;
+}
+
+.ps-80 {
+ padding-inline-start: 20rem;
+}
+
+.ps-9 {
+ padding-inline-start: 2.25rem;
+}
+
+.ps-96 {
+ padding-inline-start: 24rem;
+}
+
+.ps-px {
+ padding-inline-start: 1px;
+}
+
+.pt-0 {
+ padding-top: 0;
+}
+
+.pt-0\\.5 {
+ padding-top: .125rem;
+}
+
+.pt-1 {
+ padding-top: .25rem;
+}
+
+.pt-1\\.5 {
+ padding-top: .375rem;
+}
+
+.pt-10 {
+ padding-top: 2.5rem;
+}
+
+.pt-11 {
+ padding-top: 2.75rem;
+}
+
+.pt-12 {
+ padding-top: 3rem;
+}
+
+.pt-14 {
+ padding-top: 3.5rem;
+}
+
+.pt-16 {
+ padding-top: 4rem;
+}
+
+.pt-2 {
+ padding-top: .5rem;
+}
+
+.pt-2\\.5 {
+ padding-top: .625rem;
+}
+
+.pt-20 {
+ padding-top: 5rem;
+}
+
+.pt-24 {
+ padding-top: 6rem;
+}
+
+.pt-28 {
+ padding-top: 7rem;
+}
+
+.pt-3 {
+ padding-top: .75rem;
+}
+
+.pt-3\\.5 {
+ padding-top: .875rem;
+}
+
+.pt-32 {
+ padding-top: 8rem;
+}
+
+.pt-36 {
+ padding-top: 9rem;
+}
+
+.pt-4 {
+ padding-top: 1rem;
+}
+
+.pt-40 {
+ padding-top: 10rem;
+}
+
+.pt-44 {
+ padding-top: 11rem;
+}
+
+.pt-48 {
+ padding-top: 12rem;
+}
+
+.pt-5 {
+ padding-top: 1.25rem;
+}
+
+.pt-52 {
+ padding-top: 13rem;
+}
+
+.pt-56 {
+ padding-top: 14rem;
+}
+
+.pt-6 {
+ padding-top: 1.5rem;
+}
+
+.pt-60 {
+ padding-top: 15rem;
+}
+
+.pt-64 {
+ padding-top: 16rem;
+}
+
+.pt-7 {
+ padding-top: 1.75rem;
+}
+
+.pt-72 {
+ padding-top: 18rem;
+}
+
+.pt-8 {
+ padding-top: 2rem;
+}
+
+.pt-80 {
+ padding-top: 20rem;
+}
+
+.pt-9 {
+ padding-top: 2.25rem;
+}
+
+.pt-96 {
+ padding-top: 24rem;
+}
+
+.pt-px {
+ padding-top: 1px;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/placeContent.test.js.snap b/tests/plugins/__snapshots__/placeContent.test.js.snap
new file mode 100644
index 000000000..a782724cf
--- /dev/null
+++ b/tests/plugins/__snapshots__/placeContent.test.js.snap
@@ -0,0 +1,37 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'placeContent' plugin 1`] = `
+"
+.place-content-center {
+ place-content: center;
+}
+
+.place-content-start {
+ place-content: start;
+}
+
+.place-content-end {
+ place-content: end;
+}
+
+.place-content-between {
+ place-content: space-between;
+}
+
+.place-content-around {
+ place-content: space-around;
+}
+
+.place-content-evenly {
+ place-content: space-evenly;
+}
+
+.place-content-baseline {
+ place-content: baseline start;
+}
+
+.place-content-stretch {
+ place-content: stretch;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/placeItems.test.js.snap b/tests/plugins/__snapshots__/placeItems.test.js.snap
new file mode 100644
index 000000000..676f3879a
--- /dev/null
+++ b/tests/plugins/__snapshots__/placeItems.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'placeItems' plugin 1`] = `
+"
+.place-items-start {
+ place-items: start;
+}
+
+.place-items-end {
+ place-items: end;
+}
+
+.place-items-center {
+ place-items: center;
+}
+
+.place-items-baseline {
+ place-items: baseline;
+}
+
+.place-items-stretch {
+ place-items: stretch stretch;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/placeSelf.test.js.snap b/tests/plugins/__snapshots__/placeSelf.test.js.snap
new file mode 100644
index 000000000..5ed981f85
--- /dev/null
+++ b/tests/plugins/__snapshots__/placeSelf.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'placeSelf' plugin 1`] = `
+"
+.place-self-auto {
+ place-self: auto;
+}
+
+.place-self-start {
+ place-self: start;
+}
+
+.place-self-end {
+ place-self: end;
+}
+
+.place-self-center {
+ place-self: center;
+}
+
+.place-self-stretch {
+ place-self: stretch stretch;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/placeholderColor.test.js.snap b/tests/plugins/__snapshots__/placeholderColor.test.js.snap
new file mode 100644
index 000000000..1442ed4dc
--- /dev/null
+++ b/tests/plugins/__snapshots__/placeholderColor.test.js.snap
@@ -0,0 +1,429 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'placeholderColor' plugin 1`] = `
+"
+.placeholder-\\[\\#0088cc\\]::placeholder {
+ color: #08c;
+}
+
+.placeholder-\\[var\\(--my-value\\)\\]::placeholder {
+ color: var(--my-value);
+}
+
+.placeholder-black::placeholder {
+ color: #000;
+}
+
+.placeholder-black\\/0::placeholder {
+ color: #0000;
+}
+
+.placeholder-black\\/10::placeholder {
+ color: #0000001a;
+}
+
+.placeholder-black\\/100::placeholder {
+ color: #000;
+}
+
+.placeholder-black\\/15::placeholder {
+ color: #00000026;
+}
+
+.placeholder-black\\/20::placeholder {
+ color: #0003;
+}
+
+.placeholder-black\\/25::placeholder {
+ color: #00000040;
+}
+
+.placeholder-black\\/30::placeholder {
+ color: #0000004d;
+}
+
+.placeholder-black\\/35::placeholder {
+ color: #00000059;
+}
+
+.placeholder-black\\/40::placeholder {
+ color: #0006;
+}
+
+.placeholder-black\\/45::placeholder {
+ color: #00000073;
+}
+
+.placeholder-black\\/5::placeholder {
+ color: #0000000d;
+}
+
+.placeholder-black\\/50::placeholder {
+ color: #00000080;
+}
+
+.placeholder-black\\/55::placeholder {
+ color: #0000008c;
+}
+
+.placeholder-black\\/60::placeholder {
+ color: #0009;
+}
+
+.placeholder-black\\/65::placeholder {
+ color: #000000a6;
+}
+
+.placeholder-black\\/70::placeholder {
+ color: #000000b3;
+}
+
+.placeholder-black\\/75::placeholder {
+ color: #000000bf;
+}
+
+.placeholder-black\\/80::placeholder {
+ color: #000c;
+}
+
+.placeholder-black\\/85::placeholder {
+ color: #000000d9;
+}
+
+.placeholder-black\\/90::placeholder {
+ color: #000000e6;
+}
+
+.placeholder-black\\/95::placeholder {
+ color: #000000f2;
+}
+
+.placeholder-red-100::placeholder {
+ color: #fee2e2;
+}
+
+.placeholder-red-100\\/0::placeholder {
+ color: #fee2e200;
+}
+
+.placeholder-red-100\\/10::placeholder {
+ color: #fee2e21a;
+}
+
+.placeholder-red-100\\/100::placeholder {
+ color: #fee2e2;
+}
+
+.placeholder-red-100\\/15::placeholder {
+ color: #fee2e226;
+}
+
+.placeholder-red-100\\/20::placeholder {
+ color: #fee2e233;
+}
+
+.placeholder-red-100\\/25::placeholder {
+ color: #fee2e240;
+}
+
+.placeholder-red-100\\/30::placeholder {
+ color: #fee2e24d;
+}
+
+.placeholder-red-100\\/35::placeholder {
+ color: #fee2e259;
+}
+
+.placeholder-red-100\\/40::placeholder {
+ color: #fee2e266;
+}
+
+.placeholder-red-100\\/45::placeholder {
+ color: #fee2e273;
+}
+
+.placeholder-red-100\\/5::placeholder {
+ color: #fee2e20d;
+}
+
+.placeholder-red-100\\/50::placeholder {
+ color: #fee2e280;
+}
+
+.placeholder-red-100\\/55::placeholder {
+ color: #fee2e28c;
+}
+
+.placeholder-red-100\\/60::placeholder {
+ color: #fee2e299;
+}
+
+.placeholder-red-100\\/65::placeholder {
+ color: #fee2e2a6;
+}
+
+.placeholder-red-100\\/70::placeholder {
+ color: #fee2e2b3;
+}
+
+.placeholder-red-100\\/75::placeholder {
+ color: #fee2e2bf;
+}
+
+.placeholder-red-100\\/80::placeholder {
+ color: #fee2e2cc;
+}
+
+.placeholder-red-100\\/85::placeholder {
+ color: #fee2e2d9;
+}
+
+.placeholder-red-100\\/90::placeholder {
+ color: #fee2e2e6;
+}
+
+.placeholder-red-100\\/95::placeholder {
+ color: #fee2e2f2;
+}
+
+.placeholder-red-200::placeholder {
+ color: #fecaca;
+}
+
+.placeholder-red-200\\/0::placeholder {
+ color: #fecaca00;
+}
+
+.placeholder-red-200\\/10::placeholder {
+ color: #fecaca1a;
+}
+
+.placeholder-red-200\\/100::placeholder {
+ color: #fecaca;
+}
+
+.placeholder-red-200\\/15::placeholder {
+ color: #fecaca26;
+}
+
+.placeholder-red-200\\/20::placeholder {
+ color: #fecaca33;
+}
+
+.placeholder-red-200\\/25::placeholder {
+ color: #fecaca40;
+}
+
+.placeholder-red-200\\/30::placeholder {
+ color: #fecaca4d;
+}
+
+.placeholder-red-200\\/35::placeholder {
+ color: #fecaca59;
+}
+
+.placeholder-red-200\\/40::placeholder {
+ color: #fecaca66;
+}
+
+.placeholder-red-200\\/45::placeholder {
+ color: #fecaca73;
+}
+
+.placeholder-red-200\\/5::placeholder {
+ color: #fecaca0d;
+}
+
+.placeholder-red-200\\/50::placeholder {
+ color: #fecaca80;
+}
+
+.placeholder-red-200\\/55::placeholder {
+ color: #fecaca8c;
+}
+
+.placeholder-red-200\\/60::placeholder {
+ color: #fecaca99;
+}
+
+.placeholder-red-200\\/65::placeholder {
+ color: #fecacaa6;
+}
+
+.placeholder-red-200\\/70::placeholder {
+ color: #fecacab3;
+}
+
+.placeholder-red-200\\/75::placeholder {
+ color: #fecacabf;
+}
+
+.placeholder-red-200\\/80::placeholder {
+ color: #fecacacc;
+}
+
+.placeholder-red-200\\/85::placeholder {
+ color: #fecacad9;
+}
+
+.placeholder-red-200\\/90::placeholder {
+ color: #fecacae6;
+}
+
+.placeholder-red-200\\/95::placeholder {
+ color: #fecacaf2;
+}
+
+.placeholder-transparent::placeholder, .placeholder-transparent\\/0::placeholder {
+ color: #0000;
+}
+
+.placeholder-transparent\\/10::placeholder {
+ color: #0000001a;
+}
+
+.placeholder-transparent\\/100::placeholder {
+ color: #000;
+}
+
+.placeholder-transparent\\/15::placeholder {
+ color: #00000026;
+}
+
+.placeholder-transparent\\/20::placeholder {
+ color: #0003;
+}
+
+.placeholder-transparent\\/25::placeholder {
+ color: #00000040;
+}
+
+.placeholder-transparent\\/30::placeholder {
+ color: #0000004d;
+}
+
+.placeholder-transparent\\/35::placeholder {
+ color: #00000059;
+}
+
+.placeholder-transparent\\/40::placeholder {
+ color: #0006;
+}
+
+.placeholder-transparent\\/45::placeholder {
+ color: #00000073;
+}
+
+.placeholder-transparent\\/5::placeholder {
+ color: #0000000d;
+}
+
+.placeholder-transparent\\/50::placeholder {
+ color: #00000080;
+}
+
+.placeholder-transparent\\/55::placeholder {
+ color: #0000008c;
+}
+
+.placeholder-transparent\\/60::placeholder {
+ color: #0009;
+}
+
+.placeholder-transparent\\/65::placeholder {
+ color: #000000a6;
+}
+
+.placeholder-transparent\\/70::placeholder {
+ color: #000000b3;
+}
+
+.placeholder-transparent\\/75::placeholder {
+ color: #000000bf;
+}
+
+.placeholder-transparent\\/80::placeholder {
+ color: #000c;
+}
+
+.placeholder-transparent\\/85::placeholder {
+ color: #000000d9;
+}
+
+.placeholder-transparent\\/90::placeholder {
+ color: #000000e6;
+}
+
+.placeholder-transparent\\/95::placeholder {
+ color: #000000f2;
+}
+"
+`;
+
+exports[`should test the 'placeholderColor' plugin 2`] = `
+"
+.placeholder-\\[\\#0088cc\\]::placeholder {
+ --tw-placeholder-opacity: 1;
+ color: rgb(0 136 204 / var(--tw-placeholder-opacity));
+}
+
+.placeholder-\\[var\\(--my-value\\)\\]::placeholder {
+ color: var(--my-value);
+}
+
+.placeholder-black::placeholder {
+ --tw-placeholder-opacity: 1;
+ color: rgb(0 0 0 / var(--tw-placeholder-opacity));
+}
+
+.placeholder-black\\/0::placeholder {
+ color: #0000;
+}
+
+.placeholder-black\\/50::placeholder {
+ color: #00000080;
+}
+
+.placeholder-red-100::placeholder {
+ --tw-placeholder-opacity: 1;
+ color: rgb(254 226 226 / var(--tw-placeholder-opacity));
+}
+
+.placeholder-red-100\\/0::placeholder {
+ color: #fee2e200;
+}
+
+.placeholder-red-100\\/50::placeholder {
+ color: #fee2e280;
+}
+
+.placeholder-red-200::placeholder {
+ --tw-placeholder-opacity: 1;
+ color: rgb(254 202 202 / var(--tw-placeholder-opacity));
+}
+
+.placeholder-red-200\\/0::placeholder {
+ color: #fecaca00;
+}
+
+.placeholder-red-200\\/50::placeholder {
+ color: #fecaca80;
+}
+
+.placeholder-transparent::placeholder, .placeholder-transparent\\/0::placeholder {
+ color: #0000;
+}
+
+.placeholder-transparent\\/50::placeholder {
+ color: #00000080;
+}
+
+.placeholder-opacity-0::placeholder {
+ --tw-placeholder-opacity: 0;
+}
+
+.placeholder-opacity-50::placeholder {
+ --tw-placeholder-opacity: .5;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/placeholderOpacity.test.js.snap b/tests/plugins/__snapshots__/placeholderOpacity.test.js.snap
new file mode 100644
index 000000000..047dde263
--- /dev/null
+++ b/tests/plugins/__snapshots__/placeholderOpacity.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'placeholderOpacity' plugin 1`] = `
+"
+.placeholder-opacity-0::placeholder {
+ --tw-placeholder-opacity: 0;
+}
+
+.placeholder-opacity-50::placeholder {
+ --tw-placeholder-opacity: .5;
+}
+
+.placeholder-opacity-\\[0\\.12\\]::placeholder {
+ --tw-placeholder-opacity: .12;
+}
+
+.placeholder-opacity-\\[var\\(--my-value\\)\\]::placeholder {
+ --tw-placeholder-opacity: var(--my-value);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/pointerEvents.test.js.snap b/tests/plugins/__snapshots__/pointerEvents.test.js.snap
new file mode 100644
index 000000000..47c494399
--- /dev/null
+++ b/tests/plugins/__snapshots__/pointerEvents.test.js.snap
@@ -0,0 +1,13 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'pointerEvents' plugin 1`] = `
+"
+.pointer-events-none {
+ pointer-events: none;
+}
+
+.pointer-events-auto {
+ pointer-events: auto;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/position.test.js.snap b/tests/plugins/__snapshots__/position.test.js.snap
new file mode 100644
index 000000000..36f2bdeee
--- /dev/null
+++ b/tests/plugins/__snapshots__/position.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'position' plugin 1`] = `
+"
+.static {
+ position: static;
+}
+
+.fixed {
+ position: fixed;
+}
+
+.absolute {
+ position: absolute;
+}
+
+.relative {
+ position: relative;
+}
+
+.sticky {
+ position: sticky;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/preflight.test.js.snap b/tests/plugins/__snapshots__/preflight.test.js.snap
new file mode 100644
index 000000000..f57ab0ec5
--- /dev/null
+++ b/tests/plugins/__snapshots__/preflight.test.js.snap
@@ -0,0 +1,401 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'preflight' plugin 1`] = `
+"
+*, :before, :after {
+ box-sizing: border-box;
+ border: 0 solid #e5e7eb;
+}
+
+:before, :after {
+ --tw-content: "";
+}
+
+html, :host {
+ -webkit-text-size-adjust: 100%;
+ tab-size: 4;
+ font-feature-settings: normal;
+ font-variation-settings: normal;
+ -webkit-tap-highlight-color: transparent;
+ font-family: ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;
+ line-height: 1.5;
+}
+
+body {
+ line-height: inherit;
+ margin: 0;
+}
+
+hr {
+ color: inherit;
+ border-top-width: 1px;
+ height: 0;
+}
+
+abbr:where([title]) {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-size: inherit;
+ font-weight: inherit;
+}
+
+a {
+ color: inherit;
+ -webkit-text-decoration: inherit;
+ text-decoration: inherit;
+}
+
+b, strong {
+ font-weight: bolder;
+}
+
+code, kbd, samp, pre {
+ font-feature-settings: normal;
+ font-variation-settings: normal;
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;
+ font-size: 1em;
+}
+
+small {
+ font-size: 80%;
+}
+
+sub, sup {
+ vertical-align: baseline;
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+}
+
+sub {
+ bottom: -.25em;
+}
+
+sup {
+ top: -.5em;
+}
+
+table {
+ text-indent: 0;
+ border-color: inherit;
+ border-collapse: collapse;
+}
+
+button, input, optgroup, select, textarea {
+ font-feature-settings: inherit;
+ font-variation-settings: inherit;
+ font-family: inherit;
+ font-size: 100%;
+ font-weight: inherit;
+ line-height: inherit;
+ color: inherit;
+ margin: 0;
+ padding: 0;
+}
+
+button, select {
+ text-transform: none;
+}
+
+button, [type="button"], [type="reset"], [type="submit"] {
+ -webkit-appearance: button;
+ background-color: #0000;
+ background-image: none;
+}
+
+:-moz-focusring {
+ outline: auto;
+}
+
+:-moz-ui-invalid {
+ box-shadow: none;
+}
+
+progress {
+ vertical-align: baseline;
+}
+
+::-webkit-inner-spin-button {
+ height: auto;
+}
+
+::-webkit-outer-spin-button {
+ height: auto;
+}
+
+[type="search"] {
+ -webkit-appearance: textfield;
+ outline-offset: -2px;
+}
+
+::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ font: inherit;
+}
+
+summary {
+ display: list-item;
+}
+
+blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre {
+ margin: 0;
+}
+
+fieldset {
+ margin: 0;
+ padding: 0;
+}
+
+legend {
+ padding: 0;
+}
+
+ol, ul, menu {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+dialog {
+ padding: 0;
+}
+
+textarea {
+ resize: vertical;
+}
+
+input::placeholder, textarea::placeholder {
+ opacity: 1;
+ color: #9ca3af;
+}
+
+button, [role="button"] {
+ cursor: pointer;
+}
+
+:disabled {
+ cursor: default;
+}
+
+img, svg, video, canvas, audio, iframe, embed, object {
+ vertical-align: middle;
+ display: block;
+}
+
+img, video {
+ max-width: 100%;
+ height: auto;
+}
+
+[hidden] {
+ display: none;
+}
+"
+`;
+
+exports[`should test the 'preflight' plugin 2`] = `
+"
+*, :before, :after {
+ box-sizing: border-box;
+ border: 0 solid;
+}
+
+:before, :after {
+ --tw-content: "";
+}
+
+html, :host {
+ -webkit-text-size-adjust: 100%;
+ tab-size: 4;
+ font-feature-settings: normal;
+ font-variation-settings: normal;
+ -webkit-tap-highlight-color: transparent;
+ font-family: ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;
+ line-height: 1.5;
+}
+
+body {
+ line-height: inherit;
+ margin: 0;
+}
+
+hr {
+ color: inherit;
+ border-top-width: 1px;
+ height: 0;
+}
+
+abbr:where([title]) {
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-size: inherit;
+ font-weight: inherit;
+}
+
+a {
+ color: inherit;
+ -webkit-text-decoration: inherit;
+ text-decoration: inherit;
+}
+
+b, strong {
+ font-weight: bolder;
+}
+
+code, kbd, samp, pre {
+ font-feature-settings: normal;
+ font-variation-settings: normal;
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;
+ font-size: 1em;
+}
+
+small {
+ font-size: 80%;
+}
+
+sub, sup {
+ vertical-align: baseline;
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+}
+
+sub {
+ bottom: -.25em;
+}
+
+sup {
+ top: -.5em;
+}
+
+table {
+ text-indent: 0;
+ border-color: inherit;
+ border-collapse: collapse;
+}
+
+button, input, optgroup, select, textarea {
+ font-feature-settings: inherit;
+ font-variation-settings: inherit;
+ font-family: inherit;
+ font-size: 100%;
+ font-weight: inherit;
+ line-height: inherit;
+ color: inherit;
+ margin: 0;
+ padding: 0;
+}
+
+button, select {
+ text-transform: none;
+}
+
+button, [type="button"], [type="reset"], [type="submit"] {
+ -webkit-appearance: button;
+ background-color: #0000;
+ background-image: none;
+}
+
+:-moz-focusring {
+ outline: auto;
+}
+
+:-moz-ui-invalid {
+ box-shadow: none;
+}
+
+progress {
+ vertical-align: baseline;
+}
+
+::-webkit-inner-spin-button {
+ height: auto;
+}
+
+::-webkit-outer-spin-button {
+ height: auto;
+}
+
+[type="search"] {
+ -webkit-appearance: textfield;
+ outline-offset: -2px;
+}
+
+::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ font: inherit;
+}
+
+summary {
+ display: list-item;
+}
+
+blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre {
+ margin: 0;
+}
+
+fieldset {
+ margin: 0;
+ padding: 0;
+}
+
+legend {
+ padding: 0;
+}
+
+ol, ul, menu {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+dialog {
+ padding: 0;
+}
+
+textarea {
+ resize: vertical;
+}
+
+input::placeholder, textarea::placeholder {
+ opacity: 1;
+ color: #9ca3af;
+}
+
+button, [role="button"] {
+ cursor: pointer;
+}
+
+:disabled {
+ cursor: default;
+}
+
+img, svg, video, canvas, audio, iframe, embed, object {
+ vertical-align: middle;
+ display: block;
+}
+
+img, video {
+ max-width: 100%;
+ height: auto;
+}
+
+[hidden] {
+ display: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/resize.test.js.snap b/tests/plugins/__snapshots__/resize.test.js.snap
new file mode 100644
index 000000000..387d82e1c
--- /dev/null
+++ b/tests/plugins/__snapshots__/resize.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'resize' plugin 1`] = `
+"
+.resize-none {
+ resize: none;
+}
+
+.resize-y {
+ resize: vertical;
+}
+
+.resize-x {
+ resize: horizontal;
+}
+
+.resize {
+ resize: both;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/ringColor.test.js.snap b/tests/plugins/__snapshots__/ringColor.test.js.snap
new file mode 100644
index 000000000..7651bf6ee
--- /dev/null
+++ b/tests/plugins/__snapshots__/ringColor.test.js.snap
@@ -0,0 +1,437 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'ringColor' plugin 1`] = `
+"
+.ring-\\[\\#0088cc\\] {
+ --tw-ring-color: #08c;
+}
+
+.ring-\\[var\\(--my-value\\)\\] {
+ --tw-ring-color: var(--my-value);
+}
+
+.ring-black {
+ --tw-ring-color: #000;
+}
+
+.ring-black\\/0 {
+ --tw-ring-color: #0000;
+}
+
+.ring-black\\/10 {
+ --tw-ring-color: #0000001a;
+}
+
+.ring-black\\/100 {
+ --tw-ring-color: #000;
+}
+
+.ring-black\\/15 {
+ --tw-ring-color: #00000026;
+}
+
+.ring-black\\/20 {
+ --tw-ring-color: #0003;
+}
+
+.ring-black\\/25 {
+ --tw-ring-color: #00000040;
+}
+
+.ring-black\\/30 {
+ --tw-ring-color: #0000004d;
+}
+
+.ring-black\\/35 {
+ --tw-ring-color: #00000059;
+}
+
+.ring-black\\/40 {
+ --tw-ring-color: #0006;
+}
+
+.ring-black\\/45 {
+ --tw-ring-color: #00000073;
+}
+
+.ring-black\\/5 {
+ --tw-ring-color: #0000000d;
+}
+
+.ring-black\\/50 {
+ --tw-ring-color: #00000080;
+}
+
+.ring-black\\/55 {
+ --tw-ring-color: #0000008c;
+}
+
+.ring-black\\/60 {
+ --tw-ring-color: #0009;
+}
+
+.ring-black\\/65 {
+ --tw-ring-color: #000000a6;
+}
+
+.ring-black\\/70 {
+ --tw-ring-color: #000000b3;
+}
+
+.ring-black\\/75 {
+ --tw-ring-color: #000000bf;
+}
+
+.ring-black\\/80 {
+ --tw-ring-color: #000c;
+}
+
+.ring-black\\/85 {
+ --tw-ring-color: #000000d9;
+}
+
+.ring-black\\/90 {
+ --tw-ring-color: #000000e6;
+}
+
+.ring-black\\/95 {
+ --tw-ring-color: #000000f2;
+}
+
+.ring-red-100 {
+ --tw-ring-color: #fee2e2;
+}
+
+.ring-red-100\\/0 {
+ --tw-ring-color: #fee2e200;
+}
+
+.ring-red-100\\/10 {
+ --tw-ring-color: #fee2e21a;
+}
+
+.ring-red-100\\/100 {
+ --tw-ring-color: #fee2e2;
+}
+
+.ring-red-100\\/15 {
+ --tw-ring-color: #fee2e226;
+}
+
+.ring-red-100\\/20 {
+ --tw-ring-color: #fee2e233;
+}
+
+.ring-red-100\\/25 {
+ --tw-ring-color: #fee2e240;
+}
+
+.ring-red-100\\/30 {
+ --tw-ring-color: #fee2e24d;
+}
+
+.ring-red-100\\/35 {
+ --tw-ring-color: #fee2e259;
+}
+
+.ring-red-100\\/40 {
+ --tw-ring-color: #fee2e266;
+}
+
+.ring-red-100\\/45 {
+ --tw-ring-color: #fee2e273;
+}
+
+.ring-red-100\\/5 {
+ --tw-ring-color: #fee2e20d;
+}
+
+.ring-red-100\\/50 {
+ --tw-ring-color: #fee2e280;
+}
+
+.ring-red-100\\/55 {
+ --tw-ring-color: #fee2e28c;
+}
+
+.ring-red-100\\/60 {
+ --tw-ring-color: #fee2e299;
+}
+
+.ring-red-100\\/65 {
+ --tw-ring-color: #fee2e2a6;
+}
+
+.ring-red-100\\/70 {
+ --tw-ring-color: #fee2e2b3;
+}
+
+.ring-red-100\\/75 {
+ --tw-ring-color: #fee2e2bf;
+}
+
+.ring-red-100\\/80 {
+ --tw-ring-color: #fee2e2cc;
+}
+
+.ring-red-100\\/85 {
+ --tw-ring-color: #fee2e2d9;
+}
+
+.ring-red-100\\/90 {
+ --tw-ring-color: #fee2e2e6;
+}
+
+.ring-red-100\\/95 {
+ --tw-ring-color: #fee2e2f2;
+}
+
+.ring-red-200 {
+ --tw-ring-color: #fecaca;
+}
+
+.ring-red-200\\/0 {
+ --tw-ring-color: #fecaca00;
+}
+
+.ring-red-200\\/10 {
+ --tw-ring-color: #fecaca1a;
+}
+
+.ring-red-200\\/100 {
+ --tw-ring-color: #fecaca;
+}
+
+.ring-red-200\\/15 {
+ --tw-ring-color: #fecaca26;
+}
+
+.ring-red-200\\/20 {
+ --tw-ring-color: #fecaca33;
+}
+
+.ring-red-200\\/25 {
+ --tw-ring-color: #fecaca40;
+}
+
+.ring-red-200\\/30 {
+ --tw-ring-color: #fecaca4d;
+}
+
+.ring-red-200\\/35 {
+ --tw-ring-color: #fecaca59;
+}
+
+.ring-red-200\\/40 {
+ --tw-ring-color: #fecaca66;
+}
+
+.ring-red-200\\/45 {
+ --tw-ring-color: #fecaca73;
+}
+
+.ring-red-200\\/5 {
+ --tw-ring-color: #fecaca0d;
+}
+
+.ring-red-200\\/50 {
+ --tw-ring-color: #fecaca80;
+}
+
+.ring-red-200\\/55 {
+ --tw-ring-color: #fecaca8c;
+}
+
+.ring-red-200\\/60 {
+ --tw-ring-color: #fecaca99;
+}
+
+.ring-red-200\\/65 {
+ --tw-ring-color: #fecacaa6;
+}
+
+.ring-red-200\\/70 {
+ --tw-ring-color: #fecacab3;
+}
+
+.ring-red-200\\/75 {
+ --tw-ring-color: #fecacabf;
+}
+
+.ring-red-200\\/80 {
+ --tw-ring-color: #fecacacc;
+}
+
+.ring-red-200\\/85 {
+ --tw-ring-color: #fecacad9;
+}
+
+.ring-red-200\\/90 {
+ --tw-ring-color: #fecacae6;
+}
+
+.ring-red-200\\/95 {
+ --tw-ring-color: #fecacaf2;
+}
+
+.ring-transparent {
+ --tw-ring-color: transparent;
+}
+
+.ring-transparent\\/0 {
+ --tw-ring-color: #0000;
+}
+
+.ring-transparent\\/10 {
+ --tw-ring-color: #0000001a;
+}
+
+.ring-transparent\\/100 {
+ --tw-ring-color: #000;
+}
+
+.ring-transparent\\/15 {
+ --tw-ring-color: #00000026;
+}
+
+.ring-transparent\\/20 {
+ --tw-ring-color: #0003;
+}
+
+.ring-transparent\\/25 {
+ --tw-ring-color: #00000040;
+}
+
+.ring-transparent\\/30 {
+ --tw-ring-color: #0000004d;
+}
+
+.ring-transparent\\/35 {
+ --tw-ring-color: #00000059;
+}
+
+.ring-transparent\\/40 {
+ --tw-ring-color: #0006;
+}
+
+.ring-transparent\\/45 {
+ --tw-ring-color: #00000073;
+}
+
+.ring-transparent\\/5 {
+ --tw-ring-color: #0000000d;
+}
+
+.ring-transparent\\/50 {
+ --tw-ring-color: #00000080;
+}
+
+.ring-transparent\\/55 {
+ --tw-ring-color: #0000008c;
+}
+
+.ring-transparent\\/60 {
+ --tw-ring-color: #0009;
+}
+
+.ring-transparent\\/65 {
+ --tw-ring-color: #000000a6;
+}
+
+.ring-transparent\\/70 {
+ --tw-ring-color: #000000b3;
+}
+
+.ring-transparent\\/75 {
+ --tw-ring-color: #000000bf;
+}
+
+.ring-transparent\\/80 {
+ --tw-ring-color: #000c;
+}
+
+.ring-transparent\\/85 {
+ --tw-ring-color: #000000d9;
+}
+
+.ring-transparent\\/90 {
+ --tw-ring-color: #000000e6;
+}
+
+.ring-transparent\\/95 {
+ --tw-ring-color: #000000f2;
+}
+"
+`;
+
+exports[`should test the 'ringColor' plugin 2`] = `
+"
+.ring-\\[\\#0088cc\\] {
+ --tw-ring-opacity: 1;
+ --tw-ring-color: rgb(0 136 204 / var(--tw-ring-opacity));
+}
+
+.ring-\\[var\\(--my-value\\)\\] {
+ --tw-ring-color: var(--my-value);
+}
+
+.ring-black {
+ --tw-ring-opacity: 1;
+ --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity));
+}
+
+.ring-black\\/0 {
+ --tw-ring-color: #0000;
+}
+
+.ring-black\\/50 {
+ --tw-ring-color: #00000080;
+}
+
+.ring-red-100 {
+ --tw-ring-opacity: 1;
+ --tw-ring-color: rgb(254 226 226 / var(--tw-ring-opacity));
+}
+
+.ring-red-100\\/0 {
+ --tw-ring-color: #fee2e200;
+}
+
+.ring-red-100\\/50 {
+ --tw-ring-color: #fee2e280;
+}
+
+.ring-red-200 {
+ --tw-ring-opacity: 1;
+ --tw-ring-color: rgb(254 202 202 / var(--tw-ring-opacity));
+}
+
+.ring-red-200\\/0 {
+ --tw-ring-color: #fecaca00;
+}
+
+.ring-red-200\\/50 {
+ --tw-ring-color: #fecaca80;
+}
+
+.ring-transparent {
+ --tw-ring-color: transparent;
+}
+
+.ring-transparent\\/0 {
+ --tw-ring-color: #0000;
+}
+
+.ring-transparent\\/50 {
+ --tw-ring-color: #00000080;
+}
+
+.ring-opacity-0 {
+ --tw-ring-opacity: 0;
+}
+
+.ring-opacity-50 {
+ --tw-ring-opacity: .5;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/ringOffsetColor.test.js.snap b/tests/plugins/__snapshots__/ringOffsetColor.test.js.snap
new file mode 100644
index 000000000..228f616f0
--- /dev/null
+++ b/tests/plugins/__snapshots__/ringOffsetColor.test.js.snap
@@ -0,0 +1,57 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'ringOffsetColor' plugin 1`] = `
+"
+.ring-offset-\\[\\#0088cc\\] {
+ --tw-ring-offset-color: #08c;
+}
+
+.ring-offset-black {
+ --tw-ring-offset-color: #000;
+}
+
+.ring-offset-black\\/0 {
+ --tw-ring-offset-color: #0000;
+}
+
+.ring-offset-black\\/50 {
+ --tw-ring-offset-color: #00000080;
+}
+
+.ring-offset-red-100 {
+ --tw-ring-offset-color: #fee2e2;
+}
+
+.ring-offset-red-100\\/0 {
+ --tw-ring-offset-color: #fee2e200;
+}
+
+.ring-offset-red-100\\/50 {
+ --tw-ring-offset-color: #fee2e280;
+}
+
+.ring-offset-red-200 {
+ --tw-ring-offset-color: #fecaca;
+}
+
+.ring-offset-red-200\\/0 {
+ --tw-ring-offset-color: #fecaca00;
+}
+
+.ring-offset-red-200\\/50 {
+ --tw-ring-offset-color: #fecaca80;
+}
+
+.ring-offset-transparent {
+ --tw-ring-offset-color: transparent;
+}
+
+.ring-offset-transparent\\/0 {
+ --tw-ring-offset-color: #0000;
+}
+
+.ring-offset-transparent\\/50 {
+ --tw-ring-offset-color: #00000080;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/ringOffsetWidth.test.js.snap b/tests/plugins/__snapshots__/ringOffsetWidth.test.js.snap
new file mode 100644
index 000000000..2ae64fc1e
--- /dev/null
+++ b/tests/plugins/__snapshots__/ringOffsetWidth.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'ringOffsetWidth' plugin 1`] = `
+"
+.ring-offset-0 {
+ --tw-ring-offset-width: 0px;
+}
+
+.ring-offset-1 {
+ --tw-ring-offset-width: 1px;
+}
+
+.ring-offset-2 {
+ --tw-ring-offset-width: 2px;
+}
+
+.ring-offset-4 {
+ --tw-ring-offset-width: 4px;
+}
+
+.ring-offset-8 {
+ --tw-ring-offset-width: 8px;
+}
+
+.ring-offset-\\[12px\\] {
+ --tw-ring-offset-width: 12px;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/ringOpacity.test.js.snap b/tests/plugins/__snapshots__/ringOpacity.test.js.snap
new file mode 100644
index 000000000..4b7376ad3
--- /dev/null
+++ b/tests/plugins/__snapshots__/ringOpacity.test.js.snap
@@ -0,0 +1,45 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'ringOpacity' plugin 1`] = `
+"
+.ring-opacity-0 {
+ --tw-ring-opacity: 0;
+}
+
+.ring-opacity-50 {
+ --tw-ring-opacity: .5;
+}
+
+.ring-opacity-\\[0\\.12\\] {
+ --tw-ring-opacity: .12;
+}
+
+.ring-opacity-\\[var\\(--my-value\\)\\] {
+ --tw-ring-opacity: var(--my-value);
+}
+"
+`;
+
+exports[`should test the 'ringOpacity' plugin 2`] = `
+"
+.ring-opacity {
+ --tw-ring-opacity: .5;
+}
+
+.ring-opacity-0 {
+ --tw-ring-opacity: 0;
+}
+
+.ring-opacity-50 {
+ --tw-ring-opacity: .5;
+}
+
+.ring-opacity-\\[0\\.12\\] {
+ --tw-ring-opacity: .12;
+}
+
+.ring-opacity-\\[var\\(--my-value\\)\\] {
+ --tw-ring-opacity: var(--my-value);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/ringWidth.test.js.snap b/tests/plugins/__snapshots__/ringWidth.test.js.snap
new file mode 100644
index 000000000..c814b6292
--- /dev/null
+++ b/tests/plugins/__snapshots__/ringWidth.test.js.snap
@@ -0,0 +1,305 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'ringWidth' plugin 1`] = `
+"
+*, :before, :after {
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: #3b82f680;
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+}
+
+::backdrop {
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: #3b82f680;
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+}
+
+.ring {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-0 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-1 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-2 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-4 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-8 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(8px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-\\[12px\\] {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(12px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-inset {
+ --tw-ring-inset: inset;
+}
+"
+`;
+
+exports[`should test the 'ringWidth' plugin 2`] = `
+"
+*, :before, :after {
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: #3b82f67f;
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+}
+
+::backdrop {
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: #3b82f67f;
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+}
+
+.ring {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-0 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-1 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-2 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-4 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-8 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(8px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-\\[12px\\] {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(12px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-inset {
+ --tw-ring-inset: inset;
+}
+"
+`;
+
+exports[`should test the 'ringWidth' plugin 3`] = `
+"
+*, :before, :after {
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: #3b82f67f;
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+}
+
+::backdrop {
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: #3b82f67f;
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+}
+
+.ring {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-0 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-1 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-2 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-4 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-8 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(8px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-\\[12px\\] {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(12px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-inset {
+ --tw-ring-inset: inset;
+}
+
+.ring-opacity {
+ --tw-ring-opacity: .12;
+}
+
+.ring-opacity-0 {
+ --tw-ring-opacity: 0;
+}
+
+.ring-opacity-10 {
+ --tw-ring-opacity: .1;
+}
+
+.ring-opacity-100 {
+ --tw-ring-opacity: 1;
+}
+
+.ring-opacity-15 {
+ --tw-ring-opacity: .15;
+}
+
+.ring-opacity-20 {
+ --tw-ring-opacity: .2;
+}
+
+.ring-opacity-25 {
+ --tw-ring-opacity: .25;
+}
+
+.ring-opacity-30 {
+ --tw-ring-opacity: .3;
+}
+
+.ring-opacity-35 {
+ --tw-ring-opacity: .35;
+}
+
+.ring-opacity-40 {
+ --tw-ring-opacity: .4;
+}
+
+.ring-opacity-45 {
+ --tw-ring-opacity: .45;
+}
+
+.ring-opacity-5 {
+ --tw-ring-opacity: .05;
+}
+
+.ring-opacity-50 {
+ --tw-ring-opacity: .5;
+}
+
+.ring-opacity-55 {
+ --tw-ring-opacity: .55;
+}
+
+.ring-opacity-60 {
+ --tw-ring-opacity: .6;
+}
+
+.ring-opacity-65 {
+ --tw-ring-opacity: .65;
+}
+
+.ring-opacity-70 {
+ --tw-ring-opacity: .7;
+}
+
+.ring-opacity-75 {
+ --tw-ring-opacity: .75;
+}
+
+.ring-opacity-80 {
+ --tw-ring-opacity: .8;
+}
+
+.ring-opacity-85 {
+ --tw-ring-opacity: .85;
+}
+
+.ring-opacity-90 {
+ --tw-ring-opacity: .9;
+}
+
+.ring-opacity-95 {
+ --tw-ring-opacity: .95;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/rotate.test.js.snap b/tests/plugins/__snapshots__/rotate.test.js.snap
new file mode 100644
index 000000000..fe5df28cd
--- /dev/null
+++ b/tests/plugins/__snapshots__/rotate.test.js.snap
@@ -0,0 +1,105 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'rotate' plugin 1`] = `
+"
+.-rotate-0 {
+ --tw-rotate: -0deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-rotate-1 {
+ --tw-rotate: -1deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-rotate-12 {
+ --tw-rotate: -12deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-rotate-180 {
+ --tw-rotate: -180deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-rotate-2 {
+ --tw-rotate: -2deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-rotate-3 {
+ --tw-rotate: -3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-rotate-45 {
+ --tw-rotate: -45deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-rotate-6 {
+ --tw-rotate: -6deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-rotate-90 {
+ --tw-rotate: -90deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-0 {
+ --tw-rotate: 0deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-1 {
+ --tw-rotate: 1deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-12 {
+ --tw-rotate: 12deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-180 {
+ --tw-rotate: 180deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-2 {
+ --tw-rotate: 2deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-3 {
+ --tw-rotate: 3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-45 {
+ --tw-rotate: 45deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-6 {
+ --tw-rotate: 6deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-90 {
+ --tw-rotate: 90deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-\\[12deg\\] {
+ --tw-rotate: 12deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-\\[var\\(--my-value\\)\\] {
+ --tw-rotate: var(--my-value);
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/saturate.test.js.snap b/tests/plugins/__snapshots__/saturate.test.js.snap
new file mode 100644
index 000000000..57f515ab8
--- /dev/null
+++ b/tests/plugins/__snapshots__/saturate.test.js.snap
@@ -0,0 +1,40 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'saturate' plugin 1`] = `
+"
+.saturate-0 {
+ --tw-saturate: saturate(0);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.saturate-100 {
+ --tw-saturate: saturate(1);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.saturate-150 {
+ --tw-saturate: saturate(1.5);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.saturate-200 {
+ --tw-saturate: saturate(2);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.saturate-50 {
+ --tw-saturate: saturate(.5);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.saturate-\\[0\\.12\\] {
+ --tw-saturate: saturate(.12);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.saturate-\\[var\\(--my-value\\)\\] {
+ --tw-saturate: saturate(var(--my-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/scale.test.js.snap b/tests/plugins/__snapshots__/scale.test.js.snap
new file mode 100644
index 000000000..926b39bbc
--- /dev/null
+++ b/tests/plugins/__snapshots__/scale.test.js.snap
@@ -0,0 +1,357 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'scale' plugin 1`] = `
+"
+.-scale-0 {
+ --tw-scale-x: 0;
+ --tw-scale-y: 0;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-100 {
+ --tw-scale-x: -1;
+ --tw-scale-y: -1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-105 {
+ --tw-scale-x: -1.05;
+ --tw-scale-y: -1.05;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-110 {
+ --tw-scale-x: -1.1;
+ --tw-scale-y: -1.1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-125 {
+ --tw-scale-x: -1.25;
+ --tw-scale-y: -1.25;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-150 {
+ --tw-scale-x: -1.5;
+ --tw-scale-y: -1.5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-50 {
+ --tw-scale-x: -.5;
+ --tw-scale-y: -.5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-75 {
+ --tw-scale-x: -.75;
+ --tw-scale-y: -.75;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-90 {
+ --tw-scale-x: -.9;
+ --tw-scale-y: -.9;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-95 {
+ --tw-scale-x: -.95;
+ --tw-scale-y: -.95;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-0 {
+ --tw-scale-x: 0;
+ --tw-scale-y: 0;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-100 {
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-105 {
+ --tw-scale-x: 1.05;
+ --tw-scale-y: 1.05;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-110 {
+ --tw-scale-x: 1.1;
+ --tw-scale-y: 1.1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-125 {
+ --tw-scale-x: 1.25;
+ --tw-scale-y: 1.25;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-150 {
+ --tw-scale-x: 1.5;
+ --tw-scale-y: 1.5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-50 {
+ --tw-scale-x: .5;
+ --tw-scale-y: .5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-75 {
+ --tw-scale-x: .75;
+ --tw-scale-y: .75;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-90 {
+ --tw-scale-x: .9;
+ --tw-scale-y: .9;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-95 {
+ --tw-scale-x: .95;
+ --tw-scale-y: .95;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-\\[12px\\] {
+ --tw-scale-x: 12px;
+ --tw-scale-y: 12px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-\\[var\\(--my-value\\)\\] {
+ --tw-scale-x: var(--my-value);
+ --tw-scale-y: var(--my-value);
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-x-0 {
+ --tw-scale-x: 0;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-x-100 {
+ --tw-scale-x: -1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-x-105 {
+ --tw-scale-x: -1.05;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-x-110 {
+ --tw-scale-x: -1.1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-x-125 {
+ --tw-scale-x: -1.25;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-x-150 {
+ --tw-scale-x: -1.5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-x-50 {
+ --tw-scale-x: -.5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-x-75 {
+ --tw-scale-x: -.75;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-x-90 {
+ --tw-scale-x: -.9;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-x-95 {
+ --tw-scale-x: -.95;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-y-0 {
+ --tw-scale-y: 0;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-y-100 {
+ --tw-scale-y: -1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-y-105 {
+ --tw-scale-y: -1.05;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-y-110 {
+ --tw-scale-y: -1.1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-y-125 {
+ --tw-scale-y: -1.25;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-y-150 {
+ --tw-scale-y: -1.5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-y-50 {
+ --tw-scale-y: -.5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-y-75 {
+ --tw-scale-y: -.75;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-y-90 {
+ --tw-scale-y: -.9;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-scale-y-95 {
+ --tw-scale-y: -.95;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-x-0 {
+ --tw-scale-x: 0;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-x-100 {
+ --tw-scale-x: 1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-x-105 {
+ --tw-scale-x: 1.05;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-x-110 {
+ --tw-scale-x: 1.1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-x-125 {
+ --tw-scale-x: 1.25;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-x-150 {
+ --tw-scale-x: 1.5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-x-50 {
+ --tw-scale-x: .5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-x-75 {
+ --tw-scale-x: .75;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-x-90 {
+ --tw-scale-x: .9;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-x-95 {
+ --tw-scale-x: .95;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-x-\\[23px\\] {
+ --tw-scale-x: 23px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-x-\\[var\\(--my-value\\)\\] {
+ --tw-scale-x: var(--my-value);
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-y-0 {
+ --tw-scale-y: 0;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-y-100 {
+ --tw-scale-y: 1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-y-105 {
+ --tw-scale-y: 1.05;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-y-110 {
+ --tw-scale-y: 1.1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-y-125 {
+ --tw-scale-y: 1.25;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-y-150 {
+ --tw-scale-y: 1.5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-y-50 {
+ --tw-scale-y: .5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-y-75 {
+ --tw-scale-y: .75;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-y-90 {
+ --tw-scale-y: .9;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-y-95 {
+ --tw-scale-y: .95;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-y-\\[34px\\] {
+ --tw-scale-y: 34px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.scale-y-\\[var\\(--my-value\\)\\] {
+ --tw-scale-y: var(--my-value);
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/scrollBehavior.test.js.snap b/tests/plugins/__snapshots__/scrollBehavior.test.js.snap
new file mode 100644
index 000000000..8f1ff4297
--- /dev/null
+++ b/tests/plugins/__snapshots__/scrollBehavior.test.js.snap
@@ -0,0 +1,13 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'scrollBehavior' plugin 1`] = `
+"
+.scroll-auto {
+ scroll-behavior: auto;
+}
+
+.scroll-smooth {
+ scroll-behavior: smooth;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/scrollMargin.test.js.snap b/tests/plugins/__snapshots__/scrollMargin.test.js.snap
new file mode 100644
index 000000000..1e6b07383
--- /dev/null
+++ b/tests/plugins/__snapshots__/scrollMargin.test.js.snap
@@ -0,0 +1,2741 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'scrollMargin' plugin 1`] = `
+"
+.-scroll-m-0 {
+ scroll-margin: 0;
+}
+
+.-scroll-m-0\\.5 {
+ scroll-margin: -.125rem;
+}
+
+.-scroll-m-1 {
+ scroll-margin: -.25rem;
+}
+
+.-scroll-m-1\\.5 {
+ scroll-margin: -.375rem;
+}
+
+.-scroll-m-10 {
+ scroll-margin: -2.5rem;
+}
+
+.-scroll-m-11 {
+ scroll-margin: -2.75rem;
+}
+
+.-scroll-m-12 {
+ scroll-margin: -3rem;
+}
+
+.-scroll-m-14 {
+ scroll-margin: -3.5rem;
+}
+
+.-scroll-m-16 {
+ scroll-margin: -4rem;
+}
+
+.-scroll-m-2 {
+ scroll-margin: -.5rem;
+}
+
+.-scroll-m-2\\.5 {
+ scroll-margin: -.625rem;
+}
+
+.-scroll-m-20 {
+ scroll-margin: -5rem;
+}
+
+.-scroll-m-24 {
+ scroll-margin: -6rem;
+}
+
+.-scroll-m-28 {
+ scroll-margin: -7rem;
+}
+
+.-scroll-m-3 {
+ scroll-margin: -.75rem;
+}
+
+.-scroll-m-3\\.5 {
+ scroll-margin: -.875rem;
+}
+
+.-scroll-m-32 {
+ scroll-margin: -8rem;
+}
+
+.-scroll-m-36 {
+ scroll-margin: -9rem;
+}
+
+.-scroll-m-4 {
+ scroll-margin: -1rem;
+}
+
+.-scroll-m-40 {
+ scroll-margin: -10rem;
+}
+
+.-scroll-m-44 {
+ scroll-margin: -11rem;
+}
+
+.-scroll-m-48 {
+ scroll-margin: -12rem;
+}
+
+.-scroll-m-5 {
+ scroll-margin: -1.25rem;
+}
+
+.-scroll-m-52 {
+ scroll-margin: -13rem;
+}
+
+.-scroll-m-56 {
+ scroll-margin: -14rem;
+}
+
+.-scroll-m-6 {
+ scroll-margin: -1.5rem;
+}
+
+.-scroll-m-60 {
+ scroll-margin: -15rem;
+}
+
+.-scroll-m-64 {
+ scroll-margin: -16rem;
+}
+
+.-scroll-m-7 {
+ scroll-margin: -1.75rem;
+}
+
+.-scroll-m-72 {
+ scroll-margin: -18rem;
+}
+
+.-scroll-m-8 {
+ scroll-margin: -2rem;
+}
+
+.-scroll-m-80 {
+ scroll-margin: -20rem;
+}
+
+.-scroll-m-9 {
+ scroll-margin: -2.25rem;
+}
+
+.-scroll-m-96 {
+ scroll-margin: -24rem;
+}
+
+.-scroll-m-px {
+ scroll-margin: -1px;
+}
+
+.scroll-m-0 {
+ scroll-margin: 0;
+}
+
+.scroll-m-0\\.5 {
+ scroll-margin: .125rem;
+}
+
+.scroll-m-1 {
+ scroll-margin: .25rem;
+}
+
+.scroll-m-1\\.5 {
+ scroll-margin: .375rem;
+}
+
+.scroll-m-10 {
+ scroll-margin: 2.5rem;
+}
+
+.scroll-m-11 {
+ scroll-margin: 2.75rem;
+}
+
+.scroll-m-12 {
+ scroll-margin: 3rem;
+}
+
+.scroll-m-14 {
+ scroll-margin: 3.5rem;
+}
+
+.scroll-m-16 {
+ scroll-margin: 4rem;
+}
+
+.scroll-m-2 {
+ scroll-margin: .5rem;
+}
+
+.scroll-m-2\\.5 {
+ scroll-margin: .625rem;
+}
+
+.scroll-m-20 {
+ scroll-margin: 5rem;
+}
+
+.scroll-m-24 {
+ scroll-margin: 6rem;
+}
+
+.scroll-m-28 {
+ scroll-margin: 7rem;
+}
+
+.scroll-m-3 {
+ scroll-margin: .75rem;
+}
+
+.scroll-m-3\\.5 {
+ scroll-margin: .875rem;
+}
+
+.scroll-m-32 {
+ scroll-margin: 8rem;
+}
+
+.scroll-m-36 {
+ scroll-margin: 9rem;
+}
+
+.scroll-m-4 {
+ scroll-margin: 1rem;
+}
+
+.scroll-m-40 {
+ scroll-margin: 10rem;
+}
+
+.scroll-m-44 {
+ scroll-margin: 11rem;
+}
+
+.scroll-m-48 {
+ scroll-margin: 12rem;
+}
+
+.scroll-m-5 {
+ scroll-margin: 1.25rem;
+}
+
+.scroll-m-52 {
+ scroll-margin: 13rem;
+}
+
+.scroll-m-56 {
+ scroll-margin: 14rem;
+}
+
+.scroll-m-6 {
+ scroll-margin: 1.5rem;
+}
+
+.scroll-m-60 {
+ scroll-margin: 15rem;
+}
+
+.scroll-m-64 {
+ scroll-margin: 16rem;
+}
+
+.scroll-m-7 {
+ scroll-margin: 1.75rem;
+}
+
+.scroll-m-72 {
+ scroll-margin: 18rem;
+}
+
+.scroll-m-8 {
+ scroll-margin: 2rem;
+}
+
+.scroll-m-80 {
+ scroll-margin: 20rem;
+}
+
+.scroll-m-9 {
+ scroll-margin: 2.25rem;
+}
+
+.scroll-m-96 {
+ scroll-margin: 24rem;
+}
+
+.scroll-m-\\[12px\\] {
+ scroll-margin: 12px;
+}
+
+.scroll-m-\\[var\\(--my-value\\)\\] {
+ scroll-margin: var(--my-value);
+}
+
+.scroll-m-px {
+ scroll-margin: 1px;
+}
+
+.-scroll-mx-0 {
+ scroll-margin-left: 0;
+ scroll-margin-right: 0;
+}
+
+.-scroll-mx-0\\.5 {
+ scroll-margin-left: -.125rem;
+ scroll-margin-right: -.125rem;
+}
+
+.-scroll-mx-1 {
+ scroll-margin-left: -.25rem;
+ scroll-margin-right: -.25rem;
+}
+
+.-scroll-mx-1\\.5 {
+ scroll-margin-left: -.375rem;
+ scroll-margin-right: -.375rem;
+}
+
+.-scroll-mx-10 {
+ scroll-margin-left: -2.5rem;
+ scroll-margin-right: -2.5rem;
+}
+
+.-scroll-mx-11 {
+ scroll-margin-left: -2.75rem;
+ scroll-margin-right: -2.75rem;
+}
+
+.-scroll-mx-12 {
+ scroll-margin-left: -3rem;
+ scroll-margin-right: -3rem;
+}
+
+.-scroll-mx-14 {
+ scroll-margin-left: -3.5rem;
+ scroll-margin-right: -3.5rem;
+}
+
+.-scroll-mx-16 {
+ scroll-margin-left: -4rem;
+ scroll-margin-right: -4rem;
+}
+
+.-scroll-mx-2 {
+ scroll-margin-left: -.5rem;
+ scroll-margin-right: -.5rem;
+}
+
+.-scroll-mx-2\\.5 {
+ scroll-margin-left: -.625rem;
+ scroll-margin-right: -.625rem;
+}
+
+.-scroll-mx-20 {
+ scroll-margin-left: -5rem;
+ scroll-margin-right: -5rem;
+}
+
+.-scroll-mx-24 {
+ scroll-margin-left: -6rem;
+ scroll-margin-right: -6rem;
+}
+
+.-scroll-mx-28 {
+ scroll-margin-left: -7rem;
+ scroll-margin-right: -7rem;
+}
+
+.-scroll-mx-3 {
+ scroll-margin-left: -.75rem;
+ scroll-margin-right: -.75rem;
+}
+
+.-scroll-mx-3\\.5 {
+ scroll-margin-left: -.875rem;
+ scroll-margin-right: -.875rem;
+}
+
+.-scroll-mx-32 {
+ scroll-margin-left: -8rem;
+ scroll-margin-right: -8rem;
+}
+
+.-scroll-mx-36 {
+ scroll-margin-left: -9rem;
+ scroll-margin-right: -9rem;
+}
+
+.-scroll-mx-4 {
+ scroll-margin-left: -1rem;
+ scroll-margin-right: -1rem;
+}
+
+.-scroll-mx-40 {
+ scroll-margin-left: -10rem;
+ scroll-margin-right: -10rem;
+}
+
+.-scroll-mx-44 {
+ scroll-margin-left: -11rem;
+ scroll-margin-right: -11rem;
+}
+
+.-scroll-mx-48 {
+ scroll-margin-left: -12rem;
+ scroll-margin-right: -12rem;
+}
+
+.-scroll-mx-5 {
+ scroll-margin-left: -1.25rem;
+ scroll-margin-right: -1.25rem;
+}
+
+.-scroll-mx-52 {
+ scroll-margin-left: -13rem;
+ scroll-margin-right: -13rem;
+}
+
+.-scroll-mx-56 {
+ scroll-margin-left: -14rem;
+ scroll-margin-right: -14rem;
+}
+
+.-scroll-mx-6 {
+ scroll-margin-left: -1.5rem;
+ scroll-margin-right: -1.5rem;
+}
+
+.-scroll-mx-60 {
+ scroll-margin-left: -15rem;
+ scroll-margin-right: -15rem;
+}
+
+.-scroll-mx-64 {
+ scroll-margin-left: -16rem;
+ scroll-margin-right: -16rem;
+}
+
+.-scroll-mx-7 {
+ scroll-margin-left: -1.75rem;
+ scroll-margin-right: -1.75rem;
+}
+
+.-scroll-mx-72 {
+ scroll-margin-left: -18rem;
+ scroll-margin-right: -18rem;
+}
+
+.-scroll-mx-8 {
+ scroll-margin-left: -2rem;
+ scroll-margin-right: -2rem;
+}
+
+.-scroll-mx-80 {
+ scroll-margin-left: -20rem;
+ scroll-margin-right: -20rem;
+}
+
+.-scroll-mx-9 {
+ scroll-margin-left: -2.25rem;
+ scroll-margin-right: -2.25rem;
+}
+
+.-scroll-mx-96 {
+ scroll-margin-left: -24rem;
+ scroll-margin-right: -24rem;
+}
+
+.-scroll-mx-px {
+ scroll-margin-left: -1px;
+ scroll-margin-right: -1px;
+}
+
+.-scroll-my-0 {
+ scroll-margin-top: 0;
+ scroll-margin-bottom: 0;
+}
+
+.-scroll-my-0\\.5 {
+ scroll-margin-top: -.125rem;
+ scroll-margin-bottom: -.125rem;
+}
+
+.-scroll-my-1 {
+ scroll-margin-top: -.25rem;
+ scroll-margin-bottom: -.25rem;
+}
+
+.-scroll-my-1\\.5 {
+ scroll-margin-top: -.375rem;
+ scroll-margin-bottom: -.375rem;
+}
+
+.-scroll-my-10 {
+ scroll-margin-top: -2.5rem;
+ scroll-margin-bottom: -2.5rem;
+}
+
+.-scroll-my-11 {
+ scroll-margin-top: -2.75rem;
+ scroll-margin-bottom: -2.75rem;
+}
+
+.-scroll-my-12 {
+ scroll-margin-top: -3rem;
+ scroll-margin-bottom: -3rem;
+}
+
+.-scroll-my-14 {
+ scroll-margin-top: -3.5rem;
+ scroll-margin-bottom: -3.5rem;
+}
+
+.-scroll-my-16 {
+ scroll-margin-top: -4rem;
+ scroll-margin-bottom: -4rem;
+}
+
+.-scroll-my-2 {
+ scroll-margin-top: -.5rem;
+ scroll-margin-bottom: -.5rem;
+}
+
+.-scroll-my-2\\.5 {
+ scroll-margin-top: -.625rem;
+ scroll-margin-bottom: -.625rem;
+}
+
+.-scroll-my-20 {
+ scroll-margin-top: -5rem;
+ scroll-margin-bottom: -5rem;
+}
+
+.-scroll-my-24 {
+ scroll-margin-top: -6rem;
+ scroll-margin-bottom: -6rem;
+}
+
+.-scroll-my-28 {
+ scroll-margin-top: -7rem;
+ scroll-margin-bottom: -7rem;
+}
+
+.-scroll-my-3 {
+ scroll-margin-top: -.75rem;
+ scroll-margin-bottom: -.75rem;
+}
+
+.-scroll-my-3\\.5 {
+ scroll-margin-top: -.875rem;
+ scroll-margin-bottom: -.875rem;
+}
+
+.-scroll-my-32 {
+ scroll-margin-top: -8rem;
+ scroll-margin-bottom: -8rem;
+}
+
+.-scroll-my-36 {
+ scroll-margin-top: -9rem;
+ scroll-margin-bottom: -9rem;
+}
+
+.-scroll-my-4 {
+ scroll-margin-top: -1rem;
+ scroll-margin-bottom: -1rem;
+}
+
+.-scroll-my-40 {
+ scroll-margin-top: -10rem;
+ scroll-margin-bottom: -10rem;
+}
+
+.-scroll-my-44 {
+ scroll-margin-top: -11rem;
+ scroll-margin-bottom: -11rem;
+}
+
+.-scroll-my-48 {
+ scroll-margin-top: -12rem;
+ scroll-margin-bottom: -12rem;
+}
+
+.-scroll-my-5 {
+ scroll-margin-top: -1.25rem;
+ scroll-margin-bottom: -1.25rem;
+}
+
+.-scroll-my-52 {
+ scroll-margin-top: -13rem;
+ scroll-margin-bottom: -13rem;
+}
+
+.-scroll-my-56 {
+ scroll-margin-top: -14rem;
+ scroll-margin-bottom: -14rem;
+}
+
+.-scroll-my-6 {
+ scroll-margin-top: -1.5rem;
+ scroll-margin-bottom: -1.5rem;
+}
+
+.-scroll-my-60 {
+ scroll-margin-top: -15rem;
+ scroll-margin-bottom: -15rem;
+}
+
+.-scroll-my-64 {
+ scroll-margin-top: -16rem;
+ scroll-margin-bottom: -16rem;
+}
+
+.-scroll-my-7 {
+ scroll-margin-top: -1.75rem;
+ scroll-margin-bottom: -1.75rem;
+}
+
+.-scroll-my-72 {
+ scroll-margin-top: -18rem;
+ scroll-margin-bottom: -18rem;
+}
+
+.-scroll-my-8 {
+ scroll-margin-top: -2rem;
+ scroll-margin-bottom: -2rem;
+}
+
+.-scroll-my-80 {
+ scroll-margin-top: -20rem;
+ scroll-margin-bottom: -20rem;
+}
+
+.-scroll-my-9 {
+ scroll-margin-top: -2.25rem;
+ scroll-margin-bottom: -2.25rem;
+}
+
+.-scroll-my-96 {
+ scroll-margin-top: -24rem;
+ scroll-margin-bottom: -24rem;
+}
+
+.-scroll-my-px {
+ scroll-margin-top: -1px;
+ scroll-margin-bottom: -1px;
+}
+
+.scroll-mx-0 {
+ scroll-margin-left: 0;
+ scroll-margin-right: 0;
+}
+
+.scroll-mx-0\\.5 {
+ scroll-margin-left: .125rem;
+ scroll-margin-right: .125rem;
+}
+
+.scroll-mx-1 {
+ scroll-margin-left: .25rem;
+ scroll-margin-right: .25rem;
+}
+
+.scroll-mx-1\\.5 {
+ scroll-margin-left: .375rem;
+ scroll-margin-right: .375rem;
+}
+
+.scroll-mx-10 {
+ scroll-margin-left: 2.5rem;
+ scroll-margin-right: 2.5rem;
+}
+
+.scroll-mx-11 {
+ scroll-margin-left: 2.75rem;
+ scroll-margin-right: 2.75rem;
+}
+
+.scroll-mx-12 {
+ scroll-margin-left: 3rem;
+ scroll-margin-right: 3rem;
+}
+
+.scroll-mx-14 {
+ scroll-margin-left: 3.5rem;
+ scroll-margin-right: 3.5rem;
+}
+
+.scroll-mx-16 {
+ scroll-margin-left: 4rem;
+ scroll-margin-right: 4rem;
+}
+
+.scroll-mx-2 {
+ scroll-margin-left: .5rem;
+ scroll-margin-right: .5rem;
+}
+
+.scroll-mx-2\\.5 {
+ scroll-margin-left: .625rem;
+ scroll-margin-right: .625rem;
+}
+
+.scroll-mx-20 {
+ scroll-margin-left: 5rem;
+ scroll-margin-right: 5rem;
+}
+
+.scroll-mx-24 {
+ scroll-margin-left: 6rem;
+ scroll-margin-right: 6rem;
+}
+
+.scroll-mx-28 {
+ scroll-margin-left: 7rem;
+ scroll-margin-right: 7rem;
+}
+
+.scroll-mx-3 {
+ scroll-margin-left: .75rem;
+ scroll-margin-right: .75rem;
+}
+
+.scroll-mx-3\\.5 {
+ scroll-margin-left: .875rem;
+ scroll-margin-right: .875rem;
+}
+
+.scroll-mx-32 {
+ scroll-margin-left: 8rem;
+ scroll-margin-right: 8rem;
+}
+
+.scroll-mx-36 {
+ scroll-margin-left: 9rem;
+ scroll-margin-right: 9rem;
+}
+
+.scroll-mx-4 {
+ scroll-margin-left: 1rem;
+ scroll-margin-right: 1rem;
+}
+
+.scroll-mx-40 {
+ scroll-margin-left: 10rem;
+ scroll-margin-right: 10rem;
+}
+
+.scroll-mx-44 {
+ scroll-margin-left: 11rem;
+ scroll-margin-right: 11rem;
+}
+
+.scroll-mx-48 {
+ scroll-margin-left: 12rem;
+ scroll-margin-right: 12rem;
+}
+
+.scroll-mx-5 {
+ scroll-margin-left: 1.25rem;
+ scroll-margin-right: 1.25rem;
+}
+
+.scroll-mx-52 {
+ scroll-margin-left: 13rem;
+ scroll-margin-right: 13rem;
+}
+
+.scroll-mx-56 {
+ scroll-margin-left: 14rem;
+ scroll-margin-right: 14rem;
+}
+
+.scroll-mx-6 {
+ scroll-margin-left: 1.5rem;
+ scroll-margin-right: 1.5rem;
+}
+
+.scroll-mx-60 {
+ scroll-margin-left: 15rem;
+ scroll-margin-right: 15rem;
+}
+
+.scroll-mx-64 {
+ scroll-margin-left: 16rem;
+ scroll-margin-right: 16rem;
+}
+
+.scroll-mx-7 {
+ scroll-margin-left: 1.75rem;
+ scroll-margin-right: 1.75rem;
+}
+
+.scroll-mx-72 {
+ scroll-margin-left: 18rem;
+ scroll-margin-right: 18rem;
+}
+
+.scroll-mx-8 {
+ scroll-margin-left: 2rem;
+ scroll-margin-right: 2rem;
+}
+
+.scroll-mx-80 {
+ scroll-margin-left: 20rem;
+ scroll-margin-right: 20rem;
+}
+
+.scroll-mx-9 {
+ scroll-margin-left: 2.25rem;
+ scroll-margin-right: 2.25rem;
+}
+
+.scroll-mx-96 {
+ scroll-margin-left: 24rem;
+ scroll-margin-right: 24rem;
+}
+
+.scroll-mx-\\[23px\\] {
+ scroll-margin-left: 23px;
+ scroll-margin-right: 23px;
+}
+
+.scroll-mx-\\[var\\(--my-value\\)\\] {
+ scroll-margin-left: var(--my-value);
+ scroll-margin-right: var(--my-value);
+}
+
+.scroll-mx-px {
+ scroll-margin-left: 1px;
+ scroll-margin-right: 1px;
+}
+
+.scroll-my-0 {
+ scroll-margin-top: 0;
+ scroll-margin-bottom: 0;
+}
+
+.scroll-my-0\\.5 {
+ scroll-margin-top: .125rem;
+ scroll-margin-bottom: .125rem;
+}
+
+.scroll-my-1 {
+ scroll-margin-top: .25rem;
+ scroll-margin-bottom: .25rem;
+}
+
+.scroll-my-1\\.5 {
+ scroll-margin-top: .375rem;
+ scroll-margin-bottom: .375rem;
+}
+
+.scroll-my-10 {
+ scroll-margin-top: 2.5rem;
+ scroll-margin-bottom: 2.5rem;
+}
+
+.scroll-my-11 {
+ scroll-margin-top: 2.75rem;
+ scroll-margin-bottom: 2.75rem;
+}
+
+.scroll-my-12 {
+ scroll-margin-top: 3rem;
+ scroll-margin-bottom: 3rem;
+}
+
+.scroll-my-14 {
+ scroll-margin-top: 3.5rem;
+ scroll-margin-bottom: 3.5rem;
+}
+
+.scroll-my-16 {
+ scroll-margin-top: 4rem;
+ scroll-margin-bottom: 4rem;
+}
+
+.scroll-my-2 {
+ scroll-margin-top: .5rem;
+ scroll-margin-bottom: .5rem;
+}
+
+.scroll-my-2\\.5 {
+ scroll-margin-top: .625rem;
+ scroll-margin-bottom: .625rem;
+}
+
+.scroll-my-20 {
+ scroll-margin-top: 5rem;
+ scroll-margin-bottom: 5rem;
+}
+
+.scroll-my-24 {
+ scroll-margin-top: 6rem;
+ scroll-margin-bottom: 6rem;
+}
+
+.scroll-my-28 {
+ scroll-margin-top: 7rem;
+ scroll-margin-bottom: 7rem;
+}
+
+.scroll-my-3 {
+ scroll-margin-top: .75rem;
+ scroll-margin-bottom: .75rem;
+}
+
+.scroll-my-3\\.5 {
+ scroll-margin-top: .875rem;
+ scroll-margin-bottom: .875rem;
+}
+
+.scroll-my-32 {
+ scroll-margin-top: 8rem;
+ scroll-margin-bottom: 8rem;
+}
+
+.scroll-my-36 {
+ scroll-margin-top: 9rem;
+ scroll-margin-bottom: 9rem;
+}
+
+.scroll-my-4 {
+ scroll-margin-top: 1rem;
+ scroll-margin-bottom: 1rem;
+}
+
+.scroll-my-40 {
+ scroll-margin-top: 10rem;
+ scroll-margin-bottom: 10rem;
+}
+
+.scroll-my-44 {
+ scroll-margin-top: 11rem;
+ scroll-margin-bottom: 11rem;
+}
+
+.scroll-my-48 {
+ scroll-margin-top: 12rem;
+ scroll-margin-bottom: 12rem;
+}
+
+.scroll-my-5 {
+ scroll-margin-top: 1.25rem;
+ scroll-margin-bottom: 1.25rem;
+}
+
+.scroll-my-52 {
+ scroll-margin-top: 13rem;
+ scroll-margin-bottom: 13rem;
+}
+
+.scroll-my-56 {
+ scroll-margin-top: 14rem;
+ scroll-margin-bottom: 14rem;
+}
+
+.scroll-my-6 {
+ scroll-margin-top: 1.5rem;
+ scroll-margin-bottom: 1.5rem;
+}
+
+.scroll-my-60 {
+ scroll-margin-top: 15rem;
+ scroll-margin-bottom: 15rem;
+}
+
+.scroll-my-64 {
+ scroll-margin-top: 16rem;
+ scroll-margin-bottom: 16rem;
+}
+
+.scroll-my-7 {
+ scroll-margin-top: 1.75rem;
+ scroll-margin-bottom: 1.75rem;
+}
+
+.scroll-my-72 {
+ scroll-margin-top: 18rem;
+ scroll-margin-bottom: 18rem;
+}
+
+.scroll-my-8 {
+ scroll-margin-top: 2rem;
+ scroll-margin-bottom: 2rem;
+}
+
+.scroll-my-80 {
+ scroll-margin-top: 20rem;
+ scroll-margin-bottom: 20rem;
+}
+
+.scroll-my-9 {
+ scroll-margin-top: 2.25rem;
+ scroll-margin-bottom: 2.25rem;
+}
+
+.scroll-my-96 {
+ scroll-margin-top: 24rem;
+ scroll-margin-bottom: 24rem;
+}
+
+.scroll-my-\\[34px\\] {
+ scroll-margin-top: 34px;
+ scroll-margin-bottom: 34px;
+}
+
+.scroll-my-\\[var\\(--my-value\\)\\] {
+ scroll-margin-top: var(--my-value);
+ scroll-margin-bottom: var(--my-value);
+}
+
+.scroll-my-px {
+ scroll-margin-top: 1px;
+ scroll-margin-bottom: 1px;
+}
+
+.-scroll-mb-0 {
+ scroll-margin-bottom: 0;
+}
+
+.-scroll-mb-0\\.5 {
+ scroll-margin-bottom: -.125rem;
+}
+
+.-scroll-mb-1 {
+ scroll-margin-bottom: -.25rem;
+}
+
+.-scroll-mb-1\\.5 {
+ scroll-margin-bottom: -.375rem;
+}
+
+.-scroll-mb-10 {
+ scroll-margin-bottom: -2.5rem;
+}
+
+.-scroll-mb-11 {
+ scroll-margin-bottom: -2.75rem;
+}
+
+.-scroll-mb-12 {
+ scroll-margin-bottom: -3rem;
+}
+
+.-scroll-mb-14 {
+ scroll-margin-bottom: -3.5rem;
+}
+
+.-scroll-mb-16 {
+ scroll-margin-bottom: -4rem;
+}
+
+.-scroll-mb-2 {
+ scroll-margin-bottom: -.5rem;
+}
+
+.-scroll-mb-2\\.5 {
+ scroll-margin-bottom: -.625rem;
+}
+
+.-scroll-mb-20 {
+ scroll-margin-bottom: -5rem;
+}
+
+.-scroll-mb-24 {
+ scroll-margin-bottom: -6rem;
+}
+
+.-scroll-mb-28 {
+ scroll-margin-bottom: -7rem;
+}
+
+.-scroll-mb-3 {
+ scroll-margin-bottom: -.75rem;
+}
+
+.-scroll-mb-3\\.5 {
+ scroll-margin-bottom: -.875rem;
+}
+
+.-scroll-mb-32 {
+ scroll-margin-bottom: -8rem;
+}
+
+.-scroll-mb-36 {
+ scroll-margin-bottom: -9rem;
+}
+
+.-scroll-mb-4 {
+ scroll-margin-bottom: -1rem;
+}
+
+.-scroll-mb-40 {
+ scroll-margin-bottom: -10rem;
+}
+
+.-scroll-mb-44 {
+ scroll-margin-bottom: -11rem;
+}
+
+.-scroll-mb-48 {
+ scroll-margin-bottom: -12rem;
+}
+
+.-scroll-mb-5 {
+ scroll-margin-bottom: -1.25rem;
+}
+
+.-scroll-mb-52 {
+ scroll-margin-bottom: -13rem;
+}
+
+.-scroll-mb-56 {
+ scroll-margin-bottom: -14rem;
+}
+
+.-scroll-mb-6 {
+ scroll-margin-bottom: -1.5rem;
+}
+
+.-scroll-mb-60 {
+ scroll-margin-bottom: -15rem;
+}
+
+.-scroll-mb-64 {
+ scroll-margin-bottom: -16rem;
+}
+
+.-scroll-mb-7 {
+ scroll-margin-bottom: -1.75rem;
+}
+
+.-scroll-mb-72 {
+ scroll-margin-bottom: -18rem;
+}
+
+.-scroll-mb-8 {
+ scroll-margin-bottom: -2rem;
+}
+
+.-scroll-mb-80 {
+ scroll-margin-bottom: -20rem;
+}
+
+.-scroll-mb-9 {
+ scroll-margin-bottom: -2.25rem;
+}
+
+.-scroll-mb-96 {
+ scroll-margin-bottom: -24rem;
+}
+
+.-scroll-mb-px {
+ scroll-margin-bottom: -1px;
+}
+
+.-scroll-me-0 {
+ scroll-margin-inline-end: 0;
+}
+
+.-scroll-me-0\\.5 {
+ scroll-margin-inline-end: -.125rem;
+}
+
+.-scroll-me-1 {
+ scroll-margin-inline-end: -.25rem;
+}
+
+.-scroll-me-1\\.5 {
+ scroll-margin-inline-end: -.375rem;
+}
+
+.-scroll-me-10 {
+ scroll-margin-inline-end: -2.5rem;
+}
+
+.-scroll-me-11 {
+ scroll-margin-inline-end: -2.75rem;
+}
+
+.-scroll-me-12 {
+ scroll-margin-inline-end: -3rem;
+}
+
+.-scroll-me-14 {
+ scroll-margin-inline-end: -3.5rem;
+}
+
+.-scroll-me-16 {
+ scroll-margin-inline-end: -4rem;
+}
+
+.-scroll-me-2 {
+ scroll-margin-inline-end: -.5rem;
+}
+
+.-scroll-me-2\\.5 {
+ scroll-margin-inline-end: -.625rem;
+}
+
+.-scroll-me-20 {
+ scroll-margin-inline-end: -5rem;
+}
+
+.-scroll-me-24 {
+ scroll-margin-inline-end: -6rem;
+}
+
+.-scroll-me-28 {
+ scroll-margin-inline-end: -7rem;
+}
+
+.-scroll-me-3 {
+ scroll-margin-inline-end: -.75rem;
+}
+
+.-scroll-me-3\\.5 {
+ scroll-margin-inline-end: -.875rem;
+}
+
+.-scroll-me-32 {
+ scroll-margin-inline-end: -8rem;
+}
+
+.-scroll-me-36 {
+ scroll-margin-inline-end: -9rem;
+}
+
+.-scroll-me-4 {
+ scroll-margin-inline-end: -1rem;
+}
+
+.-scroll-me-40 {
+ scroll-margin-inline-end: -10rem;
+}
+
+.-scroll-me-44 {
+ scroll-margin-inline-end: -11rem;
+}
+
+.-scroll-me-48 {
+ scroll-margin-inline-end: -12rem;
+}
+
+.-scroll-me-5 {
+ scroll-margin-inline-end: -1.25rem;
+}
+
+.-scroll-me-52 {
+ scroll-margin-inline-end: -13rem;
+}
+
+.-scroll-me-56 {
+ scroll-margin-inline-end: -14rem;
+}
+
+.-scroll-me-6 {
+ scroll-margin-inline-end: -1.5rem;
+}
+
+.-scroll-me-60 {
+ scroll-margin-inline-end: -15rem;
+}
+
+.-scroll-me-64 {
+ scroll-margin-inline-end: -16rem;
+}
+
+.-scroll-me-7 {
+ scroll-margin-inline-end: -1.75rem;
+}
+
+.-scroll-me-72 {
+ scroll-margin-inline-end: -18rem;
+}
+
+.-scroll-me-8 {
+ scroll-margin-inline-end: -2rem;
+}
+
+.-scroll-me-80 {
+ scroll-margin-inline-end: -20rem;
+}
+
+.-scroll-me-9 {
+ scroll-margin-inline-end: -2.25rem;
+}
+
+.-scroll-me-96 {
+ scroll-margin-inline-end: -24rem;
+}
+
+.-scroll-me-px {
+ scroll-margin-inline-end: -1px;
+}
+
+.-scroll-ml-0 {
+ scroll-margin-left: 0;
+}
+
+.-scroll-ml-0\\.5 {
+ scroll-margin-left: -.125rem;
+}
+
+.-scroll-ml-1 {
+ scroll-margin-left: -.25rem;
+}
+
+.-scroll-ml-1\\.5 {
+ scroll-margin-left: -.375rem;
+}
+
+.-scroll-ml-10 {
+ scroll-margin-left: -2.5rem;
+}
+
+.-scroll-ml-11 {
+ scroll-margin-left: -2.75rem;
+}
+
+.-scroll-ml-12 {
+ scroll-margin-left: -3rem;
+}
+
+.-scroll-ml-14 {
+ scroll-margin-left: -3.5rem;
+}
+
+.-scroll-ml-16 {
+ scroll-margin-left: -4rem;
+}
+
+.-scroll-ml-2 {
+ scroll-margin-left: -.5rem;
+}
+
+.-scroll-ml-2\\.5 {
+ scroll-margin-left: -.625rem;
+}
+
+.-scroll-ml-20 {
+ scroll-margin-left: -5rem;
+}
+
+.-scroll-ml-24 {
+ scroll-margin-left: -6rem;
+}
+
+.-scroll-ml-28 {
+ scroll-margin-left: -7rem;
+}
+
+.-scroll-ml-3 {
+ scroll-margin-left: -.75rem;
+}
+
+.-scroll-ml-3\\.5 {
+ scroll-margin-left: -.875rem;
+}
+
+.-scroll-ml-32 {
+ scroll-margin-left: -8rem;
+}
+
+.-scroll-ml-36 {
+ scroll-margin-left: -9rem;
+}
+
+.-scroll-ml-4 {
+ scroll-margin-left: -1rem;
+}
+
+.-scroll-ml-40 {
+ scroll-margin-left: -10rem;
+}
+
+.-scroll-ml-44 {
+ scroll-margin-left: -11rem;
+}
+
+.-scroll-ml-48 {
+ scroll-margin-left: -12rem;
+}
+
+.-scroll-ml-5 {
+ scroll-margin-left: -1.25rem;
+}
+
+.-scroll-ml-52 {
+ scroll-margin-left: -13rem;
+}
+
+.-scroll-ml-56 {
+ scroll-margin-left: -14rem;
+}
+
+.-scroll-ml-6 {
+ scroll-margin-left: -1.5rem;
+}
+
+.-scroll-ml-60 {
+ scroll-margin-left: -15rem;
+}
+
+.-scroll-ml-64 {
+ scroll-margin-left: -16rem;
+}
+
+.-scroll-ml-7 {
+ scroll-margin-left: -1.75rem;
+}
+
+.-scroll-ml-72 {
+ scroll-margin-left: -18rem;
+}
+
+.-scroll-ml-8 {
+ scroll-margin-left: -2rem;
+}
+
+.-scroll-ml-80 {
+ scroll-margin-left: -20rem;
+}
+
+.-scroll-ml-9 {
+ scroll-margin-left: -2.25rem;
+}
+
+.-scroll-ml-96 {
+ scroll-margin-left: -24rem;
+}
+
+.-scroll-ml-px {
+ scroll-margin-left: -1px;
+}
+
+.-scroll-mr-0 {
+ scroll-margin-right: 0;
+}
+
+.-scroll-mr-0\\.5 {
+ scroll-margin-right: -.125rem;
+}
+
+.-scroll-mr-1 {
+ scroll-margin-right: -.25rem;
+}
+
+.-scroll-mr-1\\.5 {
+ scroll-margin-right: -.375rem;
+}
+
+.-scroll-mr-10 {
+ scroll-margin-right: -2.5rem;
+}
+
+.-scroll-mr-11 {
+ scroll-margin-right: -2.75rem;
+}
+
+.-scroll-mr-12 {
+ scroll-margin-right: -3rem;
+}
+
+.-scroll-mr-14 {
+ scroll-margin-right: -3.5rem;
+}
+
+.-scroll-mr-16 {
+ scroll-margin-right: -4rem;
+}
+
+.-scroll-mr-2 {
+ scroll-margin-right: -.5rem;
+}
+
+.-scroll-mr-2\\.5 {
+ scroll-margin-right: -.625rem;
+}
+
+.-scroll-mr-20 {
+ scroll-margin-right: -5rem;
+}
+
+.-scroll-mr-24 {
+ scroll-margin-right: -6rem;
+}
+
+.-scroll-mr-28 {
+ scroll-margin-right: -7rem;
+}
+
+.-scroll-mr-3 {
+ scroll-margin-right: -.75rem;
+}
+
+.-scroll-mr-3\\.5 {
+ scroll-margin-right: -.875rem;
+}
+
+.-scroll-mr-32 {
+ scroll-margin-right: -8rem;
+}
+
+.-scroll-mr-36 {
+ scroll-margin-right: -9rem;
+}
+
+.-scroll-mr-4 {
+ scroll-margin-right: -1rem;
+}
+
+.-scroll-mr-40 {
+ scroll-margin-right: -10rem;
+}
+
+.-scroll-mr-44 {
+ scroll-margin-right: -11rem;
+}
+
+.-scroll-mr-48 {
+ scroll-margin-right: -12rem;
+}
+
+.-scroll-mr-5 {
+ scroll-margin-right: -1.25rem;
+}
+
+.-scroll-mr-52 {
+ scroll-margin-right: -13rem;
+}
+
+.-scroll-mr-56 {
+ scroll-margin-right: -14rem;
+}
+
+.-scroll-mr-6 {
+ scroll-margin-right: -1.5rem;
+}
+
+.-scroll-mr-60 {
+ scroll-margin-right: -15rem;
+}
+
+.-scroll-mr-64 {
+ scroll-margin-right: -16rem;
+}
+
+.-scroll-mr-7 {
+ scroll-margin-right: -1.75rem;
+}
+
+.-scroll-mr-72 {
+ scroll-margin-right: -18rem;
+}
+
+.-scroll-mr-8 {
+ scroll-margin-right: -2rem;
+}
+
+.-scroll-mr-80 {
+ scroll-margin-right: -20rem;
+}
+
+.-scroll-mr-9 {
+ scroll-margin-right: -2.25rem;
+}
+
+.-scroll-mr-96 {
+ scroll-margin-right: -24rem;
+}
+
+.-scroll-mr-px {
+ scroll-margin-right: -1px;
+}
+
+.-scroll-ms-0 {
+ scroll-margin-inline-start: 0;
+}
+
+.-scroll-ms-0\\.5 {
+ scroll-margin-inline-start: -.125rem;
+}
+
+.-scroll-ms-1 {
+ scroll-margin-inline-start: -.25rem;
+}
+
+.-scroll-ms-1\\.5 {
+ scroll-margin-inline-start: -.375rem;
+}
+
+.-scroll-ms-10 {
+ scroll-margin-inline-start: -2.5rem;
+}
+
+.-scroll-ms-11 {
+ scroll-margin-inline-start: -2.75rem;
+}
+
+.-scroll-ms-12 {
+ scroll-margin-inline-start: -3rem;
+}
+
+.-scroll-ms-14 {
+ scroll-margin-inline-start: -3.5rem;
+}
+
+.-scroll-ms-16 {
+ scroll-margin-inline-start: -4rem;
+}
+
+.-scroll-ms-2 {
+ scroll-margin-inline-start: -.5rem;
+}
+
+.-scroll-ms-2\\.5 {
+ scroll-margin-inline-start: -.625rem;
+}
+
+.-scroll-ms-20 {
+ scroll-margin-inline-start: -5rem;
+}
+
+.-scroll-ms-24 {
+ scroll-margin-inline-start: -6rem;
+}
+
+.-scroll-ms-28 {
+ scroll-margin-inline-start: -7rem;
+}
+
+.-scroll-ms-3 {
+ scroll-margin-inline-start: -.75rem;
+}
+
+.-scroll-ms-3\\.5 {
+ scroll-margin-inline-start: -.875rem;
+}
+
+.-scroll-ms-32 {
+ scroll-margin-inline-start: -8rem;
+}
+
+.-scroll-ms-36 {
+ scroll-margin-inline-start: -9rem;
+}
+
+.-scroll-ms-4 {
+ scroll-margin-inline-start: -1rem;
+}
+
+.-scroll-ms-40 {
+ scroll-margin-inline-start: -10rem;
+}
+
+.-scroll-ms-44 {
+ scroll-margin-inline-start: -11rem;
+}
+
+.-scroll-ms-48 {
+ scroll-margin-inline-start: -12rem;
+}
+
+.-scroll-ms-5 {
+ scroll-margin-inline-start: -1.25rem;
+}
+
+.-scroll-ms-52 {
+ scroll-margin-inline-start: -13rem;
+}
+
+.-scroll-ms-56 {
+ scroll-margin-inline-start: -14rem;
+}
+
+.-scroll-ms-6 {
+ scroll-margin-inline-start: -1.5rem;
+}
+
+.-scroll-ms-60 {
+ scroll-margin-inline-start: -15rem;
+}
+
+.-scroll-ms-64 {
+ scroll-margin-inline-start: -16rem;
+}
+
+.-scroll-ms-7 {
+ scroll-margin-inline-start: -1.75rem;
+}
+
+.-scroll-ms-72 {
+ scroll-margin-inline-start: -18rem;
+}
+
+.-scroll-ms-8 {
+ scroll-margin-inline-start: -2rem;
+}
+
+.-scroll-ms-80 {
+ scroll-margin-inline-start: -20rem;
+}
+
+.-scroll-ms-9 {
+ scroll-margin-inline-start: -2.25rem;
+}
+
+.-scroll-ms-96 {
+ scroll-margin-inline-start: -24rem;
+}
+
+.-scroll-ms-px {
+ scroll-margin-inline-start: -1px;
+}
+
+.-scroll-mt-0 {
+ scroll-margin-top: 0;
+}
+
+.-scroll-mt-0\\.5 {
+ scroll-margin-top: -.125rem;
+}
+
+.-scroll-mt-1 {
+ scroll-margin-top: -.25rem;
+}
+
+.-scroll-mt-1\\.5 {
+ scroll-margin-top: -.375rem;
+}
+
+.-scroll-mt-10 {
+ scroll-margin-top: -2.5rem;
+}
+
+.-scroll-mt-11 {
+ scroll-margin-top: -2.75rem;
+}
+
+.-scroll-mt-12 {
+ scroll-margin-top: -3rem;
+}
+
+.-scroll-mt-14 {
+ scroll-margin-top: -3.5rem;
+}
+
+.-scroll-mt-16 {
+ scroll-margin-top: -4rem;
+}
+
+.-scroll-mt-2 {
+ scroll-margin-top: -.5rem;
+}
+
+.-scroll-mt-2\\.5 {
+ scroll-margin-top: -.625rem;
+}
+
+.-scroll-mt-20 {
+ scroll-margin-top: -5rem;
+}
+
+.-scroll-mt-24 {
+ scroll-margin-top: -6rem;
+}
+
+.-scroll-mt-28 {
+ scroll-margin-top: -7rem;
+}
+
+.-scroll-mt-3 {
+ scroll-margin-top: -.75rem;
+}
+
+.-scroll-mt-3\\.5 {
+ scroll-margin-top: -.875rem;
+}
+
+.-scroll-mt-32 {
+ scroll-margin-top: -8rem;
+}
+
+.-scroll-mt-36 {
+ scroll-margin-top: -9rem;
+}
+
+.-scroll-mt-4 {
+ scroll-margin-top: -1rem;
+}
+
+.-scroll-mt-40 {
+ scroll-margin-top: -10rem;
+}
+
+.-scroll-mt-44 {
+ scroll-margin-top: -11rem;
+}
+
+.-scroll-mt-48 {
+ scroll-margin-top: -12rem;
+}
+
+.-scroll-mt-5 {
+ scroll-margin-top: -1.25rem;
+}
+
+.-scroll-mt-52 {
+ scroll-margin-top: -13rem;
+}
+
+.-scroll-mt-56 {
+ scroll-margin-top: -14rem;
+}
+
+.-scroll-mt-6 {
+ scroll-margin-top: -1.5rem;
+}
+
+.-scroll-mt-60 {
+ scroll-margin-top: -15rem;
+}
+
+.-scroll-mt-64 {
+ scroll-margin-top: -16rem;
+}
+
+.-scroll-mt-7 {
+ scroll-margin-top: -1.75rem;
+}
+
+.-scroll-mt-72 {
+ scroll-margin-top: -18rem;
+}
+
+.-scroll-mt-8 {
+ scroll-margin-top: -2rem;
+}
+
+.-scroll-mt-80 {
+ scroll-margin-top: -20rem;
+}
+
+.-scroll-mt-9 {
+ scroll-margin-top: -2.25rem;
+}
+
+.-scroll-mt-96 {
+ scroll-margin-top: -24rem;
+}
+
+.-scroll-mt-px {
+ scroll-margin-top: -1px;
+}
+
+.scroll-mb-0 {
+ scroll-margin-bottom: 0;
+}
+
+.scroll-mb-0\\.5 {
+ scroll-margin-bottom: .125rem;
+}
+
+.scroll-mb-1 {
+ scroll-margin-bottom: .25rem;
+}
+
+.scroll-mb-1\\.5 {
+ scroll-margin-bottom: .375rem;
+}
+
+.scroll-mb-10 {
+ scroll-margin-bottom: 2.5rem;
+}
+
+.scroll-mb-11 {
+ scroll-margin-bottom: 2.75rem;
+}
+
+.scroll-mb-12 {
+ scroll-margin-bottom: 3rem;
+}
+
+.scroll-mb-14 {
+ scroll-margin-bottom: 3.5rem;
+}
+
+.scroll-mb-16 {
+ scroll-margin-bottom: 4rem;
+}
+
+.scroll-mb-2 {
+ scroll-margin-bottom: .5rem;
+}
+
+.scroll-mb-2\\.5 {
+ scroll-margin-bottom: .625rem;
+}
+
+.scroll-mb-20 {
+ scroll-margin-bottom: 5rem;
+}
+
+.scroll-mb-24 {
+ scroll-margin-bottom: 6rem;
+}
+
+.scroll-mb-28 {
+ scroll-margin-bottom: 7rem;
+}
+
+.scroll-mb-3 {
+ scroll-margin-bottom: .75rem;
+}
+
+.scroll-mb-3\\.5 {
+ scroll-margin-bottom: .875rem;
+}
+
+.scroll-mb-32 {
+ scroll-margin-bottom: 8rem;
+}
+
+.scroll-mb-36 {
+ scroll-margin-bottom: 9rem;
+}
+
+.scroll-mb-4 {
+ scroll-margin-bottom: 1rem;
+}
+
+.scroll-mb-40 {
+ scroll-margin-bottom: 10rem;
+}
+
+.scroll-mb-44 {
+ scroll-margin-bottom: 11rem;
+}
+
+.scroll-mb-48 {
+ scroll-margin-bottom: 12rem;
+}
+
+.scroll-mb-5 {
+ scroll-margin-bottom: 1.25rem;
+}
+
+.scroll-mb-52 {
+ scroll-margin-bottom: 13rem;
+}
+
+.scroll-mb-56 {
+ scroll-margin-bottom: 14rem;
+}
+
+.scroll-mb-6 {
+ scroll-margin-bottom: 1.5rem;
+}
+
+.scroll-mb-60 {
+ scroll-margin-bottom: 15rem;
+}
+
+.scroll-mb-64 {
+ scroll-margin-bottom: 16rem;
+}
+
+.scroll-mb-7 {
+ scroll-margin-bottom: 1.75rem;
+}
+
+.scroll-mb-72 {
+ scroll-margin-bottom: 18rem;
+}
+
+.scroll-mb-8 {
+ scroll-margin-bottom: 2rem;
+}
+
+.scroll-mb-80 {
+ scroll-margin-bottom: 20rem;
+}
+
+.scroll-mb-9 {
+ scroll-margin-bottom: 2.25rem;
+}
+
+.scroll-mb-96 {
+ scroll-margin-bottom: 24rem;
+}
+
+.scroll-mb-\\[89px\\] {
+ scroll-margin-bottom: 89px;
+}
+
+.scroll-mb-\\[var\\(--my-value\\)\\] {
+ scroll-margin-bottom: var(--my-value);
+}
+
+.scroll-mb-px {
+ scroll-margin-bottom: 1px;
+}
+
+.scroll-me-0 {
+ scroll-margin-inline-end: 0;
+}
+
+.scroll-me-0\\.5 {
+ scroll-margin-inline-end: .125rem;
+}
+
+.scroll-me-1 {
+ scroll-margin-inline-end: .25rem;
+}
+
+.scroll-me-1\\.5 {
+ scroll-margin-inline-end: .375rem;
+}
+
+.scroll-me-10 {
+ scroll-margin-inline-end: 2.5rem;
+}
+
+.scroll-me-11 {
+ scroll-margin-inline-end: 2.75rem;
+}
+
+.scroll-me-12 {
+ scroll-margin-inline-end: 3rem;
+}
+
+.scroll-me-14 {
+ scroll-margin-inline-end: 3.5rem;
+}
+
+.scroll-me-16 {
+ scroll-margin-inline-end: 4rem;
+}
+
+.scroll-me-2 {
+ scroll-margin-inline-end: .5rem;
+}
+
+.scroll-me-2\\.5 {
+ scroll-margin-inline-end: .625rem;
+}
+
+.scroll-me-20 {
+ scroll-margin-inline-end: 5rem;
+}
+
+.scroll-me-24 {
+ scroll-margin-inline-end: 6rem;
+}
+
+.scroll-me-28 {
+ scroll-margin-inline-end: 7rem;
+}
+
+.scroll-me-3 {
+ scroll-margin-inline-end: .75rem;
+}
+
+.scroll-me-3\\.5 {
+ scroll-margin-inline-end: .875rem;
+}
+
+.scroll-me-32 {
+ scroll-margin-inline-end: 8rem;
+}
+
+.scroll-me-36 {
+ scroll-margin-inline-end: 9rem;
+}
+
+.scroll-me-4 {
+ scroll-margin-inline-end: 1rem;
+}
+
+.scroll-me-40 {
+ scroll-margin-inline-end: 10rem;
+}
+
+.scroll-me-44 {
+ scroll-margin-inline-end: 11rem;
+}
+
+.scroll-me-48 {
+ scroll-margin-inline-end: 12rem;
+}
+
+.scroll-me-5 {
+ scroll-margin-inline-end: 1.25rem;
+}
+
+.scroll-me-52 {
+ scroll-margin-inline-end: 13rem;
+}
+
+.scroll-me-56 {
+ scroll-margin-inline-end: 14rem;
+}
+
+.scroll-me-6 {
+ scroll-margin-inline-end: 1.5rem;
+}
+
+.scroll-me-60 {
+ scroll-margin-inline-end: 15rem;
+}
+
+.scroll-me-64 {
+ scroll-margin-inline-end: 16rem;
+}
+
+.scroll-me-7 {
+ scroll-margin-inline-end: 1.75rem;
+}
+
+.scroll-me-72 {
+ scroll-margin-inline-end: 18rem;
+}
+
+.scroll-me-8 {
+ scroll-margin-inline-end: 2rem;
+}
+
+.scroll-me-80 {
+ scroll-margin-inline-end: 20rem;
+}
+
+.scroll-me-9 {
+ scroll-margin-inline-end: 2.25rem;
+}
+
+.scroll-me-96 {
+ scroll-margin-inline-end: 24rem;
+}
+
+.scroll-me-\\[56px\\] {
+ scroll-margin-inline-end: 56px;
+}
+
+.scroll-me-\\[var\\(--my-value\\)\\] {
+ scroll-margin-inline-end: var(--my-value);
+}
+
+.scroll-me-px {
+ scroll-margin-inline-end: 1px;
+}
+
+.scroll-ml-0 {
+ scroll-margin-left: 0;
+}
+
+.scroll-ml-0\\.5 {
+ scroll-margin-left: .125rem;
+}
+
+.scroll-ml-1 {
+ scroll-margin-left: .25rem;
+}
+
+.scroll-ml-1\\.5 {
+ scroll-margin-left: .375rem;
+}
+
+.scroll-ml-10 {
+ scroll-margin-left: 2.5rem;
+}
+
+.scroll-ml-11 {
+ scroll-margin-left: 2.75rem;
+}
+
+.scroll-ml-12 {
+ scroll-margin-left: 3rem;
+}
+
+.scroll-ml-14 {
+ scroll-margin-left: 3.5rem;
+}
+
+.scroll-ml-16 {
+ scroll-margin-left: 4rem;
+}
+
+.scroll-ml-2 {
+ scroll-margin-left: .5rem;
+}
+
+.scroll-ml-2\\.5 {
+ scroll-margin-left: .625rem;
+}
+
+.scroll-ml-20 {
+ scroll-margin-left: 5rem;
+}
+
+.scroll-ml-24 {
+ scroll-margin-left: 6rem;
+}
+
+.scroll-ml-28 {
+ scroll-margin-left: 7rem;
+}
+
+.scroll-ml-3 {
+ scroll-margin-left: .75rem;
+}
+
+.scroll-ml-3\\.5 {
+ scroll-margin-left: .875rem;
+}
+
+.scroll-ml-32 {
+ scroll-margin-left: 8rem;
+}
+
+.scroll-ml-36 {
+ scroll-margin-left: 9rem;
+}
+
+.scroll-ml-4 {
+ scroll-margin-left: 1rem;
+}
+
+.scroll-ml-40 {
+ scroll-margin-left: 10rem;
+}
+
+.scroll-ml-44 {
+ scroll-margin-left: 11rem;
+}
+
+.scroll-ml-48 {
+ scroll-margin-left: 12rem;
+}
+
+.scroll-ml-5 {
+ scroll-margin-left: 1.25rem;
+}
+
+.scroll-ml-52 {
+ scroll-margin-left: 13rem;
+}
+
+.scroll-ml-56 {
+ scroll-margin-left: 14rem;
+}
+
+.scroll-ml-6 {
+ scroll-margin-left: 1.5rem;
+}
+
+.scroll-ml-60 {
+ scroll-margin-left: 15rem;
+}
+
+.scroll-ml-64 {
+ scroll-margin-left: 16rem;
+}
+
+.scroll-ml-7 {
+ scroll-margin-left: 1.75rem;
+}
+
+.scroll-ml-72 {
+ scroll-margin-left: 18rem;
+}
+
+.scroll-ml-8 {
+ scroll-margin-left: 2rem;
+}
+
+.scroll-ml-80 {
+ scroll-margin-left: 20rem;
+}
+
+.scroll-ml-9 {
+ scroll-margin-left: 2.25rem;
+}
+
+.scroll-ml-96 {
+ scroll-margin-left: 24rem;
+}
+
+.scroll-ml-\\[90px\\] {
+ scroll-margin-left: 90px;
+}
+
+.scroll-ml-\\[var\\(--my-value\\)\\] {
+ scroll-margin-left: var(--my-value);
+}
+
+.scroll-ml-px {
+ scroll-margin-left: 1px;
+}
+
+.scroll-mr-0 {
+ scroll-margin-right: 0;
+}
+
+.scroll-mr-0\\.5 {
+ scroll-margin-right: .125rem;
+}
+
+.scroll-mr-1 {
+ scroll-margin-right: .25rem;
+}
+
+.scroll-mr-1\\.5 {
+ scroll-margin-right: .375rem;
+}
+
+.scroll-mr-10 {
+ scroll-margin-right: 2.5rem;
+}
+
+.scroll-mr-11 {
+ scroll-margin-right: 2.75rem;
+}
+
+.scroll-mr-12 {
+ scroll-margin-right: 3rem;
+}
+
+.scroll-mr-14 {
+ scroll-margin-right: 3.5rem;
+}
+
+.scroll-mr-16 {
+ scroll-margin-right: 4rem;
+}
+
+.scroll-mr-2 {
+ scroll-margin-right: .5rem;
+}
+
+.scroll-mr-2\\.5 {
+ scroll-margin-right: .625rem;
+}
+
+.scroll-mr-20 {
+ scroll-margin-right: 5rem;
+}
+
+.scroll-mr-24 {
+ scroll-margin-right: 6rem;
+}
+
+.scroll-mr-28 {
+ scroll-margin-right: 7rem;
+}
+
+.scroll-mr-3 {
+ scroll-margin-right: .75rem;
+}
+
+.scroll-mr-3\\.5 {
+ scroll-margin-right: .875rem;
+}
+
+.scroll-mr-32 {
+ scroll-margin-right: 8rem;
+}
+
+.scroll-mr-36 {
+ scroll-margin-right: 9rem;
+}
+
+.scroll-mr-4 {
+ scroll-margin-right: 1rem;
+}
+
+.scroll-mr-40 {
+ scroll-margin-right: 10rem;
+}
+
+.scroll-mr-44 {
+ scroll-margin-right: 11rem;
+}
+
+.scroll-mr-48 {
+ scroll-margin-right: 12rem;
+}
+
+.scroll-mr-5 {
+ scroll-margin-right: 1.25rem;
+}
+
+.scroll-mr-52 {
+ scroll-margin-right: 13rem;
+}
+
+.scroll-mr-56 {
+ scroll-margin-right: 14rem;
+}
+
+.scroll-mr-6 {
+ scroll-margin-right: 1.5rem;
+}
+
+.scroll-mr-60 {
+ scroll-margin-right: 15rem;
+}
+
+.scroll-mr-64 {
+ scroll-margin-right: 16rem;
+}
+
+.scroll-mr-7 {
+ scroll-margin-right: 1.75rem;
+}
+
+.scroll-mr-72 {
+ scroll-margin-right: 18rem;
+}
+
+.scroll-mr-8 {
+ scroll-margin-right: 2rem;
+}
+
+.scroll-mr-80 {
+ scroll-margin-right: 20rem;
+}
+
+.scroll-mr-9 {
+ scroll-margin-right: 2.25rem;
+}
+
+.scroll-mr-96 {
+ scroll-margin-right: 24rem;
+}
+
+.scroll-mr-\\[78px\\] {
+ scroll-margin-right: 78px;
+}
+
+.scroll-mr-\\[var\\(--my-value\\)\\] {
+ scroll-margin-right: var(--my-value);
+}
+
+.scroll-mr-px {
+ scroll-margin-right: 1px;
+}
+
+.scroll-ms-0 {
+ scroll-margin-inline-start: 0;
+}
+
+.scroll-ms-0\\.5 {
+ scroll-margin-inline-start: .125rem;
+}
+
+.scroll-ms-1 {
+ scroll-margin-inline-start: .25rem;
+}
+
+.scroll-ms-1\\.5 {
+ scroll-margin-inline-start: .375rem;
+}
+
+.scroll-ms-10 {
+ scroll-margin-inline-start: 2.5rem;
+}
+
+.scroll-ms-11 {
+ scroll-margin-inline-start: 2.75rem;
+}
+
+.scroll-ms-12 {
+ scroll-margin-inline-start: 3rem;
+}
+
+.scroll-ms-14 {
+ scroll-margin-inline-start: 3.5rem;
+}
+
+.scroll-ms-16 {
+ scroll-margin-inline-start: 4rem;
+}
+
+.scroll-ms-2 {
+ scroll-margin-inline-start: .5rem;
+}
+
+.scroll-ms-2\\.5 {
+ scroll-margin-inline-start: .625rem;
+}
+
+.scroll-ms-20 {
+ scroll-margin-inline-start: 5rem;
+}
+
+.scroll-ms-24 {
+ scroll-margin-inline-start: 6rem;
+}
+
+.scroll-ms-28 {
+ scroll-margin-inline-start: 7rem;
+}
+
+.scroll-ms-3 {
+ scroll-margin-inline-start: .75rem;
+}
+
+.scroll-ms-3\\.5 {
+ scroll-margin-inline-start: .875rem;
+}
+
+.scroll-ms-32 {
+ scroll-margin-inline-start: 8rem;
+}
+
+.scroll-ms-36 {
+ scroll-margin-inline-start: 9rem;
+}
+
+.scroll-ms-4 {
+ scroll-margin-inline-start: 1rem;
+}
+
+.scroll-ms-40 {
+ scroll-margin-inline-start: 10rem;
+}
+
+.scroll-ms-44 {
+ scroll-margin-inline-start: 11rem;
+}
+
+.scroll-ms-48 {
+ scroll-margin-inline-start: 12rem;
+}
+
+.scroll-ms-5 {
+ scroll-margin-inline-start: 1.25rem;
+}
+
+.scroll-ms-52 {
+ scroll-margin-inline-start: 13rem;
+}
+
+.scroll-ms-56 {
+ scroll-margin-inline-start: 14rem;
+}
+
+.scroll-ms-6 {
+ scroll-margin-inline-start: 1.5rem;
+}
+
+.scroll-ms-60 {
+ scroll-margin-inline-start: 15rem;
+}
+
+.scroll-ms-64 {
+ scroll-margin-inline-start: 16rem;
+}
+
+.scroll-ms-7 {
+ scroll-margin-inline-start: 1.75rem;
+}
+
+.scroll-ms-72 {
+ scroll-margin-inline-start: 18rem;
+}
+
+.scroll-ms-8 {
+ scroll-margin-inline-start: 2rem;
+}
+
+.scroll-ms-80 {
+ scroll-margin-inline-start: 20rem;
+}
+
+.scroll-ms-9 {
+ scroll-margin-inline-start: 2.25rem;
+}
+
+.scroll-ms-96 {
+ scroll-margin-inline-start: 24rem;
+}
+
+.scroll-ms-\\[45px\\] {
+ scroll-margin-inline-start: 45px;
+}
+
+.scroll-ms-\\[var\\(--my-value\\)\\] {
+ scroll-margin-inline-start: var(--my-value);
+}
+
+.scroll-ms-px {
+ scroll-margin-inline-start: 1px;
+}
+
+.scroll-mt-0 {
+ scroll-margin-top: 0;
+}
+
+.scroll-mt-0\\.5 {
+ scroll-margin-top: .125rem;
+}
+
+.scroll-mt-1 {
+ scroll-margin-top: .25rem;
+}
+
+.scroll-mt-1\\.5 {
+ scroll-margin-top: .375rem;
+}
+
+.scroll-mt-10 {
+ scroll-margin-top: 2.5rem;
+}
+
+.scroll-mt-11 {
+ scroll-margin-top: 2.75rem;
+}
+
+.scroll-mt-12 {
+ scroll-margin-top: 3rem;
+}
+
+.scroll-mt-14 {
+ scroll-margin-top: 3.5rem;
+}
+
+.scroll-mt-16 {
+ scroll-margin-top: 4rem;
+}
+
+.scroll-mt-2 {
+ scroll-margin-top: .5rem;
+}
+
+.scroll-mt-2\\.5 {
+ scroll-margin-top: .625rem;
+}
+
+.scroll-mt-20 {
+ scroll-margin-top: 5rem;
+}
+
+.scroll-mt-24 {
+ scroll-margin-top: 6rem;
+}
+
+.scroll-mt-28 {
+ scroll-margin-top: 7rem;
+}
+
+.scroll-mt-3 {
+ scroll-margin-top: .75rem;
+}
+
+.scroll-mt-3\\.5 {
+ scroll-margin-top: .875rem;
+}
+
+.scroll-mt-32 {
+ scroll-margin-top: 8rem;
+}
+
+.scroll-mt-36 {
+ scroll-margin-top: 9rem;
+}
+
+.scroll-mt-4 {
+ scroll-margin-top: 1rem;
+}
+
+.scroll-mt-40 {
+ scroll-margin-top: 10rem;
+}
+
+.scroll-mt-44 {
+ scroll-margin-top: 11rem;
+}
+
+.scroll-mt-48 {
+ scroll-margin-top: 12rem;
+}
+
+.scroll-mt-5 {
+ scroll-margin-top: 1.25rem;
+}
+
+.scroll-mt-52 {
+ scroll-margin-top: 13rem;
+}
+
+.scroll-mt-56 {
+ scroll-margin-top: 14rem;
+}
+
+.scroll-mt-6 {
+ scroll-margin-top: 1.5rem;
+}
+
+.scroll-mt-60 {
+ scroll-margin-top: 15rem;
+}
+
+.scroll-mt-64 {
+ scroll-margin-top: 16rem;
+}
+
+.scroll-mt-7 {
+ scroll-margin-top: 1.75rem;
+}
+
+.scroll-mt-72 {
+ scroll-margin-top: 18rem;
+}
+
+.scroll-mt-8 {
+ scroll-margin-top: 2rem;
+}
+
+.scroll-mt-80 {
+ scroll-margin-top: 20rem;
+}
+
+.scroll-mt-9 {
+ scroll-margin-top: 2.25rem;
+}
+
+.scroll-mt-96 {
+ scroll-margin-top: 24rem;
+}
+
+.scroll-mt-\\[67px\\] {
+ scroll-margin-top: 67px;
+}
+
+.scroll-mt-\\[var\\(--my-value\\)\\] {
+ scroll-margin-top: var(--my-value);
+}
+
+.scroll-mt-px {
+ scroll-margin-top: 1px;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/scrollPadding.test.js.snap b/tests/plugins/__snapshots__/scrollPadding.test.js.snap
new file mode 100644
index 000000000..14e405870
--- /dev/null
+++ b/tests/plugins/__snapshots__/scrollPadding.test.js.snap
@@ -0,0 +1,1411 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'scrollPadding' plugin 1`] = `
+"
+.scroll-p-0 {
+ scroll-padding: 0;
+}
+
+.scroll-p-0\\.5 {
+ scroll-padding: .125rem;
+}
+
+.scroll-p-1 {
+ scroll-padding: .25rem;
+}
+
+.scroll-p-1\\.5 {
+ scroll-padding: .375rem;
+}
+
+.scroll-p-10 {
+ scroll-padding: 2.5rem;
+}
+
+.scroll-p-11 {
+ scroll-padding: 2.75rem;
+}
+
+.scroll-p-12 {
+ scroll-padding: 3rem;
+}
+
+.scroll-p-14 {
+ scroll-padding: 3.5rem;
+}
+
+.scroll-p-16 {
+ scroll-padding: 4rem;
+}
+
+.scroll-p-2 {
+ scroll-padding: .5rem;
+}
+
+.scroll-p-2\\.5 {
+ scroll-padding: .625rem;
+}
+
+.scroll-p-20 {
+ scroll-padding: 5rem;
+}
+
+.scroll-p-24 {
+ scroll-padding: 6rem;
+}
+
+.scroll-p-28 {
+ scroll-padding: 7rem;
+}
+
+.scroll-p-3 {
+ scroll-padding: .75rem;
+}
+
+.scroll-p-3\\.5 {
+ scroll-padding: .875rem;
+}
+
+.scroll-p-32 {
+ scroll-padding: 8rem;
+}
+
+.scroll-p-36 {
+ scroll-padding: 9rem;
+}
+
+.scroll-p-4 {
+ scroll-padding: 1rem;
+}
+
+.scroll-p-40 {
+ scroll-padding: 10rem;
+}
+
+.scroll-p-44 {
+ scroll-padding: 11rem;
+}
+
+.scroll-p-48 {
+ scroll-padding: 12rem;
+}
+
+.scroll-p-5 {
+ scroll-padding: 1.25rem;
+}
+
+.scroll-p-52 {
+ scroll-padding: 13rem;
+}
+
+.scroll-p-56 {
+ scroll-padding: 14rem;
+}
+
+.scroll-p-6 {
+ scroll-padding: 1.5rem;
+}
+
+.scroll-p-60 {
+ scroll-padding: 15rem;
+}
+
+.scroll-p-64 {
+ scroll-padding: 16rem;
+}
+
+.scroll-p-7 {
+ scroll-padding: 1.75rem;
+}
+
+.scroll-p-72 {
+ scroll-padding: 18rem;
+}
+
+.scroll-p-8 {
+ scroll-padding: 2rem;
+}
+
+.scroll-p-80 {
+ scroll-padding: 20rem;
+}
+
+.scroll-p-9 {
+ scroll-padding: 2.25rem;
+}
+
+.scroll-p-96 {
+ scroll-padding: 24rem;
+}
+
+.scroll-p-\\[12px\\] {
+ scroll-padding: 12px;
+}
+
+.scroll-p-\\[var\\(--my-value\\)\\] {
+ scroll-padding: var(--my-value);
+}
+
+.scroll-p-px {
+ scroll-padding: 1px;
+}
+
+.scroll-px-0 {
+ scroll-padding-left: 0;
+ scroll-padding-right: 0;
+}
+
+.scroll-px-0\\.5 {
+ scroll-padding-left: .125rem;
+ scroll-padding-right: .125rem;
+}
+
+.scroll-px-1 {
+ scroll-padding-left: .25rem;
+ scroll-padding-right: .25rem;
+}
+
+.scroll-px-1\\.5 {
+ scroll-padding-left: .375rem;
+ scroll-padding-right: .375rem;
+}
+
+.scroll-px-10 {
+ scroll-padding-left: 2.5rem;
+ scroll-padding-right: 2.5rem;
+}
+
+.scroll-px-11 {
+ scroll-padding-left: 2.75rem;
+ scroll-padding-right: 2.75rem;
+}
+
+.scroll-px-12 {
+ scroll-padding-left: 3rem;
+ scroll-padding-right: 3rem;
+}
+
+.scroll-px-14 {
+ scroll-padding-left: 3.5rem;
+ scroll-padding-right: 3.5rem;
+}
+
+.scroll-px-16 {
+ scroll-padding-left: 4rem;
+ scroll-padding-right: 4rem;
+}
+
+.scroll-px-2 {
+ scroll-padding-left: .5rem;
+ scroll-padding-right: .5rem;
+}
+
+.scroll-px-2\\.5 {
+ scroll-padding-left: .625rem;
+ scroll-padding-right: .625rem;
+}
+
+.scroll-px-20 {
+ scroll-padding-left: 5rem;
+ scroll-padding-right: 5rem;
+}
+
+.scroll-px-24 {
+ scroll-padding-left: 6rem;
+ scroll-padding-right: 6rem;
+}
+
+.scroll-px-28 {
+ scroll-padding-left: 7rem;
+ scroll-padding-right: 7rem;
+}
+
+.scroll-px-3 {
+ scroll-padding-left: .75rem;
+ scroll-padding-right: .75rem;
+}
+
+.scroll-px-3\\.5 {
+ scroll-padding-left: .875rem;
+ scroll-padding-right: .875rem;
+}
+
+.scroll-px-32 {
+ scroll-padding-left: 8rem;
+ scroll-padding-right: 8rem;
+}
+
+.scroll-px-36 {
+ scroll-padding-left: 9rem;
+ scroll-padding-right: 9rem;
+}
+
+.scroll-px-4 {
+ scroll-padding-left: 1rem;
+ scroll-padding-right: 1rem;
+}
+
+.scroll-px-40 {
+ scroll-padding-left: 10rem;
+ scroll-padding-right: 10rem;
+}
+
+.scroll-px-44 {
+ scroll-padding-left: 11rem;
+ scroll-padding-right: 11rem;
+}
+
+.scroll-px-48 {
+ scroll-padding-left: 12rem;
+ scroll-padding-right: 12rem;
+}
+
+.scroll-px-5 {
+ scroll-padding-left: 1.25rem;
+ scroll-padding-right: 1.25rem;
+}
+
+.scroll-px-52 {
+ scroll-padding-left: 13rem;
+ scroll-padding-right: 13rem;
+}
+
+.scroll-px-56 {
+ scroll-padding-left: 14rem;
+ scroll-padding-right: 14rem;
+}
+
+.scroll-px-6 {
+ scroll-padding-left: 1.5rem;
+ scroll-padding-right: 1.5rem;
+}
+
+.scroll-px-60 {
+ scroll-padding-left: 15rem;
+ scroll-padding-right: 15rem;
+}
+
+.scroll-px-64 {
+ scroll-padding-left: 16rem;
+ scroll-padding-right: 16rem;
+}
+
+.scroll-px-7 {
+ scroll-padding-left: 1.75rem;
+ scroll-padding-right: 1.75rem;
+}
+
+.scroll-px-72 {
+ scroll-padding-left: 18rem;
+ scroll-padding-right: 18rem;
+}
+
+.scroll-px-8 {
+ scroll-padding-left: 2rem;
+ scroll-padding-right: 2rem;
+}
+
+.scroll-px-80 {
+ scroll-padding-left: 20rem;
+ scroll-padding-right: 20rem;
+}
+
+.scroll-px-9 {
+ scroll-padding-left: 2.25rem;
+ scroll-padding-right: 2.25rem;
+}
+
+.scroll-px-96 {
+ scroll-padding-left: 24rem;
+ scroll-padding-right: 24rem;
+}
+
+.scroll-px-\\[23px\\] {
+ scroll-padding-left: 23px;
+ scroll-padding-right: 23px;
+}
+
+.scroll-px-\\[var\\(--my-value\\)\\] {
+ scroll-padding-left: var(--my-value);
+ scroll-padding-right: var(--my-value);
+}
+
+.scroll-px-px {
+ scroll-padding-left: 1px;
+ scroll-padding-right: 1px;
+}
+
+.scroll-py-0 {
+ scroll-padding-top: 0;
+ scroll-padding-bottom: 0;
+}
+
+.scroll-py-0\\.5 {
+ scroll-padding-top: .125rem;
+ scroll-padding-bottom: .125rem;
+}
+
+.scroll-py-1 {
+ scroll-padding-top: .25rem;
+ scroll-padding-bottom: .25rem;
+}
+
+.scroll-py-1\\.5 {
+ scroll-padding-top: .375rem;
+ scroll-padding-bottom: .375rem;
+}
+
+.scroll-py-10 {
+ scroll-padding-top: 2.5rem;
+ scroll-padding-bottom: 2.5rem;
+}
+
+.scroll-py-11 {
+ scroll-padding-top: 2.75rem;
+ scroll-padding-bottom: 2.75rem;
+}
+
+.scroll-py-12 {
+ scroll-padding-top: 3rem;
+ scroll-padding-bottom: 3rem;
+}
+
+.scroll-py-14 {
+ scroll-padding-top: 3.5rem;
+ scroll-padding-bottom: 3.5rem;
+}
+
+.scroll-py-16 {
+ scroll-padding-top: 4rem;
+ scroll-padding-bottom: 4rem;
+}
+
+.scroll-py-2 {
+ scroll-padding-top: .5rem;
+ scroll-padding-bottom: .5rem;
+}
+
+.scroll-py-2\\.5 {
+ scroll-padding-top: .625rem;
+ scroll-padding-bottom: .625rem;
+}
+
+.scroll-py-20 {
+ scroll-padding-top: 5rem;
+ scroll-padding-bottom: 5rem;
+}
+
+.scroll-py-24 {
+ scroll-padding-top: 6rem;
+ scroll-padding-bottom: 6rem;
+}
+
+.scroll-py-28 {
+ scroll-padding-top: 7rem;
+ scroll-padding-bottom: 7rem;
+}
+
+.scroll-py-3 {
+ scroll-padding-top: .75rem;
+ scroll-padding-bottom: .75rem;
+}
+
+.scroll-py-3\\.5 {
+ scroll-padding-top: .875rem;
+ scroll-padding-bottom: .875rem;
+}
+
+.scroll-py-32 {
+ scroll-padding-top: 8rem;
+ scroll-padding-bottom: 8rem;
+}
+
+.scroll-py-36 {
+ scroll-padding-top: 9rem;
+ scroll-padding-bottom: 9rem;
+}
+
+.scroll-py-4 {
+ scroll-padding-top: 1rem;
+ scroll-padding-bottom: 1rem;
+}
+
+.scroll-py-40 {
+ scroll-padding-top: 10rem;
+ scroll-padding-bottom: 10rem;
+}
+
+.scroll-py-44 {
+ scroll-padding-top: 11rem;
+ scroll-padding-bottom: 11rem;
+}
+
+.scroll-py-48 {
+ scroll-padding-top: 12rem;
+ scroll-padding-bottom: 12rem;
+}
+
+.scroll-py-5 {
+ scroll-padding-top: 1.25rem;
+ scroll-padding-bottom: 1.25rem;
+}
+
+.scroll-py-52 {
+ scroll-padding-top: 13rem;
+ scroll-padding-bottom: 13rem;
+}
+
+.scroll-py-56 {
+ scroll-padding-top: 14rem;
+ scroll-padding-bottom: 14rem;
+}
+
+.scroll-py-6 {
+ scroll-padding-top: 1.5rem;
+ scroll-padding-bottom: 1.5rem;
+}
+
+.scroll-py-60 {
+ scroll-padding-top: 15rem;
+ scroll-padding-bottom: 15rem;
+}
+
+.scroll-py-64 {
+ scroll-padding-top: 16rem;
+ scroll-padding-bottom: 16rem;
+}
+
+.scroll-py-7 {
+ scroll-padding-top: 1.75rem;
+ scroll-padding-bottom: 1.75rem;
+}
+
+.scroll-py-72 {
+ scroll-padding-top: 18rem;
+ scroll-padding-bottom: 18rem;
+}
+
+.scroll-py-8 {
+ scroll-padding-top: 2rem;
+ scroll-padding-bottom: 2rem;
+}
+
+.scroll-py-80 {
+ scroll-padding-top: 20rem;
+ scroll-padding-bottom: 20rem;
+}
+
+.scroll-py-9 {
+ scroll-padding-top: 2.25rem;
+ scroll-padding-bottom: 2.25rem;
+}
+
+.scroll-py-96 {
+ scroll-padding-top: 24rem;
+ scroll-padding-bottom: 24rem;
+}
+
+.scroll-py-\\[34px\\] {
+ scroll-padding-top: 34px;
+ scroll-padding-bottom: 34px;
+}
+
+.scroll-py-\\[var\\(--my-value\\)\\] {
+ scroll-padding-top: var(--my-value);
+ scroll-padding-bottom: var(--my-value);
+}
+
+.scroll-py-px {
+ scroll-padding-top: 1px;
+ scroll-padding-bottom: 1px;
+}
+
+.scroll-pb-0 {
+ scroll-padding-bottom: 0;
+}
+
+.scroll-pb-0\\.5 {
+ scroll-padding-bottom: .125rem;
+}
+
+.scroll-pb-1 {
+ scroll-padding-bottom: .25rem;
+}
+
+.scroll-pb-1\\.5 {
+ scroll-padding-bottom: .375rem;
+}
+
+.scroll-pb-10 {
+ scroll-padding-bottom: 2.5rem;
+}
+
+.scroll-pb-11 {
+ scroll-padding-bottom: 2.75rem;
+}
+
+.scroll-pb-12 {
+ scroll-padding-bottom: 3rem;
+}
+
+.scroll-pb-14 {
+ scroll-padding-bottom: 3.5rem;
+}
+
+.scroll-pb-16 {
+ scroll-padding-bottom: 4rem;
+}
+
+.scroll-pb-2 {
+ scroll-padding-bottom: .5rem;
+}
+
+.scroll-pb-2\\.5 {
+ scroll-padding-bottom: .625rem;
+}
+
+.scroll-pb-20 {
+ scroll-padding-bottom: 5rem;
+}
+
+.scroll-pb-24 {
+ scroll-padding-bottom: 6rem;
+}
+
+.scroll-pb-28 {
+ scroll-padding-bottom: 7rem;
+}
+
+.scroll-pb-3 {
+ scroll-padding-bottom: .75rem;
+}
+
+.scroll-pb-3\\.5 {
+ scroll-padding-bottom: .875rem;
+}
+
+.scroll-pb-32 {
+ scroll-padding-bottom: 8rem;
+}
+
+.scroll-pb-36 {
+ scroll-padding-bottom: 9rem;
+}
+
+.scroll-pb-4 {
+ scroll-padding-bottom: 1rem;
+}
+
+.scroll-pb-40 {
+ scroll-padding-bottom: 10rem;
+}
+
+.scroll-pb-44 {
+ scroll-padding-bottom: 11rem;
+}
+
+.scroll-pb-48 {
+ scroll-padding-bottom: 12rem;
+}
+
+.scroll-pb-5 {
+ scroll-padding-bottom: 1.25rem;
+}
+
+.scroll-pb-52 {
+ scroll-padding-bottom: 13rem;
+}
+
+.scroll-pb-56 {
+ scroll-padding-bottom: 14rem;
+}
+
+.scroll-pb-6 {
+ scroll-padding-bottom: 1.5rem;
+}
+
+.scroll-pb-60 {
+ scroll-padding-bottom: 15rem;
+}
+
+.scroll-pb-64 {
+ scroll-padding-bottom: 16rem;
+}
+
+.scroll-pb-7 {
+ scroll-padding-bottom: 1.75rem;
+}
+
+.scroll-pb-72 {
+ scroll-padding-bottom: 18rem;
+}
+
+.scroll-pb-8 {
+ scroll-padding-bottom: 2rem;
+}
+
+.scroll-pb-80 {
+ scroll-padding-bottom: 20rem;
+}
+
+.scroll-pb-9 {
+ scroll-padding-bottom: 2.25rem;
+}
+
+.scroll-pb-96 {
+ scroll-padding-bottom: 24rem;
+}
+
+.scroll-pb-\\[89px\\] {
+ scroll-padding-bottom: 89px;
+}
+
+.scroll-pb-\\[var\\(--my-value\\)\\] {
+ scroll-padding-bottom: var(--my-value);
+}
+
+.scroll-pb-px {
+ scroll-padding-bottom: 1px;
+}
+
+.scroll-pe-0 {
+ scroll-padding-inline-end: 0;
+}
+
+.scroll-pe-0\\.5 {
+ scroll-padding-inline-end: .125rem;
+}
+
+.scroll-pe-1 {
+ scroll-padding-inline-end: .25rem;
+}
+
+.scroll-pe-1\\.5 {
+ scroll-padding-inline-end: .375rem;
+}
+
+.scroll-pe-10 {
+ scroll-padding-inline-end: 2.5rem;
+}
+
+.scroll-pe-11 {
+ scroll-padding-inline-end: 2.75rem;
+}
+
+.scroll-pe-12 {
+ scroll-padding-inline-end: 3rem;
+}
+
+.scroll-pe-14 {
+ scroll-padding-inline-end: 3.5rem;
+}
+
+.scroll-pe-16 {
+ scroll-padding-inline-end: 4rem;
+}
+
+.scroll-pe-2 {
+ scroll-padding-inline-end: .5rem;
+}
+
+.scroll-pe-2\\.5 {
+ scroll-padding-inline-end: .625rem;
+}
+
+.scroll-pe-20 {
+ scroll-padding-inline-end: 5rem;
+}
+
+.scroll-pe-24 {
+ scroll-padding-inline-end: 6rem;
+}
+
+.scroll-pe-28 {
+ scroll-padding-inline-end: 7rem;
+}
+
+.scroll-pe-3 {
+ scroll-padding-inline-end: .75rem;
+}
+
+.scroll-pe-3\\.5 {
+ scroll-padding-inline-end: .875rem;
+}
+
+.scroll-pe-32 {
+ scroll-padding-inline-end: 8rem;
+}
+
+.scroll-pe-36 {
+ scroll-padding-inline-end: 9rem;
+}
+
+.scroll-pe-4 {
+ scroll-padding-inline-end: 1rem;
+}
+
+.scroll-pe-40 {
+ scroll-padding-inline-end: 10rem;
+}
+
+.scroll-pe-44 {
+ scroll-padding-inline-end: 11rem;
+}
+
+.scroll-pe-48 {
+ scroll-padding-inline-end: 12rem;
+}
+
+.scroll-pe-5 {
+ scroll-padding-inline-end: 1.25rem;
+}
+
+.scroll-pe-52 {
+ scroll-padding-inline-end: 13rem;
+}
+
+.scroll-pe-56 {
+ scroll-padding-inline-end: 14rem;
+}
+
+.scroll-pe-6 {
+ scroll-padding-inline-end: 1.5rem;
+}
+
+.scroll-pe-60 {
+ scroll-padding-inline-end: 15rem;
+}
+
+.scroll-pe-64 {
+ scroll-padding-inline-end: 16rem;
+}
+
+.scroll-pe-7 {
+ scroll-padding-inline-end: 1.75rem;
+}
+
+.scroll-pe-72 {
+ scroll-padding-inline-end: 18rem;
+}
+
+.scroll-pe-8 {
+ scroll-padding-inline-end: 2rem;
+}
+
+.scroll-pe-80 {
+ scroll-padding-inline-end: 20rem;
+}
+
+.scroll-pe-9 {
+ scroll-padding-inline-end: 2.25rem;
+}
+
+.scroll-pe-96 {
+ scroll-padding-inline-end: 24rem;
+}
+
+.scroll-pe-\\[56px\\] {
+ scroll-padding-inline-end: 56px;
+}
+
+.scroll-pe-\\[var\\(--my-value\\)\\] {
+ scroll-padding-inline-end: var(--my-value);
+}
+
+.scroll-pe-px {
+ scroll-padding-inline-end: 1px;
+}
+
+.scroll-pl-0 {
+ scroll-padding-left: 0;
+}
+
+.scroll-pl-0\\.5 {
+ scroll-padding-left: .125rem;
+}
+
+.scroll-pl-1 {
+ scroll-padding-left: .25rem;
+}
+
+.scroll-pl-1\\.5 {
+ scroll-padding-left: .375rem;
+}
+
+.scroll-pl-10 {
+ scroll-padding-left: 2.5rem;
+}
+
+.scroll-pl-11 {
+ scroll-padding-left: 2.75rem;
+}
+
+.scroll-pl-12 {
+ scroll-padding-left: 3rem;
+}
+
+.scroll-pl-14 {
+ scroll-padding-left: 3.5rem;
+}
+
+.scroll-pl-16 {
+ scroll-padding-left: 4rem;
+}
+
+.scroll-pl-2 {
+ scroll-padding-left: .5rem;
+}
+
+.scroll-pl-2\\.5 {
+ scroll-padding-left: .625rem;
+}
+
+.scroll-pl-20 {
+ scroll-padding-left: 5rem;
+}
+
+.scroll-pl-24 {
+ scroll-padding-left: 6rem;
+}
+
+.scroll-pl-28 {
+ scroll-padding-left: 7rem;
+}
+
+.scroll-pl-3 {
+ scroll-padding-left: .75rem;
+}
+
+.scroll-pl-3\\.5 {
+ scroll-padding-left: .875rem;
+}
+
+.scroll-pl-32 {
+ scroll-padding-left: 8rem;
+}
+
+.scroll-pl-36 {
+ scroll-padding-left: 9rem;
+}
+
+.scroll-pl-4 {
+ scroll-padding-left: 1rem;
+}
+
+.scroll-pl-40 {
+ scroll-padding-left: 10rem;
+}
+
+.scroll-pl-44 {
+ scroll-padding-left: 11rem;
+}
+
+.scroll-pl-48 {
+ scroll-padding-left: 12rem;
+}
+
+.scroll-pl-5 {
+ scroll-padding-left: 1.25rem;
+}
+
+.scroll-pl-52 {
+ scroll-padding-left: 13rem;
+}
+
+.scroll-pl-56 {
+ scroll-padding-left: 14rem;
+}
+
+.scroll-pl-6 {
+ scroll-padding-left: 1.5rem;
+}
+
+.scroll-pl-60 {
+ scroll-padding-left: 15rem;
+}
+
+.scroll-pl-64 {
+ scroll-padding-left: 16rem;
+}
+
+.scroll-pl-7 {
+ scroll-padding-left: 1.75rem;
+}
+
+.scroll-pl-72 {
+ scroll-padding-left: 18rem;
+}
+
+.scroll-pl-8 {
+ scroll-padding-left: 2rem;
+}
+
+.scroll-pl-80 {
+ scroll-padding-left: 20rem;
+}
+
+.scroll-pl-9 {
+ scroll-padding-left: 2.25rem;
+}
+
+.scroll-pl-96 {
+ scroll-padding-left: 24rem;
+}
+
+.scroll-pl-\\[90px\\] {
+ scroll-padding-left: 90px;
+}
+
+.scroll-pl-\\[var\\(--my-value\\)\\] {
+ scroll-padding-left: var(--my-value);
+}
+
+.scroll-pl-px {
+ scroll-padding-left: 1px;
+}
+
+.scroll-pr-0 {
+ scroll-padding-right: 0;
+}
+
+.scroll-pr-0\\.5 {
+ scroll-padding-right: .125rem;
+}
+
+.scroll-pr-1 {
+ scroll-padding-right: .25rem;
+}
+
+.scroll-pr-1\\.5 {
+ scroll-padding-right: .375rem;
+}
+
+.scroll-pr-10 {
+ scroll-padding-right: 2.5rem;
+}
+
+.scroll-pr-11 {
+ scroll-padding-right: 2.75rem;
+}
+
+.scroll-pr-12 {
+ scroll-padding-right: 3rem;
+}
+
+.scroll-pr-14 {
+ scroll-padding-right: 3.5rem;
+}
+
+.scroll-pr-16 {
+ scroll-padding-right: 4rem;
+}
+
+.scroll-pr-2 {
+ scroll-padding-right: .5rem;
+}
+
+.scroll-pr-2\\.5 {
+ scroll-padding-right: .625rem;
+}
+
+.scroll-pr-20 {
+ scroll-padding-right: 5rem;
+}
+
+.scroll-pr-24 {
+ scroll-padding-right: 6rem;
+}
+
+.scroll-pr-28 {
+ scroll-padding-right: 7rem;
+}
+
+.scroll-pr-3 {
+ scroll-padding-right: .75rem;
+}
+
+.scroll-pr-3\\.5 {
+ scroll-padding-right: .875rem;
+}
+
+.scroll-pr-32 {
+ scroll-padding-right: 8rem;
+}
+
+.scroll-pr-36 {
+ scroll-padding-right: 9rem;
+}
+
+.scroll-pr-4 {
+ scroll-padding-right: 1rem;
+}
+
+.scroll-pr-40 {
+ scroll-padding-right: 10rem;
+}
+
+.scroll-pr-44 {
+ scroll-padding-right: 11rem;
+}
+
+.scroll-pr-48 {
+ scroll-padding-right: 12rem;
+}
+
+.scroll-pr-5 {
+ scroll-padding-right: 1.25rem;
+}
+
+.scroll-pr-52 {
+ scroll-padding-right: 13rem;
+}
+
+.scroll-pr-56 {
+ scroll-padding-right: 14rem;
+}
+
+.scroll-pr-6 {
+ scroll-padding-right: 1.5rem;
+}
+
+.scroll-pr-60 {
+ scroll-padding-right: 15rem;
+}
+
+.scroll-pr-64 {
+ scroll-padding-right: 16rem;
+}
+
+.scroll-pr-7 {
+ scroll-padding-right: 1.75rem;
+}
+
+.scroll-pr-72 {
+ scroll-padding-right: 18rem;
+}
+
+.scroll-pr-8 {
+ scroll-padding-right: 2rem;
+}
+
+.scroll-pr-80 {
+ scroll-padding-right: 20rem;
+}
+
+.scroll-pr-9 {
+ scroll-padding-right: 2.25rem;
+}
+
+.scroll-pr-96 {
+ scroll-padding-right: 24rem;
+}
+
+.scroll-pr-\\[78px\\] {
+ scroll-padding-right: 78px;
+}
+
+.scroll-pr-\\[var\\(--my-value\\)\\] {
+ scroll-padding-right: var(--my-value);
+}
+
+.scroll-pr-px {
+ scroll-padding-right: 1px;
+}
+
+.scroll-ps-0 {
+ scroll-padding-inline-start: 0;
+}
+
+.scroll-ps-0\\.5 {
+ scroll-padding-inline-start: .125rem;
+}
+
+.scroll-ps-1 {
+ scroll-padding-inline-start: .25rem;
+}
+
+.scroll-ps-1\\.5 {
+ scroll-padding-inline-start: .375rem;
+}
+
+.scroll-ps-10 {
+ scroll-padding-inline-start: 2.5rem;
+}
+
+.scroll-ps-11 {
+ scroll-padding-inline-start: 2.75rem;
+}
+
+.scroll-ps-12 {
+ scroll-padding-inline-start: 3rem;
+}
+
+.scroll-ps-14 {
+ scroll-padding-inline-start: 3.5rem;
+}
+
+.scroll-ps-16 {
+ scroll-padding-inline-start: 4rem;
+}
+
+.scroll-ps-2 {
+ scroll-padding-inline-start: .5rem;
+}
+
+.scroll-ps-2\\.5 {
+ scroll-padding-inline-start: .625rem;
+}
+
+.scroll-ps-20 {
+ scroll-padding-inline-start: 5rem;
+}
+
+.scroll-ps-24 {
+ scroll-padding-inline-start: 6rem;
+}
+
+.scroll-ps-28 {
+ scroll-padding-inline-start: 7rem;
+}
+
+.scroll-ps-3 {
+ scroll-padding-inline-start: .75rem;
+}
+
+.scroll-ps-3\\.5 {
+ scroll-padding-inline-start: .875rem;
+}
+
+.scroll-ps-32 {
+ scroll-padding-inline-start: 8rem;
+}
+
+.scroll-ps-36 {
+ scroll-padding-inline-start: 9rem;
+}
+
+.scroll-ps-4 {
+ scroll-padding-inline-start: 1rem;
+}
+
+.scroll-ps-40 {
+ scroll-padding-inline-start: 10rem;
+}
+
+.scroll-ps-44 {
+ scroll-padding-inline-start: 11rem;
+}
+
+.scroll-ps-48 {
+ scroll-padding-inline-start: 12rem;
+}
+
+.scroll-ps-5 {
+ scroll-padding-inline-start: 1.25rem;
+}
+
+.scroll-ps-52 {
+ scroll-padding-inline-start: 13rem;
+}
+
+.scroll-ps-56 {
+ scroll-padding-inline-start: 14rem;
+}
+
+.scroll-ps-6 {
+ scroll-padding-inline-start: 1.5rem;
+}
+
+.scroll-ps-60 {
+ scroll-padding-inline-start: 15rem;
+}
+
+.scroll-ps-64 {
+ scroll-padding-inline-start: 16rem;
+}
+
+.scroll-ps-7 {
+ scroll-padding-inline-start: 1.75rem;
+}
+
+.scroll-ps-72 {
+ scroll-padding-inline-start: 18rem;
+}
+
+.scroll-ps-8 {
+ scroll-padding-inline-start: 2rem;
+}
+
+.scroll-ps-80 {
+ scroll-padding-inline-start: 20rem;
+}
+
+.scroll-ps-9 {
+ scroll-padding-inline-start: 2.25rem;
+}
+
+.scroll-ps-96 {
+ scroll-padding-inline-start: 24rem;
+}
+
+.scroll-ps-\\[45px\\] {
+ scroll-padding-inline-start: 45px;
+}
+
+.scroll-ps-\\[var\\(--my-value\\)\\] {
+ scroll-padding-inline-start: var(--my-value);
+}
+
+.scroll-ps-px {
+ scroll-padding-inline-start: 1px;
+}
+
+.scroll-pt-0 {
+ scroll-padding-top: 0;
+}
+
+.scroll-pt-0\\.5 {
+ scroll-padding-top: .125rem;
+}
+
+.scroll-pt-1 {
+ scroll-padding-top: .25rem;
+}
+
+.scroll-pt-1\\.5 {
+ scroll-padding-top: .375rem;
+}
+
+.scroll-pt-10 {
+ scroll-padding-top: 2.5rem;
+}
+
+.scroll-pt-11 {
+ scroll-padding-top: 2.75rem;
+}
+
+.scroll-pt-12 {
+ scroll-padding-top: 3rem;
+}
+
+.scroll-pt-14 {
+ scroll-padding-top: 3.5rem;
+}
+
+.scroll-pt-16 {
+ scroll-padding-top: 4rem;
+}
+
+.scroll-pt-2 {
+ scroll-padding-top: .5rem;
+}
+
+.scroll-pt-2\\.5 {
+ scroll-padding-top: .625rem;
+}
+
+.scroll-pt-20 {
+ scroll-padding-top: 5rem;
+}
+
+.scroll-pt-24 {
+ scroll-padding-top: 6rem;
+}
+
+.scroll-pt-28 {
+ scroll-padding-top: 7rem;
+}
+
+.scroll-pt-3 {
+ scroll-padding-top: .75rem;
+}
+
+.scroll-pt-3\\.5 {
+ scroll-padding-top: .875rem;
+}
+
+.scroll-pt-32 {
+ scroll-padding-top: 8rem;
+}
+
+.scroll-pt-36 {
+ scroll-padding-top: 9rem;
+}
+
+.scroll-pt-4 {
+ scroll-padding-top: 1rem;
+}
+
+.scroll-pt-40 {
+ scroll-padding-top: 10rem;
+}
+
+.scroll-pt-44 {
+ scroll-padding-top: 11rem;
+}
+
+.scroll-pt-48 {
+ scroll-padding-top: 12rem;
+}
+
+.scroll-pt-5 {
+ scroll-padding-top: 1.25rem;
+}
+
+.scroll-pt-52 {
+ scroll-padding-top: 13rem;
+}
+
+.scroll-pt-56 {
+ scroll-padding-top: 14rem;
+}
+
+.scroll-pt-6 {
+ scroll-padding-top: 1.5rem;
+}
+
+.scroll-pt-60 {
+ scroll-padding-top: 15rem;
+}
+
+.scroll-pt-64 {
+ scroll-padding-top: 16rem;
+}
+
+.scroll-pt-7 {
+ scroll-padding-top: 1.75rem;
+}
+
+.scroll-pt-72 {
+ scroll-padding-top: 18rem;
+}
+
+.scroll-pt-8 {
+ scroll-padding-top: 2rem;
+}
+
+.scroll-pt-80 {
+ scroll-padding-top: 20rem;
+}
+
+.scroll-pt-9 {
+ scroll-padding-top: 2.25rem;
+}
+
+.scroll-pt-96 {
+ scroll-padding-top: 24rem;
+}
+
+.scroll-pt-\\[67px\\] {
+ scroll-padding-top: 67px;
+}
+
+.scroll-pt-\\[var\\(--my-value\\)\\] {
+ scroll-padding-top: var(--my-value);
+}
+
+.scroll-pt-px {
+ scroll-padding-top: 1px;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/scrollSnapAlign.test.js.snap b/tests/plugins/__snapshots__/scrollSnapAlign.test.js.snap
new file mode 100644
index 000000000..d3bde6363
--- /dev/null
+++ b/tests/plugins/__snapshots__/scrollSnapAlign.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'scrollSnapAlign' plugin 1`] = `
+"
+.snap-start {
+ scroll-snap-align: start;
+}
+
+.snap-end {
+ scroll-snap-align: end;
+}
+
+.snap-center {
+ scroll-snap-align: center;
+}
+
+.snap-align-none {
+ scroll-snap-align: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/scrollSnapStop.test.js.snap b/tests/plugins/__snapshots__/scrollSnapStop.test.js.snap
new file mode 100644
index 000000000..1c3661191
--- /dev/null
+++ b/tests/plugins/__snapshots__/scrollSnapStop.test.js.snap
@@ -0,0 +1,13 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'scrollSnapStop' plugin 1`] = `
+"
+.snap-normal {
+ scroll-snap-stop: normal;
+}
+
+.snap-always {
+ scroll-snap-stop: always;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/scrollSnapType.test.js.snap b/tests/plugins/__snapshots__/scrollSnapType.test.js.snap
new file mode 100644
index 000000000..c329a0359
--- /dev/null
+++ b/tests/plugins/__snapshots__/scrollSnapType.test.js.snap
@@ -0,0 +1,37 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'scrollSnapType' plugin 1`] = `
+"
+*, :before, :after {
+ --tw-scroll-snap-strictness: proximity;
+}
+
+::backdrop {
+ --tw-scroll-snap-strictness: proximity;
+}
+
+.snap-none {
+ scroll-snap-type: none;
+}
+
+.snap-x {
+ scroll-snap-type: x var(--tw-scroll-snap-strictness);
+}
+
+.snap-y {
+ scroll-snap-type: y var(--tw-scroll-snap-strictness);
+}
+
+.snap-both {
+ scroll-snap-type: both var(--tw-scroll-snap-strictness);
+}
+
+.snap-mandatory {
+ --tw-scroll-snap-strictness: mandatory;
+}
+
+.snap-proximity {
+ --tw-scroll-snap-strictness: proximity;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/sepia.test.js.snap b/tests/plugins/__snapshots__/sepia.test.js.snap
new file mode 100644
index 000000000..00c17120d
--- /dev/null
+++ b/tests/plugins/__snapshots__/sepia.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'sepia' plugin 1`] = `
+"
+.sepia {
+ --tw-sepia: sepia(100%);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.sepia-0 {
+ --tw-sepia: sepia(0);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.sepia-\\[50\\%\\] {
+ --tw-sepia: sepia(50%);
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.sepia-\\[var\\(--my-value\\)\\] {
+ --tw-sepia: sepia(var(--my-value));
+ filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/size.test.js.snap b/tests/plugins/__snapshots__/size.test.js.snap
new file mode 100644
index 000000000..16f954b8d
--- /dev/null
+++ b/tests/plugins/__snapshots__/size.test.js.snap
@@ -0,0 +1,347 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'size' plugin 1`] = `
+"
+.size-0 {
+ width: 0;
+ height: 0;
+}
+
+.size-0\\.5 {
+ width: .125rem;
+ height: .125rem;
+}
+
+.size-1 {
+ width: .25rem;
+ height: .25rem;
+}
+
+.size-1\\.5 {
+ width: .375rem;
+ height: .375rem;
+}
+
+.size-1\\/12 {
+ width: 8.33333%;
+ height: 8.33333%;
+}
+
+.size-1\\/2 {
+ width: 50%;
+ height: 50%;
+}
+
+.size-1\\/3 {
+ width: 33.3333%;
+ height: 33.3333%;
+}
+
+.size-1\\/4 {
+ width: 25%;
+ height: 25%;
+}
+
+.size-1\\/5 {
+ width: 20%;
+ height: 20%;
+}
+
+.size-1\\/6 {
+ width: 16.6667%;
+ height: 16.6667%;
+}
+
+.size-10 {
+ width: 2.5rem;
+ height: 2.5rem;
+}
+
+.size-10\\/12 {
+ width: 83.3333%;
+ height: 83.3333%;
+}
+
+.size-11 {
+ width: 2.75rem;
+ height: 2.75rem;
+}
+
+.size-11\\/12 {
+ width: 91.6667%;
+ height: 91.6667%;
+}
+
+.size-12 {
+ width: 3rem;
+ height: 3rem;
+}
+
+.size-14 {
+ width: 3.5rem;
+ height: 3.5rem;
+}
+
+.size-16 {
+ width: 4rem;
+ height: 4rem;
+}
+
+.size-2 {
+ width: .5rem;
+ height: .5rem;
+}
+
+.size-2\\.5 {
+ width: .625rem;
+ height: .625rem;
+}
+
+.size-2\\/12 {
+ width: 16.6667%;
+ height: 16.6667%;
+}
+
+.size-2\\/3 {
+ width: 66.6667%;
+ height: 66.6667%;
+}
+
+.size-2\\/4 {
+ width: 50%;
+ height: 50%;
+}
+
+.size-2\\/5 {
+ width: 40%;
+ height: 40%;
+}
+
+.size-2\\/6 {
+ width: 33.3333%;
+ height: 33.3333%;
+}
+
+.size-20 {
+ width: 5rem;
+ height: 5rem;
+}
+
+.size-24 {
+ width: 6rem;
+ height: 6rem;
+}
+
+.size-28 {
+ width: 7rem;
+ height: 7rem;
+}
+
+.size-3 {
+ width: .75rem;
+ height: .75rem;
+}
+
+.size-3\\.5 {
+ width: .875rem;
+ height: .875rem;
+}
+
+.size-3\\/12 {
+ width: 25%;
+ height: 25%;
+}
+
+.size-3\\/4 {
+ width: 75%;
+ height: 75%;
+}
+
+.size-3\\/5 {
+ width: 60%;
+ height: 60%;
+}
+
+.size-3\\/6 {
+ width: 50%;
+ height: 50%;
+}
+
+.size-32 {
+ width: 8rem;
+ height: 8rem;
+}
+
+.size-36 {
+ width: 9rem;
+ height: 9rem;
+}
+
+.size-4 {
+ width: 1rem;
+ height: 1rem;
+}
+
+.size-4\\/12 {
+ width: 33.3333%;
+ height: 33.3333%;
+}
+
+.size-4\\/5 {
+ width: 80%;
+ height: 80%;
+}
+
+.size-4\\/6 {
+ width: 66.6667%;
+ height: 66.6667%;
+}
+
+.size-40 {
+ width: 10rem;
+ height: 10rem;
+}
+
+.size-44 {
+ width: 11rem;
+ height: 11rem;
+}
+
+.size-48 {
+ width: 12rem;
+ height: 12rem;
+}
+
+.size-5 {
+ width: 1.25rem;
+ height: 1.25rem;
+}
+
+.size-5\\/12 {
+ width: 41.6667%;
+ height: 41.6667%;
+}
+
+.size-5\\/6 {
+ width: 83.3333%;
+ height: 83.3333%;
+}
+
+.size-52 {
+ width: 13rem;
+ height: 13rem;
+}
+
+.size-56 {
+ width: 14rem;
+ height: 14rem;
+}
+
+.size-6 {
+ width: 1.5rem;
+ height: 1.5rem;
+}
+
+.size-6\\/12 {
+ width: 50%;
+ height: 50%;
+}
+
+.size-60 {
+ width: 15rem;
+ height: 15rem;
+}
+
+.size-64 {
+ width: 16rem;
+ height: 16rem;
+}
+
+.size-7 {
+ width: 1.75rem;
+ height: 1.75rem;
+}
+
+.size-7\\/12 {
+ width: 58.3333%;
+ height: 58.3333%;
+}
+
+.size-72 {
+ width: 18rem;
+ height: 18rem;
+}
+
+.size-8 {
+ width: 2rem;
+ height: 2rem;
+}
+
+.size-8\\/12 {
+ width: 66.6667%;
+ height: 66.6667%;
+}
+
+.size-80 {
+ width: 20rem;
+ height: 20rem;
+}
+
+.size-9 {
+ width: 2.25rem;
+ height: 2.25rem;
+}
+
+.size-9\\/12 {
+ width: 75%;
+ height: 75%;
+}
+
+.size-96 {
+ width: 24rem;
+ height: 24rem;
+}
+
+.size-\\[12px\\] {
+ width: 12px;
+ height: 12px;
+}
+
+.size-\\[var\\(--my-value\\)\\] {
+ width: var(--my-value);
+ height: var(--my-value);
+}
+
+.size-auto {
+ width: auto;
+ height: auto;
+}
+
+.size-fit {
+ width: -moz-fit-content;
+ width: fit-content;
+ height: -moz-fit-content;
+ height: fit-content;
+}
+
+.size-full {
+ width: 100%;
+ height: 100%;
+}
+
+.size-max {
+ width: max-content;
+ height: max-content;
+}
+
+.size-min {
+ width: min-content;
+ height: min-content;
+}
+
+.size-px {
+ width: 1px;
+ height: 1px;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/skew.test.js.snap b/tests/plugins/__snapshots__/skew.test.js.snap
new file mode 100644
index 000000000..0d241429c
--- /dev/null
+++ b/tests/plugins/__snapshots__/skew.test.js.snap
@@ -0,0 +1,145 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'skew' plugin 1`] = `
+"
+.-skew-x-0 {
+ --tw-skew-x: -0deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-skew-x-1 {
+ --tw-skew-x: -1deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-skew-x-12 {
+ --tw-skew-x: -12deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-skew-x-2 {
+ --tw-skew-x: -2deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-skew-x-3 {
+ --tw-skew-x: -3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-skew-x-6 {
+ --tw-skew-x: -6deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-skew-y-0 {
+ --tw-skew-y: -0deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-skew-y-1 {
+ --tw-skew-y: -1deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-skew-y-12 {
+ --tw-skew-y: -12deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-skew-y-2 {
+ --tw-skew-y: -2deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-skew-y-3 {
+ --tw-skew-y: -3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-skew-y-6 {
+ --tw-skew-y: -6deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-x-0 {
+ --tw-skew-x: 0deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-x-1 {
+ --tw-skew-x: 1deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-x-12 {
+ --tw-skew-x: 12deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-x-2 {
+ --tw-skew-x: 2deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-x-3 {
+ --tw-skew-x: 3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-x-6 {
+ --tw-skew-x: 6deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-x-\\[12px\\] {
+ --tw-skew-x: 12px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-x-\\[var\\(--my-value\\)\\] {
+ --tw-skew-x: var(--my-value);
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-y-0 {
+ --tw-skew-y: 0deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-y-1 {
+ --tw-skew-y: 1deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-y-12 {
+ --tw-skew-y: 12deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-y-2 {
+ --tw-skew-y: 2deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-y-3 {
+ --tw-skew-y: 3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-y-6 {
+ --tw-skew-y: 6deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-y-\\[34px\\] {
+ --tw-skew-y: 34px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.skew-y-\\[var\\(--my-value\\)\\] {
+ --tw-skew-y: var(--my-value);
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/space.test.js.snap b/tests/plugins/__snapshots__/space.test.js.snap
new file mode 100644
index 000000000..8982d0e83
--- /dev/null
+++ b/tests/plugins/__snapshots__/space.test.js.snap
@@ -0,0 +1,1777 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'space' plugin 1`] = `
+"
+.-space-x-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-0px * var(--tw-space-x-reverse));
+ margin-left: calc(-0px * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-0\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-.125rem * var(--tw-space-x-reverse));
+ margin-left: calc(-.125rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-1 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-.25rem * var(--tw-space-x-reverse));
+ margin-left: calc(-.25rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-1\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-.375rem * var(--tw-space-x-reverse));
+ margin-left: calc(-.375rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-10 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-2.5rem * var(--tw-space-x-reverse));
+ margin-left: calc(-2.5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-11 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-2.75rem * var(--tw-space-x-reverse));
+ margin-left: calc(-2.75rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-12 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-3rem * var(--tw-space-x-reverse));
+ margin-left: calc(-3rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-14 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-3.5rem * var(--tw-space-x-reverse));
+ margin-left: calc(-3.5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-16 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-4rem * var(--tw-space-x-reverse));
+ margin-left: calc(-4rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-.5rem * var(--tw-space-x-reverse));
+ margin-left: calc(-.5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-2\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-.625rem * var(--tw-space-x-reverse));
+ margin-left: calc(-.625rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-20 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-5rem * var(--tw-space-x-reverse));
+ margin-left: calc(-5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-24 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-6rem * var(--tw-space-x-reverse));
+ margin-left: calc(-6rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-28 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-7rem * var(--tw-space-x-reverse));
+ margin-left: calc(-7rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-3 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-.75rem * var(--tw-space-x-reverse));
+ margin-left: calc(-.75rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-3\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-.875rem * var(--tw-space-x-reverse));
+ margin-left: calc(-.875rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-32 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-8rem * var(--tw-space-x-reverse));
+ margin-left: calc(-8rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-36 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-9rem * var(--tw-space-x-reverse));
+ margin-left: calc(-9rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-1rem * var(--tw-space-x-reverse));
+ margin-left: calc(-1rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-40 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-10rem * var(--tw-space-x-reverse));
+ margin-left: calc(-10rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-44 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-11rem * var(--tw-space-x-reverse));
+ margin-left: calc(-11rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-48 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-12rem * var(--tw-space-x-reverse));
+ margin-left: calc(-12rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-1.25rem * var(--tw-space-x-reverse));
+ margin-left: calc(-1.25rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-52 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-13rem * var(--tw-space-x-reverse));
+ margin-left: calc(-13rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-56 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-14rem * var(--tw-space-x-reverse));
+ margin-left: calc(-14rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-6 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-1.5rem * var(--tw-space-x-reverse));
+ margin-left: calc(-1.5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-60 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-15rem * var(--tw-space-x-reverse));
+ margin-left: calc(-15rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-64 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-16rem * var(--tw-space-x-reverse));
+ margin-left: calc(-16rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-7 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-1.75rem * var(--tw-space-x-reverse));
+ margin-left: calc(-1.75rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-72 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-18rem * var(--tw-space-x-reverse));
+ margin-left: calc(-18rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-8 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-2rem * var(--tw-space-x-reverse));
+ margin-left: calc(-2rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-80 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-20rem * var(--tw-space-x-reverse));
+ margin-left: calc(-20rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-9 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-2.25rem * var(--tw-space-x-reverse));
+ margin-left: calc(-2.25rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-96 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-24rem * var(--tw-space-x-reverse));
+ margin-left: calc(-24rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-x-px > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(-1px * var(--tw-space-x-reverse));
+ margin-left: calc(-1px * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.-space-y-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-0px * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-0px * var(--tw-space-y-reverse));
+}
+
+.-space-y-0\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-.125rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-.125rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-1 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-.25rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-.25rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-.375rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-.375rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-10 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-2.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-2.5rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-11 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-2.75rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-2.75rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-12 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-3rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-3rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-14 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-3.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-3.5rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-16 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-4rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-4rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-.5rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-2\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-.625rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-.625rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-20 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-5rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-24 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-6rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-6rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-28 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-7rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-7rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-3 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-.75rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-.75rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-3\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-.875rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-.875rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-32 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-8rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-8rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-36 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-9rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-9rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-1rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-1rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-40 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-10rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-10rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-44 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-11rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-11rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-48 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-12rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-12rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-1.25rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-1.25rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-52 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-13rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-13rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-56 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-14rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-14rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-6 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-1.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-1.5rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-60 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-15rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-15rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-64 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-16rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-16rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-7 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-1.75rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-1.75rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-72 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-18rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-18rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-8 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-2rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-2rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-80 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-20rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-20rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-9 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-2.25rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-2.25rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-96 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-24rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-24rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-px > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-1px * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-1px * var(--tw-space-y-reverse));
+}
+
+.space-x-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(0px * var(--tw-space-x-reverse));
+ margin-left: calc(0px * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-0\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(.125rem * var(--tw-space-x-reverse));
+ margin-left: calc(.125rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-1 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(.25rem * var(--tw-space-x-reverse));
+ margin-left: calc(.25rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-1\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(.375rem * var(--tw-space-x-reverse));
+ margin-left: calc(.375rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-10 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(2.5rem * var(--tw-space-x-reverse));
+ margin-left: calc(2.5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-11 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(2.75rem * var(--tw-space-x-reverse));
+ margin-left: calc(2.75rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-12 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(3rem * var(--tw-space-x-reverse));
+ margin-left: calc(3rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-14 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(3.5rem * var(--tw-space-x-reverse));
+ margin-left: calc(3.5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-16 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(4rem * var(--tw-space-x-reverse));
+ margin-left: calc(4rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(.5rem * var(--tw-space-x-reverse));
+ margin-left: calc(.5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-2\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(.625rem * var(--tw-space-x-reverse));
+ margin-left: calc(.625rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-20 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(5rem * var(--tw-space-x-reverse));
+ margin-left: calc(5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-24 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(6rem * var(--tw-space-x-reverse));
+ margin-left: calc(6rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-28 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(7rem * var(--tw-space-x-reverse));
+ margin-left: calc(7rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-3 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(.75rem * var(--tw-space-x-reverse));
+ margin-left: calc(.75rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-3\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(.875rem * var(--tw-space-x-reverse));
+ margin-left: calc(.875rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-32 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(8rem * var(--tw-space-x-reverse));
+ margin-left: calc(8rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-36 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(9rem * var(--tw-space-x-reverse));
+ margin-left: calc(9rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(1rem * var(--tw-space-x-reverse));
+ margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-40 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(10rem * var(--tw-space-x-reverse));
+ margin-left: calc(10rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-44 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(11rem * var(--tw-space-x-reverse));
+ margin-left: calc(11rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-48 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(12rem * var(--tw-space-x-reverse));
+ margin-left: calc(12rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(1.25rem * var(--tw-space-x-reverse));
+ margin-left: calc(1.25rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-52 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(13rem * var(--tw-space-x-reverse));
+ margin-left: calc(13rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-56 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(14rem * var(--tw-space-x-reverse));
+ margin-left: calc(14rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-6 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(1.5rem * var(--tw-space-x-reverse));
+ margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-60 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(15rem * var(--tw-space-x-reverse));
+ margin-left: calc(15rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-64 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(16rem * var(--tw-space-x-reverse));
+ margin-left: calc(16rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-7 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(1.75rem * var(--tw-space-x-reverse));
+ margin-left: calc(1.75rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-72 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(18rem * var(--tw-space-x-reverse));
+ margin-left: calc(18rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-8 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(2rem * var(--tw-space-x-reverse));
+ margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-80 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(20rem * var(--tw-space-x-reverse));
+ margin-left: calc(20rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-9 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(2.25rem * var(--tw-space-x-reverse));
+ margin-left: calc(2.25rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-96 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(24rem * var(--tw-space-x-reverse));
+ margin-left: calc(24rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-\\[0\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(0px * var(--tw-space-x-reverse));
+ margin-left: calc(0px * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-\\[12px\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(12px * var(--tw-space-x-reverse));
+ margin-left: calc(12px * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-\\[var\\(--my-value\\)\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(var(--my-value) * var(--tw-space-x-reverse));
+ margin-left: calc(var(--my-value) * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-px > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(1px * var(--tw-space-x-reverse));
+ margin-left: calc(1px * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-y-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(0px * var(--tw-space-y-reverse));
+}
+
+.space-y-0\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(.125rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(.125rem * var(--tw-space-y-reverse));
+}
+
+.space-y-1 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(.25rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(.25rem * var(--tw-space-y-reverse));
+}
+
+.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(.375rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(.375rem * var(--tw-space-y-reverse));
+}
+
+.space-y-10 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(2.5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-11 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(2.75rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(2.75rem * var(--tw-space-y-reverse));
+}
+
+.space-y-12 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(3rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(3rem * var(--tw-space-y-reverse));
+}
+
+.space-y-14 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(3.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(3.5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-16 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(4rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(4rem * var(--tw-space-y-reverse));
+}
+
+.space-y-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(.5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-2\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(.625rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(.625rem * var(--tw-space-y-reverse));
+}
+
+.space-y-20 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-24 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(6rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(6rem * var(--tw-space-y-reverse));
+}
+
+.space-y-28 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(7rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(7rem * var(--tw-space-y-reverse));
+}
+
+.space-y-3 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(.75rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(.75rem * var(--tw-space-y-reverse));
+}
+
+.space-y-3\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(.875rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(.875rem * var(--tw-space-y-reverse));
+}
+
+.space-y-32 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(8rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(8rem * var(--tw-space-y-reverse));
+}
+
+.space-y-36 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(9rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(9rem * var(--tw-space-y-reverse));
+}
+
+.space-y-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1rem * var(--tw-space-y-reverse));
+}
+
+.space-y-40 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(10rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(10rem * var(--tw-space-y-reverse));
+}
+
+.space-y-44 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(11rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(11rem * var(--tw-space-y-reverse));
+}
+
+.space-y-48 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(12rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(12rem * var(--tw-space-y-reverse));
+}
+
+.space-y-5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));
+}
+
+.space-y-52 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(13rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(13rem * var(--tw-space-y-reverse));
+}
+
+.space-y-56 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(14rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(14rem * var(--tw-space-y-reverse));
+}
+
+.space-y-6 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-60 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(15rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(15rem * var(--tw-space-y-reverse));
+}
+
+.space-y-64 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(16rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(16rem * var(--tw-space-y-reverse));
+}
+
+.space-y-7 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1.75rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1.75rem * var(--tw-space-y-reverse));
+}
+
+.space-y-72 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(18rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(18rem * var(--tw-space-y-reverse));
+}
+
+.space-y-8 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(2rem * var(--tw-space-y-reverse));
+}
+
+.space-y-80 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(20rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(20rem * var(--tw-space-y-reverse));
+}
+
+.space-y-9 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(2.25rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(2.25rem * var(--tw-space-y-reverse));
+}
+
+.space-y-96 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(24rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(24rem * var(--tw-space-y-reverse));
+}
+
+.space-y-\\[0\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(0px * var(--tw-space-y-reverse));
+}
+
+.space-y-\\[34px\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(34px * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(34px * var(--tw-space-y-reverse));
+}
+
+.space-y-\\[var\\(--my-value\\)\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(var(--my-value) * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(var(--my-value) * var(--tw-space-y-reverse));
+}
+
+.space-y-px > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1px * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1px * var(--tw-space-y-reverse));
+}
+
+.space-y-reverse > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 1;
+}
+
+.space-x-reverse > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 1;
+}
+"
+`;
+
+exports[`should test the 'space' plugin 2`] = `
+"
+.-space-x-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-0px * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-0px * var(--tw-space-x-reverse));
+}
+
+.-space-x-0\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-.125rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-.125rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-1 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-.25rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-.25rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-1\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-.375rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-.375rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-10 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-2.5rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-2.5rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-11 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-2.75rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-2.75rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-12 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-3rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-3rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-14 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-3.5rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-3.5rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-16 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-4rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-4rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-.5rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-.5rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-2\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-.625rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-.625rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-20 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-5rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-5rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-24 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-6rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-6rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-28 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-7rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-7rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-3 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-.75rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-.75rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-3\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-.875rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-.875rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-32 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-8rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-8rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-36 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-9rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-9rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-1rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-1rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-40 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-10rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-10rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-44 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-11rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-11rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-48 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-12rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-12rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-1.25rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-1.25rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-52 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-13rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-13rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-56 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-14rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-14rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-6 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-1.5rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-1.5rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-60 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-15rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-15rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-64 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-16rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-16rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-7 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-1.75rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-1.75rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-72 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-18rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-18rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-8 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-2rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-2rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-80 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-20rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-20rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-9 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-2.25rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-2.25rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-96 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-24rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-24rem * var(--tw-space-x-reverse));
+}
+
+.-space-x-px > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(-1px * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(-1px * var(--tw-space-x-reverse));
+}
+
+.-space-y-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-0px * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-0px * var(--tw-space-y-reverse));
+}
+
+.-space-y-0\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-.125rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-.125rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-1 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-.25rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-.25rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-.375rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-.375rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-10 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-2.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-2.5rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-11 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-2.75rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-2.75rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-12 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-3rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-3rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-14 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-3.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-3.5rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-16 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-4rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-4rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-.5rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-2\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-.625rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-.625rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-20 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-5rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-24 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-6rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-6rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-28 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-7rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-7rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-3 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-.75rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-.75rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-3\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-.875rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-.875rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-32 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-8rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-8rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-36 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-9rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-9rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-1rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-1rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-40 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-10rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-10rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-44 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-11rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-11rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-48 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-12rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-12rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-1.25rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-1.25rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-52 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-13rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-13rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-56 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-14rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-14rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-6 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-1.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-1.5rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-60 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-15rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-15rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-64 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-16rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-16rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-7 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-1.75rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-1.75rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-72 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-18rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-18rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-8 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-2rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-2rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-80 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-20rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-20rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-9 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-2.25rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-2.25rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-96 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-24rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-24rem * var(--tw-space-y-reverse));
+}
+
+.-space-y-px > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(-1px * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(-1px * var(--tw-space-y-reverse));
+}
+
+.space-x-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(0px * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(0px * var(--tw-space-x-reverse));
+}
+
+.space-x-0\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(.125rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(.125rem * var(--tw-space-x-reverse));
+}
+
+.space-x-1 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(.25rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(.25rem * var(--tw-space-x-reverse));
+}
+
+.space-x-1\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(.375rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(.375rem * var(--tw-space-x-reverse));
+}
+
+.space-x-10 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(2.5rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(2.5rem * var(--tw-space-x-reverse));
+}
+
+.space-x-11 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(2.75rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(2.75rem * var(--tw-space-x-reverse));
+}
+
+.space-x-12 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(3rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(3rem * var(--tw-space-x-reverse));
+}
+
+.space-x-14 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(3.5rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(3.5rem * var(--tw-space-x-reverse));
+}
+
+.space-x-16 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(4rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(4rem * var(--tw-space-x-reverse));
+}
+
+.space-x-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(.5rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(.5rem * var(--tw-space-x-reverse));
+}
+
+.space-x-2\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(.625rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(.625rem * var(--tw-space-x-reverse));
+}
+
+.space-x-20 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(5rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(5rem * var(--tw-space-x-reverse));
+}
+
+.space-x-24 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(6rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(6rem * var(--tw-space-x-reverse));
+}
+
+.space-x-28 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(7rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(7rem * var(--tw-space-x-reverse));
+}
+
+.space-x-3 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(.75rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(.75rem * var(--tw-space-x-reverse));
+}
+
+.space-x-3\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(.875rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(.875rem * var(--tw-space-x-reverse));
+}
+
+.space-x-32 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(8rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(8rem * var(--tw-space-x-reverse));
+}
+
+.space-x-36 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(9rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(9rem * var(--tw-space-x-reverse));
+}
+
+.space-x-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(1rem * var(--tw-space-x-reverse));
+}
+
+.space-x-40 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(10rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(10rem * var(--tw-space-x-reverse));
+}
+
+.space-x-44 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(11rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(11rem * var(--tw-space-x-reverse));
+}
+
+.space-x-48 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(12rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(12rem * var(--tw-space-x-reverse));
+}
+
+.space-x-5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(1.25rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(1.25rem * var(--tw-space-x-reverse));
+}
+
+.space-x-52 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(13rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(13rem * var(--tw-space-x-reverse));
+}
+
+.space-x-56 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(14rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(14rem * var(--tw-space-x-reverse));
+}
+
+.space-x-6 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(1.5rem * var(--tw-space-x-reverse));
+}
+
+.space-x-60 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(15rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(15rem * var(--tw-space-x-reverse));
+}
+
+.space-x-64 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(16rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(16rem * var(--tw-space-x-reverse));
+}
+
+.space-x-7 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(1.75rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(1.75rem * var(--tw-space-x-reverse));
+}
+
+.space-x-72 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(18rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(18rem * var(--tw-space-x-reverse));
+}
+
+.space-x-8 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(2rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(2rem * var(--tw-space-x-reverse));
+}
+
+.space-x-80 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(20rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(20rem * var(--tw-space-x-reverse));
+}
+
+.space-x-9 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(2.25rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(2.25rem * var(--tw-space-x-reverse));
+}
+
+.space-x-96 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(24rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(24rem * var(--tw-space-x-reverse));
+}
+
+.space-x-\\[0\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(0px * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(0px * var(--tw-space-x-reverse));
+}
+
+.space-x-\\[12px\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(12px * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(12px * var(--tw-space-x-reverse));
+}
+
+.space-x-\\[var\\(--my-value\\)\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(var(--my-value) * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(var(--my-value) * var(--tw-space-x-reverse));
+}
+
+.space-x-px > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(1px * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(1px * var(--tw-space-x-reverse));
+}
+
+.space-y-0 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(0px * var(--tw-space-y-reverse));
+}
+
+.space-y-0\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(.125rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(.125rem * var(--tw-space-y-reverse));
+}
+
+.space-y-1 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(.25rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(.25rem * var(--tw-space-y-reverse));
+}
+
+.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(.375rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(.375rem * var(--tw-space-y-reverse));
+}
+
+.space-y-10 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(2.5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-11 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(2.75rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(2.75rem * var(--tw-space-y-reverse));
+}
+
+.space-y-12 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(3rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(3rem * var(--tw-space-y-reverse));
+}
+
+.space-y-14 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(3.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(3.5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-16 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(4rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(4rem * var(--tw-space-y-reverse));
+}
+
+.space-y-2 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(.5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-2\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(.625rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(.625rem * var(--tw-space-y-reverse));
+}
+
+.space-y-20 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-24 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(6rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(6rem * var(--tw-space-y-reverse));
+}
+
+.space-y-28 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(7rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(7rem * var(--tw-space-y-reverse));
+}
+
+.space-y-3 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(.75rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(.75rem * var(--tw-space-y-reverse));
+}
+
+.space-y-3\\.5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(.875rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(.875rem * var(--tw-space-y-reverse));
+}
+
+.space-y-32 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(8rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(8rem * var(--tw-space-y-reverse));
+}
+
+.space-y-36 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(9rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(9rem * var(--tw-space-y-reverse));
+}
+
+.space-y-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1rem * var(--tw-space-y-reverse));
+}
+
+.space-y-40 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(10rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(10rem * var(--tw-space-y-reverse));
+}
+
+.space-y-44 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(11rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(11rem * var(--tw-space-y-reverse));
+}
+
+.space-y-48 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(12rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(12rem * var(--tw-space-y-reverse));
+}
+
+.space-y-5 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));
+}
+
+.space-y-52 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(13rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(13rem * var(--tw-space-y-reverse));
+}
+
+.space-y-56 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(14rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(14rem * var(--tw-space-y-reverse));
+}
+
+.space-y-6 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-60 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(15rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(15rem * var(--tw-space-y-reverse));
+}
+
+.space-y-64 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(16rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(16rem * var(--tw-space-y-reverse));
+}
+
+.space-y-7 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1.75rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1.75rem * var(--tw-space-y-reverse));
+}
+
+.space-y-72 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(18rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(18rem * var(--tw-space-y-reverse));
+}
+
+.space-y-8 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(2rem * var(--tw-space-y-reverse));
+}
+
+.space-y-80 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(20rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(20rem * var(--tw-space-y-reverse));
+}
+
+.space-y-9 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(2.25rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(2.25rem * var(--tw-space-y-reverse));
+}
+
+.space-y-96 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(24rem * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(24rem * var(--tw-space-y-reverse));
+}
+
+.space-y-\\[0\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(0px * var(--tw-space-y-reverse));
+}
+
+.space-y-\\[34px\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(34px * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(34px * var(--tw-space-y-reverse));
+}
+
+.space-y-\\[var\\(--my-value\\)\\] > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(var(--my-value) * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(var(--my-value) * var(--tw-space-y-reverse));
+}
+
+.space-y-px > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 0;
+ margin-top: calc(1px * calc(1 - var(--tw-space-y-reverse)));
+ margin-bottom: calc(1px * var(--tw-space-y-reverse));
+}
+
+.space-y-reverse > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-y-reverse: 1;
+}
+
+.space-x-reverse > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 1;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/stroke.test.js.snap b/tests/plugins/__snapshots__/stroke.test.js.snap
new file mode 100644
index 000000000..b7ed93fc0
--- /dev/null
+++ b/tests/plugins/__snapshots__/stroke.test.js.snap
@@ -0,0 +1,61 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'stroke' plugin 1`] = `
+"
+.stroke-\\[\\#0088cc\\] {
+ stroke: #08c;
+}
+
+.stroke-\\[var\\(--my-value\\)\\] {
+ stroke: var(--my-value);
+}
+
+.stroke-black {
+ stroke: #000;
+}
+
+.stroke-black\\/0 {
+ stroke: #0000;
+}
+
+.stroke-black\\/50 {
+ stroke: #00000080;
+}
+
+.stroke-none {
+ stroke: none;
+}
+
+.stroke-red-100 {
+ stroke: #fee2e2;
+}
+
+.stroke-red-100\\/0 {
+ stroke: #fee2e200;
+}
+
+.stroke-red-100\\/50 {
+ stroke: #fee2e280;
+}
+
+.stroke-red-200 {
+ stroke: #fecaca;
+}
+
+.stroke-red-200\\/0 {
+ stroke: #fecaca00;
+}
+
+.stroke-red-200\\/50 {
+ stroke: #fecaca80;
+}
+
+.stroke-transparent, .stroke-transparent\\/0 {
+ stroke: #0000;
+}
+
+.stroke-transparent\\/50 {
+ stroke: #00000080;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/strokeWidth.test.js.snap b/tests/plugins/__snapshots__/strokeWidth.test.js.snap
new file mode 100644
index 000000000..175b61016
--- /dev/null
+++ b/tests/plugins/__snapshots__/strokeWidth.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'strokeWidth' plugin 1`] = `
+"
+.stroke-0 {
+ stroke-width: 0;
+}
+
+.stroke-1 {
+ stroke-width: 1px;
+}
+
+.stroke-2 {
+ stroke-width: 2px;
+}
+
+.stroke-\\[12px\\] {
+ stroke-width: 12px;
+}
+
+.stroke-\\[34\\%\\] {
+ stroke-width: 34%;
+}
+
+.stroke-\\[56\\] {
+ stroke-width: 56px;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/tableLayout.test.js.snap b/tests/plugins/__snapshots__/tableLayout.test.js.snap
new file mode 100644
index 000000000..b8497f3e7
--- /dev/null
+++ b/tests/plugins/__snapshots__/tableLayout.test.js.snap
@@ -0,0 +1,13 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'tableLayout' plugin 1`] = `
+"
+.table-auto {
+ table-layout: auto;
+}
+
+.table-fixed {
+ table-layout: fixed;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/textAlign.test.js.snap b/tests/plugins/__snapshots__/textAlign.test.js.snap
new file mode 100644
index 000000000..386b58e07
--- /dev/null
+++ b/tests/plugins/__snapshots__/textAlign.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'textAlign' plugin 1`] = `
+"
+.text-left {
+ text-align: left;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-justify {
+ text-align: justify;
+}
+
+.text-start {
+ text-align: start;
+}
+
+.text-end {
+ text-align: end;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/textColor.test.js.snap b/tests/plugins/__snapshots__/textColor.test.js.snap
new file mode 100644
index 000000000..e7b4fb263
--- /dev/null
+++ b/tests/plugins/__snapshots__/textColor.test.js.snap
@@ -0,0 +1,429 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'textColor' plugin 1`] = `
+"
+.text-\\[\\#0088cc\\] {
+ color: #08c;
+}
+
+.text-\\[var\\(--my-value\\)\\] {
+ color: var(--my-value);
+}
+
+.text-black {
+ color: #000;
+}
+
+.text-black\\/0 {
+ color: #0000;
+}
+
+.text-black\\/10 {
+ color: #0000001a;
+}
+
+.text-black\\/100 {
+ color: #000;
+}
+
+.text-black\\/15 {
+ color: #00000026;
+}
+
+.text-black\\/20 {
+ color: #0003;
+}
+
+.text-black\\/25 {
+ color: #00000040;
+}
+
+.text-black\\/30 {
+ color: #0000004d;
+}
+
+.text-black\\/35 {
+ color: #00000059;
+}
+
+.text-black\\/40 {
+ color: #0006;
+}
+
+.text-black\\/45 {
+ color: #00000073;
+}
+
+.text-black\\/5 {
+ color: #0000000d;
+}
+
+.text-black\\/50 {
+ color: #00000080;
+}
+
+.text-black\\/55 {
+ color: #0000008c;
+}
+
+.text-black\\/60 {
+ color: #0009;
+}
+
+.text-black\\/65 {
+ color: #000000a6;
+}
+
+.text-black\\/70 {
+ color: #000000b3;
+}
+
+.text-black\\/75 {
+ color: #000000bf;
+}
+
+.text-black\\/80 {
+ color: #000c;
+}
+
+.text-black\\/85 {
+ color: #000000d9;
+}
+
+.text-black\\/90 {
+ color: #000000e6;
+}
+
+.text-black\\/95 {
+ color: #000000f2;
+}
+
+.text-red-100 {
+ color: #fee2e2;
+}
+
+.text-red-100\\/0 {
+ color: #fee2e200;
+}
+
+.text-red-100\\/10 {
+ color: #fee2e21a;
+}
+
+.text-red-100\\/100 {
+ color: #fee2e2;
+}
+
+.text-red-100\\/15 {
+ color: #fee2e226;
+}
+
+.text-red-100\\/20 {
+ color: #fee2e233;
+}
+
+.text-red-100\\/25 {
+ color: #fee2e240;
+}
+
+.text-red-100\\/30 {
+ color: #fee2e24d;
+}
+
+.text-red-100\\/35 {
+ color: #fee2e259;
+}
+
+.text-red-100\\/40 {
+ color: #fee2e266;
+}
+
+.text-red-100\\/45 {
+ color: #fee2e273;
+}
+
+.text-red-100\\/5 {
+ color: #fee2e20d;
+}
+
+.text-red-100\\/50 {
+ color: #fee2e280;
+}
+
+.text-red-100\\/55 {
+ color: #fee2e28c;
+}
+
+.text-red-100\\/60 {
+ color: #fee2e299;
+}
+
+.text-red-100\\/65 {
+ color: #fee2e2a6;
+}
+
+.text-red-100\\/70 {
+ color: #fee2e2b3;
+}
+
+.text-red-100\\/75 {
+ color: #fee2e2bf;
+}
+
+.text-red-100\\/80 {
+ color: #fee2e2cc;
+}
+
+.text-red-100\\/85 {
+ color: #fee2e2d9;
+}
+
+.text-red-100\\/90 {
+ color: #fee2e2e6;
+}
+
+.text-red-100\\/95 {
+ color: #fee2e2f2;
+}
+
+.text-red-200 {
+ color: #fecaca;
+}
+
+.text-red-200\\/0 {
+ color: #fecaca00;
+}
+
+.text-red-200\\/10 {
+ color: #fecaca1a;
+}
+
+.text-red-200\\/100 {
+ color: #fecaca;
+}
+
+.text-red-200\\/15 {
+ color: #fecaca26;
+}
+
+.text-red-200\\/20 {
+ color: #fecaca33;
+}
+
+.text-red-200\\/25 {
+ color: #fecaca40;
+}
+
+.text-red-200\\/30 {
+ color: #fecaca4d;
+}
+
+.text-red-200\\/35 {
+ color: #fecaca59;
+}
+
+.text-red-200\\/40 {
+ color: #fecaca66;
+}
+
+.text-red-200\\/45 {
+ color: #fecaca73;
+}
+
+.text-red-200\\/5 {
+ color: #fecaca0d;
+}
+
+.text-red-200\\/50 {
+ color: #fecaca80;
+}
+
+.text-red-200\\/55 {
+ color: #fecaca8c;
+}
+
+.text-red-200\\/60 {
+ color: #fecaca99;
+}
+
+.text-red-200\\/65 {
+ color: #fecacaa6;
+}
+
+.text-red-200\\/70 {
+ color: #fecacab3;
+}
+
+.text-red-200\\/75 {
+ color: #fecacabf;
+}
+
+.text-red-200\\/80 {
+ color: #fecacacc;
+}
+
+.text-red-200\\/85 {
+ color: #fecacad9;
+}
+
+.text-red-200\\/90 {
+ color: #fecacae6;
+}
+
+.text-red-200\\/95 {
+ color: #fecacaf2;
+}
+
+.text-transparent, .text-transparent\\/0 {
+ color: #0000;
+}
+
+.text-transparent\\/10 {
+ color: #0000001a;
+}
+
+.text-transparent\\/100 {
+ color: #000;
+}
+
+.text-transparent\\/15 {
+ color: #00000026;
+}
+
+.text-transparent\\/20 {
+ color: #0003;
+}
+
+.text-transparent\\/25 {
+ color: #00000040;
+}
+
+.text-transparent\\/30 {
+ color: #0000004d;
+}
+
+.text-transparent\\/35 {
+ color: #00000059;
+}
+
+.text-transparent\\/40 {
+ color: #0006;
+}
+
+.text-transparent\\/45 {
+ color: #00000073;
+}
+
+.text-transparent\\/5 {
+ color: #0000000d;
+}
+
+.text-transparent\\/50 {
+ color: #00000080;
+}
+
+.text-transparent\\/55 {
+ color: #0000008c;
+}
+
+.text-transparent\\/60 {
+ color: #0009;
+}
+
+.text-transparent\\/65 {
+ color: #000000a6;
+}
+
+.text-transparent\\/70 {
+ color: #000000b3;
+}
+
+.text-transparent\\/75 {
+ color: #000000bf;
+}
+
+.text-transparent\\/80 {
+ color: #000c;
+}
+
+.text-transparent\\/85 {
+ color: #000000d9;
+}
+
+.text-transparent\\/90 {
+ color: #000000e6;
+}
+
+.text-transparent\\/95 {
+ color: #000000f2;
+}
+"
+`;
+
+exports[`should test the 'textColor' plugin 2`] = `
+"
+.text-\\[\\#0088cc\\] {
+ --tw-text-opacity: 1;
+ color: rgb(0 136 204 / var(--tw-text-opacity));
+}
+
+.text-\\[var\\(--my-value\\)\\] {
+ color: var(--my-value);
+}
+
+.text-black {
+ --tw-text-opacity: 1;
+ color: rgb(0 0 0 / var(--tw-text-opacity));
+}
+
+.text-black\\/0 {
+ color: #0000;
+}
+
+.text-black\\/50 {
+ color: #00000080;
+}
+
+.text-red-100 {
+ --tw-text-opacity: 1;
+ color: rgb(254 226 226 / var(--tw-text-opacity));
+}
+
+.text-red-100\\/0 {
+ color: #fee2e200;
+}
+
+.text-red-100\\/50 {
+ color: #fee2e280;
+}
+
+.text-red-200 {
+ --tw-text-opacity: 1;
+ color: rgb(254 202 202 / var(--tw-text-opacity));
+}
+
+.text-red-200\\/0 {
+ color: #fecaca00;
+}
+
+.text-red-200\\/50 {
+ color: #fecaca80;
+}
+
+.text-transparent, .text-transparent\\/0 {
+ color: #0000;
+}
+
+.text-transparent\\/50 {
+ color: #00000080;
+}
+
+.text-opacity-0 {
+ --tw-text-opacity: 0;
+}
+
+.text-opacity-50 {
+ --tw-text-opacity: .5;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/textDecoration.test.js.snap b/tests/plugins/__snapshots__/textDecoration.test.js.snap
new file mode 100644
index 000000000..3b34ca713
--- /dev/null
+++ b/tests/plugins/__snapshots__/textDecoration.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'textDecoration' plugin 1`] = `
+"
+.underline {
+ text-decoration-line: underline;
+}
+
+.overline {
+ text-decoration-line: overline;
+}
+
+.line-through {
+ text-decoration-line: line-through;
+}
+
+.no-underline {
+ text-decoration-line: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/textDecorationColor.test.js.snap b/tests/plugins/__snapshots__/textDecorationColor.test.js.snap
new file mode 100644
index 000000000..9c1518d53
--- /dev/null
+++ b/tests/plugins/__snapshots__/textDecorationColor.test.js.snap
@@ -0,0 +1,49 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'textDecorationColor' plugin 1`] = `
+"
+.decoration-black {
+ text-decoration-color: #000;
+}
+
+.decoration-black\\/0 {
+ text-decoration-color: #0000;
+}
+
+.decoration-black\\/50 {
+ text-decoration-color: #00000080;
+}
+
+.decoration-red-100 {
+ text-decoration-color: #fee2e2;
+}
+
+.decoration-red-100\\/0 {
+ text-decoration-color: #fee2e200;
+}
+
+.decoration-red-100\\/50 {
+ text-decoration-color: #fee2e280;
+}
+
+.decoration-red-200 {
+ text-decoration-color: #fecaca;
+}
+
+.decoration-red-200\\/0 {
+ text-decoration-color: #fecaca00;
+}
+
+.decoration-red-200\\/50 {
+ text-decoration-color: #fecaca80;
+}
+
+.decoration-transparent, .decoration-transparent\\/0 {
+ text-decoration-color: #0000;
+}
+
+.decoration-transparent\\/50 {
+ text-decoration-color: #00000080;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/textDecorationStyle.test.js.snap b/tests/plugins/__snapshots__/textDecorationStyle.test.js.snap
new file mode 100644
index 000000000..a20f20bb4
--- /dev/null
+++ b/tests/plugins/__snapshots__/textDecorationStyle.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'textDecorationStyle' plugin 1`] = `
+"
+.decoration-solid {
+ text-decoration-style: solid;
+}
+
+.decoration-double {
+ text-decoration-style: double;
+}
+
+.decoration-dotted {
+ text-decoration-style: dotted;
+}
+
+.decoration-dashed {
+ text-decoration-style: dashed;
+}
+
+.decoration-wavy {
+ text-decoration-style: wavy;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/textDecorationThickness.test.js.snap b/tests/plugins/__snapshots__/textDecorationThickness.test.js.snap
new file mode 100644
index 000000000..42afbc65b
--- /dev/null
+++ b/tests/plugins/__snapshots__/textDecorationThickness.test.js.snap
@@ -0,0 +1,41 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'textDecorationThickness' plugin 1`] = `
+"
+.decoration-0 {
+ text-decoration-thickness: 0;
+}
+
+.decoration-1 {
+ text-decoration-thickness: 1px;
+}
+
+.decoration-2 {
+ text-decoration-thickness: 2px;
+}
+
+.decoration-4 {
+ text-decoration-thickness: 4px;
+}
+
+.decoration-8 {
+ text-decoration-thickness: 8px;
+}
+
+.decoration-\\[12px\\] {
+ text-decoration-thickness: 12px;
+}
+
+.decoration-\\[34\\%\\] {
+ text-decoration-thickness: calc(1em / 2.94118);
+}
+
+.decoration-auto {
+ text-decoration-thickness: auto;
+}
+
+.decoration-from-font {
+ text-decoration-thickness: from-font;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/textIndent.test.js.snap b/tests/plugins/__snapshots__/textIndent.test.js.snap
new file mode 100644
index 000000000..ceedb131c
--- /dev/null
+++ b/tests/plugins/__snapshots__/textIndent.test.js.snap
@@ -0,0 +1,293 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'textIndent' plugin 1`] = `
+"
+.-indent-0 {
+ text-indent: 0;
+}
+
+.-indent-0\\.5 {
+ text-indent: -.125rem;
+}
+
+.-indent-1 {
+ text-indent: -.25rem;
+}
+
+.-indent-1\\.5 {
+ text-indent: -.375rem;
+}
+
+.-indent-10 {
+ text-indent: -2.5rem;
+}
+
+.-indent-11 {
+ text-indent: -2.75rem;
+}
+
+.-indent-12 {
+ text-indent: -3rem;
+}
+
+.-indent-14 {
+ text-indent: -3.5rem;
+}
+
+.-indent-16 {
+ text-indent: -4rem;
+}
+
+.-indent-2 {
+ text-indent: -.5rem;
+}
+
+.-indent-2\\.5 {
+ text-indent: -.625rem;
+}
+
+.-indent-20 {
+ text-indent: -5rem;
+}
+
+.-indent-24 {
+ text-indent: -6rem;
+}
+
+.-indent-28 {
+ text-indent: -7rem;
+}
+
+.-indent-3 {
+ text-indent: -.75rem;
+}
+
+.-indent-3\\.5 {
+ text-indent: -.875rem;
+}
+
+.-indent-32 {
+ text-indent: -8rem;
+}
+
+.-indent-36 {
+ text-indent: -9rem;
+}
+
+.-indent-4 {
+ text-indent: -1rem;
+}
+
+.-indent-40 {
+ text-indent: -10rem;
+}
+
+.-indent-44 {
+ text-indent: -11rem;
+}
+
+.-indent-48 {
+ text-indent: -12rem;
+}
+
+.-indent-5 {
+ text-indent: -1.25rem;
+}
+
+.-indent-52 {
+ text-indent: -13rem;
+}
+
+.-indent-56 {
+ text-indent: -14rem;
+}
+
+.-indent-6 {
+ text-indent: -1.5rem;
+}
+
+.-indent-60 {
+ text-indent: -15rem;
+}
+
+.-indent-64 {
+ text-indent: -16rem;
+}
+
+.-indent-7 {
+ text-indent: -1.75rem;
+}
+
+.-indent-72 {
+ text-indent: -18rem;
+}
+
+.-indent-8 {
+ text-indent: -2rem;
+}
+
+.-indent-80 {
+ text-indent: -20rem;
+}
+
+.-indent-9 {
+ text-indent: -2.25rem;
+}
+
+.-indent-96 {
+ text-indent: -24rem;
+}
+
+.-indent-px {
+ text-indent: -1px;
+}
+
+.indent-0 {
+ text-indent: 0;
+}
+
+.indent-0\\.5 {
+ text-indent: .125rem;
+}
+
+.indent-1 {
+ text-indent: .25rem;
+}
+
+.indent-1\\.5 {
+ text-indent: .375rem;
+}
+
+.indent-10 {
+ text-indent: 2.5rem;
+}
+
+.indent-11 {
+ text-indent: 2.75rem;
+}
+
+.indent-12 {
+ text-indent: 3rem;
+}
+
+.indent-14 {
+ text-indent: 3.5rem;
+}
+
+.indent-16 {
+ text-indent: 4rem;
+}
+
+.indent-2 {
+ text-indent: .5rem;
+}
+
+.indent-2\\.5 {
+ text-indent: .625rem;
+}
+
+.indent-20 {
+ text-indent: 5rem;
+}
+
+.indent-24 {
+ text-indent: 6rem;
+}
+
+.indent-28 {
+ text-indent: 7rem;
+}
+
+.indent-3 {
+ text-indent: .75rem;
+}
+
+.indent-3\\.5 {
+ text-indent: .875rem;
+}
+
+.indent-32 {
+ text-indent: 8rem;
+}
+
+.indent-36 {
+ text-indent: 9rem;
+}
+
+.indent-4 {
+ text-indent: 1rem;
+}
+
+.indent-40 {
+ text-indent: 10rem;
+}
+
+.indent-44 {
+ text-indent: 11rem;
+}
+
+.indent-48 {
+ text-indent: 12rem;
+}
+
+.indent-5 {
+ text-indent: 1.25rem;
+}
+
+.indent-52 {
+ text-indent: 13rem;
+}
+
+.indent-56 {
+ text-indent: 14rem;
+}
+
+.indent-6 {
+ text-indent: 1.5rem;
+}
+
+.indent-60 {
+ text-indent: 15rem;
+}
+
+.indent-64 {
+ text-indent: 16rem;
+}
+
+.indent-7 {
+ text-indent: 1.75rem;
+}
+
+.indent-72 {
+ text-indent: 18rem;
+}
+
+.indent-8 {
+ text-indent: 2rem;
+}
+
+.indent-80 {
+ text-indent: 20rem;
+}
+
+.indent-9 {
+ text-indent: 2.25rem;
+}
+
+.indent-96 {
+ text-indent: 24rem;
+}
+
+.indent-\\[12px\\] {
+ text-indent: 12px;
+}
+
+.indent-\\[var\\(--my-value\\)\\] {
+ text-indent: var(--my-value);
+}
+
+.indent-px {
+ text-indent: 1px;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/textOpacity.test.js.snap b/tests/plugins/__snapshots__/textOpacity.test.js.snap
new file mode 100644
index 000000000..586ebeb1a
--- /dev/null
+++ b/tests/plugins/__snapshots__/textOpacity.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'textOpacity' plugin 1`] = `
+"
+.text-opacity-0 {
+ --tw-text-opacity: 0;
+}
+
+.text-opacity-50 {
+ --tw-text-opacity: .5;
+}
+
+.text-opacity-\\[12\\%\\] {
+ --tw-text-opacity: 12%;
+}
+
+.text-opacity-\\[var\\(--my-value\\)\\] {
+ --tw-text-opacity: var(--my-value);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/textOverflow.test.js.snap b/tests/plugins/__snapshots__/textOverflow.test.js.snap
new file mode 100644
index 000000000..60b5c9c11
--- /dev/null
+++ b/tests/plugins/__snapshots__/textOverflow.test.js.snap
@@ -0,0 +1,19 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'textOverflow' plugin 1`] = `
+"
+.truncate {
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.overflow-ellipsis, .text-ellipsis {
+ text-overflow: ellipsis;
+}
+
+.text-clip {
+ text-overflow: clip;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/textTransform.test.js.snap b/tests/plugins/__snapshots__/textTransform.test.js.snap
new file mode 100644
index 000000000..91a39151a
--- /dev/null
+++ b/tests/plugins/__snapshots__/textTransform.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'textTransform' plugin 1`] = `
+"
+.uppercase {
+ text-transform: uppercase;
+}
+
+.lowercase {
+ text-transform: lowercase;
+}
+
+.capitalize {
+ text-transform: capitalize;
+}
+
+.normal-case {
+ text-transform: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/textUnderlineOffset.test.js.snap b/tests/plugins/__snapshots__/textUnderlineOffset.test.js.snap
new file mode 100644
index 000000000..9751525f4
--- /dev/null
+++ b/tests/plugins/__snapshots__/textUnderlineOffset.test.js.snap
@@ -0,0 +1,41 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'textUnderlineOffset' plugin 1`] = `
+"
+.underline-offset-0 {
+ text-underline-offset: 0px;
+}
+
+.underline-offset-1 {
+ text-underline-offset: 1px;
+}
+
+.underline-offset-2 {
+ text-underline-offset: 2px;
+}
+
+.underline-offset-4 {
+ text-underline-offset: 4px;
+}
+
+.underline-offset-8 {
+ text-underline-offset: 8px;
+}
+
+.underline-offset-\\[12px\\] {
+ text-underline-offset: 12px;
+}
+
+.underline-offset-\\[20\\%\\] {
+ text-underline-offset: 20%;
+}
+
+.underline-offset-\\[var\\(--my-value\\)\\] {
+ text-underline-offset: var(--my-value);
+}
+
+.underline-offset-auto {
+ text-underline-offset: auto;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/textWrap.test.js.snap b/tests/plugins/__snapshots__/textWrap.test.js.snap
new file mode 100644
index 000000000..6cfc45180
--- /dev/null
+++ b/tests/plugins/__snapshots__/textWrap.test.js.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'textWrap' plugin 1`] = `
+"
+.text-wrap {
+ text-wrap: wrap;
+}
+
+.text-nowrap {
+ text-wrap: nowrap;
+}
+
+.text-balance {
+ text-wrap: balance;
+}
+
+.text-pretty {
+ text-wrap: pretty;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/touchAction.test.js.snap b/tests/plugins/__snapshots__/touchAction.test.js.snap
new file mode 100644
index 000000000..a931b9c4d
--- /dev/null
+++ b/tests/plugins/__snapshots__/touchAction.test.js.snap
@@ -0,0 +1,64 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'touchAction' plugin 1`] = `
+"
+*, :before, :after {
+ --tw-pan-x: ;
+ --tw-pan-y: ;
+ --tw-pinch-zoom: ;
+}
+
+::backdrop {
+ --tw-pan-x: ;
+ --tw-pan-y: ;
+ --tw-pinch-zoom: ;
+}
+
+.touch-auto {
+ touch-action: auto;
+}
+
+.touch-none {
+ touch-action: none;
+}
+
+.touch-pan-x {
+ --tw-pan-x: pan-x;
+ touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
+}
+
+.touch-pan-left {
+ --tw-pan-x: pan-left;
+ touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
+}
+
+.touch-pan-right {
+ --tw-pan-x: pan-right;
+ touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
+}
+
+.touch-pan-y {
+ --tw-pan-y: pan-y;
+ touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
+}
+
+.touch-pan-up {
+ --tw-pan-y: pan-up;
+ touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
+}
+
+.touch-pan-down {
+ --tw-pan-y: pan-down;
+ touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
+}
+
+.touch-pinch-zoom {
+ --tw-pinch-zoom: pinch-zoom;
+ touch-action: var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom);
+}
+
+.touch-manipulation {
+ touch-action: manipulation;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/transform.test.js.snap b/tests/plugins/__snapshots__/transform.test.js.snap
new file mode 100644
index 000000000..03dbe8fd3
--- /dev/null
+++ b/tests/plugins/__snapshots__/transform.test.js.snap
@@ -0,0 +1,37 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'transform' plugin 1`] = `
+"
+*, :before, :after {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+}
+
+::backdrop {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+}
+
+.transform, .transform-cpu {
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.transform-gpu {
+ transform: translate3d(var(--tw-translate-x), var(--tw-translate-y), 0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.transform-none {
+ transform: none;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/transformOrigin.test.js.snap b/tests/plugins/__snapshots__/transformOrigin.test.js.snap
new file mode 100644
index 000000000..d5bdd8745
--- /dev/null
+++ b/tests/plugins/__snapshots__/transformOrigin.test.js.snap
@@ -0,0 +1,49 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'transformOrigin' plugin 1`] = `
+"
+.origin-\\[50\\%_50\\%\\] {
+ transform-origin: 50%;
+}
+
+.origin-\\[var\\(--my-value\\)\\] {
+ transform-origin: var(--my-value);
+}
+
+.origin-bottom {
+ transform-origin: bottom;
+}
+
+.origin-bottom-left {
+ transform-origin: 0 100%;
+}
+
+.origin-bottom-right {
+ transform-origin: 100% 100%;
+}
+
+.origin-center {
+ transform-origin: center;
+}
+
+.origin-left {
+ transform-origin: 0;
+}
+
+.origin-right {
+ transform-origin: 100%;
+}
+
+.origin-top {
+ transform-origin: top;
+}
+
+.origin-top-left {
+ transform-origin: 0 0;
+}
+
+.origin-top-right {
+ transform-origin: 100% 0;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/transitionDelay.test.js.snap b/tests/plugins/__snapshots__/transitionDelay.test.js.snap
new file mode 100644
index 000000000..9ff1232eb
--- /dev/null
+++ b/tests/plugins/__snapshots__/transitionDelay.test.js.snap
@@ -0,0 +1,49 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'transitionDelay' plugin 1`] = `
+"
+.delay-0 {
+ transition-delay: 0s;
+}
+
+.delay-100 {
+ transition-delay: .1s;
+}
+
+.delay-1000 {
+ transition-delay: 1s;
+}
+
+.delay-150 {
+ transition-delay: .15s;
+}
+
+.delay-200 {
+ transition-delay: .2s;
+}
+
+.delay-300 {
+ transition-delay: .3s;
+}
+
+.delay-500 {
+ transition-delay: .5s;
+}
+
+.delay-700 {
+ transition-delay: .7s;
+}
+
+.delay-75 {
+ transition-delay: 75ms;
+}
+
+.delay-\\[3s\\] {
+ transition-delay: 3s;
+}
+
+.delay-\\[var\\(--my-value\\)\\] {
+ transition-delay: var(--my-value);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/transitionDuration.test.js.snap b/tests/plugins/__snapshots__/transitionDuration.test.js.snap
new file mode 100644
index 000000000..a6a10d23d
--- /dev/null
+++ b/tests/plugins/__snapshots__/transitionDuration.test.js.snap
@@ -0,0 +1,49 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'transitionDuration' plugin 1`] = `
+"
+.duration-0 {
+ transition-duration: 0s;
+}
+
+.duration-100 {
+ transition-duration: .1s;
+}
+
+.duration-1000 {
+ transition-duration: 1s;
+}
+
+.duration-150 {
+ transition-duration: .15s;
+}
+
+.duration-200 {
+ transition-duration: .2s;
+}
+
+.duration-300 {
+ transition-duration: .3s;
+}
+
+.duration-500 {
+ transition-duration: .5s;
+}
+
+.duration-700 {
+ transition-duration: .7s;
+}
+
+.duration-75 {
+ transition-duration: 75ms;
+}
+
+.duration-\\[3s\\] {
+ transition-duration: 3s;
+}
+
+.duration-\\[var\\(--my-value\\)\\] {
+ transition-duration: var(--my-value);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/transitionProperty.test.js.snap b/tests/plugins/__snapshots__/transitionProperty.test.js.snap
new file mode 100644
index 000000000..04a6468a5
--- /dev/null
+++ b/tests/plugins/__snapshots__/transitionProperty.test.js.snap
@@ -0,0 +1,57 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'transitionProperty' plugin 1`] = `
+"
+.transition {
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter, backdrop-filter;
+ transition-duration: .15s;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
+}
+
+.transition-\\[accentColor\\] {
+ transition-property: accentColor;
+ transition-duration: .15s;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
+}
+
+.transition-\\[var\\(--my-value\\)\\] {
+ transition-property: var(--my-value);
+ transition-duration: .15s;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
+}
+
+.transition-all {
+ transition-property: all;
+ transition-duration: .15s;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
+}
+
+.transition-colors {
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
+ transition-duration: .15s;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
+}
+
+.transition-none {
+ transition-property: none;
+}
+
+.transition-opacity {
+ transition-property: opacity;
+ transition-duration: .15s;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
+}
+
+.transition-shadow {
+ transition-property: box-shadow;
+ transition-duration: .15s;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
+}
+
+.transition-transform {
+ transition-property: transform;
+ transition-duration: .15s;
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/transitionTimingFunction.test.js.snap b/tests/plugins/__snapshots__/transitionTimingFunction.test.js.snap
new file mode 100644
index 000000000..4dc9754f1
--- /dev/null
+++ b/tests/plugins/__snapshots__/transitionTimingFunction.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'transitionTimingFunction' plugin 1`] = `
+"
+.ease-\\[cubiz-bezier\\(0\\.1\\,1\\,1\\,4\\)\\] {
+ transition-timing-function: cubiz-bezier(.1, 1, 1, 4);
+}
+
+.ease-\\[var\\(--my-value\\)\\] {
+ transition-timing-function: var(--my-value);
+}
+
+.ease-in {
+ transition-timing-function: cubic-bezier(.4, 0, 1, 1);
+}
+
+.ease-in-out {
+ transition-timing-function: cubic-bezier(.4, 0, .2, 1);
+}
+
+.ease-linear {
+ transition-timing-function: linear;
+}
+
+.ease-out {
+ transition-timing-function: cubic-bezier(0, 0, .2, 1);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/translate.test.js.snap b/tests/plugins/__snapshots__/translate.test.js.snap
new file mode 100644
index 000000000..e7029d8bc
--- /dev/null
+++ b/tests/plugins/__snapshots__/translate.test.js.snap
@@ -0,0 +1,865 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'translate' plugin 1`] = `
+"
+.-translate-x-0 {
+ --tw-translate-x: -0px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-0\\.5 {
+ --tw-translate-x: -.125rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-1 {
+ --tw-translate-x: -.25rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-1\\.5 {
+ --tw-translate-x: -.375rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-1\\/2 {
+ --tw-translate-x: -50%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-1\\/3 {
+ --tw-translate-x: -33.3333%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-1\\/4 {
+ --tw-translate-x: -25%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-10 {
+ --tw-translate-x: -2.5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-11 {
+ --tw-translate-x: -2.75rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-12 {
+ --tw-translate-x: -3rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-14 {
+ --tw-translate-x: -3.5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-16 {
+ --tw-translate-x: -4rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-2 {
+ --tw-translate-x: -.5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-2\\.5 {
+ --tw-translate-x: -.625rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-2\\/3 {
+ --tw-translate-x: -66.6667%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-2\\/4 {
+ --tw-translate-x: -50%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-20 {
+ --tw-translate-x: -5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-24 {
+ --tw-translate-x: -6rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-28 {
+ --tw-translate-x: -7rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-3 {
+ --tw-translate-x: -.75rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-3\\.5 {
+ --tw-translate-x: -.875rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-3\\/4 {
+ --tw-translate-x: -75%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-32 {
+ --tw-translate-x: -8rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-36 {
+ --tw-translate-x: -9rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-4 {
+ --tw-translate-x: -1rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-40 {
+ --tw-translate-x: -10rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-44 {
+ --tw-translate-x: -11rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-48 {
+ --tw-translate-x: -12rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-5 {
+ --tw-translate-x: -1.25rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-52 {
+ --tw-translate-x: -13rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-56 {
+ --tw-translate-x: -14rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-6 {
+ --tw-translate-x: -1.5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-60 {
+ --tw-translate-x: -15rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-64 {
+ --tw-translate-x: -16rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-7 {
+ --tw-translate-x: -1.75rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-72 {
+ --tw-translate-x: -18rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-8 {
+ --tw-translate-x: -2rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-80 {
+ --tw-translate-x: -20rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-9 {
+ --tw-translate-x: -2.25rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-96 {
+ --tw-translate-x: -24rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-full {
+ --tw-translate-x: -100%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-px {
+ --tw-translate-x: -1px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-0 {
+ --tw-translate-y: -0px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-0\\.5 {
+ --tw-translate-y: -.125rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-1 {
+ --tw-translate-y: -.25rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-1\\.5 {
+ --tw-translate-y: -.375rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-1\\/2 {
+ --tw-translate-y: -50%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-1\\/3 {
+ --tw-translate-y: -33.3333%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-1\\/4 {
+ --tw-translate-y: -25%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-10 {
+ --tw-translate-y: -2.5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-11 {
+ --tw-translate-y: -2.75rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-12 {
+ --tw-translate-y: -3rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-14 {
+ --tw-translate-y: -3.5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-16 {
+ --tw-translate-y: -4rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-2 {
+ --tw-translate-y: -.5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-2\\.5 {
+ --tw-translate-y: -.625rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-2\\/3 {
+ --tw-translate-y: -66.6667%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-2\\/4 {
+ --tw-translate-y: -50%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-20 {
+ --tw-translate-y: -5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-24 {
+ --tw-translate-y: -6rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-28 {
+ --tw-translate-y: -7rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-3 {
+ --tw-translate-y: -.75rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-3\\.5 {
+ --tw-translate-y: -.875rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-3\\/4 {
+ --tw-translate-y: -75%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-32 {
+ --tw-translate-y: -8rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-36 {
+ --tw-translate-y: -9rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-4 {
+ --tw-translate-y: -1rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-40 {
+ --tw-translate-y: -10rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-44 {
+ --tw-translate-y: -11rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-48 {
+ --tw-translate-y: -12rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-5 {
+ --tw-translate-y: -1.25rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-52 {
+ --tw-translate-y: -13rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-56 {
+ --tw-translate-y: -14rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-6 {
+ --tw-translate-y: -1.5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-60 {
+ --tw-translate-y: -15rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-64 {
+ --tw-translate-y: -16rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-7 {
+ --tw-translate-y: -1.75rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-72 {
+ --tw-translate-y: -18rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-8 {
+ --tw-translate-y: -2rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-80 {
+ --tw-translate-y: -20rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-9 {
+ --tw-translate-y: -2.25rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-96 {
+ --tw-translate-y: -24rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-full {
+ --tw-translate-y: -100%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-px {
+ --tw-translate-y: -1px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-0 {
+ --tw-translate-x: 0px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-0\\.5 {
+ --tw-translate-x: .125rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-1 {
+ --tw-translate-x: .25rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-1\\.5 {
+ --tw-translate-x: .375rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-1\\/2 {
+ --tw-translate-x: 50%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-1\\/3 {
+ --tw-translate-x: 33.3333%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-1\\/4 {
+ --tw-translate-x: 25%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-10 {
+ --tw-translate-x: 2.5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-11 {
+ --tw-translate-x: 2.75rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-12 {
+ --tw-translate-x: 3rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-14 {
+ --tw-translate-x: 3.5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-16 {
+ --tw-translate-x: 4rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-2 {
+ --tw-translate-x: .5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-2\\.5 {
+ --tw-translate-x: .625rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-2\\/3 {
+ --tw-translate-x: 66.6667%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-2\\/4 {
+ --tw-translate-x: 50%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-20 {
+ --tw-translate-x: 5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-24 {
+ --tw-translate-x: 6rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-28 {
+ --tw-translate-x: 7rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-3 {
+ --tw-translate-x: .75rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-3\\.5 {
+ --tw-translate-x: .875rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-3\\/4 {
+ --tw-translate-x: 75%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-32 {
+ --tw-translate-x: 8rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-36 {
+ --tw-translate-x: 9rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-4 {
+ --tw-translate-x: 1rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-40 {
+ --tw-translate-x: 10rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-44 {
+ --tw-translate-x: 11rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-48 {
+ --tw-translate-x: 12rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-5 {
+ --tw-translate-x: 1.25rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-52 {
+ --tw-translate-x: 13rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-56 {
+ --tw-translate-x: 14rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-6 {
+ --tw-translate-x: 1.5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-60 {
+ --tw-translate-x: 15rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-64 {
+ --tw-translate-x: 16rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-7 {
+ --tw-translate-x: 1.75rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-72 {
+ --tw-translate-x: 18rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-8 {
+ --tw-translate-x: 2rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-80 {
+ --tw-translate-x: 20rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-9 {
+ --tw-translate-x: 2.25rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-96 {
+ --tw-translate-x: 24rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-\\[12px\\] {
+ --tw-translate-x: 12px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-\\[var\\(--my-value\\)\\] {
+ --tw-translate-x: var(--my-value);
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-full {
+ --tw-translate-x: 100%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-px {
+ --tw-translate-x: 1px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-0 {
+ --tw-translate-y: 0px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-0\\.5 {
+ --tw-translate-y: .125rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-1 {
+ --tw-translate-y: .25rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-1\\.5 {
+ --tw-translate-y: .375rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-1\\/2 {
+ --tw-translate-y: 50%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-1\\/3 {
+ --tw-translate-y: 33.3333%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-1\\/4 {
+ --tw-translate-y: 25%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-10 {
+ --tw-translate-y: 2.5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-11 {
+ --tw-translate-y: 2.75rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-12 {
+ --tw-translate-y: 3rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-14 {
+ --tw-translate-y: 3.5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-16 {
+ --tw-translate-y: 4rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-2 {
+ --tw-translate-y: .5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-2\\.5 {
+ --tw-translate-y: .625rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-2\\/3 {
+ --tw-translate-y: 66.6667%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-2\\/4 {
+ --tw-translate-y: 50%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-20 {
+ --tw-translate-y: 5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-24 {
+ --tw-translate-y: 6rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-28 {
+ --tw-translate-y: 7rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-3 {
+ --tw-translate-y: .75rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-3\\.5 {
+ --tw-translate-y: .875rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-3\\/4 {
+ --tw-translate-y: 75%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-32 {
+ --tw-translate-y: 8rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-36 {
+ --tw-translate-y: 9rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-4 {
+ --tw-translate-y: 1rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-40 {
+ --tw-translate-y: 10rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-44 {
+ --tw-translate-y: 11rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-48 {
+ --tw-translate-y: 12rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-5 {
+ --tw-translate-y: 1.25rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-52 {
+ --tw-translate-y: 13rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-56 {
+ --tw-translate-y: 14rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-6 {
+ --tw-translate-y: 1.5rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-60 {
+ --tw-translate-y: 15rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-64 {
+ --tw-translate-y: 16rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-7 {
+ --tw-translate-y: 1.75rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-72 {
+ --tw-translate-y: 18rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-8 {
+ --tw-translate-y: 2rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-80 {
+ --tw-translate-y: 20rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-9 {
+ --tw-translate-y: 2.25rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-96 {
+ --tw-translate-y: 24rem;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-\\[12px\\] {
+ --tw-translate-y: 12px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-\\[var\\(--my-value\\)\\] {
+ --tw-translate-y: var(--my-value);
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-full {
+ --tw-translate-y: 100%;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-px {
+ --tw-translate-y: 1px;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/userSelect.test.js.snap b/tests/plugins/__snapshots__/userSelect.test.js.snap
new file mode 100644
index 000000000..0a8895776
--- /dev/null
+++ b/tests/plugins/__snapshots__/userSelect.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'userSelect' plugin 1`] = `
+"
+.select-none {
+ -webkit-user-select: none;
+ user-select: none;
+}
+
+.select-text {
+ -webkit-user-select: text;
+ user-select: text;
+}
+
+.select-all {
+ -webkit-user-select: all;
+ user-select: all;
+}
+
+.select-auto {
+ -webkit-user-select: auto;
+ user-select: auto;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/verticalAlign.test.js.snap b/tests/plugins/__snapshots__/verticalAlign.test.js.snap
new file mode 100644
index 000000000..15c5e22a4
--- /dev/null
+++ b/tests/plugins/__snapshots__/verticalAlign.test.js.snap
@@ -0,0 +1,45 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'verticalAlign' plugin 1`] = `
+"
+.align-baseline {
+ vertical-align: baseline;
+}
+
+.align-top {
+ vertical-align: top;
+}
+
+.align-middle {
+ vertical-align: middle;
+}
+
+.align-bottom {
+ vertical-align: bottom;
+}
+
+.align-text-top {
+ vertical-align: text-top;
+}
+
+.align-text-bottom {
+ vertical-align: text-bottom;
+}
+
+.align-sub {
+ vertical-align: sub;
+}
+
+.align-super {
+ vertical-align: super;
+}
+
+.align-\\[12px\\] {
+ vertical-align: 12px;
+}
+
+.align-\\[var\\(--my-value\\)\\] {
+ vertical-align: var(--my-value);
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/visibility.test.js.snap b/tests/plugins/__snapshots__/visibility.test.js.snap
new file mode 100644
index 000000000..8960df8ee
--- /dev/null
+++ b/tests/plugins/__snapshots__/visibility.test.js.snap
@@ -0,0 +1,17 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'visibility' plugin 1`] = `
+"
+.visible {
+ visibility: visible;
+}
+
+.invisible {
+ visibility: hidden;
+}
+
+.collapse {
+ visibility: collapse;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/whitespace.test.js.snap b/tests/plugins/__snapshots__/whitespace.test.js.snap
new file mode 100644
index 000000000..edf042ebd
--- /dev/null
+++ b/tests/plugins/__snapshots__/whitespace.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'whitespace' plugin 1`] = `
+"
+.whitespace-normal {
+ white-space: normal;
+}
+
+.whitespace-nowrap {
+ white-space: nowrap;
+}
+
+.whitespace-pre {
+ white-space: pre;
+}
+
+.whitespace-pre-line {
+ white-space: pre-line;
+}
+
+.whitespace-pre-wrap {
+ white-space: pre-wrap;
+}
+
+.whitespace-break-spaces {
+ white-space: break-spaces;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/width.test.js.snap b/tests/plugins/__snapshots__/width.test.js.snap
new file mode 100644
index 000000000..0c137518e
--- /dev/null
+++ b/tests/plugins/__snapshots__/width.test.js.snap
@@ -0,0 +1,294 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'width' plugin 1`] = `
+"
+.w-0 {
+ width: 0;
+}
+
+.w-0\\.5 {
+ width: .125rem;
+}
+
+.w-1 {
+ width: .25rem;
+}
+
+.w-1\\.5 {
+ width: .375rem;
+}
+
+.w-1\\/12 {
+ width: 8.33333%;
+}
+
+.w-1\\/2 {
+ width: 50%;
+}
+
+.w-1\\/3 {
+ width: 33.3333%;
+}
+
+.w-1\\/4 {
+ width: 25%;
+}
+
+.w-1\\/5 {
+ width: 20%;
+}
+
+.w-1\\/6 {
+ width: 16.6667%;
+}
+
+.w-10 {
+ width: 2.5rem;
+}
+
+.w-10\\/12 {
+ width: 83.3333%;
+}
+
+.w-11 {
+ width: 2.75rem;
+}
+
+.w-11\\/12 {
+ width: 91.6667%;
+}
+
+.w-12 {
+ width: 3rem;
+}
+
+.w-14 {
+ width: 3.5rem;
+}
+
+.w-16 {
+ width: 4rem;
+}
+
+.w-2 {
+ width: .5rem;
+}
+
+.w-2\\.5 {
+ width: .625rem;
+}
+
+.w-2\\/12 {
+ width: 16.6667%;
+}
+
+.w-2\\/3 {
+ width: 66.6667%;
+}
+
+.w-2\\/4 {
+ width: 50%;
+}
+
+.w-2\\/5 {
+ width: 40%;
+}
+
+.w-2\\/6 {
+ width: 33.3333%;
+}
+
+.w-20 {
+ width: 5rem;
+}
+
+.w-24 {
+ width: 6rem;
+}
+
+.w-28 {
+ width: 7rem;
+}
+
+.w-3 {
+ width: .75rem;
+}
+
+.w-3\\.5 {
+ width: .875rem;
+}
+
+.w-3\\/12 {
+ width: 25%;
+}
+
+.w-3\\/4 {
+ width: 75%;
+}
+
+.w-3\\/5 {
+ width: 60%;
+}
+
+.w-3\\/6 {
+ width: 50%;
+}
+
+.w-32 {
+ width: 8rem;
+}
+
+.w-36 {
+ width: 9rem;
+}
+
+.w-4 {
+ width: 1rem;
+}
+
+.w-4\\/12 {
+ width: 33.3333%;
+}
+
+.w-4\\/5 {
+ width: 80%;
+}
+
+.w-4\\/6 {
+ width: 66.6667%;
+}
+
+.w-40 {
+ width: 10rem;
+}
+
+.w-44 {
+ width: 11rem;
+}
+
+.w-48 {
+ width: 12rem;
+}
+
+.w-5 {
+ width: 1.25rem;
+}
+
+.w-5\\/12 {
+ width: 41.6667%;
+}
+
+.w-5\\/6 {
+ width: 83.3333%;
+}
+
+.w-52 {
+ width: 13rem;
+}
+
+.w-56 {
+ width: 14rem;
+}
+
+.w-6 {
+ width: 1.5rem;
+}
+
+.w-6\\/12 {
+ width: 50%;
+}
+
+.w-60 {
+ width: 15rem;
+}
+
+.w-64 {
+ width: 16rem;
+}
+
+.w-7 {
+ width: 1.75rem;
+}
+
+.w-7\\/12 {
+ width: 58.3333%;
+}
+
+.w-72 {
+ width: 18rem;
+}
+
+.w-8 {
+ width: 2rem;
+}
+
+.w-8\\/12 {
+ width: 66.6667%;
+}
+
+.w-80 {
+ width: 20rem;
+}
+
+.w-9 {
+ width: 2.25rem;
+}
+
+.w-9\\/12 {
+ width: 75%;
+}
+
+.w-96 {
+ width: 24rem;
+}
+
+.w-\\[12px\\] {
+ width: 12px;
+}
+
+.w-\\[var\\(--my-value\\)\\] {
+ width: var(--my-value);
+}
+
+.w-auto {
+ width: auto;
+}
+
+.w-dvw {
+ width: 100dvw;
+}
+
+.w-fit {
+ width: -moz-fit-content;
+ width: fit-content;
+}
+
+.w-full {
+ width: 100%;
+}
+
+.w-lvw {
+ width: 100lvw;
+}
+
+.w-max {
+ width: max-content;
+}
+
+.w-min {
+ width: min-content;
+}
+
+.w-px {
+ width: 1px;
+}
+
+.w-screen {
+ width: 100vw;
+}
+
+.w-svw {
+ width: 100svw;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/willChange.test.js.snap b/tests/plugins/__snapshots__/willChange.test.js.snap
new file mode 100644
index 000000000..7e8c151bb
--- /dev/null
+++ b/tests/plugins/__snapshots__/willChange.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'willChange' plugin 1`] = `
+"
+.will-change-\\[left\\,top\\] {
+ will-change: left, top;
+}
+
+.will-change-\\[var\\(--my-value\\)\\] {
+ will-change: var(--my-value);
+}
+
+.will-change-auto {
+ will-change: auto;
+}
+
+.will-change-contents {
+ will-change: contents;
+}
+
+.will-change-scroll {
+ will-change: scroll-position;
+}
+
+.will-change-transform {
+ will-change: transform;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/wordBreak.test.js.snap b/tests/plugins/__snapshots__/wordBreak.test.js.snap
new file mode 100644
index 000000000..88538c91b
--- /dev/null
+++ b/tests/plugins/__snapshots__/wordBreak.test.js.snap
@@ -0,0 +1,22 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'wordBreak' plugin 1`] = `
+"
+.break-normal {
+ overflow-wrap: normal;
+ word-break: normal;
+}
+
+.break-words {
+ overflow-wrap: break-word;
+}
+
+.break-all {
+ word-break: break-all;
+}
+
+.break-keep {
+ word-break: keep-all;
+}
+"
+`;
diff --git a/tests/plugins/__snapshots__/zIndex.test.js.snap b/tests/plugins/__snapshots__/zIndex.test.js.snap
new file mode 100644
index 000000000..2db6e8707
--- /dev/null
+++ b/tests/plugins/__snapshots__/zIndex.test.js.snap
@@ -0,0 +1,65 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'zIndex' plugin 1`] = `
+"
+.-z-0 {
+ z-index: 0;
+}
+
+.-z-10 {
+ z-index: -10;
+}
+
+.-z-20 {
+ z-index: -20;
+}
+
+.-z-30 {
+ z-index: -30;
+}
+
+.-z-40 {
+ z-index: -40;
+}
+
+.-z-50 {
+ z-index: -50;
+}
+
+.z-0 {
+ z-index: 0;
+}
+
+.z-10 {
+ z-index: 10;
+}
+
+.z-20 {
+ z-index: 20;
+}
+
+.z-30 {
+ z-index: 30;
+}
+
+.z-40 {
+ z-index: 40;
+}
+
+.z-50 {
+ z-index: 50;
+}
+
+.z-\\[12px\\] {
+ z-index: 12px;
+}
+
+.z-\\[var\\(--my-value\\)\\] {
+ z-index: var(--my-value);
+}
+
+.z-auto {
+ z-index: auto;
+}
+"
+`;
diff --git a/tests/plugins/accentColor.test.js b/tests/plugins/accentColor.test.js
new file mode 100644
index 000000000..8385dcd4b
--- /dev/null
+++ b/tests/plugins/accentColor.test.js
@@ -0,0 +1,23 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('accentColor', {
+ safelist: [
+ // Arbitrary values
+ 'accent-[#0088cc]',
+ 'accent-[var(--my-value)]',
+ ],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/accessibility.test.js b/tests/plugins/accessibility.test.js
new file mode 100644
index 000000000..bdeb5acd7
--- /dev/null
+++ b/tests/plugins/accessibility.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('accessibility').toMatchSnapshot()
diff --git a/tests/plugins/alignContent.test.js b/tests/plugins/alignContent.test.js
new file mode 100644
index 000000000..ce5b0c2ac
--- /dev/null
+++ b/tests/plugins/alignContent.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('alignContent').toMatchSnapshot()
diff --git a/tests/plugins/alignItems.test.js b/tests/plugins/alignItems.test.js
new file mode 100644
index 000000000..579b66c65
--- /dev/null
+++ b/tests/plugins/alignItems.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('alignItems').toMatchSnapshot()
diff --git a/tests/plugins/alignSelf.test.js b/tests/plugins/alignSelf.test.js
new file mode 100644
index 000000000..adb03c4b8
--- /dev/null
+++ b/tests/plugins/alignSelf.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('alignSelf').toMatchSnapshot()
diff --git a/tests/plugins/animation.test.js b/tests/plugins/animation.test.js
new file mode 100644
index 000000000..65757ccbf
--- /dev/null
+++ b/tests/plugins/animation.test.js
@@ -0,0 +1,266 @@
+import { run, html, css, quickPluginTest } from '../util/run'
+
+quickPluginTest('animation', {
+ safelist: [
+ // Arbitrary values
+ 'animate-[1s_infinite_example]',
+ 'animate-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
+
+test('custom', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ extend: {
+ keyframes: {
+ one: { to: { transform: 'rotate(360deg)' } },
+ },
+ animation: {
+ one: 'one 2s',
+ },
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @keyframes one {
+ to {
+ transform: rotate(360deg);
+ }
+ }
+ .animate-one {
+ animation: 2s one;
+ }
+ `)
+ })
+})
+
+test('custom prefixed', () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: `
` }],
+ theme: {
+ extend: {
+ keyframes: {
+ one: { to: { transform: 'rotate(360deg)' } },
+ },
+ animation: {
+ one: 'one 2s',
+ },
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @keyframes tw-one {
+ to {
+ transform: rotate(360deg);
+ }
+ }
+ .tw-animate-one {
+ animation: 2s tw-one;
+ }
+ `)
+ })
+})
+
+test('multiple', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ extend: {
+ animation: {
+ multiple: 'bounce 2s linear, pulse 3s ease-in',
+ },
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @keyframes bounce {
+ 0%,
+ 100% {
+ animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
+ transform: translateY(-25%);
+ }
+ 50% {
+ animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
+ transform: none;
+ }
+ }
+ @keyframes pulse {
+ 50% {
+ opacity: 0.5;
+ }
+ }
+ .animate-multiple {
+ animation: 2s linear bounce, 3s ease-in pulse;
+ }
+ `)
+ })
+})
+
+test('multiple custom', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ extend: {
+ keyframes: {
+ one: { to: { transform: 'rotate(360deg)' } },
+ two: { to: { transform: 'scale(1.23)' } },
+ },
+ animation: {
+ multiple: 'one 2s, two 3s',
+ },
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @keyframes one {
+ to {
+ transform: rotate(360deg);
+ }
+ }
+ @keyframes two {
+ to {
+ transform: scale(1.23);
+ }
+ }
+ .animate-multiple {
+ animation: 2s one, 3s two;
+ }
+ `)
+ })
+})
+
+test('with dots in the name', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+ `,
+ },
+ ],
+ theme: {
+ extend: {
+ keyframes: {
+ 'zoom-0.5': { to: { transform: 'scale(0.5)' } },
+ 'zoom-1.5': { to: { transform: 'scale(1.5)' } },
+ },
+ animation: {
+ 'zoom-0.5': 'zoom-0.5 2s',
+ 'zoom-1.5': 'zoom-1.5 2s',
+ },
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @keyframes zoom-0\.5 {
+ to {
+ transform: scale(0.5);
+ }
+ }
+
+ .animate-zoom-0\.5 {
+ animation: 2s zoom-0\.5;
+ }
+
+ @keyframes zoom-1\.5 {
+ to {
+ transform: scale(1.5);
+ }
+ }
+
+ .animate-zoom-1\.5 {
+ animation: 2s zoom-1\.5;
+ }
+ `)
+ })
+})
+
+test('with dots in the name and prefix', () => {
+ let config = {
+ prefix: 'tw-',
+ content: [
+ {
+ raw: html`
+
+
+ `,
+ },
+ ],
+ theme: {
+ extend: {
+ keyframes: {
+ 'zoom-.5': { to: { transform: 'scale(0.5)' } },
+ 'zoom-1.5': { to: { transform: 'scale(1.5)' } },
+ },
+ animation: {
+ 'zoom-.5': 'zoom-.5 2s',
+ 'zoom-1.5': 'zoom-1.5 2s',
+ },
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @keyframes tw-zoom-\.5 {
+ to {
+ transform: scale(0.5);
+ }
+ }
+ .tw-animate-zoom-\.5 {
+ animation: 2s tw-zoom-\.5;
+ }
+ @keyframes tw-zoom-1\.5 {
+ to {
+ transform: scale(1.5);
+ }
+ }
+ .tw-animate-zoom-1\.5 {
+ animation: 2s tw-zoom-1\.5;
+ }
+ `)
+ })
+})
+
+test('special character prefixes are escaped in animation names', () => {
+ let config = {
+ prefix: '@',
+ content: [{ raw: `
` }],
+ theme: {
+ extend: {
+ keyframes: {
+ one: { to: { transform: 'rotate(360deg)' } },
+ },
+ animation: {
+ one: 'one 2s',
+ },
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @keyframes \@one {
+ to {
+ transform: rotate(360deg);
+ }
+ }
+ .\@animate-one {
+ animation: 2s \@one;
+ }
+ `)
+ })
+})
diff --git a/tests/plugins/appearance.test.js b/tests/plugins/appearance.test.js
new file mode 100644
index 000000000..5a40cadd8
--- /dev/null
+++ b/tests/plugins/appearance.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('appearance').toMatchSnapshot()
diff --git a/tests/plugins/aspectRatio.test.js b/tests/plugins/aspectRatio.test.js
new file mode 100644
index 000000000..f41037694
--- /dev/null
+++ b/tests/plugins/aspectRatio.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('aspectRatio').toMatchSnapshot()
diff --git a/tests/plugins/backdropBlur.test.js b/tests/plugins/backdropBlur.test.js
new file mode 100644
index 000000000..b7fc287bf
--- /dev/null
+++ b/tests/plugins/backdropBlur.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backdropBlur', {
+ safelist: [
+ // Arbitrary values
+ 'backdrop-blur-[12px]',
+ 'backdrop-blur-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/backdropBrightness.test.js b/tests/plugins/backdropBrightness.test.js
new file mode 100644
index 000000000..907b72216
--- /dev/null
+++ b/tests/plugins/backdropBrightness.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backdropBrightness', {
+ safelist: [
+ // Arbitrary values
+ 'backdrop-brightness-[.12]',
+ 'backdrop-brightness-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/backdropContrast.test.js b/tests/plugins/backdropContrast.test.js
new file mode 100644
index 000000000..e441ebd5d
--- /dev/null
+++ b/tests/plugins/backdropContrast.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backdropContrast', {
+ safelist: [
+ // Arbitrary values
+ 'backdrop-contrast-[.12]',
+ 'backdrop-contrast-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/backdropFilter.test.js b/tests/plugins/backdropFilter.test.js
new file mode 100644
index 000000000..4f02c90da
--- /dev/null
+++ b/tests/plugins/backdropFilter.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backdropFilter').toMatchSnapshot()
diff --git a/tests/plugins/backdropGrayscale.test.js b/tests/plugins/backdropGrayscale.test.js
new file mode 100644
index 000000000..0f990ed15
--- /dev/null
+++ b/tests/plugins/backdropGrayscale.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backdropGrayscale', {
+ safelist: [
+ // Arbitrary values
+ 'backdrop-grayscale-[50%]',
+ 'backdrop-grayscale-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/backdropHueRotate.test.js b/tests/plugins/backdropHueRotate.test.js
new file mode 100644
index 000000000..62226f513
--- /dev/null
+++ b/tests/plugins/backdropHueRotate.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backdropHueRotate', {
+ safelist: [
+ // Arbitrary values
+ 'backdrop-hue-rotate-[12deg]',
+ 'backdrop-hue-rotate-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/backdropInvert.test.js b/tests/plugins/backdropInvert.test.js
new file mode 100644
index 000000000..b96a699da
--- /dev/null
+++ b/tests/plugins/backdropInvert.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backdropInvert', {
+ safelist: [
+ // Arbitrary values
+ 'backdrop-invert-[50%]',
+ 'backdrop-invert-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/backdropOpacity.test.js b/tests/plugins/backdropOpacity.test.js
new file mode 100644
index 000000000..08dd6590d
--- /dev/null
+++ b/tests/plugins/backdropOpacity.test.js
@@ -0,0 +1,15 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backdropOpacity', {
+ safelist: [
+ // Arbitrary values
+ 'backdrop-opacity-[0.12]',
+ 'backdrop-opacity-[var(--my-value)]',
+ ],
+ theme: {
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/backdropSaturate.test.js b/tests/plugins/backdropSaturate.test.js
new file mode 100644
index 000000000..482cb77c5
--- /dev/null
+++ b/tests/plugins/backdropSaturate.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backdropSaturate', {
+ safelist: [
+ // Arbitrary values
+ 'backdrop-saturate-[0.12]',
+ 'backdrop-saturate-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/backdropSepia.test.js b/tests/plugins/backdropSepia.test.js
new file mode 100644
index 000000000..2ee63bfdd
--- /dev/null
+++ b/tests/plugins/backdropSepia.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backdropSepia', {
+ safelist: [
+ // Arbitrary values
+ 'backdrop-sepia-[50%]',
+ 'backdrop-sepia-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/backgroundAttachment.test.js b/tests/plugins/backgroundAttachment.test.js
new file mode 100644
index 000000000..fbab1aee8
--- /dev/null
+++ b/tests/plugins/backgroundAttachment.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backgroundAttachment').toMatchSnapshot()
diff --git a/tests/plugins/backgroundBlendMode.test.js b/tests/plugins/backgroundBlendMode.test.js
new file mode 100644
index 000000000..526b9c1a5
--- /dev/null
+++ b/tests/plugins/backgroundBlendMode.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backgroundBlendMode').toMatchSnapshot()
diff --git a/tests/plugins/backgroundClip.test.js b/tests/plugins/backgroundClip.test.js
new file mode 100644
index 000000000..9a906c906
--- /dev/null
+++ b/tests/plugins/backgroundClip.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backgroundClip').toMatchSnapshot()
diff --git a/tests/plugins/backgroundColor.test.js b/tests/plugins/backgroundColor.test.js
new file mode 100644
index 000000000..faa4d32db
--- /dev/null
+++ b/tests/plugins/backgroundColor.test.js
@@ -0,0 +1,47 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backgroundColor', {
+ safelist: [
+ // Arbitrary values
+ 'bg-[#0088cc]',
+ 'bg-[var(--my-value)]',
+ ],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
+
+// With `backgroundOpacity` plugin enabled
+quickPluginTest('backgroundColor', {
+ safelist: [
+ // Arbitrary values
+ 'bg-[#0088cc]',
+ 'bg-[var(--my-value)]',
+ ],
+ corePlugins: ['backgroundOpacity'],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/backgroundImage.test.js b/tests/plugins/backgroundImage.test.js
new file mode 100644
index 000000000..089aae1ea
--- /dev/null
+++ b/tests/plugins/backgroundImage.test.js
@@ -0,0 +1,8 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backgroundImage', {
+ safelist: [
+ // Arbitrary values
+ 'bg-[url(/my-image.png)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/backgroundOpacity.test.js b/tests/plugins/backgroundOpacity.test.js
new file mode 100644
index 000000000..aa663b9c8
--- /dev/null
+++ b/tests/plugins/backgroundOpacity.test.js
@@ -0,0 +1,15 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backgroundOpacity', {
+ safelist: [
+ // Arbitrary values
+ 'bg-opacity-[0.12]',
+ 'bg-opacity-[var(--my-value)]',
+ ],
+ theme: {
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/backgroundOrigin.test.js b/tests/plugins/backgroundOrigin.test.js
new file mode 100644
index 000000000..561d182b1
--- /dev/null
+++ b/tests/plugins/backgroundOrigin.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backgroundOrigin').toMatchSnapshot()
diff --git a/tests/plugins/backgroundPosition.test.js b/tests/plugins/backgroundPosition.test.js
new file mode 100644
index 000000000..73a278030
--- /dev/null
+++ b/tests/plugins/backgroundPosition.test.js
@@ -0,0 +1,8 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backgroundPosition', {
+ safelist: [
+ // Arbitrary values
+ 'bg-[50%_25%]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/backgroundRepeat.test.js b/tests/plugins/backgroundRepeat.test.js
new file mode 100644
index 000000000..91bf78ff4
--- /dev/null
+++ b/tests/plugins/backgroundRepeat.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backgroundRepeat').toMatchSnapshot()
diff --git a/tests/plugins/backgroundSize.test.js b/tests/plugins/backgroundSize.test.js
new file mode 100644
index 000000000..a38d8e618
--- /dev/null
+++ b/tests/plugins/backgroundSize.test.js
@@ -0,0 +1,8 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('backgroundSize', {
+ safelist: [
+ // Arbitrary values
+ 'bg-[50%]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/blur.test.js b/tests/plugins/blur.test.js
new file mode 100644
index 000000000..9ff1f5900
--- /dev/null
+++ b/tests/plugins/blur.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('blur', {
+ safelist: [
+ // Arbitrary values
+ 'blur-[12px]',
+ 'blur-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/borderCollapse.test.js b/tests/plugins/borderCollapse.test.js
new file mode 100644
index 000000000..8bf38e021
--- /dev/null
+++ b/tests/plugins/borderCollapse.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('borderCollapse').toMatchSnapshot()
diff --git a/tests/plugins/borderColor.test.js b/tests/plugins/borderColor.test.js
new file mode 100644
index 000000000..bc14a5e4e
--- /dev/null
+++ b/tests/plugins/borderColor.test.js
@@ -0,0 +1,43 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('borderColor', {
+ safelist: [
+ // Arbitrary values
+ 'border-[#0088cc]',
+ 'border-[var(--my-value)]',
+ ],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ },
+}).toMatchSnapshot()
+
+// With `ringOpacity` plugin enabled
+quickPluginTest('borderColor', {
+ safelist: [
+ // Arbitrary values
+ 'border-[#0088cc]',
+ 'border-[var(--my-value)]',
+ ],
+ corePlugins: ['borderOpacity'],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/borderOpacity.test.js b/tests/plugins/borderOpacity.test.js
new file mode 100644
index 000000000..8246229cf
--- /dev/null
+++ b/tests/plugins/borderOpacity.test.js
@@ -0,0 +1,15 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('borderOpacity', {
+ safelist: [
+ // Arbitrary values
+ 'border-opacity-[12%]',
+ 'border-opacity-[var(--my-value)]',
+ ],
+ theme: {
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/borderRadius.test.js b/tests/plugins/borderRadius.test.js
new file mode 100644
index 000000000..55b9dc676
--- /dev/null
+++ b/tests/plugins/borderRadius.test.js
@@ -0,0 +1,24 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('borderRadius', {
+ safelist: [
+ // Arbitrary values
+ 'rounded-[1px]',
+
+ 'rounded-s-[2px]',
+ 'rounded-e-[3px]',
+ 'rounded-t-[4px]',
+ 'rounded-r-[5px]',
+ 'rounded-b-[6px]',
+ 'rounded-l-[7px]',
+
+ 'rounded-ss-[8px]',
+ 'rounded-se-[9px]',
+ 'rounded-ee-[10px]',
+ 'rounded-es-[11px]',
+ 'rounded-tl-[12px]',
+ 'rounded-tr-[13px]',
+ 'rounded-br-[14px]',
+ 'rounded-bl-[15px]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/borderSpacing.test.js b/tests/plugins/borderSpacing.test.js
new file mode 100644
index 000000000..cd28bb347
--- /dev/null
+++ b/tests/plugins/borderSpacing.test.js
@@ -0,0 +1,11 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('borderSpacing', {
+ safelist: [
+ // Arbitrary values
+ 'border-spacing-[12px]',
+
+ 'border-spacing-x-[23px]',
+ 'border-spacing-y-[34px]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/borderStyle.test.js b/tests/plugins/borderStyle.test.js
new file mode 100644
index 000000000..07b1097f5
--- /dev/null
+++ b/tests/plugins/borderStyle.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('borderStyle').toMatchSnapshot()
diff --git a/tests/plugins/borderWidth.test.js b/tests/plugins/borderWidth.test.js
new file mode 100644
index 000000000..bf7ccce70
--- /dev/null
+++ b/tests/plugins/borderWidth.test.js
@@ -0,0 +1,18 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('borderWidth', {
+ safelist: [
+ // Arbitrary values
+ 'border-[12px]',
+
+ 'border-x-[23px]',
+ 'border-y-[34px]',
+
+ 'border-s-[45px]',
+ 'border-e-[56px]',
+ 'border-t-[67px]',
+ 'border-r-[78px]',
+ 'border-b-[89px]',
+ 'border-l-[90px]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/boxDecorationBreak.test.js b/tests/plugins/boxDecorationBreak.test.js
new file mode 100644
index 000000000..55f5b0cc0
--- /dev/null
+++ b/tests/plugins/boxDecorationBreak.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('boxDecorationBreak').toMatchSnapshot()
diff --git a/tests/plugins/boxShadow.test.js b/tests/plugins/boxShadow.test.js
new file mode 100644
index 000000000..e26f52944
--- /dev/null
+++ b/tests/plugins/boxShadow.test.js
@@ -0,0 +1,8 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('boxShadow', {
+ safelist: [
+ // Arbitrary values
+ 'shadow-[0_1px_2px_#0088cc]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/boxShadowColor.test.js b/tests/plugins/boxShadowColor.test.js
new file mode 100644
index 000000000..0bc62c5f1
--- /dev/null
+++ b/tests/plugins/boxShadowColor.test.js
@@ -0,0 +1,23 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('boxShadowColor', {
+ safelist: [
+ // Arbitrary values
+ 'shadow-[#0088cc]',
+ 'shadow-[var(--my-value)]',
+ ],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/boxSizing.test.js b/tests/plugins/boxSizing.test.js
new file mode 100644
index 000000000..f67861e53
--- /dev/null
+++ b/tests/plugins/boxSizing.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('boxSizing').toMatchSnapshot()
diff --git a/tests/plugins/breakAfter.test.js b/tests/plugins/breakAfter.test.js
new file mode 100644
index 000000000..745f83076
--- /dev/null
+++ b/tests/plugins/breakAfter.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('breakAfter').toMatchSnapshot()
diff --git a/tests/plugins/breakBefore.test.js b/tests/plugins/breakBefore.test.js
new file mode 100644
index 000000000..bbb446d57
--- /dev/null
+++ b/tests/plugins/breakBefore.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('breakBefore').toMatchSnapshot()
diff --git a/tests/plugins/breakInside.test.js b/tests/plugins/breakInside.test.js
new file mode 100644
index 000000000..7d556d4d0
--- /dev/null
+++ b/tests/plugins/breakInside.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('breakInside').toMatchSnapshot()
diff --git a/tests/plugins/brightness.test.js b/tests/plugins/brightness.test.js
new file mode 100644
index 000000000..0ebfaf4ce
--- /dev/null
+++ b/tests/plugins/brightness.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('brightness', {
+ safelist: [
+ // Arbitrary values
+ 'brightness-[12]',
+ 'brightness-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/captionSide.test.js b/tests/plugins/captionSide.test.js
new file mode 100644
index 000000000..6d4bb69fe
--- /dev/null
+++ b/tests/plugins/captionSide.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('captionSide').toMatchSnapshot()
diff --git a/tests/plugins/caretColor.test.js b/tests/plugins/caretColor.test.js
new file mode 100644
index 000000000..a5f547751
--- /dev/null
+++ b/tests/plugins/caretColor.test.js
@@ -0,0 +1,23 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('caretColor', {
+ safelist: [
+ // Arbitrary values
+ 'caret-[#0088cc]',
+ 'caret-[var(--my-value)]',
+ ],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/clear.test.js b/tests/plugins/clear.test.js
new file mode 100644
index 000000000..edc0ea65f
--- /dev/null
+++ b/tests/plugins/clear.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('clear').toMatchSnapshot()
diff --git a/tests/plugins/columns.test.js b/tests/plugins/columns.test.js
new file mode 100644
index 000000000..fe7cbaf24
--- /dev/null
+++ b/tests/plugins/columns.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('columns', {
+ safelist: [
+ // Arbitrary values
+ 'columns-[12]',
+ 'columns-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/container.test.js b/tests/plugins/container.test.js
new file mode 100644
index 000000000..907e54f18
--- /dev/null
+++ b/tests/plugins/container.test.js
@@ -0,0 +1,347 @@
+import { run, html, css, quickPluginTest } from '../util/run'
+
+quickPluginTest('container').toMatchSnapshot()
+
+test('options are not required', () => {
+ let config = { content: [{ raw: html`
` }] }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .container {
+ width: 100%;
+ }
+ @media (min-width: 640px) {
+ .container {
+ max-width: 640px;
+ }
+ }
+ @media (min-width: 768px) {
+ .container {
+ max-width: 768px;
+ }
+ }
+ @media (min-width: 1024px) {
+ .container {
+ max-width: 1024px;
+ }
+ }
+ @media (min-width: 1280px) {
+ .container {
+ max-width: 1280px;
+ }
+ }
+ @media (min-width: 1536px) {
+ .container {
+ max-width: 1536px;
+ }
+ }
+ `)
+ })
+})
+
+test('screens can be passed explicitly', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ container: {
+ screens: ['400px', '500px'],
+ },
+ },
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .container {
+ width: 100%;
+ }
+ @media (min-width: 400px) {
+ .container {
+ max-width: 400px;
+ }
+ }
+ @media (min-width: 500px) {
+ .container {
+ max-width: 500px;
+ }
+ }
+ `)
+ })
+})
+
+test('screens are ordered ascending by min-width', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ container: {
+ screens: ['500px', '400px'],
+ },
+ },
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .container {
+ width: 100%;
+ }
+ @media (min-width: 400px) {
+ .container {
+ max-width: 400px;
+ }
+ }
+ @media (min-width: 500px) {
+ .container {
+ max-width: 500px;
+ }
+ }
+ `)
+ })
+})
+
+test('screens are deduplicated by min-width', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ container: {
+ screens: {
+ sm: '576px',
+ md: '768px',
+ 'sm-only': { min: '576px', max: '767px' },
+ },
+ },
+ },
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .container {
+ width: 100%;
+ }
+ @media (min-width: 576px) {
+ .container {
+ max-width: 576px;
+ }
+ }
+ @media (min-width: 768px) {
+ .container {
+ max-width: 768px;
+ }
+ }
+ `)
+ })
+})
+
+test('the container can be centered by default', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ container: {
+ center: true,
+ },
+ },
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .container {
+ width: 100%;
+ margin-left: auto;
+ margin-right: auto;
+ }
+ @media (min-width: 640px) {
+ .container {
+ max-width: 640px;
+ }
+ }
+ @media (min-width: 768px) {
+ .container {
+ max-width: 768px;
+ }
+ }
+ @media (min-width: 1024px) {
+ .container {
+ max-width: 1024px;
+ }
+ }
+ @media (min-width: 1280px) {
+ .container {
+ max-width: 1280px;
+ }
+ }
+ @media (min-width: 1536px) {
+ .container {
+ max-width: 1536px;
+ }
+ }
+ `)
+ })
+})
+
+test('horizontal padding can be included by default', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ container: {
+ padding: '2rem',
+ },
+ },
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .container {
+ width: 100%;
+ padding-left: 2rem;
+ padding-right: 2rem;
+ }
+ @media (min-width: 640px) {
+ .container {
+ max-width: 640px;
+ }
+ }
+ @media (min-width: 768px) {
+ .container {
+ max-width: 768px;
+ }
+ }
+ @media (min-width: 1024px) {
+ .container {
+ max-width: 1024px;
+ }
+ }
+ @media (min-width: 1280px) {
+ .container {
+ max-width: 1280px;
+ }
+ }
+ @media (min-width: 1536px) {
+ .container {
+ max-width: 1536px;
+ }
+ }
+ `)
+ })
+})
+
+test('responsive horizontal padding can be included by default', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ screens: {
+ sm: '576px',
+ md: { min: '768px' },
+ lg: { 'min-width': '992px' },
+ xl: { min: '1200px', max: '1600px' },
+ },
+ container: {
+ padding: {
+ DEFAULT: '1rem',
+ sm: '2rem',
+ lg: '4rem',
+ xl: '5rem',
+ },
+ },
+ },
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .container {
+ width: 100%;
+ padding-left: 1rem;
+ padding-right: 1rem;
+ }
+ @media (min-width: 576px) {
+ .container {
+ max-width: 576px;
+ padding-left: 2rem;
+ padding-right: 2rem;
+ }
+ }
+ @media (min-width: 768px) {
+ .container {
+ max-width: 768px;
+ }
+ }
+ @media (min-width: 992px) {
+ .container {
+ max-width: 992px;
+ padding-left: 4rem;
+ padding-right: 4rem;
+ }
+ }
+ @media (min-width: 1200px) {
+ .container {
+ max-width: 1200px;
+ padding-left: 5rem;
+ padding-right: 5rem;
+ }
+ }
+ `)
+ })
+})
+
+test('setting all options at once', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ container: {
+ screens: ['400px', '500px'],
+ center: true,
+ padding: '2rem',
+ },
+ },
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .container {
+ width: 100%;
+ margin-left: auto;
+ margin-right: auto;
+ padding-left: 2rem;
+ padding-right: 2rem;
+ }
+ @media (min-width: 400px) {
+ .container {
+ max-width: 400px;
+ }
+ }
+ @media (min-width: 500px) {
+ .container {
+ max-width: 500px;
+ }
+ }
+ `)
+ })
+})
+
+test('container can use variants', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ container: {
+ screens: ['400px', '500px'],
+ },
+ },
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 1024px) {
+ .lg\:hover\:container:hover {
+ width: 100%;
+ }
+ @media (min-width: 400px) {
+ .lg\:hover\:container:hover {
+ max-width: 400px;
+ }
+ }
+ @media (min-width: 500px) {
+ .lg\:hover\:container:hover {
+ max-width: 500px;
+ }
+ }
+ }
+ `)
+ })
+})
diff --git a/tests/plugins/content.test.js b/tests/plugins/content.test.js
new file mode 100644
index 000000000..f20da15eb
--- /dev/null
+++ b/tests/plugins/content.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('content', {
+ safelist: [
+ // Arbitrary values
+ 'content-["hello_world"]',
+ 'content-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/contrast.test.js b/tests/plugins/contrast.test.js
new file mode 100644
index 000000000..78cfe83e1
--- /dev/null
+++ b/tests/plugins/contrast.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('contrast', {
+ safelist: [
+ // Arbitrary values
+ 'contrast-[.12]',
+ 'contrast-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/cursor.test.js b/tests/plugins/cursor.test.js
new file mode 100644
index 000000000..1f1d764ae
--- /dev/null
+++ b/tests/plugins/cursor.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('cursor', {
+ safelist: [
+ // Arbitrary values
+ 'cursor-[url(/images/cursor.png)]',
+ 'cursor-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/display.test.js b/tests/plugins/display.test.js
new file mode 100644
index 000000000..abc32cd54
--- /dev/null
+++ b/tests/plugins/display.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('display').toMatchSnapshot()
diff --git a/tests/plugins/divide.test.js b/tests/plugins/divide.test.js
deleted file mode 100644
index 314233bea..000000000
--- a/tests/plugins/divide.test.js
+++ /dev/null
@@ -1,102 +0,0 @@
-import { crosscheck, run, html, css, defaults } from '../util/run'
-
-crosscheck(({ stable, oxide }) => {
- it('should add the divide styles for divide-y and a default border color', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- return run('@tailwind base; @tailwind utilities;', config).then((result) => {
- expect(result.css).toMatchCss(css`
- ${defaults}
-
- .divide-y > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
- }
- `)
- })
- })
-
- it('should add the divide styles for divide-x and a default border color', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- return run('@tailwind base; @tailwind utilities;', config).then((result) => {
- stable.expect(result.css).toMatchCss(css`
- ${defaults}
- .divide-x > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-x-reverse: 0;
- border-right-width: calc(1px * var(--tw-divide-x-reverse));
- border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
- }
- `)
-
- oxide.expect(result.css).toMatchCss(css`
- ${defaults}
- .divide-x > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-x-reverse: 0;
- border-inline-end-width: calc(1px * var(--tw-divide-x-reverse));
- border-inline-start-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
- }
- `)
- })
- })
-
- it('should add the divide styles for divide-y-reverse and a default border color', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- return run('@tailwind base; @tailwind utilities;', config).then((result) => {
- expect(result.css).toMatchCss(css`
- ${defaults}
- .divide-y-reverse > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 1;
- }
- `)
- })
- })
-
- it('should add the divide styles for divide-x-reverse and a default border color', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- return run('@tailwind base; @tailwind utilities;', config).then((result) => {
- expect(result.css).toMatchCss(css`
- ${defaults}
- .divide-x-reverse > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-x-reverse: 1;
- }
- `)
- })
- })
-
- it('should only inject the base styles once if we use divide and border at the same time', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- return run('@tailwind base; @tailwind utilities;', config).then((result) => {
- expect(result.css).toMatchCss(css`
- ${defaults}
- .divide-y > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
- }
- .border-r {
- border-right-width: 1px;
- }
- `)
- })
- })
-})
diff --git a/tests/plugins/divideColor.test.js b/tests/plugins/divideColor.test.js
new file mode 100644
index 000000000..887c03463
--- /dev/null
+++ b/tests/plugins/divideColor.test.js
@@ -0,0 +1,43 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('divideColor', {
+ safelist: [
+ // Arbitrary values
+ 'divide-[#0088cc]',
+ 'divide-[var(--my-value)]',
+ ],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ },
+}).toMatchSnapshot()
+
+// With the `divideOpacity` plugin enabled
+quickPluginTest('divideColor', {
+ safelist: [
+ // Arbitrary values
+ 'divide-[#0088cc]',
+ 'divide-[var(--my-value)]',
+ ],
+ corePlugins: ['divideOpacity'],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/divideOpacity.test.js b/tests/plugins/divideOpacity.test.js
new file mode 100644
index 000000000..49599cd00
--- /dev/null
+++ b/tests/plugins/divideOpacity.test.js
@@ -0,0 +1,15 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('divideOpacity', {
+ safelist: [
+ // Arbitrary values
+ 'divide-opacity-[0.12]',
+ 'divide-opacity-[var(--my-value)]',
+ ],
+ theme: {
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/divideStyle.test.js b/tests/plugins/divideStyle.test.js
new file mode 100644
index 000000000..bcb444290
--- /dev/null
+++ b/tests/plugins/divideStyle.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('divideStyle').toMatchSnapshot()
diff --git a/tests/plugins/divideWidth.test.js b/tests/plugins/divideWidth.test.js
new file mode 100644
index 000000000..cd55f5f13
--- /dev/null
+++ b/tests/plugins/divideWidth.test.js
@@ -0,0 +1,119 @@
+import { run, html, css, defaults, quickPluginTest } from '../util/run'
+
+quickPluginTest('divideWidth', {
+ safelist: [
+ // Arbitrary values
+ 'divide-x-[0]',
+ 'divide-x-[12px]',
+ 'divide-x-[var(--my-value)]',
+ 'divide-y-[0]',
+ 'divide-y-[34px]',
+ 'divide-y-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
+
+// With `logicalSiblingUtilities` enabled
+quickPluginTest('divideWidth', {
+ safelist: [
+ // Arbitrary values
+ 'divide-x-[0]',
+ 'divide-x-[12px]',
+ 'divide-x-[var(--my-value)]',
+ 'divide-y-[0]',
+ 'divide-y-[34px]',
+ 'divide-y-[var(--my-value)]',
+ ],
+ future: {
+ logicalSiblingUtilities: true,
+ },
+}).toMatchSnapshot()
+
+it('should add the divide styles for divide-y and a default border color', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ return run('@tailwind base; @tailwind utilities;', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+
+ .divide-y > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
+ }
+ `)
+ })
+})
+
+it('should add the divide styles for divide-x and a default border color', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ return run('@tailwind base; @tailwind utilities;', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .divide-x > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 0;
+ border-right-width: calc(1px * var(--tw-divide-x-reverse));
+ border-left-width: calc(1px * calc(1 - var(--tw-divide-x-reverse)));
+ }
+ `)
+ })
+})
+
+it('should add the divide styles for divide-y-reverse and a default border color', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ return run('@tailwind base; @tailwind utilities;', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .divide-y-reverse > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 1;
+ }
+ `)
+ })
+})
+
+it('should add the divide styles for divide-x-reverse and a default border color', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ return run('@tailwind base; @tailwind utilities;', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .divide-x-reverse > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-x-reverse: 1;
+ }
+ `)
+ })
+})
+
+it('should only inject the base styles once if we use divide and border at the same time', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ return run('@tailwind base; @tailwind utilities;', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .divide-y > :not([hidden]) ~ :not([hidden]) {
+ --tw-divide-y-reverse: 0;
+ border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
+ border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
+ }
+ .border-r {
+ border-right-width: 1px;
+ }
+ `)
+ })
+})
diff --git a/tests/plugins/dropShadow.test.js b/tests/plugins/dropShadow.test.js
new file mode 100644
index 000000000..a049af003
--- /dev/null
+++ b/tests/plugins/dropShadow.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('dropShadow', {
+ safelist: [
+ // Arbitrary values
+ 'drop-shadow-[0_1px_2px_#0088cc]',
+ 'drop-shadow-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/fill.test.js b/tests/plugins/fill.test.js
new file mode 100644
index 000000000..664a3d220
--- /dev/null
+++ b/tests/plugins/fill.test.js
@@ -0,0 +1,23 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('fill', {
+ safelist: [
+ // Arbitrary values
+ 'fill-[#0088cc]',
+ 'fill-[var(--my-value)]',
+ ],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/filter.test.js b/tests/plugins/filter.test.js
new file mode 100644
index 000000000..3a2e5cb72
--- /dev/null
+++ b/tests/plugins/filter.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('filter').toMatchSnapshot()
diff --git a/tests/plugins/flex.test.js b/tests/plugins/flex.test.js
new file mode 100644
index 000000000..ba58eca3c
--- /dev/null
+++ b/tests/plugins/flex.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('flex', {
+ safelist: [
+ // Arbitrary values
+ 'flex-[12_auto]',
+ 'flex-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/flexBasis.test.js b/tests/plugins/flexBasis.test.js
new file mode 100644
index 000000000..db3bc9c72
--- /dev/null
+++ b/tests/plugins/flexBasis.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('flexBasis', {
+ safelist: [
+ // Arbitrary values
+ 'basis-[12px]',
+ 'basis-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/flexDirection.test.js b/tests/plugins/flexDirection.test.js
new file mode 100644
index 000000000..3c31357f1
--- /dev/null
+++ b/tests/plugins/flexDirection.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('flexDirection').toMatchSnapshot()
diff --git a/tests/plugins/flexGrow.test.js b/tests/plugins/flexGrow.test.js
new file mode 100644
index 000000000..5eb1b1699
--- /dev/null
+++ b/tests/plugins/flexGrow.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('flexGrow', {
+ safelist: [
+ // Arbitrary values
+ 'grow-[12]',
+ 'grow-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/flexShrink.test.js b/tests/plugins/flexShrink.test.js
new file mode 100644
index 000000000..25b6ba6f4
--- /dev/null
+++ b/tests/plugins/flexShrink.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('flexShrink', {
+ safelist: [
+ // Arbitrary values
+ 'shrink-[12]',
+ 'shrink-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/flexWrap.test.js b/tests/plugins/flexWrap.test.js
new file mode 100644
index 000000000..18cec54ad
--- /dev/null
+++ b/tests/plugins/flexWrap.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('flexWrap').toMatchSnapshot()
diff --git a/tests/plugins/float.test.js b/tests/plugins/float.test.js
new file mode 100644
index 000000000..607ff553d
--- /dev/null
+++ b/tests/plugins/float.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('float').toMatchSnapshot()
diff --git a/tests/plugins/fontFamily.test.js b/tests/plugins/fontFamily.test.js
index 1170dac8e..656dbe098 100644
--- a/tests/plugins/fontFamily.test.js
+++ b/tests/plugins/fontFamily.test.js
@@ -1,101 +1,101 @@
-import { crosscheck, run, html, css } from '../util/run'
+import { run, html, css, quickPluginTest } from '../util/run'
-crosscheck(() => {
- test('font-family utilities can be defined as a string', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- fontFamily: {
- sans: 'Helvetica, Arial, sans-serif',
- },
+quickPluginTest('fontFamily').toMatchSnapshot()
+
+test('font-family utilities can be defined as a string', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ fontFamily: {
+ sans: 'Helvetica, Arial, sans-serif',
},
- }
+ },
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .font-sans {
- font-family: Helvetica, Arial, sans-serif;
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .font-sans {
+ font-family: Helvetica, Arial, sans-serif;
+ }
+ `)
})
+})
- test('font-family utilities can be defined as an array', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- fontFamily: {
- sans: ['Helvetica', 'Arial', 'sans-serif'],
- },
+test('font-family utilities can be defined as an array', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ fontFamily: {
+ sans: ['Helvetica', 'Arial', 'sans-serif'],
},
- }
+ },
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .font-sans {
- font-family: Helvetica, Arial, sans-serif;
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .font-sans {
+ font-family: Helvetica, Arial, sans-serif;
+ }
+ `)
})
+})
- test('font-family values are not automatically escaped', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- fontFamily: {
- sans: ["'Exo 2'", 'sans-serif'],
- },
+test('font-family values are not automatically escaped', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ fontFamily: {
+ sans: ["'Exo 2'", 'sans-serif'],
},
- }
+ },
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .font-sans {
- font-family: 'Exo 2', sans-serif;
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .font-sans {
+ font-family: 'Exo 2', sans-serif;
+ }
+ `)
})
+})
- test('font-feature-settings can be provided when families are defined as a string', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- fontFamily: {
- sans: ['Helvetica, Arial, sans-serif', { fontFeatureSettings: '"cv11", "ss01"' }],
- },
+test('font-feature-settings can be provided when families are defined as a string', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ fontFamily: {
+ sans: ['Helvetica, Arial, sans-serif', { fontFeatureSettings: '"cv11", "ss01"' }],
},
- }
+ },
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .font-sans {
- font-feature-settings: 'cv11', 'ss01';
- font-family: Helvetica, Arial, sans-serif;
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .font-sans {
+ font-feature-settings: 'cv11', 'ss01';
+ font-family: Helvetica, Arial, sans-serif;
+ }
+ `)
})
+})
- test('font-feature-settings can be provided when families are defined as an array', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- fontFamily: {
- sans: [['Helvetica', 'Arial', 'sans-serif'], { fontFeatureSettings: '"cv11", "ss01"' }],
- },
+test('font-feature-settings can be provided when families are defined as an array', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ fontFamily: {
+ sans: [['Helvetica', 'Arial', 'sans-serif'], { fontFeatureSettings: '"cv11", "ss01"' }],
},
- }
+ },
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .font-sans {
- font-feature-settings: 'cv11', 'ss01';
- font-family: Helvetica, Arial, sans-serif;
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .font-sans {
+ font-feature-settings: 'cv11', 'ss01';
+ font-family: Helvetica, Arial, sans-serif;
+ }
+ `)
})
})
@@ -110,10 +110,10 @@ test('font-variation-settings can be provided when families are defined as a str
}
return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(`
+ expect(result.css).toMatchFormattedCss(css`
.font-sans {
+ font-variation-settings: 'opsz' 32;
font-family: Inter, sans-serif;
- font-variation-settings: "opsz" 32;
}
`)
})
@@ -130,10 +130,10 @@ test('font-variation-settings can be provided when families are defined as an ar
}
return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(`
+ expect(result.css).toMatchFormattedCss(css`
.font-sans {
+ font-variation-settings: 'opsz' 32;
font-family: Inter, sans-serif;
- font-variation-settings: "opsz" 32;
}
`)
})
diff --git a/tests/plugins/fontSize.test.js b/tests/plugins/fontSize.test.js
index 08e88bb76..9bca02f60 100644
--- a/tests/plugins/fontSize.test.js
+++ b/tests/plugins/fontSize.test.js
@@ -1,197 +1,197 @@
-import { crosscheck, run, html, css } from '../util/run'
+import { run, html, css, quickPluginTest } from '../util/run'
-crosscheck(() => {
- test('font-size utilities can include a default line-height', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- fontSize: {
- sm: '12px',
- md: ['16px', '24px'],
- lg: ['20px', '28px'],
- },
+quickPluginTest('fontSize').toMatchSnapshot()
+
+test('font-size utilities can include a default line-height', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ fontSize: {
+ sm: '12px',
+ md: ['16px', '24px'],
+ lg: ['20px', '28px'],
},
- }
+ },
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .text-lg {
- font-size: 20px;
- line-height: 28px;
- }
- .text-md {
- font-size: 16px;
- line-height: 24px;
- }
- .text-sm {
- font-size: 12px;
- }
- `)
- })
- })
-
- test('font-size utilities can include a default letter-spacing', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- fontSize: {
- sm: '12px',
- md: ['16px', { letterSpacing: '-0.01em' }],
- lg: ['20px', { letterSpacing: '-0.02em' }],
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .text-lg {
- letter-spacing: -0.02em;
- font-size: 20px;
- }
- .text-md {
- letter-spacing: -0.01em;
- font-size: 16px;
- }
- .text-sm {
- font-size: 12px;
- }
- `)
- })
- })
-
- test('font-size utilities can include a default line-height and letter-spacing', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- fontSize: {
- sm: '12px',
- md: ['16px', { lineHeight: '24px', letterSpacing: '-0.01em' }],
- lg: ['20px', { lineHeight: '28px', letterSpacing: '-0.02em' }],
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .text-lg {
- letter-spacing: -0.02em;
- font-size: 20px;
- line-height: 28px;
- }
- .text-md {
- letter-spacing: -0.01em;
- font-size: 16px;
- line-height: 24px;
- }
- .text-sm {
- font-size: 12px;
- }
- `)
- })
- })
-
- test('font-size utilities can include a font-weight', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- fontSize: {
- sm: '12px',
- md: ['16px', { lineHeight: '24px', fontWeight: 500 }],
- lg: ['20px', { lineHeight: '28px', fontWeight: 'bold' }],
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .text-lg {
- font-size: 20px;
- font-weight: bold;
- line-height: 28px;
- }
- .text-md {
- font-size: 16px;
- font-weight: 500;
- line-height: 24px;
- }
- .text-sm {
- font-size: 12px;
- }
- `)
- })
- })
-
- test('font-size utilities can include a line-height modifier', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- theme: {
- fontSize: {
- sm: ['12px', '20px'],
- base: ['16px', '24px'],
- },
- lineHeight: {
- 6: '24px',
- 7: '28px',
- 8: '32px',
- },
- },
- }
-
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchCss(css`
- .text-\[13px\]\/6 {
- font-size: 13px;
- line-height: 24px;
- }
- .text-\[17px\]\/\[23px\] {
- font-size: 17px;
- line-height: 23px;
- }
- .text-sm {
- font-size: 12px;
- line-height: 20px;
- }
- .text-sm\/6 {
- font-size: 12px;
- line-height: 24px;
- }
- .text-sm\/\[21px\] {
- font-size: 12px;
- line-height: 21px;
- }
- @media (min-width: 768px) {
- .md\:text-\[19px\]\/8 {
- font-size: 19px;
- line-height: 32px;
- }
- .md\:text-\[21px\]\/\[29px\] {
- font-size: 21px;
- line-height: 29px;
- }
- .md\:text-base {
- font-size: 16px;
- line-height: 24px;
- }
- .md\:text-base\/7 {
- font-size: 16px;
- line-height: 28px;
- }
- .md\:text-base\/\[33px\] {
- font-size: 16px;
- line-height: 33px;
- }
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .text-lg {
+ font-size: 20px;
+ line-height: 28px;
+ }
+ .text-md {
+ font-size: 16px;
+ line-height: 24px;
+ }
+ .text-sm {
+ font-size: 12px;
+ }
+ `)
+ })
+})
+
+test('font-size utilities can include a default letter-spacing', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ fontSize: {
+ sm: '12px',
+ md: ['16px', { letterSpacing: '-0.01em' }],
+ lg: ['20px', { letterSpacing: '-0.02em' }],
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .text-lg {
+ letter-spacing: -0.02em;
+ font-size: 20px;
+ }
+ .text-md {
+ letter-spacing: -0.01em;
+ font-size: 16px;
+ }
+ .text-sm {
+ font-size: 12px;
+ }
+ `)
+ })
+})
+
+test('font-size utilities can include a default line-height and letter-spacing', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ fontSize: {
+ sm: '12px',
+ md: ['16px', { lineHeight: '24px', letterSpacing: '-0.01em' }],
+ lg: ['20px', { lineHeight: '28px', letterSpacing: '-0.02em' }],
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .text-lg {
+ letter-spacing: -0.02em;
+ font-size: 20px;
+ line-height: 28px;
+ }
+ .text-md {
+ letter-spacing: -0.01em;
+ font-size: 16px;
+ line-height: 24px;
+ }
+ .text-sm {
+ font-size: 12px;
+ }
+ `)
+ })
+})
+
+test('font-size utilities can include a font-weight', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ fontSize: {
+ sm: '12px',
+ md: ['16px', { lineHeight: '24px', fontWeight: 500 }],
+ lg: ['20px', { lineHeight: '28px', fontWeight: 'bold' }],
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .text-lg {
+ font-size: 20px;
+ font-weight: bold;
+ line-height: 28px;
+ }
+ .text-md {
+ font-size: 16px;
+ font-weight: 500;
+ line-height: 24px;
+ }
+ .text-sm {
+ font-size: 12px;
+ }
+ `)
+ })
+})
+
+test('font-size utilities can include a line-height modifier', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ theme: {
+ fontSize: {
+ sm: ['12px', '20px'],
+ base: ['16px', '24px'],
+ },
+ lineHeight: {
+ 6: '24px',
+ 7: '28px',
+ 8: '32px',
+ },
+ },
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .text-\[13px\]\/6 {
+ font-size: 13px;
+ line-height: 24px;
+ }
+ .text-\[17px\]\/\[23px\] {
+ font-size: 17px;
+ line-height: 23px;
+ }
+ .text-sm {
+ font-size: 12px;
+ line-height: 20px;
+ }
+ .text-sm\/6 {
+ font-size: 12px;
+ line-height: 24px;
+ }
+ .text-sm\/\[21px\] {
+ font-size: 12px;
+ line-height: 21px;
+ }
+ @media (min-width: 768px) {
+ .md\:text-\[19px\]\/8 {
+ font-size: 19px;
+ line-height: 32px;
+ }
+ .md\:text-\[21px\]\/\[29px\] {
+ font-size: 21px;
+ line-height: 29px;
+ }
+ .md\:text-base {
+ font-size: 16px;
+ line-height: 24px;
+ }
+ .md\:text-base\/7 {
+ font-size: 16px;
+ line-height: 28px;
+ }
+ .md\:text-base\/\[33px\] {
+ font-size: 16px;
+ line-height: 33px;
+ }
+ }
+ `)
})
})
diff --git a/tests/plugins/fontSmoothing.test.js b/tests/plugins/fontSmoothing.test.js
new file mode 100644
index 000000000..47fe0cebb
--- /dev/null
+++ b/tests/plugins/fontSmoothing.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('fontSmoothing').toMatchSnapshot()
diff --git a/tests/plugins/fontStyle.test.js b/tests/plugins/fontStyle.test.js
new file mode 100644
index 000000000..7e83eb3e8
--- /dev/null
+++ b/tests/plugins/fontStyle.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('fontStyle').toMatchSnapshot()
diff --git a/tests/plugins/fontVariantNumeric.test.js b/tests/plugins/fontVariantNumeric.test.js
new file mode 100644
index 000000000..aad366a22
--- /dev/null
+++ b/tests/plugins/fontVariantNumeric.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('fontVariantNumeric').toMatchSnapshot()
diff --git a/tests/plugins/fontWeight.test.js b/tests/plugins/fontWeight.test.js
new file mode 100644
index 000000000..ebdf21ee2
--- /dev/null
+++ b/tests/plugins/fontWeight.test.js
@@ -0,0 +1,10 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('fontWeight', {
+ safelist: [
+ // Arbitrary values
+ 'font-[bold]',
+ 'font-[650]',
+ 'font-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/forcedColorAdjust.test.js b/tests/plugins/forcedColorAdjust.test.js
new file mode 100644
index 000000000..e8aa4d8ef
--- /dev/null
+++ b/tests/plugins/forcedColorAdjust.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('forcedColorAdjust').toMatchSnapshot()
diff --git a/tests/plugins/gap.test.js b/tests/plugins/gap.test.js
new file mode 100644
index 000000000..27afce099
--- /dev/null
+++ b/tests/plugins/gap.test.js
@@ -0,0 +1,14 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('gap', {
+ safelist: [
+ // Arbitrary values
+ 'gap-[12px]',
+ 'gap-[var(--my-value)]',
+
+ 'gap-x-[34px]',
+ 'gap-x-[var(--my-value)]',
+ 'gap-y-[56px]',
+ 'gap-y-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/gradientColorStops.test.js b/tests/plugins/gradientColorStops.test.js
index de79cc8fc..c9647d50f 100644
--- a/tests/plugins/gradientColorStops.test.js
+++ b/tests/plugins/gradientColorStops.test.js
@@ -1,191 +1,155 @@
-import { crosscheck, run, html, css } from '../util/run'
+import { run, html, css } from '../util/run'
-crosscheck(({ stable, oxide }) => {
- test('opacity variables are given to colors defined as closures', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- theme: {
- colors: {
- primary: ({ opacityVariable, opacityValue }) => {
- if (opacityValue !== undefined) {
- return `rgba(31,31,31,${opacityValue})`
- }
-
- if (opacityVariable !== undefined) {
- return `rgba(31,31,31,var(${opacityVariable},1))`
- }
-
- return `rgb(31,31,31)`
- },
- secondary: 'hsl(10, 50%, 50%)',
- },
- opacity: {
- 50: '0.5',
- },
+test('opacity variables are given to colors defined as closures', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
},
- }
+ ],
+ theme: {
+ colors: {
+ primary: ({ opacityVariable, opacityValue }) => {
+ if (opacityValue !== undefined) {
+ return `rgba(31,31,31,${opacityValue})`
+ }
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .from-primary {
- --tw-gradient-from: #1f1f1f var(--tw-gradient-from-position);
- --tw-gradient-to: #1f1f1f00 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
- }
- .from-secondary {
- --tw-gradient-from: #bf5540 var(--tw-gradient-from-position);
- --tw-gradient-to: #bf554000 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
- }
- .via-primary {
- --tw-gradient-to: #1f1f1f00 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), #1f1f1f var(--tw-gradient-via-position),
- var(--tw-gradient-to);
- }
- .via-secondary {
- --tw-gradient-to: #bf554000 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), #bf5540 var(--tw-gradient-via-position),
- var(--tw-gradient-to);
- }
- .to-primary {
- --tw-gradient-to: #1f1f1f var(--tw-gradient-to-position);
- }
- .to-secondary {
- --tw-gradient-to: #bf5540 var(--tw-gradient-to-position);
- }
- .text-primary {
- --tw-text-opacity: 1;
- color: rgba(31, 31, 31, var(--tw-text-opacity));
- }
- .text-secondary {
- --tw-text-opacity: 1;
- color: hsl(10 50% 50% / var(--tw-text-opacity));
- }
- .text-opacity-50 {
- --tw-text-opacity: 0.5;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .from-primary {
- --tw-gradient-from: #1f1f1f var(--tw-gradient-from-position);
- --tw-gradient-to: #1f1f1f00 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
- }
- .from-secondary {
- --tw-gradient-from: #bf5540 var(--tw-gradient-from-position);
- --tw-gradient-to: #bf554000 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
- }
- .via-primary {
- --tw-gradient-to: #1f1f1f00 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), #1f1f1f var(--tw-gradient-via-position),
- var(--tw-gradient-to);
- }
- .via-secondary {
- --tw-gradient-to: #bf554000 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), #bf5540 var(--tw-gradient-via-position),
- var(--tw-gradient-to);
- }
- .to-primary {
- --tw-gradient-to: #1f1f1f var(--tw-gradient-to-position);
- }
- .to-secondary {
- --tw-gradient-to: #bf5540 var(--tw-gradient-to-position);
- }
- .text-primary {
- color: #1f1f1f;
- }
- .text-secondary {
- color: #bf5540;
- }
- `)
- })
- })
+ if (opacityVariable !== undefined) {
+ return `rgba(31,31,31,var(${opacityVariable},1))`
+ }
- test('gradient color stop position', () => {
- let config = {
- content: [
- {
- raw: html`
-
- `,
+ return `rgb(31,31,31)`
},
- ],
- theme: {},
- }
+ secondary: 'hsl(10, 50%, 50%)',
+ },
+ opacity: {
+ 50: '0.5',
+ },
+ },
+ }
- return run('@tailwind utilities', config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .bg-gradient-to-r {
- background-image: linear-gradient(to right, var(--tw-gradient-stops));
- }
- .from-\[--from-value\] {
- --tw-gradient-from: var(--from-value) var(--tw-gradient-from-position);
- --tw-gradient-to: #fff0 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
- }
- .from-red-500 {
- --tw-gradient-from: #ef4444 var(--tw-gradient-from-position);
- --tw-gradient-to: #ef444400 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
- }
- .from-10\% {
- --tw-gradient-from-position: 10%;
- }
- .from-\[11\%\] {
- --tw-gradient-from-position: 11%;
- }
- .from-\[12px\] {
- --tw-gradient-from-position: 12px;
- }
- .via-\[--via-value\] {
- --tw-gradient-to: #fff0 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from),
- var(--via-value) var(--tw-gradient-via-position), var(--tw-gradient-to);
- }
- .via-pink-500 {
- --tw-gradient-to: #ec489900 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), #ec4899 var(--tw-gradient-via-position),
- var(--tw-gradient-to);
- }
- .via-20\% {
- --tw-gradient-via-position: 20%;
- }
- .via-\[12\%\] {
- --tw-gradient-via-position: 12%;
- }
- .via-\[123px\] {
- --tw-gradient-via-position: 123px;
- }
- .to-\[--to-value\] {
- --tw-gradient-to: var(--to-value) var(--tw-gradient-to-position);
- }
- .to-violet-400 {
- --tw-gradient-to: #a78bfa var(--tw-gradient-to-position);
- }
- .to-30\% {
- --tw-gradient-to-position: 30%;
- }
- .to-\[13\%\] {
- --tw-gradient-to-position: 13%;
- }
- .to-\[14px\] {
- --tw-gradient-to-position: 14px;
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .from-primary {
+ --tw-gradient-from: #1f1f1f var(--tw-gradient-from-position);
+ --tw-gradient-to: #1f1f1f00 var(--tw-gradient-to-position);
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+ }
+ .from-secondary {
+ --tw-gradient-from: #bf5540 var(--tw-gradient-from-position);
+ --tw-gradient-to: #bf554000 var(--tw-gradient-to-position);
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+ }
+ .via-primary {
+ --tw-gradient-to: #1f1f1f00 var(--tw-gradient-to-position);
+ --tw-gradient-stops: var(--tw-gradient-from), #1f1f1f var(--tw-gradient-via-position),
+ var(--tw-gradient-to);
+ }
+ .via-secondary {
+ --tw-gradient-to: #bf554000 var(--tw-gradient-to-position);
+ --tw-gradient-stops: var(--tw-gradient-from), #bf5540 var(--tw-gradient-via-position),
+ var(--tw-gradient-to);
+ }
+ .to-primary {
+ --tw-gradient-to: #1f1f1f var(--tw-gradient-to-position);
+ }
+ .to-secondary {
+ --tw-gradient-to: #bf5540 var(--tw-gradient-to-position);
+ }
+ .text-primary {
+ --tw-text-opacity: 1;
+ color: rgba(31, 31, 31, var(--tw-text-opacity));
+ }
+ .text-secondary {
+ --tw-text-opacity: 1;
+ color: hsl(10 50% 50% / var(--tw-text-opacity));
+ }
+ .text-opacity-50 {
+ --tw-text-opacity: 0.5;
+ }
+ `)
+ })
+})
+
+test('gradient color stop position', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+ `,
+ },
+ ],
+ theme: {},
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-gradient-to-r {
+ background-image: linear-gradient(to right, var(--tw-gradient-stops));
+ }
+ .from-\[--from-value\] {
+ --tw-gradient-from: var(--from-value) var(--tw-gradient-from-position);
+ --tw-gradient-to: #fff0 var(--tw-gradient-to-position);
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+ }
+ .from-red-500 {
+ --tw-gradient-from: #ef4444 var(--tw-gradient-from-position);
+ --tw-gradient-to: #ef444400 var(--tw-gradient-to-position);
+ --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+ }
+ .from-10\% {
+ --tw-gradient-from-position: 10%;
+ }
+ .from-\[11\%\] {
+ --tw-gradient-from-position: 11%;
+ }
+ .from-\[12px\] {
+ --tw-gradient-from-position: 12px;
+ }
+ .via-\[--via-value\] {
+ --tw-gradient-to: #fff0 var(--tw-gradient-to-position);
+ --tw-gradient-stops: var(--tw-gradient-from),
+ var(--via-value) var(--tw-gradient-via-position), var(--tw-gradient-to);
+ }
+ .via-pink-500 {
+ --tw-gradient-to: #ec489900 var(--tw-gradient-to-position);
+ --tw-gradient-stops: var(--tw-gradient-from), #ec4899 var(--tw-gradient-via-position),
+ var(--tw-gradient-to);
+ }
+ .via-20\% {
+ --tw-gradient-via-position: 20%;
+ }
+ .via-\[12\%\] {
+ --tw-gradient-via-position: 12%;
+ }
+ .via-\[123px\] {
+ --tw-gradient-via-position: 123px;
+ }
+ .to-\[--to-value\] {
+ --tw-gradient-to: var(--to-value) var(--tw-gradient-to-position);
+ }
+ .to-violet-400 {
+ --tw-gradient-to: #a78bfa var(--tw-gradient-to-position);
+ }
+ .to-30\% {
+ --tw-gradient-to-position: 30%;
+ }
+ .to-\[13\%\] {
+ --tw-gradient-to-position: 13%;
+ }
+ .to-\[14px\] {
+ --tw-gradient-to-position: 14px;
+ }
+ `)
})
})
diff --git a/tests/plugins/grayscale.test.js b/tests/plugins/grayscale.test.js
new file mode 100644
index 000000000..e06a42547
--- /dev/null
+++ b/tests/plugins/grayscale.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('grayscale', {
+ safelist: [
+ // Arbitrary values
+ 'grayscale-[50%]',
+ 'grayscale-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/gridAutoColumns.test.js b/tests/plugins/gridAutoColumns.test.js
new file mode 100644
index 000000000..242d60313
--- /dev/null
+++ b/tests/plugins/gridAutoColumns.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('gridAutoColumns', {
+ safelist: [
+ // Arbitrary values
+ 'auto-cols-[12px]',
+ 'auto-cols-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/gridAutoFlow.test.js b/tests/plugins/gridAutoFlow.test.js
new file mode 100644
index 000000000..835f73c37
--- /dev/null
+++ b/tests/plugins/gridAutoFlow.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('gridAutoFlow').toMatchSnapshot()
diff --git a/tests/plugins/gridAutoRows.test.js b/tests/plugins/gridAutoRows.test.js
new file mode 100644
index 000000000..744b132be
--- /dev/null
+++ b/tests/plugins/gridAutoRows.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('gridAutoRows', {
+ safelist: [
+ // Arbitrary values
+ 'auto-rows-[12px]',
+ 'auto-rows-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/gridColumn.test.js b/tests/plugins/gridColumn.test.js
new file mode 100644
index 000000000..e2e3314d4
--- /dev/null
+++ b/tests/plugins/gridColumn.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('gridColumn', {
+ safelist: [
+ // Arbitrary values
+ 'col-[span_1_/_span_1]',
+ 'col-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/gridColumnEnd.test.js b/tests/plugins/gridColumnEnd.test.js
new file mode 100644
index 000000000..a24bd212f
--- /dev/null
+++ b/tests/plugins/gridColumnEnd.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('gridColumnEnd', {
+ safelist: [
+ // Arbitrary avlues
+ 'col-end-[123]',
+ 'col-end-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/gridColumnStart.test.js b/tests/plugins/gridColumnStart.test.js
new file mode 100644
index 000000000..ddd13bd5e
--- /dev/null
+++ b/tests/plugins/gridColumnStart.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('gridColumnStart', {
+ safelist: [
+ // Arbitrary values
+ 'col-start-[123]',
+ 'col-start-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/gridRow.test.js b/tests/plugins/gridRow.test.js
new file mode 100644
index 000000000..a236817cd
--- /dev/null
+++ b/tests/plugins/gridRow.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('gridRow', {
+ safelist: [
+ // Arbitrary values
+ 'row-[span_1_/_span_1]',
+ 'row-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/gridRowEnd.test.js b/tests/plugins/gridRowEnd.test.js
new file mode 100644
index 000000000..45a19beb3
--- /dev/null
+++ b/tests/plugins/gridRowEnd.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('gridRowEnd', {
+ safelist: [
+ // Arbitrary values
+ 'row-end-[123]',
+ 'row-end-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/gridRowStart.test.js b/tests/plugins/gridRowStart.test.js
new file mode 100644
index 000000000..ca7c2e94b
--- /dev/null
+++ b/tests/plugins/gridRowStart.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('gridRowStart', {
+ safelist: [
+ // Arbitrary values
+ 'row-start-[123]',
+ 'row-start-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/gridTemplateColumns.test.js b/tests/plugins/gridTemplateColumns.test.js
new file mode 100644
index 000000000..7b3848f5c
--- /dev/null
+++ b/tests/plugins/gridTemplateColumns.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('gridTemplateColumns', {
+ safelist: [
+ // Arbitrary values
+ 'grid-cols-[12]',
+ 'grid-cols-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/gridTemplateRows.test.js b/tests/plugins/gridTemplateRows.test.js
new file mode 100644
index 000000000..7a20ac454
--- /dev/null
+++ b/tests/plugins/gridTemplateRows.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('gridTemplateRows', {
+ safelist: [
+ // Arbitrary values
+ 'grid-rows-[12]',
+ 'grid-rows-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/height.test.js b/tests/plugins/height.test.js
new file mode 100644
index 000000000..a9cba7529
--- /dev/null
+++ b/tests/plugins/height.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('height', {
+ safelist: [
+ // Arbitrary values
+ 'h-[12px]',
+ 'h-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/hueRotate.test.js b/tests/plugins/hueRotate.test.js
new file mode 100644
index 000000000..8afc61eff
--- /dev/null
+++ b/tests/plugins/hueRotate.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('hueRotate', {
+ safelist: [
+ // Arbitrary values
+ 'hue-rotate-[12deg]',
+ 'hue-rotate-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/hyphens.test.js b/tests/plugins/hyphens.test.js
new file mode 100644
index 000000000..47ab26e92
--- /dev/null
+++ b/tests/plugins/hyphens.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('hyphens').toMatchSnapshot()
diff --git a/tests/plugins/index.test.js b/tests/plugins/index.test.js
new file mode 100644
index 000000000..e6c69250e
--- /dev/null
+++ b/tests/plugins/index.test.js
@@ -0,0 +1,34 @@
+import fs from 'fs'
+import path from 'path'
+import { corePlugins } from '../../src/corePlugins'
+
+test('all core plugins have a dedicated test file', async () => {
+ let currentFile = path.basename(__filename)
+
+ let corePluginList = Object.keys(corePlugins).sort((a, z) => a.localeCompare(z))
+ let testedPluginList = (
+ await fs.promises.readdir(path.resolve(__dirname, './'), {
+ withFileTypes: true,
+ })
+ )
+ .filter(
+ (dirent) => dirent.isFile() && dirent.name.endsWith('.test.js') && dirent.name !== currentFile
+ )
+ .map((dirent) => dirent.name.slice(0, dirent.name.indexOf('.')))
+ .sort((a, z) => a.localeCompare(z))
+
+ let missingTests = corePluginList.filter((plugin) => !testedPluginList.includes(plugin))
+ let additionalTests = testedPluginList.filter((plugin) => !corePluginList.includes(plugin))
+
+ if (missingTests.length > 0 || additionalTests.length > 0) {
+ throw new Error(
+ `The following \`corePlugins\` are not covered by tests in the \`./tests/plugins/\` folder:\n${
+ missingTests.map((x) => `\t- ${x}`).join('\n') || '\t- None'
+ }\n\nAdditional tests found that don't correspond to any of the \`corePlugins\`:\n${
+ additionalTests.map((x) => `\t- ${x}`).join('\n') || '\t- None'
+ }\n\nCovered: ${testedPluginList.length - additionalTests.length}/${
+ corePluginList.length
+ }, missing: ${missingTests.length}`
+ )
+ }
+})
diff --git a/tests/plugins/inset.test.js b/tests/plugins/inset.test.js
new file mode 100644
index 000000000..b081c4a26
--- /dev/null
+++ b/tests/plugins/inset.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('inset', {
+ safelist: [
+ // Arbitrary values
+ 'inset-[12px]',
+ 'inset-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/invert.test.js b/tests/plugins/invert.test.js
new file mode 100644
index 000000000..727d8d02f
--- /dev/null
+++ b/tests/plugins/invert.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('invert', {
+ safelist: [
+ // Arbitrary values
+ 'invert-[50%]',
+ 'invert-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/isolation.test.js b/tests/plugins/isolation.test.js
new file mode 100644
index 000000000..b20a4e67c
--- /dev/null
+++ b/tests/plugins/isolation.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('isolation').toMatchSnapshot()
diff --git a/tests/plugins/justifyContent.test.js b/tests/plugins/justifyContent.test.js
new file mode 100644
index 000000000..173ba6f41
--- /dev/null
+++ b/tests/plugins/justifyContent.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('justifyContent').toMatchSnapshot()
diff --git a/tests/plugins/justifyItems.test.js b/tests/plugins/justifyItems.test.js
new file mode 100644
index 000000000..b54cf2114
--- /dev/null
+++ b/tests/plugins/justifyItems.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('justifyItems').toMatchSnapshot()
diff --git a/tests/plugins/justifySelf.test.js b/tests/plugins/justifySelf.test.js
new file mode 100644
index 000000000..4a33a96b0
--- /dev/null
+++ b/tests/plugins/justifySelf.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('justifySelf').toMatchSnapshot()
diff --git a/tests/plugins/letterSpacing.test.js b/tests/plugins/letterSpacing.test.js
new file mode 100644
index 000000000..209360c30
--- /dev/null
+++ b/tests/plugins/letterSpacing.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('letterSpacing', {
+ safelist: [
+ // Arbitrary values
+ 'tracking-[12px]',
+ 'tracking-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/lineClamp.test.js b/tests/plugins/lineClamp.test.js
new file mode 100644
index 000000000..07b33dc03
--- /dev/null
+++ b/tests/plugins/lineClamp.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('lineClamp', {
+ safelist: [
+ // Arbitrary values
+ 'line-clamp-[12px]',
+ 'line-clamp-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/lineHeight.test.js b/tests/plugins/lineHeight.test.js
new file mode 100644
index 000000000..56909f19d
--- /dev/null
+++ b/tests/plugins/lineHeight.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('lineHeight', {
+ safelist: [
+ // Arbitrary values
+ 'leading-[12px]',
+ 'leading-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/listStyleImage.test.js b/tests/plugins/listStyleImage.test.js
new file mode 100644
index 000000000..0ed92a0cb
--- /dev/null
+++ b/tests/plugins/listStyleImage.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('listStyleImage', {
+ safelist: [
+ // Arbitrary values
+ 'list-image-[url(https://example.com/image.png)]',
+ 'list-image-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/listStylePosition.test.js b/tests/plugins/listStylePosition.test.js
new file mode 100644
index 000000000..14a77554f
--- /dev/null
+++ b/tests/plugins/listStylePosition.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('listStylePosition').toMatchSnapshot()
diff --git a/tests/plugins/listStyleType.test.js b/tests/plugins/listStyleType.test.js
new file mode 100644
index 000000000..8d69d22ed
--- /dev/null
+++ b/tests/plugins/listStyleType.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('listStyleType', {
+ safelist: [
+ // Arbitrary values
+ 'list-[cube]',
+ 'list-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/margin.test.js b/tests/plugins/margin.test.js
new file mode 100644
index 000000000..50e158f14
--- /dev/null
+++ b/tests/plugins/margin.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('margin', {
+ safelist: [
+ // Arbitrary values
+ 'm-[12px]',
+ 'm-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/maxHeight.test.js b/tests/plugins/maxHeight.test.js
new file mode 100644
index 000000000..dbf30d4d6
--- /dev/null
+++ b/tests/plugins/maxHeight.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('maxHeight', {
+ safelist: [
+ // Arbitrary values
+ 'max-h-[12px]',
+ 'max-h-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/maxWidth.test.js b/tests/plugins/maxWidth.test.js
new file mode 100644
index 000000000..0215021c7
--- /dev/null
+++ b/tests/plugins/maxWidth.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('maxWidth', {
+ safelist: [
+ // Arbitrary values
+ 'max-w-[12px]',
+ 'max-w-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/minHeight.test.js b/tests/plugins/minHeight.test.js
new file mode 100644
index 000000000..eccd55139
--- /dev/null
+++ b/tests/plugins/minHeight.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('minHeight', {
+ safelist: [
+ // Arbitrary values
+ 'min-h-[12px]',
+ 'min-h-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/minWidth.test.js b/tests/plugins/minWidth.test.js
new file mode 100644
index 000000000..6bbbf3b5b
--- /dev/null
+++ b/tests/plugins/minWidth.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('minWidth', {
+ safelist: [
+ // Arbitrary values
+ 'min-w-[12px]',
+ 'min-w-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/mixBlendMode.test.js b/tests/plugins/mixBlendMode.test.js
new file mode 100644
index 000000000..113a40370
--- /dev/null
+++ b/tests/plugins/mixBlendMode.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('mixBlendMode').toMatchSnapshot()
diff --git a/tests/plugins/objectFit.test.js b/tests/plugins/objectFit.test.js
new file mode 100644
index 000000000..69fe9c79c
--- /dev/null
+++ b/tests/plugins/objectFit.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('objectFit').toMatchSnapshot()
diff --git a/tests/plugins/objectPosition.test.js b/tests/plugins/objectPosition.test.js
new file mode 100644
index 000000000..ae39ffe09
--- /dev/null
+++ b/tests/plugins/objectPosition.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('objectPosition', {
+ safelist: [
+ // Arbitrary values
+ 'object-[top,center]',
+ 'object-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/opacity.test.js b/tests/plugins/opacity.test.js
new file mode 100644
index 000000000..2c9ac26c9
--- /dev/null
+++ b/tests/plugins/opacity.test.js
@@ -0,0 +1,15 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('opacity', {
+ safelist: [
+ // Arbitrary values
+ 'opacity-[12%]',
+ 'opacity-[var(--my-value)]',
+ ],
+ theme: {
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/order.test.js b/tests/plugins/order.test.js
new file mode 100644
index 000000000..df44cc1d8
--- /dev/null
+++ b/tests/plugins/order.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('order', {
+ safelist: [
+ // Arbitrary values
+ 'order-[13]',
+ 'order-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/outlineColor.test.js b/tests/plugins/outlineColor.test.js
new file mode 100644
index 000000000..fcef5e6c6
--- /dev/null
+++ b/tests/plugins/outlineColor.test.js
@@ -0,0 +1,23 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('outlineColor', {
+ safelist: [
+ // Arbitrary values
+ 'outline-[#0088cc]',
+ 'outline-[var(--my-value)]',
+ ],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/outlineOffset.test.js b/tests/plugins/outlineOffset.test.js
new file mode 100644
index 000000000..bf6a9b985
--- /dev/null
+++ b/tests/plugins/outlineOffset.test.js
@@ -0,0 +1,11 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('outlineOffset', {
+ safelist: [
+ // Arbitrary values
+ 'outline-offset-[12px]',
+ 'outline-offset-[34%]',
+ 'outline-offset-[56]',
+ 'outline-offset-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/outlineStyle.test.js b/tests/plugins/outlineStyle.test.js
new file mode 100644
index 000000000..31c1eb33b
--- /dev/null
+++ b/tests/plugins/outlineStyle.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('outlineStyle').toMatchSnapshot()
diff --git a/tests/plugins/outlineWidth.test.js b/tests/plugins/outlineWidth.test.js
new file mode 100644
index 000000000..6263131e8
--- /dev/null
+++ b/tests/plugins/outlineWidth.test.js
@@ -0,0 +1,10 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('outlineWidth', {
+ safelist: [
+ // Arbitrary values
+ 'outline-[12px]',
+ 'outline-[34%]',
+ 'outline-[56]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/overflow.test.js b/tests/plugins/overflow.test.js
new file mode 100644
index 000000000..65ba53c3d
--- /dev/null
+++ b/tests/plugins/overflow.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('overflow').toMatchSnapshot()
diff --git a/tests/plugins/overscrollBehavior.test.js b/tests/plugins/overscrollBehavior.test.js
new file mode 100644
index 000000000..1d658772b
--- /dev/null
+++ b/tests/plugins/overscrollBehavior.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('overscrollBehavior').toMatchSnapshot()
diff --git a/tests/plugins/padding.test.js b/tests/plugins/padding.test.js
new file mode 100644
index 000000000..2c6baa8d5
--- /dev/null
+++ b/tests/plugins/padding.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('padding', {
+ safelist: [
+ // Arbitrary values
+ 'p-[12px]',
+ 'p-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/placeContent.test.js b/tests/plugins/placeContent.test.js
new file mode 100644
index 000000000..e7988d036
--- /dev/null
+++ b/tests/plugins/placeContent.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('placeContent').toMatchSnapshot()
diff --git a/tests/plugins/placeItems.test.js b/tests/plugins/placeItems.test.js
new file mode 100644
index 000000000..3d75c22cd
--- /dev/null
+++ b/tests/plugins/placeItems.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('placeItems').toMatchSnapshot()
diff --git a/tests/plugins/placeSelf.test.js b/tests/plugins/placeSelf.test.js
new file mode 100644
index 000000000..139cb4a50
--- /dev/null
+++ b/tests/plugins/placeSelf.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('placeSelf').toMatchSnapshot()
diff --git a/tests/plugins/placeholderColor.test.js b/tests/plugins/placeholderColor.test.js
new file mode 100644
index 000000000..ddc9c19fd
--- /dev/null
+++ b/tests/plugins/placeholderColor.test.js
@@ -0,0 +1,43 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('placeholderColor', {
+ safelist: [
+ // Arbitrary values
+ 'placeholder-[#0088cc]',
+ 'placeholder-[var(--my-value)]',
+ ],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ },
+}).toMatchSnapshot()
+
+// With `placeholderOpacity` enabled
+quickPluginTest('placeholderColor', {
+ safelist: [
+ // Arbitrary values
+ 'placeholder-[#0088cc]',
+ 'placeholder-[var(--my-value)]',
+ ],
+ corePlugins: ['placeholderOpacity'],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/placeholderOpacity.test.js b/tests/plugins/placeholderOpacity.test.js
new file mode 100644
index 000000000..58f4166dd
--- /dev/null
+++ b/tests/plugins/placeholderOpacity.test.js
@@ -0,0 +1,15 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('placeholderOpacity', {
+ safelist: [
+ // Arbitrary values
+ 'placeholder-opacity-[0.12]',
+ 'placeholder-opacity-[var(--my-value)]',
+ ],
+ theme: {
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/pointerEvents.test.js b/tests/plugins/pointerEvents.test.js
new file mode 100644
index 000000000..0cbd78c79
--- /dev/null
+++ b/tests/plugins/pointerEvents.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('pointerEvents').toMatchSnapshot()
diff --git a/tests/plugins/position.test.js b/tests/plugins/position.test.js
new file mode 100644
index 000000000..e733c9973
--- /dev/null
+++ b/tests/plugins/position.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('position').toMatchSnapshot()
diff --git a/tests/plugins/preflight.test.js b/tests/plugins/preflight.test.js
new file mode 100644
index 000000000..96963a6e1
--- /dev/null
+++ b/tests/plugins/preflight.test.js
@@ -0,0 +1,13 @@
+import { quickPluginTest } from '../util/run'
+
+// Default `preflight` output
+quickPluginTest('preflight').toMatchSnapshot()
+
+// Lightning CSS optimizes this to just `border-color: 0 solid;` because `currentcolor` is the default user-agent stylesheet value.
+// https://drafts.csswg.org/css-backgrounds/#border-color
+quickPluginTest('preflight', {
+ safelist: ['border-black'],
+ theme: {
+ borderColor: ({ theme }) => theme('colors'),
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/resize.test.js b/tests/plugins/resize.test.js
new file mode 100644
index 000000000..c80faeb6a
--- /dev/null
+++ b/tests/plugins/resize.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('resize').toMatchSnapshot()
diff --git a/tests/plugins/ringColor.test.js b/tests/plugins/ringColor.test.js
new file mode 100644
index 000000000..046705949
--- /dev/null
+++ b/tests/plugins/ringColor.test.js
@@ -0,0 +1,43 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('ringColor', {
+ safelist: [
+ // Arbitrary values
+ 'ring-[#0088cc]',
+ 'ring-[var(--my-value)]',
+ ],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ },
+}).toMatchSnapshot()
+
+// With `ringOpacity` plugin enabled
+quickPluginTest('ringColor', {
+ safelist: [
+ // Arbitrary values
+ 'ring-[#0088cc]',
+ 'ring-[var(--my-value)]',
+ ],
+ corePlugins: ['ringOpacity'],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/ringOffsetColor.test.js b/tests/plugins/ringOffsetColor.test.js
new file mode 100644
index 000000000..d6d1dc659
--- /dev/null
+++ b/tests/plugins/ringOffsetColor.test.js
@@ -0,0 +1,22 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('ringOffsetColor', {
+ safelist: [
+ // Arbitrary values
+ 'ring-offset-[#0088cc]',
+ ],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/ringOffsetWidth.test.js b/tests/plugins/ringOffsetWidth.test.js
new file mode 100644
index 000000000..c6c9d2811
--- /dev/null
+++ b/tests/plugins/ringOffsetWidth.test.js
@@ -0,0 +1,8 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('ringOffsetWidth', {
+ safelist: [
+ // Arbitrary values
+ 'ring-offset-[12px]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/ringOpacity.test.js b/tests/plugins/ringOpacity.test.js
new file mode 100644
index 000000000..0045d3d88
--- /dev/null
+++ b/tests/plugins/ringOpacity.test.js
@@ -0,0 +1,33 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('ringOpacity', {
+ safelist: [
+ // Arbitrary values
+ 'ring-opacity-[0.12]',
+ 'ring-opacity-[var(--my-value)]',
+ ],
+ theme: {
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
+
+// With `respectDefaultRingColorOpacity` enabled
+quickPluginTest('ringOpacity', {
+ safelist: [
+ // Arbitrary values
+ 'ring-opacity-[0.12]',
+ 'ring-opacity-[var(--my-value)]',
+ ],
+ future: {
+ respectDefaultRingColorOpacity: true,
+ },
+ theme: {
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/ringWidth.test.js b/tests/plugins/ringWidth.test.js
new file mode 100644
index 000000000..1044e74bd
--- /dev/null
+++ b/tests/plugins/ringWidth.test.js
@@ -0,0 +1,41 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('ringWidth', {
+ safelist: [
+ // Arbitrary values
+ 'ring-[12px]',
+ 'ring-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
+
+// With `respectDefaultRingColorOpacity` enabled
+quickPluginTest('ringWidth', {
+ safelist: [
+ // Arbitrary values
+ 'ring-[12px]',
+ 'ring-[var(--my-value)]',
+ ],
+ future: {
+ respectDefaultRingColorOpacity: true,
+ },
+}).toMatchSnapshot()
+
+// With `respectDefaultRingColorOpacity` enabled and a DEFAULT ring opacity
+quickPluginTest('ringWidth', {
+ safelist: [
+ // Arbitrary values
+ 'ring-[12px]',
+ 'ring-[var(--my-value)]',
+ ],
+ theme: {
+ extend: {
+ ringOpacity: {
+ DEFAULT: '0.12',
+ },
+ },
+ },
+ future: {
+ respectDefaultRingColorOpacity: true,
+ },
+ corePlugins: ['ringOpacity'],
+}).toMatchSnapshot()
diff --git a/tests/plugins/rotate.test.js b/tests/plugins/rotate.test.js
new file mode 100644
index 000000000..2311d5d97
--- /dev/null
+++ b/tests/plugins/rotate.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('rotate', {
+ safelist: [
+ // Arbitrary values
+ 'rotate-[12deg]',
+ 'rotate-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/saturate.test.js b/tests/plugins/saturate.test.js
new file mode 100644
index 000000000..9b7bfba3e
--- /dev/null
+++ b/tests/plugins/saturate.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('saturate', {
+ safelist: [
+ // Arbitrary values
+ 'saturate-[0.12]',
+ 'saturate-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/scale.test.js b/tests/plugins/scale.test.js
new file mode 100644
index 000000000..c8c88b6f4
--- /dev/null
+++ b/tests/plugins/scale.test.js
@@ -0,0 +1,15 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('scale', {
+ safelist: [
+ // Arbitrary values
+ 'scale-[12px]',
+ 'scale-[var(--my-value)]',
+
+ 'scale-x-[23px]',
+ 'scale-x-[var(--my-value)]',
+
+ 'scale-y-[34px]',
+ 'scale-y-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/scrollBehavior.test.js b/tests/plugins/scrollBehavior.test.js
new file mode 100644
index 000000000..39c21b19f
--- /dev/null
+++ b/tests/plugins/scrollBehavior.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('scrollBehavior').toMatchSnapshot()
diff --git a/tests/plugins/scrollMargin.test.js b/tests/plugins/scrollMargin.test.js
new file mode 100644
index 000000000..3de9b1c94
--- /dev/null
+++ b/tests/plugins/scrollMargin.test.js
@@ -0,0 +1,27 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('scrollMargin', {
+ safelist: [
+ // Arbitrary values
+ 'scroll-m-[12px]',
+ 'scroll-m-[var(--my-value)]',
+
+ 'scroll-mx-[23px]',
+ 'scroll-mx-[var(--my-value)]',
+ 'scroll-my-[34px]',
+ 'scroll-my-[var(--my-value)]',
+
+ 'scroll-ms-[45px]',
+ 'scroll-ms-[var(--my-value)]',
+ 'scroll-me-[56px]',
+ 'scroll-me-[var(--my-value)]',
+ 'scroll-mt-[67px]',
+ 'scroll-mt-[var(--my-value)]',
+ 'scroll-mr-[78px]',
+ 'scroll-mr-[var(--my-value)]',
+ 'scroll-mb-[89px]',
+ 'scroll-mb-[var(--my-value)]',
+ 'scroll-ml-[90px]',
+ 'scroll-ml-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/scrollPadding.test.js b/tests/plugins/scrollPadding.test.js
new file mode 100644
index 000000000..7080bad22
--- /dev/null
+++ b/tests/plugins/scrollPadding.test.js
@@ -0,0 +1,27 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('scrollPadding', {
+ safelist: [
+ // Arbitrary values
+ 'scroll-p-[12px]',
+ 'scroll-p-[var(--my-value)]',
+
+ 'scroll-px-[23px]',
+ 'scroll-px-[var(--my-value)]',
+ 'scroll-py-[34px]',
+ 'scroll-py-[var(--my-value)]',
+
+ 'scroll-ps-[45px]',
+ 'scroll-ps-[var(--my-value)]',
+ 'scroll-pe-[56px]',
+ 'scroll-pe-[var(--my-value)]',
+ 'scroll-pt-[67px]',
+ 'scroll-pt-[var(--my-value)]',
+ 'scroll-pr-[78px]',
+ 'scroll-pr-[var(--my-value)]',
+ 'scroll-pb-[89px]',
+ 'scroll-pb-[var(--my-value)]',
+ 'scroll-pl-[90px]',
+ 'scroll-pl-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/scrollSnapAlign.test.js b/tests/plugins/scrollSnapAlign.test.js
new file mode 100644
index 000000000..4ef9b7897
--- /dev/null
+++ b/tests/plugins/scrollSnapAlign.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('scrollSnapAlign').toMatchSnapshot()
diff --git a/tests/plugins/scrollSnapStop.test.js b/tests/plugins/scrollSnapStop.test.js
new file mode 100644
index 000000000..9612acd3f
--- /dev/null
+++ b/tests/plugins/scrollSnapStop.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('scrollSnapStop').toMatchSnapshot()
diff --git a/tests/plugins/scrollSnapType.test.js b/tests/plugins/scrollSnapType.test.js
new file mode 100644
index 000000000..39dc524a0
--- /dev/null
+++ b/tests/plugins/scrollSnapType.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('scrollSnapType').toMatchSnapshot()
diff --git a/tests/plugins/sepia.test.js b/tests/plugins/sepia.test.js
new file mode 100644
index 000000000..470188386
--- /dev/null
+++ b/tests/plugins/sepia.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('sepia', {
+ safelist: [
+ // Arbitrary values
+ 'sepia-[50%]',
+ 'sepia-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/size.test.js b/tests/plugins/size.test.js
new file mode 100644
index 000000000..080bc2f8c
--- /dev/null
+++ b/tests/plugins/size.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('size', {
+ safelist: [
+ // Arbitrary values
+ 'size-[12px]',
+ 'size-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/skew.test.js b/tests/plugins/skew.test.js
new file mode 100644
index 000000000..1dd64a3c4
--- /dev/null
+++ b/tests/plugins/skew.test.js
@@ -0,0 +1,11 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('skew', {
+ safelist: [
+ // Arbitrary values
+ 'skew-x-[12px]',
+ 'skew-x-[var(--my-value)]',
+ 'skew-y-[34px]',
+ 'skew-y-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/space.test.js b/tests/plugins/space.test.js
new file mode 100644
index 000000000..ebee22a29
--- /dev/null
+++ b/tests/plugins/space.test.js
@@ -0,0 +1,29 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('space', {
+ safelist: [
+ // Arbitrary values
+ 'space-x-[0]',
+ 'space-x-[12px]',
+ 'space-x-[var(--my-value)]',
+ 'space-y-[0]',
+ 'space-y-[34px]',
+ 'space-y-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
+
+// With `logicalSiblingUtilities` enabled
+quickPluginTest('space', {
+ safelist: [
+ // Arbitrary values
+ 'space-x-[0]',
+ 'space-x-[12px]',
+ 'space-x-[var(--my-value)]',
+ 'space-y-[0]',
+ 'space-y-[34px]',
+ 'space-y-[var(--my-value)]',
+ ],
+ future: {
+ logicalSiblingUtilities: true,
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/stroke.test.js b/tests/plugins/stroke.test.js
new file mode 100644
index 000000000..1fb3eb74c
--- /dev/null
+++ b/tests/plugins/stroke.test.js
@@ -0,0 +1,23 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('stroke', {
+ safelist: [
+ // Arbitrary values
+ 'stroke-[#0088cc]',
+ 'stroke-[var(--my-value)]',
+ ],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/strokeWidth.test.js b/tests/plugins/strokeWidth.test.js
new file mode 100644
index 000000000..36f3aa17e
--- /dev/null
+++ b/tests/plugins/strokeWidth.test.js
@@ -0,0 +1,10 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('strokeWidth', {
+ safelist: [
+ // Arbitrary values
+ 'stroke-[12px]',
+ 'stroke-[34%]',
+ 'stroke-[56]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/tableLayout.test.js b/tests/plugins/tableLayout.test.js
new file mode 100644
index 000000000..606ac1071
--- /dev/null
+++ b/tests/plugins/tableLayout.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('tableLayout').toMatchSnapshot()
diff --git a/tests/plugins/textAlign.test.js b/tests/plugins/textAlign.test.js
new file mode 100644
index 000000000..738fbae55
--- /dev/null
+++ b/tests/plugins/textAlign.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('textAlign').toMatchSnapshot()
diff --git a/tests/plugins/textColor.test.js b/tests/plugins/textColor.test.js
new file mode 100644
index 000000000..fc1868da2
--- /dev/null
+++ b/tests/plugins/textColor.test.js
@@ -0,0 +1,43 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('textColor', {
+ safelist: [
+ // Arbitrary values
+ 'text-[#0088cc]',
+ 'text-[var(--my-value)]',
+ ],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ },
+}).toMatchSnapshot()
+
+// With `textOpacity` plugin enabled
+quickPluginTest('textColor', {
+ safelist: [
+ // Arbitrary values
+ 'text-[#0088cc]',
+ 'text-[var(--my-value)]',
+ ],
+ corePlugins: ['textOpacity'],
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/textDecoration.test.js b/tests/plugins/textDecoration.test.js
new file mode 100644
index 000000000..daab851b7
--- /dev/null
+++ b/tests/plugins/textDecoration.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('textDecoration').toMatchSnapshot()
diff --git a/tests/plugins/textDecorationColor.test.js b/tests/plugins/textDecorationColor.test.js
new file mode 100644
index 000000000..c20445e54
--- /dev/null
+++ b/tests/plugins/textDecorationColor.test.js
@@ -0,0 +1,18 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('textDecorationColor', {
+ theme: {
+ colors: {
+ transparent: 'transparent',
+ black: '#000',
+ red: {
+ 100: '#fee2e2',
+ 200: '#fecaca',
+ },
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/textDecorationStyle.test.js b/tests/plugins/textDecorationStyle.test.js
new file mode 100644
index 000000000..14fe6bac7
--- /dev/null
+++ b/tests/plugins/textDecorationStyle.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('textDecorationStyle').toMatchSnapshot()
diff --git a/tests/plugins/textDecorationThickness.test.js b/tests/plugins/textDecorationThickness.test.js
new file mode 100644
index 000000000..d9ad1dae1
--- /dev/null
+++ b/tests/plugins/textDecorationThickness.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('textDecorationThickness', {
+ safelist: [
+ // Arbitrary values
+ 'decoration-[12px]',
+ 'decoration-[34%]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/textIndent.test.js b/tests/plugins/textIndent.test.js
new file mode 100644
index 000000000..4d3a8b69c
--- /dev/null
+++ b/tests/plugins/textIndent.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('textIndent', {
+ safelist: [
+ // Arbitrary values
+ 'indent-[12px]',
+ 'indent-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/textOpacity.test.js b/tests/plugins/textOpacity.test.js
new file mode 100644
index 000000000..fa5438450
--- /dev/null
+++ b/tests/plugins/textOpacity.test.js
@@ -0,0 +1,15 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('textOpacity', {
+ safelist: [
+ // Arbitrary values
+ 'text-opacity-[12%]',
+ 'text-opacity-[var(--my-value)]',
+ ],
+ theme: {
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ },
+ },
+}).toMatchSnapshot()
diff --git a/tests/plugins/textOverflow.test.js b/tests/plugins/textOverflow.test.js
new file mode 100644
index 000000000..fef790c7a
--- /dev/null
+++ b/tests/plugins/textOverflow.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('textOverflow').toMatchSnapshot()
diff --git a/tests/plugins/textTransform.test.js b/tests/plugins/textTransform.test.js
new file mode 100644
index 000000000..6ec6f64b7
--- /dev/null
+++ b/tests/plugins/textTransform.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('textTransform').toMatchSnapshot()
diff --git a/tests/plugins/textUnderlineOffset.test.js b/tests/plugins/textUnderlineOffset.test.js
new file mode 100644
index 000000000..f159c94eb
--- /dev/null
+++ b/tests/plugins/textUnderlineOffset.test.js
@@ -0,0 +1,10 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('textUnderlineOffset', {
+ safelist: [
+ // Arbitrary values
+ 'underline-offset-[12px]',
+ 'underline-offset-[20%]',
+ 'underline-offset-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/textWrap.test.js b/tests/plugins/textWrap.test.js
new file mode 100644
index 000000000..e83203e20
--- /dev/null
+++ b/tests/plugins/textWrap.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('textWrap').toMatchSnapshot()
diff --git a/tests/plugins/touchAction.test.js b/tests/plugins/touchAction.test.js
new file mode 100644
index 000000000..979272fce
--- /dev/null
+++ b/tests/plugins/touchAction.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('touchAction').toMatchSnapshot()
diff --git a/tests/plugins/transform.test.js b/tests/plugins/transform.test.js
new file mode 100644
index 000000000..7cd34668a
--- /dev/null
+++ b/tests/plugins/transform.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('transform').toMatchSnapshot()
diff --git a/tests/plugins/transformOrigin.test.js b/tests/plugins/transformOrigin.test.js
new file mode 100644
index 000000000..3a858cc9f
--- /dev/null
+++ b/tests/plugins/transformOrigin.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('transformOrigin', {
+ safelist: [
+ // Arbitrary values
+ 'origin-[50%_50%]',
+ 'origin-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/transitionDelay.test.js b/tests/plugins/transitionDelay.test.js
new file mode 100644
index 000000000..cb927814c
--- /dev/null
+++ b/tests/plugins/transitionDelay.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('transitionDelay', {
+ safelist: [
+ // Arbitrary values
+ 'delay-[3s]',
+ 'delay-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/transitionDuration.test.js b/tests/plugins/transitionDuration.test.js
new file mode 100644
index 000000000..17d68cd56
--- /dev/null
+++ b/tests/plugins/transitionDuration.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('transitionDuration', {
+ safelist: [
+ // Arbitrary values
+ 'duration-[3s]',
+ 'duration-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/transitionProperty.test.js b/tests/plugins/transitionProperty.test.js
new file mode 100644
index 000000000..70219e340
--- /dev/null
+++ b/tests/plugins/transitionProperty.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('transitionProperty', {
+ safelist: [
+ // Arbitrary values
+ 'transition-[accentColor]',
+ 'transition-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/transitionTimingFunction.test.js b/tests/plugins/transitionTimingFunction.test.js
new file mode 100644
index 000000000..995d97241
--- /dev/null
+++ b/tests/plugins/transitionTimingFunction.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('transitionTimingFunction', {
+ safelist: [
+ // Arbitrary values
+ 'ease-[cubiz-bezier(0.1,1,1,4)]',
+ 'ease-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/translate.test.js b/tests/plugins/translate.test.js
new file mode 100644
index 000000000..04c76c30d
--- /dev/null
+++ b/tests/plugins/translate.test.js
@@ -0,0 +1,11 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('translate', {
+ safelist: [
+ // Arbitrary values
+ 'translate-x-[12px]',
+ 'translate-x-[var(--my-value)]',
+ 'translate-y-[12px]',
+ 'translate-y-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/userSelect.test.js b/tests/plugins/userSelect.test.js
new file mode 100644
index 000000000..da17b0770
--- /dev/null
+++ b/tests/plugins/userSelect.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('userSelect').toMatchSnapshot()
diff --git a/tests/plugins/variants/__snapshots__/ariaVariants.test.js.snap b/tests/plugins/variants/__snapshots__/ariaVariants.test.js.snap
new file mode 100644
index 000000000..bc743a6d3
--- /dev/null
+++ b/tests/plugins/variants/__snapshots__/ariaVariants.test.js.snap
@@ -0,0 +1,9 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'ariaVariants' plugin 1`] = `
+"
+.aria-busy\\:flex[aria-busy="true"], .aria-checked\\:flex[aria-checked="true"], .aria-disabled\\:flex[aria-disabled="true"], .aria-expanded\\:flex[aria-expanded="true"], .aria-hidden\\:flex[aria-hidden="true"], .aria-pressed\\:flex[aria-pressed="true"], .aria-readonly\\:flex[aria-readonly="true"], .aria-required\\:flex[aria-required="true"], .aria-selected\\:flex[aria-selected="true"], .aria-\\[describedby\\]\\:flex[aria-describedby], .group[aria-busy="true"] .group-aria-busy\\:flex, .group[aria-checked="true"] .group-aria-checked\\:flex, .group[aria-disabled="true"] .group-aria-disabled\\:flex, .group[aria-expanded="true"] .group-aria-expanded\\:flex, .group[aria-hidden="true"] .group-aria-hidden\\:flex, .group[aria-pressed="true"] .group-aria-pressed\\:flex, .group[aria-readonly="true"] .group-aria-readonly\\:flex, .group[aria-required="true"] .group-aria-required\\:flex, .group[aria-selected="true"] .group-aria-selected\\:flex, .group\\/foo[aria-describedby] .group-aria-\\[describedby\\]\\/foo\\:flex, .group[aria-describedby] .group-aria-\\[describedby\\]\\:flex, .peer[aria-busy="true"] ~ .peer-aria-busy\\:flex, .peer[aria-checked="true"] ~ .peer-aria-checked\\:flex, .peer[aria-disabled="true"] ~ .peer-aria-disabled\\:flex, .peer[aria-expanded="true"] ~ .peer-aria-expanded\\:flex, .peer[aria-hidden="true"] ~ .peer-aria-hidden\\:flex, .peer[aria-pressed="true"] ~ .peer-aria-pressed\\:flex, .peer[aria-readonly="true"] ~ .peer-aria-readonly\\:flex, .peer[aria-required="true"] ~ .peer-aria-required\\:flex, .peer[aria-selected="true"] ~ .peer-aria-selected\\:flex, .peer\\/foo[aria-describedby] ~ .peer-aria-\\[describedby\\]\\/foo\\:flex, .peer[aria-describedby] ~ .peer-aria-\\[describedby\\]\\:flex {
+ display: flex;
+}
+"
+`;
diff --git a/tests/plugins/variants/__snapshots__/darkVariants.test.js.snap b/tests/plugins/variants/__snapshots__/darkVariants.test.js.snap
new file mode 100644
index 000000000..0a3dda916
--- /dev/null
+++ b/tests/plugins/variants/__snapshots__/darkVariants.test.js.snap
@@ -0,0 +1,27 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'darkVariants' plugin 1`] = `
+"
+@media (prefers-color-scheme: dark) {
+ .dark\\:flex {
+ display: flex;
+ }
+}
+"
+`;
+
+exports[`should test the 'darkVariants' plugin 2`] = `
+"
+:is(.dark .dark\\:flex) {
+ display: flex;
+}
+"
+`;
+
+exports[`should test the 'darkVariants' plugin 3`] = `
+"
+:is(.my-dark-mode .dark\\:flex) {
+ display: flex;
+}
+"
+`;
diff --git a/tests/plugins/variants/__snapshots__/dataVariants.test.js.snap b/tests/plugins/variants/__snapshots__/dataVariants.test.js.snap
new file mode 100644
index 000000000..be3662866
--- /dev/null
+++ b/tests/plugins/variants/__snapshots__/dataVariants.test.js.snap
@@ -0,0 +1,9 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'dataVariants' plugin 1`] = `
+"
+.data-\\[describedby\\]\\:flex[data-describedby], .group\\/foo[data-describedby] .group-data-\\[describedby\\]\\/foo\\:flex, .group[data-describedby] .group-data-\\[describedby\\]\\:flex, .peer\\/foo[data-describedby] ~ .peer-data-\\[describedby\\]\\/foo\\:flex, .peer[data-describedby] ~ .peer-data-\\[describedby\\]\\:flex {
+ display: flex;
+}
+"
+`;
diff --git a/tests/plugins/variants/__snapshots__/directionVariants.test.js.snap b/tests/plugins/variants/__snapshots__/directionVariants.test.js.snap
new file mode 100644
index 000000000..1ee2f8952
--- /dev/null
+++ b/tests/plugins/variants/__snapshots__/directionVariants.test.js.snap
@@ -0,0 +1,9 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'directionVariants' plugin 1`] = `
+"
+:is([dir="ltr"] .ltr\\:flex), :is([dir="rtl"] .rtl\\:flex) {
+ display: flex;
+}
+"
+`;
diff --git a/tests/plugins/variants/__snapshots__/forcedColorsVariants.test.js.snap b/tests/plugins/variants/__snapshots__/forcedColorsVariants.test.js.snap
new file mode 100644
index 000000000..21e2dbb68
--- /dev/null
+++ b/tests/plugins/variants/__snapshots__/forcedColorsVariants.test.js.snap
@@ -0,0 +1,11 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'forcedColorsVariants' plugin 1`] = `
+"
+@media (forced-colors: active) {
+ .forced-colors\\:flex {
+ display: flex;
+ }
+}
+"
+`;
diff --git a/tests/plugins/variants/__snapshots__/hasVariants.test.js.snap b/tests/plugins/variants/__snapshots__/hasVariants.test.js.snap
new file mode 100644
index 000000000..6a4e9ed4c
--- /dev/null
+++ b/tests/plugins/variants/__snapshots__/hasVariants.test.js.snap
@@ -0,0 +1,25 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'hasVariants' plugin 1`] = `
+"
+.has-\\[\\.foo\\]\\:flex:has(.foo) {
+ display: flex;
+}
+
+.group\\/foo:has(.bar) .group-has-\\[\\.bar\\]\\/foo\\:flex {
+ display: flex;
+}
+
+.group:has(.foo) .group-has-\\[\\.foo\\]\\:flex {
+ display: flex;
+}
+
+.peer\\/foo:has(.bar) ~ .peer-has-\\[\\.bar\\]\\/foo\\:flex {
+ display: flex;
+}
+
+.peer:has(.foo) ~ .peer-has-\\[\\.foo\\]\\:flex {
+ display: flex;
+}
+"
+`;
diff --git a/tests/plugins/variants/__snapshots__/orientationVariants.test.js.snap b/tests/plugins/variants/__snapshots__/orientationVariants.test.js.snap
new file mode 100644
index 000000000..d3821adb5
--- /dev/null
+++ b/tests/plugins/variants/__snapshots__/orientationVariants.test.js.snap
@@ -0,0 +1,17 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'orientationVariants' plugin 1`] = `
+"
+@media (orientation: portrait) {
+ .portrait\\:flex {
+ display: flex;
+ }
+}
+
+@media (orientation: landscape) {
+ .landscape\\:flex {
+ display: flex;
+ }
+}
+"
+`;
diff --git a/tests/plugins/variants/__snapshots__/prefersContrastVariants.test.js.snap b/tests/plugins/variants/__snapshots__/prefersContrastVariants.test.js.snap
new file mode 100644
index 000000000..8d5d2ea1c
--- /dev/null
+++ b/tests/plugins/variants/__snapshots__/prefersContrastVariants.test.js.snap
@@ -0,0 +1,17 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'prefersContrastVariants' plugin 1`] = `
+"
+@media (prefers-contrast: more) {
+ .contrast-more\\:flex {
+ display: flex;
+ }
+}
+
+@media (prefers-contrast: less) {
+ .contrast-less\\:flex {
+ display: flex;
+ }
+}
+"
+`;
diff --git a/tests/plugins/variants/__snapshots__/printVariant.test.js.snap b/tests/plugins/variants/__snapshots__/printVariant.test.js.snap
new file mode 100644
index 000000000..d2ebe8ca1
--- /dev/null
+++ b/tests/plugins/variants/__snapshots__/printVariant.test.js.snap
@@ -0,0 +1,11 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'printVariant' plugin 1`] = `
+"
+@media print {
+ .print\\:flex {
+ display: flex;
+ }
+}
+"
+`;
diff --git a/tests/plugins/variants/__snapshots__/pseudoClassVariants.test.js.snap b/tests/plugins/variants/__snapshots__/pseudoClassVariants.test.js.snap
new file mode 100644
index 000000000..60c0be5de
--- /dev/null
+++ b/tests/plugins/variants/__snapshots__/pseudoClassVariants.test.js.snap
@@ -0,0 +1,69 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'pseudoClassVariants' plugin 1`] = `
+"
+.first\\:flex:first-child, .last\\:flex:last-child, .only\\:flex:only-child, .odd\\:flex:nth-child(odd), .even\\:flex:nth-child(2n), .first-of-type\\:flex:first-of-type, .last-of-type\\:flex:last-of-type, .only-of-type\\:flex:only-of-type, .visited\\:flex:visited, .target\\:flex:target, .open\\:flex[open], .default\\:flex:default, .checked\\:flex:checked, .indeterminate\\:flex:indeterminate, .placeholder-shown\\:flex:placeholder-shown {
+ display: flex;
+}
+
+.autofill\\:flex:-webkit-autofill {
+ display: flex;
+}
+
+.autofill\\:flex:autofill {
+ display: flex;
+}
+
+.optional\\:flex:optional, .required\\:flex:required, .valid\\:flex:valid, .invalid\\:flex:invalid, .in-range\\:flex:in-range, .out-of-range\\:flex:out-of-range, .read-only\\:flex:read-only, .empty\\:flex:empty, .focus-within\\:flex:focus-within, .hover\\:flex:hover, .focus\\:flex:focus {
+ display: flex;
+}
+
+.focus-visible\\:flex:focus-visible {
+ display: flex;
+}
+
+.active\\:flex:active, .enabled\\:flex:enabled, .disabled\\:flex:disabled, .group:first-child .group-first\\:flex, .group:last-child .group-last\\:flex, .group:only-child .group-only\\:flex, .group:nth-child(odd) .group-odd\\:flex, .group:nth-child(2n) .group-even\\:flex, .group:first-of-type .group-first-of-type\\:flex, .group:last-of-type .group-last-of-type\\:flex, .group:only-of-type .group-only-of-type\\:flex, .group:visited .group-visited\\:flex, .group:target .group-target\\:flex, .group[open] .group-open\\:flex, .group:default .group-default\\:flex, .group:checked .group-checked\\:flex, .group:indeterminate .group-indeterminate\\:flex, .group:placeholder-shown .group-placeholder-shown\\:flex {
+ display: flex;
+}
+
+.group:-webkit-autofill .group-autofill\\:flex {
+ display: flex;
+}
+
+.group:autofill .group-autofill\\:flex {
+ display: flex;
+}
+
+.group:optional .group-optional\\:flex, .group:required .group-required\\:flex, .group:valid .group-valid\\:flex, .group:invalid .group-invalid\\:flex, .group:in-range .group-in-range\\:flex, .group:out-of-range .group-out-of-range\\:flex, .group:read-only .group-read-only\\:flex, .group:empty .group-empty\\:flex, .group:focus-within .group-focus-within\\:flex, .group:hover .group-hover\\:flex, .group:focus .group-focus\\:flex {
+ display: flex;
+}
+
+.group:focus-visible .group-focus-visible\\:flex {
+ display: flex;
+}
+
+.group:active .group-active\\:flex, .group:enabled .group-enabled\\:flex, .group:disabled .group-disabled\\:flex, .peer:first-child ~ .peer-first\\:flex, .peer:last-child ~ .peer-last\\:flex, .peer:only-child ~ .peer-only\\:flex, .peer:nth-child(odd) ~ .peer-odd\\:flex, .peer:nth-child(2n) ~ .peer-even\\:flex, .peer:first-of-type ~ .peer-first-of-type\\:flex, .peer:last-of-type ~ .peer-last-of-type\\:flex, .peer:only-of-type ~ .peer-only-of-type\\:flex, .peer:visited ~ .peer-visited\\:flex, .peer:target ~ .peer-target\\:flex, .peer[open] ~ .peer-open\\:flex, .peer:default ~ .peer-default\\:flex, .peer:checked ~ .peer-checked\\:flex, .peer:indeterminate ~ .peer-indeterminate\\:flex, .peer:placeholder-shown ~ .peer-placeholder-shown\\:flex {
+ display: flex;
+}
+
+.peer:-webkit-autofill ~ .peer-autofill\\:flex {
+ display: flex;
+}
+
+.peer:autofill ~ .peer-autofill\\:flex {
+ display: flex;
+}
+
+.peer:optional ~ .peer-optional\\:flex, .peer:required ~ .peer-required\\:flex, .peer:valid ~ .peer-valid\\:flex, .peer:invalid ~ .peer-invalid\\:flex, .peer:in-range ~ .peer-in-range\\:flex, .peer:out-of-range ~ .peer-out-of-range\\:flex, .peer:read-only ~ .peer-read-only\\:flex, .peer:empty ~ .peer-empty\\:flex, .peer:focus-within ~ .peer-focus-within\\:flex, .peer:hover ~ .peer-hover\\:flex, .peer:focus ~ .peer-focus\\:flex {
+ display: flex;
+}
+
+.peer:focus-visible ~ .peer-focus-visible\\:flex {
+ display: flex;
+}
+
+.peer:active ~ .peer-active\\:flex, .peer:enabled ~ .peer-enabled\\:flex, .peer:disabled ~ .peer-disabled\\:flex {
+ display: flex;
+}
+"
+`;
diff --git a/tests/plugins/variants/__snapshots__/pseudoElementVariants.test.js.snap b/tests/plugins/variants/__snapshots__/pseudoElementVariants.test.js.snap
new file mode 100644
index 000000000..eca19d871
--- /dev/null
+++ b/tests/plugins/variants/__snapshots__/pseudoElementVariants.test.js.snap
@@ -0,0 +1,38 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'pseudoElementVariants' plugin 1`] = `
+"
+.first-letter\\:flex:first-letter, .first-line\\:flex:first-line, .marker\\:flex ::marker, .marker\\:flex::marker {
+ display: flex;
+}
+
+.selection\\:flex ::selection {
+ display: flex;
+}
+
+.selection\\:flex::selection {
+ display: flex;
+}
+
+.file\\:flex::-webkit-file-upload-button {
+ display: flex;
+}
+
+.file\\:flex::file-selector-button {
+ display: flex;
+}
+
+.placeholder\\:flex::placeholder {
+ display: flex;
+}
+
+.backdrop\\:flex::backdrop {
+ display: flex;
+}
+
+.before\\:flex:before, .after\\:flex:after {
+ content: var(--tw-content);
+ display: flex;
+}
+"
+`;
diff --git a/tests/plugins/variants/__snapshots__/reducedMotionVariants.test.js.snap b/tests/plugins/variants/__snapshots__/reducedMotionVariants.test.js.snap
new file mode 100644
index 000000000..93c5a5b0f
--- /dev/null
+++ b/tests/plugins/variants/__snapshots__/reducedMotionVariants.test.js.snap
@@ -0,0 +1,17 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'reducedMotionVariants' plugin 1`] = `
+"
+@media (prefers-reduced-motion: no-preference) {
+ .motion-safe\\:flex {
+ display: flex;
+ }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ .motion-reduce\\:flex {
+ display: flex;
+ }
+}
+"
+`;
diff --git a/tests/plugins/variants/__snapshots__/screenVariants.test.js.snap b/tests/plugins/variants/__snapshots__/screenVariants.test.js.snap
new file mode 100644
index 000000000..44bcd78a9
--- /dev/null
+++ b/tests/plugins/variants/__snapshots__/screenVariants.test.js.snap
@@ -0,0 +1,77 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'screenVariants' plugin 1`] = `
+"
+@media not all and (min-width: 1536px) {
+ .max-2xl\\:flex {
+ display: flex;
+ }
+}
+
+@media not all and (min-width: 1280px) {
+ .max-xl\\:flex {
+ display: flex;
+ }
+}
+
+@media not all and (min-width: 1024px) {
+ .max-lg\\:flex {
+ display: flex;
+ }
+}
+
+@media not all and (min-width: 768px) {
+ .max-md\\:flex {
+ display: flex;
+ }
+}
+
+@media not all and (min-width: 640px) {
+ .max-sm\\:flex {
+ display: flex;
+ }
+}
+
+@media (max-width: 100px) {
+ .max-\\[100px\\]\\:flex {
+ display: flex;
+ }
+}
+
+@media (min-width: 100px) {
+ .min-\\[100px\\]\\:flex {
+ display: flex;
+ }
+}
+
+@media (min-width: 640px) {
+ .sm\\:flex {
+ display: flex;
+ }
+}
+
+@media (min-width: 768px) {
+ .md\\:flex {
+ display: flex;
+ }
+}
+
+@media (min-width: 1024px) {
+ .lg\\:flex {
+ display: flex;
+ }
+}
+
+@media (min-width: 1280px) {
+ .xl\\:flex {
+ display: flex;
+ }
+}
+
+@media (min-width: 1536px) {
+ .\\32 xl\\:flex {
+ display: flex;
+ }
+}
+"
+`;
diff --git a/tests/plugins/variants/__snapshots__/supportsVariants.test.js.snap b/tests/plugins/variants/__snapshots__/supportsVariants.test.js.snap
new file mode 100644
index 000000000..14a4a2d24
--- /dev/null
+++ b/tests/plugins/variants/__snapshots__/supportsVariants.test.js.snap
@@ -0,0 +1,29 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`should test the 'supportsVariants' plugin 1`] = `
+"
+@supports (display: grid) {
+ .supports-\\[display\\:grid\\]\\:flex {
+ display: flex;
+ }
+}
+
+@supports (display: var(--tw)) {
+ .supports-\\[display\\]\\:flex {
+ display: flex;
+ }
+}
+
+@supports (foo or bar: var(--tw)) {
+ .supports-\\[foo_or_bar\\]\\:flex {
+ display: flex;
+ }
+}
+
+@supports (foo or bar and not baz: var(--tw)) {
+ .supports-\\[foo_or_bar_and_not_baz\\]\\:flex {
+ display: flex;
+ }
+}
+"
+`;
diff --git a/tests/plugins/variants/ariaVariants.test.js b/tests/plugins/variants/ariaVariants.test.js
new file mode 100644
index 000000000..85a2ebab1
--- /dev/null
+++ b/tests/plugins/variants/ariaVariants.test.js
@@ -0,0 +1,13 @@
+import { quickVariantPluginTest } from '../../util/run'
+
+quickVariantPluginTest('ariaVariants', {
+ safelist: [
+ 'aria-[describedby]:flex',
+
+ 'group-aria-[describedby]:flex',
+ 'peer-aria-[describedby]:flex',
+
+ 'group-aria-[describedby]/foo:flex',
+ 'peer-aria-[describedby]/foo:flex',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/variants/darkVariants.test.js b/tests/plugins/variants/darkVariants.test.js
new file mode 100644
index 000000000..2080df088
--- /dev/null
+++ b/tests/plugins/variants/darkVariants.test.js
@@ -0,0 +1,14 @@
+import { quickVariantPluginTest } from '../../util/run'
+
+// Default media dark mode
+quickVariantPluginTest('darkVariants').toMatchSnapshot()
+
+// Class dark mode
+quickVariantPluginTest('darkVariants', {
+ darkMode: 'class',
+}).toMatchSnapshot()
+
+// Class dark mode with custom class name
+quickVariantPluginTest('darkVariants', {
+ darkMode: ['class', '.my-dark-mode'],
+}).toMatchSnapshot()
diff --git a/tests/plugins/variants/dataVariants.test.js b/tests/plugins/variants/dataVariants.test.js
new file mode 100644
index 000000000..d8b471144
--- /dev/null
+++ b/tests/plugins/variants/dataVariants.test.js
@@ -0,0 +1,13 @@
+import { quickVariantPluginTest } from '../../util/run'
+
+quickVariantPluginTest('dataVariants', {
+ safelist: [
+ 'data-[describedby]:flex',
+
+ 'group-data-[describedby]:flex',
+ 'peer-data-[describedby]:flex',
+
+ 'group-data-[describedby]/foo:flex',
+ 'peer-data-[describedby]/foo:flex',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/variants/directionVariants.test.js b/tests/plugins/variants/directionVariants.test.js
new file mode 100644
index 000000000..d0afde62b
--- /dev/null
+++ b/tests/plugins/variants/directionVariants.test.js
@@ -0,0 +1,3 @@
+import { quickVariantPluginTest } from '../../util/run'
+
+quickVariantPluginTest('directionVariants').toMatchSnapshot()
diff --git a/tests/plugins/variants/forcedColorsVariants.test.js b/tests/plugins/variants/forcedColorsVariants.test.js
new file mode 100644
index 000000000..61a1f08cf
--- /dev/null
+++ b/tests/plugins/variants/forcedColorsVariants.test.js
@@ -0,0 +1,3 @@
+import { quickVariantPluginTest } from '../../util/run'
+
+quickVariantPluginTest('forcedColorsVariants').toMatchSnapshot()
diff --git a/tests/plugins/variants/hasVariants.test.js b/tests/plugins/variants/hasVariants.test.js
new file mode 100644
index 000000000..5c2b681bc
--- /dev/null
+++ b/tests/plugins/variants/hasVariants.test.js
@@ -0,0 +1,13 @@
+import { quickVariantPluginTest } from '../../util/run'
+
+quickVariantPluginTest('hasVariants', {
+ safelist: [
+ 'has-[.foo]:flex',
+
+ 'group-has-[.foo]:flex',
+ 'peer-has-[.foo]:flex',
+
+ 'group-has-[.bar]/foo:flex',
+ 'peer-has-[.bar]/foo:flex',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/variants/index.test.js b/tests/plugins/variants/index.test.js
new file mode 100644
index 000000000..4776926e9
--- /dev/null
+++ b/tests/plugins/variants/index.test.js
@@ -0,0 +1,34 @@
+import fs from 'fs'
+import path from 'path'
+import { variantPlugins } from '../../../src/corePlugins'
+
+test('all variant plugins have a dedicated test file', async () => {
+ let currentFile = path.basename(__filename)
+
+ let variantPluginList = Object.keys(variantPlugins).sort((a, z) => a.localeCompare(z))
+ let testedPluginList = (
+ await fs.promises.readdir(path.resolve(__dirname, './'), {
+ withFileTypes: true,
+ })
+ )
+ .filter(
+ (dirent) => dirent.isFile() && dirent.name.endsWith('.test.js') && dirent.name !== currentFile
+ )
+ .map((dirent) => dirent.name.slice(0, dirent.name.indexOf('.')))
+ .sort((a, z) => a.localeCompare(z))
+
+ let missingTests = variantPluginList.filter((plugin) => !testedPluginList.includes(plugin))
+ let additionalTests = testedPluginList.filter((plugin) => !variantPluginList.includes(plugin))
+
+ if (missingTests.length > 0 || additionalTests.length > 0) {
+ throw new Error(
+ `The following \`variantPlugins\` are not covered by tests in the \`./tests/plugins/\` folder:\n${
+ missingTests.map((x) => `\t- ${x}`).join('\n') || '\t- None'
+ }\n\nAdditional tests found that don't correspond to any of the \`variantPlugins\`:\n${
+ additionalTests.map((x) => `\t- ${x}`).join('\n') || '\t- None'
+ }\n\nCovered: ${testedPluginList.length - additionalTests.length}/${
+ variantPluginList.length
+ }, missing: ${missingTests.length}`
+ )
+ }
+})
diff --git a/tests/plugins/variants/orientationVariants.test.js b/tests/plugins/variants/orientationVariants.test.js
new file mode 100644
index 000000000..438938521
--- /dev/null
+++ b/tests/plugins/variants/orientationVariants.test.js
@@ -0,0 +1,3 @@
+import { quickVariantPluginTest } from '../../util/run'
+
+quickVariantPluginTest('orientationVariants').toMatchSnapshot()
diff --git a/tests/plugins/variants/prefersContrastVariants.test.js b/tests/plugins/variants/prefersContrastVariants.test.js
new file mode 100644
index 000000000..afe000287
--- /dev/null
+++ b/tests/plugins/variants/prefersContrastVariants.test.js
@@ -0,0 +1,3 @@
+import { quickVariantPluginTest } from '../../util/run'
+
+quickVariantPluginTest('prefersContrastVariants').toMatchSnapshot()
diff --git a/tests/plugins/variants/printVariant.test.js b/tests/plugins/variants/printVariant.test.js
new file mode 100644
index 000000000..a61b593a0
--- /dev/null
+++ b/tests/plugins/variants/printVariant.test.js
@@ -0,0 +1,3 @@
+import { quickVariantPluginTest } from '../../util/run'
+
+quickVariantPluginTest('printVariant').toMatchSnapshot()
diff --git a/tests/plugins/variants/pseudoClassVariants.test.js b/tests/plugins/variants/pseudoClassVariants.test.js
new file mode 100644
index 000000000..11db93f56
--- /dev/null
+++ b/tests/plugins/variants/pseudoClassVariants.test.js
@@ -0,0 +1,3 @@
+import { quickVariantPluginTest } from '../../util/run'
+
+quickVariantPluginTest('pseudoClassVariants').toMatchSnapshot()
diff --git a/tests/plugins/variants/pseudoElementVariants.test.js b/tests/plugins/variants/pseudoElementVariants.test.js
new file mode 100644
index 000000000..fcaf173a0
--- /dev/null
+++ b/tests/plugins/variants/pseudoElementVariants.test.js
@@ -0,0 +1,3 @@
+import { quickVariantPluginTest } from '../../util/run'
+
+quickVariantPluginTest('pseudoElementVariants').toMatchSnapshot()
diff --git a/tests/plugins/variants/reducedMotionVariants.test.js b/tests/plugins/variants/reducedMotionVariants.test.js
new file mode 100644
index 000000000..79ac4ab64
--- /dev/null
+++ b/tests/plugins/variants/reducedMotionVariants.test.js
@@ -0,0 +1,3 @@
+import { quickVariantPluginTest } from '../../util/run'
+
+quickVariantPluginTest('reducedMotionVariants').toMatchSnapshot()
diff --git a/tests/plugins/variants/screenVariants.test.js b/tests/plugins/variants/screenVariants.test.js
new file mode 100644
index 000000000..f1df059ce
--- /dev/null
+++ b/tests/plugins/variants/screenVariants.test.js
@@ -0,0 +1,14 @@
+import { quickVariantPluginTest } from '../../util/run'
+
+quickVariantPluginTest('screenVariants', {
+ safelist: [
+ '2xl:flex',
+ 'xl:flex',
+ 'lg:flex',
+ 'md:flex',
+ 'sm:flex',
+
+ 'min-[100px]:flex',
+ 'max-[100px]:flex',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/variants/supportsVariants.test.js b/tests/plugins/variants/supportsVariants.test.js
new file mode 100644
index 000000000..dfe687b17
--- /dev/null
+++ b/tests/plugins/variants/supportsVariants.test.js
@@ -0,0 +1,10 @@
+import { quickVariantPluginTest } from '../../util/run'
+
+quickVariantPluginTest('supportsVariants', {
+ safelist: [
+ 'supports-[display]:flex',
+ 'supports-[display:grid]:flex',
+ 'supports-[foo_or_bar]:flex',
+ 'supports-[foo_or_bar_and_not_baz]:flex',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/verticalAlign.test.js b/tests/plugins/verticalAlign.test.js
new file mode 100644
index 000000000..03c303f29
--- /dev/null
+++ b/tests/plugins/verticalAlign.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('verticalAlign', {
+ safelist: [
+ // Arbitrary values
+ 'align-[12px]',
+ 'align-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/visibility.test.js b/tests/plugins/visibility.test.js
new file mode 100644
index 000000000..2ab67d0d8
--- /dev/null
+++ b/tests/plugins/visibility.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('visibility').toMatchSnapshot()
diff --git a/tests/plugins/whitespace.test.js b/tests/plugins/whitespace.test.js
new file mode 100644
index 000000000..bfdc78ec2
--- /dev/null
+++ b/tests/plugins/whitespace.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('whitespace').toMatchSnapshot()
diff --git a/tests/plugins/width.test.js b/tests/plugins/width.test.js
new file mode 100644
index 000000000..dd707418c
--- /dev/null
+++ b/tests/plugins/width.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('width', {
+ safelist: [
+ // Arbitrary values
+ 'w-[12px]',
+ 'w-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/willChange.test.js b/tests/plugins/willChange.test.js
new file mode 100644
index 000000000..b95813112
--- /dev/null
+++ b/tests/plugins/willChange.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('willChange', {
+ safelist: [
+ // Arbitrary values
+ 'will-change-[left,top]',
+ 'will-change-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/plugins/wordBreak.test.js b/tests/plugins/wordBreak.test.js
new file mode 100644
index 000000000..1587eb25c
--- /dev/null
+++ b/tests/plugins/wordBreak.test.js
@@ -0,0 +1,3 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('wordBreak').toMatchSnapshot()
diff --git a/tests/plugins/zIndex.test.js b/tests/plugins/zIndex.test.js
new file mode 100644
index 000000000..a13c62ec7
--- /dev/null
+++ b/tests/plugins/zIndex.test.js
@@ -0,0 +1,9 @@
+import { quickPluginTest } from '../util/run'
+
+quickPluginTest('zIndex', {
+ safelist: [
+ // Arbitrary values
+ 'z-[12px]',
+ 'z-[var(--my-value)]',
+ ],
+}).toMatchSnapshot()
diff --git a/tests/postcss-plugins/nesting/index.test.js b/tests/postcss-plugins/nesting/index.test.js
index fe942a284..d2c339bf8 100644
--- a/tests/postcss-plugins/nesting/index.test.js
+++ b/tests/postcss-plugins/nesting/index.test.js
@@ -19,7 +19,7 @@ it('should be possible to load a custom nesting plugin', async () => {
rule.selector += '-modified'
})
})
- ).toMatchCss(css`
+ ).toMatchFormattedCss(css`
.foo-modified {
color: black;
@media screen(md) {
@@ -39,7 +39,7 @@ it('should be possible to load a custom nesting plugin by name (string) instead'
}
`
- expect(await run(input, 'postcss-nested')).toMatchCss(css`
+ expect(await run(input, 'postcss-nested')).toMatchFormattedCss(css`
.foo {
color: black;
}
@@ -62,7 +62,7 @@ it('should default to the bundled postcss-nested plugin (no options)', async ()
}
`
- expect(await run(input)).toMatchCss(css`
+ expect(await run(input)).toMatchFormattedCss(css`
.foo {
color: black;
}
@@ -85,7 +85,7 @@ it('should default to the bundled postcss-nested plugin (empty options)', async
}
`
- expect(await run(input, {})).toMatchCss(css`
+ expect(await run(input, {})).toMatchFormattedCss(css`
.foo {
color: black;
}
@@ -108,7 +108,7 @@ it('should be possible to use postcss-nested plugin with options', async () => {
}
`
- expect(await run(input, postcssNested({ noIsPseudoSelector: true }))).toMatchCss(css`
+ expect(await run(input, postcssNested({ noIsPseudoSelector: true }))).toMatchFormattedCss(css`
.foo {
color: black;
}
@@ -131,7 +131,7 @@ test('@screen rules are replaced with media queries', async () => {
}
`
- expect(await run(input, postcssNested)).toMatchCss(css`
+ expect(await run(input, postcssNested)).toMatchFormattedCss(css`
.foo {
color: black;
}
@@ -154,7 +154,7 @@ test('@screen rules can work with `@apply`', async () => {
}
`
- expect(await run(input, postcssNested)).toMatchCss(css`
+ expect(await run(input, postcssNested)).toMatchFormattedCss(css`
.foo {
@apply bg-black;
}
@@ -172,7 +172,7 @@ test('nesting does not break downstream plugin visitors', async () => {
.foo {
color: black;
}
- @suppoerts (color: blue) {
+ @supports (color: blue) {
.foo {
color: blue;
}
@@ -186,15 +186,16 @@ test('nesting does not break downstream plugin visitors', async () => {
let result = await run(input, plugins)
- expect(result).toMatchCss(css`
+ expect(result).toMatchFormattedCss(css`
.foo {
- color: #000;
+ color: black;
}
- @suppoerts (color: blue) {
+ @supports (color: blue) {
.foo {
color: blue;
}
}
+ /* Comment */
`)
expect(spyPlugin.spies.Once).toHaveBeenCalled()
diff --git a/tests/prefers-contrast.test.js b/tests/prefers-contrast.test.js
index e3b940da8..52420ee1e 100644
--- a/tests/prefers-contrast.test.js
+++ b/tests/prefers-contrast.test.js
@@ -1,102 +1,71 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(({ stable, oxide }) => {
- it('should be possible to use contrast-more and contrast-less variants', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
+it('should be possible to use contrast-more and contrast-less variants', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .bg-white {
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .bg-white {
+ --tw-bg-opacity: 1;
+ background-color: rgb(255 255 255 / var(--tw-bg-opacity));
+ }
+ @media (prefers-contrast: more) {
+ .contrast-more\:bg-pink-500 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(236 72 153 / var(--tw-bg-opacity));
+ }
+ }
+ @media (prefers-contrast: less) {
+ .contrast-less\:bg-black {
+ --tw-bg-opacity: 1;
+ background-color: rgb(0 0 0 / var(--tw-bg-opacity));
+ }
+ }
+ `)
+ })
+})
+
+it('dark mode should appear after the contrast variants', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ @media (prefers-contrast: more) {
+ .contrast-more\:bg-black {
+ --tw-bg-opacity: 1;
+ background-color: rgb(0 0 0 / var(--tw-bg-opacity));
+ }
+ }
+ @media (prefers-color-scheme: dark) {
+ .dark\:bg-white {
--tw-bg-opacity: 1;
background-color: rgb(255 255 255 / var(--tw-bg-opacity));
}
- @media (prefers-contrast: more) {
- .contrast-more\:bg-pink-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(236 72 153 / var(--tw-bg-opacity));
- }
- }
- @media (prefers-contrast: less) {
- .contrast-less\:bg-black {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .bg-white {
- background-color: #fff;
- }
- @media (prefers-contrast: more) {
- .contrast-more\:bg-pink-500 {
- background-color: #ec4899;
- }
- }
- @media (prefers-contrast: less) {
- .contrast-less\:bg-black {
- background-color: #000;
- }
- }
- `)
- })
- })
-
- it('dark mode should appear after the contrast variants', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- @media (prefers-contrast: more) {
- .contrast-more\:bg-black {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- }
- @media (prefers-color-scheme: dark) {
- .dark\:bg-white {
- --tw-bg-opacity: 1;
- background-color: rgb(255 255 255 / var(--tw-bg-opacity));
- }
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- @media (prefers-contrast: more) {
- .contrast-more\:bg-black {
- background-color: #000;
- }
- }
- @media (prefers-color-scheme: dark) {
- .dark\:bg-white {
- background-color: #fff;
- }
- }
- `)
- })
+ }
+ `)
})
})
diff --git a/tests/prefix.test.js b/tests/prefix.test.js
index ea3d041ff..79b8413e8 100644
--- a/tests/prefix.test.js
+++ b/tests/prefix.test.js
@@ -1,625 +1,639 @@
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(({ stable, oxide }) => {
- oxide.test.todo('prefix')
- stable.test('prefix', () => {
- let config = {
- prefix: 'tw-',
- darkMode: 'class',
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- theme: {
- animation: {
- spin: 'spin 1s linear infinite',
- ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
- },
- keyframes: {
- spin: { to: { transform: 'rotate(360deg)' } },
- },
+test('prefix', () => {
+ let config = {
+ prefix: 'tw-',
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
},
- plugins: [
- function ({ addComponents, addUtilities }) {
- addComponents({
- '.btn-prefix': {
+ ],
+ corePlugins: { preflight: false },
+ theme: {
+ animation: {
+ spin: 'spin 1s linear infinite',
+ ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
+ },
+ keyframes: {
+ spin: { to: { transform: 'rotate(360deg)' } },
+ },
+ },
+ plugins: [
+ function ({ addComponents, addUtilities }) {
+ addComponents({
+ '.btn-prefix': {
+ button: 'yes',
+ },
+ })
+ addComponents(
+ {
+ '.btn-no-prefix': {
button: 'yes',
},
- })
- addComponents(
- {
- '.btn-no-prefix': {
- button: 'yes',
- },
- },
- { respectPrefix: false }
- )
- addUtilities({
- '.custom-util-prefix': {
+ },
+ { respectPrefix: false }
+ )
+ addUtilities({
+ '.custom-util-prefix': {
+ button: 'no',
+ },
+ })
+ addUtilities(
+ {
+ '.custom-util-no-prefix': {
button: 'no',
},
- })
- addUtilities(
- {
- '.custom-util-no-prefix': {
- button: 'no',
- },
- },
- { respectPrefix: false }
- )
- },
- ],
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @layer components {
- .custom-component {
- @apply tw-font-bold dark:group-hover:tw-font-normal;
- }
- }
- @tailwind utilities;
- @layer utilities {
- .custom-utility {
- foo: bar;
- }
- }
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .tw-container {
- width: 100%;
- }
- @media (min-width: 640px) {
- .tw-container {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .tw-container {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .tw-container {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .tw-container {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .tw-container {
- max-width: 1536px;
- }
- }
- .tw-btn-prefix,
- .btn-no-prefix {
- button: yes;
- }
- .custom-component {
- font-weight: 700;
- }
- :is(.tw-dark .tw-group:hover .custom-component) {
- font-weight: 400;
- }
- .tw--ml-4 {
- margin-left: -1rem;
- }
- .tw-animate-ping {
- animation: 1s cubic-bezier(0, 0, 0.2, 1) infinite ping;
- }
- @keyframes tw-spin {
- to {
- transform: rotate(360deg);
- }
- }
- .tw-animate-spin {
- animation: 1s linear infinite tw-spin;
- }
- .tw-font-bold {
- font-weight: 700;
- }
- .tw-custom-util-prefix,
- .custom-util-no-prefix {
- button: no;
- }
- .tw-group:hover .group-hover\:focus-within\:tw-text-left:focus-within {
- text-align: left;
- }
- :is([dir='rtl'] .rtl\:active\:tw-text-center:active) {
- text-align: center;
- }
- @media (prefers-reduced-motion: no-preference) {
- .motion-safe\:hover\:tw-text-center:hover {
- text-align: center;
- }
- }
- :is(.tw-dark .dark\:tw-bg-\[rgb\(255\,0\,0\)\]) {
- --tw-bg-opacity: 1;
- background-color: rgb(255 0 0 / var(--tw-bg-opacity));
- }
- :is(.tw-dark .dark\:focus\:tw-text-left:focus) {
- text-align: left;
- }
- @media (min-width: 768px) {
- .md\:tw--ml-5 {
- margin-left: -1.25rem;
- }
- .md\:hover\:tw--ml-6:hover {
- margin-left: -1.5rem;
- }
- .md\:hover\:tw-text-right:hover {
- text-align: right;
- }
- }
- `)
- })
- })
-
- oxide.test.todo('negative values: marker before prefix')
- stable.test('negative values: marker before prefix', async () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- await run(input, config)
-
- const result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .-tw-top-1 {
- top: -0.25rem;
- }
- `)
- })
-
- oxide.test.todo('negative values: marker after prefix')
- stable.test('negative values: marker after prefix', async () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- await run(input, config)
-
- const result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .tw--top-1 {
- top: -0.25rem;
- }
- `)
- })
-
- oxide.test.todo('negative values: marker before prefix and arbitrary value')
- stable.test('negative values: marker before prefix and arbitrary value', async () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- await run(input, config)
-
- const result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .-tw-top-\[1px\] {
- top: -1px;
- }
- `)
- })
-
- oxide.test.todo('negative values: marker after prefix and arbitrary value')
- stable.test('negative values: marker after prefix and arbitrary value', async () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- await run(input, config)
-
- const result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .tw--top-\[1px\] {
- top: -1px;
- }
- `)
- })
-
- oxide.test.todo('negative values: no marker and arbitrary value')
- stable.test('negative values: no marker and arbitrary value', async () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- await run(input, config)
-
- const result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .tw-top-\[-1px\] {
- top: -1px;
- }
- `)
- })
-
- oxide.test.todo('negative values: variant versions')
- stable.test('negative values: variant versions', async () => {
- let config = {
- prefix: 'tw-',
- content: [
- {
- raw: html`
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- await run(input, config)
-
- const result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .hover\:-tw-top-1:hover {
- top: -0.25rem;
- }
- .hover\:-tw-top-\[1px\]:hover {
- top: -1px;
- }
- .hover\:tw--top-1:hover {
- top: -0.25rem;
- }
- .hover\:tw--top-\[1px\]:hover,
- .hover\:tw-top-\[-1px\]:hover {
- top: -1px;
- }
- `)
- })
-
- oxide.test.todo('negative values: prefix and apply')
- stable.test('negative values: prefix and apply', async () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
-
- .a {
- @apply hover:tw--top-1;
- }
- .b {
- @apply hover:-tw-top-1;
- }
- .c {
- @apply hover:-tw-top-[1px];
- }
- .d {
- @apply hover:tw--top-[1px];
- }
- .e {
- @apply hover:tw-top-[-1px];
- }
- `
-
- await run(input, config)
-
- const result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .a:hover,
- .b:hover {
- top: -0.25rem;
- }
- .c:hover,
- .d:hover,
- .e:hover {
- top: -1px;
- }
- `)
- })
-
- oxide.test.todo('negative values: prefix in the safelist')
- stable.test('negative values: prefix in the safelist', async () => {
- let config = {
- prefix: 'tw-',
- safelist: [{ pattern: /-tw-top-1/g }, { pattern: /tw--top-1/g }],
- theme: {
- inset: {
- 1: '0.25rem',
- },
+ },
+ { respectPrefix: false }
+ )
},
- content: [{ raw: html`` }],
- corePlugins: { preflight: false },
- }
+ ],
+ }
- let input = css`
- @tailwind utilities;
- `
-
- await run(input, config)
-
- const result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .-tw-top-1,
- .tw--top-1 {
- top: -0.25rem;
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @layer components {
+ .custom-component {
+ @apply tw-font-bold dark:group-hover:tw-font-normal;
}
- `)
- })
-
- oxide.test.todo('prefix with negative values and variants in the safelist')
- stable.test('prefix with negative values and variants in the safelist', async () => {
- let config = {
- prefix: 'tw-',
- safelist: [
- { pattern: /-tw-top-1/, variants: ['hover', 'sm:hover'] },
- { pattern: /tw--top-1/, variants: ['hover', 'sm:hover'] },
- ],
- theme: {
- inset: {
- 1: '0.25rem',
- },
- },
- content: [{ raw: html`` }],
- corePlugins: { preflight: false },
}
+ @tailwind utilities;
+ @layer utilities {
+ .custom-utility {
+ foo: bar;
+ }
+ }
+ `
- let input = css`
- @tailwind utilities;
- `
-
- await run(input, config)
-
- const result = await run(input, config)
-
+ return run(input, config).then((result) => {
expect(result.css).toMatchFormattedCss(css`
- .-tw-top-1,
- .tw--top-1,
- .hover\:-tw-top-1:hover,
- .hover\:tw--top-1:hover {
- top: -0.25rem;
+ ${defaults}
+ .tw-container {
+ width: 100%;
}
@media (min-width: 640px) {
- .sm\:hover\:-tw-top-1:hover,
- .sm\:hover\:tw--top-1:hover {
- top: -0.25rem;
+ .tw-container {
+ max-width: 640px;
}
}
- `)
- })
-
- oxide.test.todo('prefix does not detect and generate unnecessary classes')
- stable.test('prefix does not detect and generate unnecessary classes', async () => {
- let config = {
- prefix: 'tw-_',
- content: [{ raw: html`-aaa-filter aaaa-table aaaa-hidden` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- const result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css``)
- })
-
- oxide.test.todo('supports prefixed utilities using arbitrary values')
- stable.test('supports prefixed utilities using arbitrary values', async () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`foo` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- .foo {
- @apply tw-text-[color:rgb(var(--button-background,var(--primary-button-background)))];
- @apply tw-ease-[cubic-bezier(0.77,0,0.175,1)];
- @apply tw-rounded-[min(4px,var(--input-border-radius))];
- }
- `
-
- const result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .foo {
- color: rgb(var(--button-background, var(--primary-button-background)));
- border-radius: min(4px, var(--input-border-radius));
- transition-timing-function: cubic-bezier(0.77, 0, 0.175, 1);
- }
- `)
- })
-
- oxide.test.todo('supports non-word prefixes (1)')
- stable.test('supports non-word prefixes (1)', async () => {
- let config = {
- prefix: '@',
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- @layer utilities {
- .my-utility {
- color: orange;
+ @media (min-width: 768px) {
+ .tw-container {
+ max-width: 768px;
}
}
- .foo {
- @apply @text-white;
- @apply [background-color:red];
+ @media (min-width: 1024px) {
+ .tw-container {
+ max-width: 1024px;
+ }
}
- `
-
- const result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .\@bg-black {
+ @media (min-width: 1280px) {
+ .tw-container {
+ max-width: 1280px;
+ }
+ }
+ @media (min-width: 1536px) {
+ .tw-container {
+ max-width: 1536px;
+ }
+ }
+ .tw-btn-prefix,
+ .btn-no-prefix {
+ button: yes;
+ }
+ .custom-component {
+ font-weight: 700;
+ }
+ :is(.tw-dark .tw-group:hover .custom-component) {
+ font-weight: 400;
+ }
+ .tw--ml-4 {
+ margin-left: -1rem;
+ }
+ .tw-animate-ping {
+ animation: 1s cubic-bezier(0, 0, 0.2, 1) infinite ping;
+ }
+ @keyframes tw-spin {
+ to {
+ transform: rotate(360deg);
+ }
+ }
+ .tw-animate-spin {
+ animation: 1s linear infinite tw-spin;
+ }
+ .tw-font-bold {
+ font-weight: 700;
+ }
+ .tw-custom-util-prefix,
+ .custom-util-no-prefix {
+ button: no;
+ }
+ .tw-group:hover .group-hover\:focus-within\:tw-text-left:focus-within {
+ text-align: left;
+ }
+ :is([dir='rtl'] .rtl\:active\:tw-text-center:active) {
+ text-align: center;
+ }
+ @media (prefers-reduced-motion: no-preference) {
+ .motion-safe\:hover\:tw-text-center:hover {
+ text-align: center;
+ }
+ }
+ :is(.tw-dark .dark\:tw-bg-\[rgb\(255\,0\,0\)\]) {
--tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
+ background-color: rgb(255 0 0 / var(--tw-bg-opacity));
}
- .\@underline {
- text-decoration-line: underline;
+ :is(.tw-dark .dark\:focus\:tw-text-left:focus) {
+ text-align: left;
}
- .my-utility {
- color: orange;
- }
- .foo {
- --tw-text-opacity: 1;
- color: rgb(255 255 255 / var(--tw-text-opacity));
- background-color: red;
- }
- .hover\:before\:\@content-\[\'Hovering\'\]:hover:before {
- --tw-content: 'Hovering';
- content: var(--tw-content);
- }
- `)
- })
-
- oxide.test.todo('supports non-word prefixes (2)')
- stable.test('supports non-word prefixes (2)', async () => {
- let config = {
- prefix: '@]$',
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- @layer utilities {
- .my-utility {
- color: orange;
+ @media (min-width: 768px) {
+ .md\:tw--ml-5 {
+ margin-left: -1.25rem;
+ }
+ .md\:hover\:tw--ml-6:hover {
+ margin-left: -1.5rem;
+ }
+ .md\:hover\:tw-text-right:hover {
+ text-align: right;
}
- }
- .foo {
- @apply @]$text-white;
- @apply [background-color:red];
- }
- `
-
- const result = await run(input, config)
-
- // TODO: The class `.hover\:before\:\@\]\$content-\[\'Hovering\'\]:hover::before` is not generated
- // This happens because of the parenthesis/brace/bracket clipping performed on candidates
-
- expect(result.css).toMatchFormattedCss(css`
- .\@\]\$bg-black {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- }
- .\@\]\$underline {
- text-decoration-line: underline;
- }
- .my-utility {
- color: orange;
- }
- .foo {
- --tw-text-opacity: 1;
- color: rgb(255 255 255 / var(--tw-text-opacity));
- background-color: red;
}
`)
})
})
+
+test('negative values: marker before prefix', async () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ await run(input, config)
+
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .-tw-top-1 {
+ top: -0.25rem;
+ }
+ `)
+})
+
+test('negative values: marker after prefix', async () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ await run(input, config)
+
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .tw--top-1 {
+ top: -0.25rem;
+ }
+ `)
+})
+
+test('negative values: marker before prefix and arbitrary value', async () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ await run(input, config)
+
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .-tw-top-\[1px\] {
+ top: -1px;
+ }
+ `)
+})
+
+test('negative values: marker after prefix and arbitrary value', async () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ await run(input, config)
+
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .tw--top-\[1px\] {
+ top: -1px;
+ }
+ `)
+})
+
+test('negative values: no marker and arbitrary value', async () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ await run(input, config)
+
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .tw-top-\[-1px\] {
+ top: -1px;
+ }
+ `)
+})
+
+test('negative values: variant versions', async () => {
+ let config = {
+ prefix: 'tw-',
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ await run(input, config)
+
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .hover\:-tw-top-1:hover {
+ top: -0.25rem;
+ }
+ .hover\:-tw-top-\[1px\]:hover {
+ top: -1px;
+ }
+ .hover\:tw--top-1:hover {
+ top: -0.25rem;
+ }
+ .hover\:tw--top-\[1px\]:hover,
+ .hover\:tw-top-\[-1px\]:hover {
+ top: -1px;
+ }
+ `)
+})
+
+test('negative values: prefix and apply', async () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+
+ .a {
+ @apply hover:tw--top-1;
+ }
+ .b {
+ @apply hover:-tw-top-1;
+ }
+ .c {
+ @apply hover:-tw-top-[1px];
+ }
+ .d {
+ @apply hover:tw--top-[1px];
+ }
+ .e {
+ @apply hover:tw-top-[-1px];
+ }
+ `
+
+ await run(input, config)
+
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .a:hover,
+ .b:hover {
+ top: -0.25rem;
+ }
+ .c:hover,
+ .d:hover,
+ .e:hover {
+ top: -1px;
+ }
+ `)
+})
+
+test('negative values: prefix in the safelist', async () => {
+ let config = {
+ prefix: 'tw-',
+ safelist: [{ pattern: /-tw-top-1/g }, { pattern: /tw--top-1/g }],
+ theme: {
+ inset: {
+ 1: '0.25rem',
+ },
+ },
+ content: [{ raw: html`` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ await run(input, config)
+
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .-tw-top-1,
+ .tw--top-1 {
+ top: -0.25rem;
+ }
+ `)
+})
+
+test('prefix with negative values and variants in the safelist', async () => {
+ let config = {
+ prefix: 'tw-',
+ safelist: [
+ { pattern: /-tw-top-1/, variants: ['hover', 'sm:hover'] },
+ { pattern: /tw--top-1/, variants: ['hover', 'sm:hover'] },
+ ],
+ theme: {
+ inset: {
+ 1: '0.25rem',
+ },
+ },
+ content: [{ raw: html`` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ await run(input, config)
+
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .-tw-top-1,
+ .tw--top-1,
+ .hover\:-tw-top-1:hover,
+ .hover\:tw--top-1:hover {
+ top: -0.25rem;
+ }
+ @media (min-width: 640px) {
+ .sm\:hover\:-tw-top-1:hover,
+ .sm\:hover\:tw--top-1:hover {
+ top: -0.25rem;
+ }
+ }
+ `)
+})
+
+test('prefix does not detect and generate unnecessary classes', async () => {
+ let config = {
+ prefix: 'tw-_',
+ content: [{ raw: html`-aaa-filter aaaa-table aaaa-hidden` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css``)
+})
+
+test('supports prefixed utilities using arbitrary values', async () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`foo` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ .foo {
+ @apply tw-text-[color:rgb(var(--button-background,var(--primary-button-background)))];
+ @apply tw-ease-[cubic-bezier(0.77,0,0.175,1)];
+ @apply tw-rounded-[min(4px,var(--input-border-radius))];
+ }
+ `
+
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ color: rgb(var(--button-background, var(--primary-button-background)));
+ border-radius: min(4px, var(--input-border-radius));
+ transition-timing-function: cubic-bezier(0.77, 0, 0.175, 1);
+ }
+ `)
+})
+
+test('supports non-word prefixes (1)', async () => {
+ let config = {
+ prefix: '@',
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
+ .my-utility {
+ color: orange;
+ }
+ }
+ .foo {
+ @apply @text-white;
+ @apply [background-color:red];
+ }
+ `
+
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .\@bg-black {
+ --tw-bg-opacity: 1;
+ background-color: rgb(0 0 0 / var(--tw-bg-opacity));
+ }
+ .\@underline {
+ text-decoration-line: underline;
+ }
+ .my-utility {
+ color: orange;
+ }
+ .foo {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity));
+ background-color: red;
+ }
+ .hover\:before\:\@content-\[\'Hovering\'\]:hover:before {
+ --tw-content: 'Hovering';
+ content: var(--tw-content);
+ }
+ `)
+})
+
+test('supports non-word prefixes (2)', async () => {
+ let config = {
+ prefix: '@]$',
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
+ .my-utility {
+ color: orange;
+ }
+ }
+ .foo {
+ @apply @]$text-white;
+ @apply [background-color:red];
+ }
+ `
+
+ const result = await run(input, config)
+
+ // TODO: The class `.hover\:before\:\@\]\$content-\[\'Hovering\'\]:hover::before` is not generated
+ // This happens because of the parenthesis/brace/bracket clipping performed on candidates
+
+ expect(result.css).toMatchFormattedCss(css`
+ .\@\]\$bg-black {
+ --tw-bg-opacity: 1;
+ background-color: rgb(0 0 0 / var(--tw-bg-opacity));
+ }
+ .\@\]\$underline {
+ text-decoration-line: underline;
+ }
+ .my-utility {
+ color: orange;
+ }
+ .foo {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity));
+ background-color: red;
+ }
+ `)
+})
+
+test('does not prefix arbitrary group/peer classes', async () => {
+ let config = {
+ prefix: 'tw-',
+ content: [
+ {
+ raw: html`
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ const result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .tw-group.foo .group-\[\&\.foo\]\:tw-flex,
+ .tw-peer.foo ~ .peer-\[\&\.foo\]\:tw-flex {
+ display: flex;
+ }
+ `)
+})
diff --git a/tests/prefixSelector.test.js b/tests/prefixSelector.test.js
index c7db08d03..92fd6194f 100644
--- a/tests/prefixSelector.test.js
+++ b/tests/prefixSelector.test.js
@@ -1,20 +1,17 @@
import prefix from '../src/util/prefixSelector'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- test('it prefixes classes with the provided prefix', () => {
- expect(prefix('tw-', '.foo')).toEqual('.tw-foo')
- })
-
- test('it properly prefixes selectors with non-standard characters', () => {
- expect(prefix('tw-', '.hello\\:world')).toEqual('.tw-hello\\:world')
- expect(prefix('tw-', '.foo\\/bar')).toEqual('.tw-foo\\/bar')
- expect(prefix('tw-', '.wew\\.lad')).toEqual('.tw-wew\\.lad')
- })
-
- test('it prefixes all classes in a selector', () => {
- expect(prefix('tw-', '.btn-blue .w-1\\/4 > h1.text-xl + a .bar')).toEqual(
- '.tw-btn-blue .tw-w-1\\/4 > h1.tw-text-xl + a .tw-bar'
- )
- })
+test('it prefixes classes with the provided prefix', () => {
+ expect(prefix('tw-', '.foo')).toEqual('.tw-foo')
+})
+
+test('it properly prefixes selectors with non-standard characters', () => {
+ expect(prefix('tw-', '.hello\\:world')).toEqual('.tw-hello\\:world')
+ expect(prefix('tw-', '.foo\\/bar')).toEqual('.tw-foo\\/bar')
+ expect(prefix('tw-', '.wew\\.lad')).toEqual('.tw-wew\\.lad')
+})
+
+test('it prefixes all classes in a selector', () => {
+ expect(prefix('tw-', '.btn-blue .w-1\\/4 > h1.text-xl + a .bar')).toEqual(
+ '.tw-btn-blue .tw-w-1\\/4 > h1.tw-text-xl + a .tw-bar'
+ )
})
diff --git a/tests/preflight.test.js b/tests/preflight.test.js
deleted file mode 100644
index 4f6f722c7..000000000
--- a/tests/preflight.test.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import { crosscheck, run, html, css } from './util/run'
-
-crosscheck(({ stable, oxide }) => {
- it('preflight has a correct border color fallback', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- borderColor: ({ theme }) => theme('colors'),
- },
- plugins: [],
- corePlugins: { preflight: true },
- }
-
- let input = css`
- @tailwind base;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toContain(`border-color: currentColor;`)
- // Lightning CSS optimizes this to just `border-color: 0 solid;` based on the br value.
- oxide.expect(result.css).toContain(`border: 0 solid;`)
- })
- })
-})
diff --git a/tests/raw-content.oxide.test.css b/tests/raw-content.oxide.test.css
deleted file mode 100644
index aa5abd127..000000000
--- a/tests/raw-content.oxide.test.css
+++ /dev/null
@@ -1,759 +0,0 @@
-.container {
- width: 100%;
-}
-@media (min-width: 640px) {
- .container {
- max-width: 640px;
- }
-}
-@media (min-width: 768px) {
- .container {
- max-width: 768px;
- }
-}
-@media (min-width: 1024px) {
- .container {
- max-width: 1024px;
- }
-}
-@media (min-width: 1280px) {
- .container {
- max-width: 1280px;
- }
-}
-@media (min-width: 1536px) {
- .container {
- max-width: 1536px;
- }
-}
-.sr-only {
- width: 1px;
- height: 1px;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- border-width: 0;
- margin: -1px;
- padding: 0;
- position: absolute;
- overflow: hidden;
-}
-.pointer-events-none {
- pointer-events: none;
-}
-.invisible {
- visibility: hidden;
-}
-.collapse {
- visibility: collapse;
-}
-.absolute {
- position: absolute;
-}
-.inset-0 {
- inset: 0;
-}
-.inset-x-2 {
- left: 0.5rem;
- right: 0.5rem;
-}
-.inset-y-4 {
- top: 1rem;
- bottom: 1rem;
-}
-.bottom-12 {
- bottom: 3rem;
-}
-.left-16 {
- left: 4rem;
-}
-.right-8 {
- right: 2rem;
-}
-.top-6 {
- top: 1.5rem;
-}
-.isolate {
- isolation: isolate;
-}
-.isolation-auto {
- isolation: auto;
-}
-.z-30 {
- z-index: 30;
-}
-.order-2 {
- order: 2;
-}
-.order-last {
- order: 9999;
-}
-.col-span-3 {
- grid-column: span 3 / span 3;
-}
-.col-start-1 {
- grid-column-start: 1;
-}
-.col-end-4 {
- grid-column-end: 4;
-}
-.row-span-2 {
- grid-row: span 2 / span 2;
-}
-.row-start-3 {
- grid-row-start: 3;
-}
-.row-end-5 {
- grid-row-end: 5;
-}
-.float-right {
- float: right;
-}
-.clear-left {
- clear: left;
-}
-.m-4 {
- margin: 1rem;
-}
-.mx-auto {
- margin-left: auto;
- margin-right: auto;
-}
-.my-2 {
- margin-top: 0.5rem;
- margin-bottom: 0.5rem;
-}
-.mb-3 {
- margin-bottom: 0.75rem;
-}
-.ml-4 {
- margin-left: 1rem;
-}
-.mr-1 {
- margin-right: 0.25rem;
-}
-.mt-0 {
- margin-top: 0;
-}
-.box-border {
- box-sizing: border-box;
-}
-.inline-grid {
- display: inline-grid;
-}
-.hidden {
- display: none;
-}
-.h-16 {
- height: 4rem;
-}
-.max-h-screen {
- max-height: 100vh;
-}
-.min-h-0 {
- min-height: 0;
-}
-.w-12 {
- width: 3rem;
-}
-.min-w-min {
- min-width: min-content;
-}
-.max-w-full {
- max-width: 100%;
-}
-.flex-1 {
- flex: 1;
-}
-.flex-shrink {
- flex-shrink: 1;
-}
-.flex-shrink-0 {
- flex-shrink: 0;
-}
-.flex-grow {
- flex-grow: 1;
-}
-.flex-grow-0 {
- flex-grow: 0;
-}
-.table-fixed {
- table-layout: fixed;
-}
-.caption-top {
- caption-side: top;
-}
-.caption-bottom {
- caption-side: bottom;
-}
-.border-collapse {
- border-collapse: collapse;
-}
-.origin-top-right {
- transform-origin: 100% 0;
-}
-.-translate-x-3 {
- --tw-translate-x: -0.75rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.-translate-x-4 {
- --tw-translate-x: -1rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.translate-x-5 {
- --tw-translate-x: 1.25rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.translate-y-6 {
- --tw-translate-y: 1.5rem;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.rotate-3 {
- --tw-rotate: 3deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.skew-x-12 {
- --tw-skew-x: 12deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.skew-y-12 {
- --tw-skew-y: 12deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.scale-95 {
- --tw-scale-x: 0.95;
- --tw-scale-y: 0.95;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.transform {
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.transform-gpu {
- transform: translate3d(var(--tw-translate-x), var(--tw-translate-y), 0) rotate(var(--tw-rotate))
- skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
- scaleY(var(--tw-scale-y));
-}
-.animate-none {
- animation: none;
-}
-@keyframes spin {
- to {
- transform: rotate(360deg);
- }
-}
-.animate-spin {
- animation: 1s linear infinite spin;
-}
-.cursor-pointer {
- cursor: pointer;
-}
-.select-none {
- user-select: none;
-}
-.resize-none {
- resize: none;
-}
-.list-inside {
- list-style-position: inside;
-}
-.list-disc {
- list-style-type: disc;
-}
-.appearance-none {
- appearance: none;
-}
-.auto-cols-min {
- grid-auto-columns: min-content;
-}
-.grid-flow-row {
- grid-auto-flow: row;
-}
-.auto-rows-max {
- grid-auto-rows: max-content;
-}
-.grid-cols-4 {
- grid-template-columns: repeat(4, minmax(0, 1fr));
-}
-.grid-rows-3 {
- grid-template-rows: repeat(3, minmax(0, 1fr));
-}
-.flex-row-reverse {
- flex-direction: row-reverse;
-}
-.flex-wrap {
- flex-wrap: wrap;
-}
-.place-content-start {
- place-content: start;
-}
-.place-items-end {
- place-items: end;
-}
-.content-center {
- align-content: center;
-}
-.items-start {
- align-items: flex-start;
-}
-.justify-center {
- justify-content: center;
-}
-.justify-items-end {
- justify-items: end;
-}
-.gap-4 {
- gap: 1rem;
-}
-.gap-x-2 {
- column-gap: 0.5rem;
-}
-.gap-y-3 {
- row-gap: 0.75rem;
-}
-.space-x-4 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-inline-start: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
- margin-inline-end: calc(1rem * var(--tw-space-x-reverse));
-}
-.space-y-3 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 0;
- margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
- margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
-}
-.space-y-reverse > :not([hidden]) ~ :not([hidden]) {
- --tw-space-y-reverse: 1;
-}
-.space-x-reverse > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 1;
-}
-.divide-x-0 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-x-reverse: 0;
- border-inline-end-width: calc(0px * var(--tw-divide-x-reverse));
- border-inline-start-width: calc(0px * calc(1 - var(--tw-divide-x-reverse)));
-}
-.divide-x-2 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-x-reverse: 0;
- border-inline-end-width: calc(2px * var(--tw-divide-x-reverse));
- border-inline-start-width: calc(2px * calc(1 - var(--tw-divide-x-reverse)));
-}
-.divide-y-0 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(0px * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(0px * var(--tw-divide-y-reverse));
-}
-.divide-y-4 > :not([hidden]) ~ :not([hidden]) {
- --tw-divide-y-reverse: 0;
- border-top-width: calc(4px * calc(1 - var(--tw-divide-y-reverse)));
- border-bottom-width: calc(4px * var(--tw-divide-y-reverse));
-}
-.divide-dotted > :not([hidden]) ~ :not([hidden]) {
- border-style: dotted;
-}
-.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {
- border-color: #e5e7eb;
-}
-.place-self-center {
- place-self: center;
-}
-.self-end {
- align-self: flex-end;
-}
-.justify-self-start {
- justify-self: start;
-}
-.overflow-hidden {
- overflow: hidden;
-}
-.overscroll-contain {
- overscroll-behavior: contain;
-}
-.scroll-smooth {
- scroll-behavior: smooth;
-}
-.truncate {
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden;
-}
-.overflow-ellipsis {
- text-overflow: ellipsis;
-}
-.whitespace-nowrap {
- white-space: nowrap;
-}
-.break-words {
- overflow-wrap: break-word;
-}
-.rounded-md {
- border-radius: 0.375rem;
-}
-.border {
- border-width: 1px;
-}
-.border-2 {
- border-width: 2px;
-}
-.border-solid {
- border-style: solid;
-}
-.border-black {
- border-color: #000;
-}
-.bg-green-500 {
- background-color: #22c55e;
-}
-.bg-gradient-to-r {
- background-image: linear-gradient(to right, var(--tw-gradient-stops));
-}
-.from-red-300 {
- --tw-gradient-from: #fca5a5 var(--tw-gradient-from-position);
- --tw-gradient-to: #fca5a500 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
-}
-.via-purple-200 {
- --tw-gradient-to: #e9d5ff00 var(--tw-gradient-to-position);
- --tw-gradient-stops: var(--tw-gradient-from), #e9d5ff var(--tw-gradient-via-position),
- var(--tw-gradient-to);
-}
-.to-blue-400 {
- --tw-gradient-to: #60a5fa var(--tw-gradient-to-position);
-}
-.decoration-slice {
- -webkit-box-decoration-break: slice;
- box-decoration-break: slice;
-}
-.decoration-clone {
- -webkit-box-decoration-break: clone;
- box-decoration-break: clone;
-}
-.bg-cover {
- background-size: cover;
-}
-.bg-local {
- background-attachment: local;
-}
-.bg-clip-border {
- background-clip: border-box;
-}
-.bg-top {
- background-position: top;
-}
-.bg-no-repeat {
- background-repeat: no-repeat;
-}
-.bg-origin-border {
- background-origin: border-box;
-}
-.bg-origin-padding {
- background-origin: padding-box;
-}
-.bg-origin-content {
- background-origin: content-box;
-}
-.fill-current {
- fill: currentColor;
-}
-.stroke-current {
- stroke: currentColor;
-}
-.stroke-2 {
- stroke-width: 2px;
-}
-.object-cover {
- object-fit: cover;
-}
-.object-bottom {
- object-position: bottom;
-}
-.p-4 {
- padding: 1rem;
-}
-.px-3 {
- padding-left: 0.75rem;
- padding-right: 0.75rem;
-}
-.py-2 {
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
-}
-.pb-3 {
- padding-bottom: 0.75rem;
-}
-.pl-4 {
- padding-left: 1rem;
-}
-.pr-2 {
- padding-right: 0.5rem;
-}
-.pt-1 {
- padding-top: 0.25rem;
-}
-.text-center {
- text-align: center;
-}
-.align-middle {
- vertical-align: middle;
-}
-.font-sans {
- font-family: 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;
-}
-.text-2xl {
- font-size: 1.5rem;
- line-height: 2rem;
-}
-.font-medium {
- font-weight: 500;
-}
-.uppercase {
- text-transform: uppercase;
-}
-.not-italic {
- font-style: normal;
-}
-.ordinal {
- --tw-ordinal: ordinal;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
-}
-.tabular-nums {
- --tw-numeric-spacing: tabular-nums;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
-}
-.diagonal-fractions {
- --tw-numeric-fraction: diagonal-fractions;
- font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
- var(--tw-numeric-spacing) var(--tw-numeric-fraction);
-}
-.leading-5 {
- line-height: 1.25rem;
-}
-.leading-relaxed {
- line-height: 1.625;
-}
-.tracking-tight {
- letter-spacing: -0.025em;
-}
-.text-indigo-500 {
- color: #6366f1;
-}
-.underline {
- text-decoration-line: underline;
-}
-.antialiased {
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-.placeholder-green-300::placeholder {
- color: #86efac;
-}
-.opacity-90 {
- opacity: 0.9;
-}
-.bg-blend-darken {
- background-blend-mode: darken;
-}
-.bg-blend-difference {
- background-blend-mode: difference;
-}
-.mix-blend-multiply {
- mix-blend-mode: multiply;
-}
-.mix-blend-saturation {
- mix-blend-mode: saturation;
-}
-.shadow {
- --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.shadow-lg {
- --tw-shadow: 0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;
- --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color),
- 0 4px 6px -4px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.ring {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.ring-4 {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
-}
-.ring-white {
- --tw-ring-color: #fff;
-}
-.ring-offset-2 {
- --tw-ring-offset-width: 2px;
-}
-.ring-offset-blue-300 {
- --tw-ring-offset-color: #93c5fd;
-}
-.blur-md {
- --tw-blur: blur(12px);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.brightness-150 {
- --tw-brightness: brightness(1.5);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.contrast-50 {
- --tw-contrast: contrast(0.5);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.drop-shadow-md {
- --tw-drop-shadow: drop-shadow(0 4px 3px #00000012) drop-shadow(0 2px 2px #0000000f);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.grayscale {
- --tw-grayscale: grayscale(100%);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.hue-rotate-60 {
- --tw-hue-rotate: hue-rotate(60deg);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.invert {
- --tw-invert: invert(100%);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.saturate-200 {
- --tw-saturate: saturate(2);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.sepia {
- --tw-sepia: sepia(100%);
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.filter {
- filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
- var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
-}
-.filter-none {
- filter: none;
-}
-.backdrop-blur-lg {
- --tw-backdrop-blur: blur(16px);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-brightness-50 {
- --tw-backdrop-brightness: brightness(0.5);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-contrast-0 {
- --tw-backdrop-contrast: contrast(0);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-grayscale {
- --tw-backdrop-grayscale: grayscale(100%);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-hue-rotate-90 {
- --tw-backdrop-hue-rotate: hue-rotate(90deg);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-invert {
- --tw-backdrop-invert: invert(100%);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-opacity-75 {
- --tw-backdrop-opacity: opacity(0.75);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-saturate-150 {
- --tw-backdrop-saturate: saturate(1.5);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-sepia {
- --tw-backdrop-sepia: sepia(100%);
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-filter {
- backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
- var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
- var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
-}
-.backdrop-filter-none {
- backdrop-filter: none;
-}
-.transition {
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke,
- opacity, box-shadow, transform, filter, backdrop-filter;
- transition-duration: 0.15s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-.transition-all {
- transition-property: all;
- transition-duration: 0.15s;
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-.delay-300 {
- transition-delay: 0.3s;
-}
-.duration-200 {
- transition-duration: 0.2s;
-}
-.ease-in-out {
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
diff --git a/tests/raw-content.test.css b/tests/raw-content.test.css
index dba9f3194..3038e8a34 100644
--- a/tests/raw-content.test.css
+++ b/tests/raw-content.test.css
@@ -27,11 +27,11 @@
}
}
.sr-only {
- width: 1px;
- height: 1px;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border-width: 0;
+ width: 1px;
+ height: 1px;
margin: -1px;
padding: 0;
position: absolute;
@@ -265,6 +265,7 @@
cursor: pointer;
}
.select-none {
+ -webkit-user-select: none;
user-select: none;
}
.resize-none {
@@ -277,6 +278,7 @@
list-style-type: disc;
}
.appearance-none {
+ -webkit-appearance: none;
appearance: none;
}
.auto-cols-min {
@@ -524,9 +526,8 @@
vertical-align: middle;
}
.font-sans {
- font-family: 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;
+ font-family: ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji,
+ Segoe UI Symbol, Noto Color Emoji;
}
.text-2xl {
font-size: 1.5rem;
@@ -701,69 +702,110 @@
}
.backdrop-blur-lg {
--tw-backdrop-blur: blur(16px);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-brightness-50 {
--tw-backdrop-brightness: brightness(0.5);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-contrast-0 {
--tw-backdrop-contrast: contrast(0);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-grayscale {
--tw-backdrop-grayscale: grayscale(100%);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-hue-rotate-90 {
--tw-backdrop-hue-rotate: hue-rotate(90deg);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-invert {
--tw-backdrop-invert: invert(100%);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-opacity-75 {
--tw-backdrop-opacity: opacity(0.75);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-saturate-150 {
--tw-backdrop-saturate: saturate(1.5);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-sepia {
--tw-backdrop-sepia: sepia(100%);
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-filter {
+ -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
+ var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
+ var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
+ var(--tw-backdrop-sepia);
backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-filter-none {
+ -webkit-backdrop-filter: none;
backdrop-filter: none;
}
.transition {
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke,
- opacity, box-shadow, transform, filter, backdrop-filter;
+ opacity, box-shadow, transform, filter, -webkit-backdrop-filter, backdrop-filter;
transition-duration: 0.15s;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
diff --git a/tests/raw-content.test.js b/tests/raw-content.test.js
index 417c37485..a55e373fb 100644
--- a/tests/raw-content.test.js
+++ b/tests/raw-content.test.js
@@ -1,173 +1,164 @@
import fs from 'fs'
import path from 'path'
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(({ stable, oxide }) => {
- it('raw content', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
+it('raw content', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- stable
- .expect(result.css)
- .toMatchFormattedCss(
- fs.readFileSync(path.resolve(__dirname, './raw-content.test.css'), 'utf8')
- )
- oxide
- .expect(result.css)
- .toMatchFormattedCss(
- fs.readFileSync(path.resolve(__dirname, './raw-content.oxide.test.css'), 'utf8')
- )
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(
+ fs.readFileSync(path.resolve(__dirname, './raw-content.test.css'), 'utf8')
+ )
})
})
diff --git a/tests/relative-purge-paths.test.js b/tests/relative-purge-paths.test.js
index 95fbe7bad..0e7e5feed 100644
--- a/tests/relative-purge-paths.test.js
+++ b/tests/relative-purge-paths.test.js
@@ -1,24 +1,22 @@
-import { crosscheck, run, css } from './util/run'
+import { run, css } from './util/run'
-crosscheck(() => {
- test('relative purge paths', () => {
- let config = {
- content: ['./tests/relative-purge-paths.test.html'],
- corePlugins: { preflight: false },
- }
+test('relative purge paths', () => {
+ let config = {
+ content: ['./tests/relative-purge-paths.test.html'],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toIncludeCss(css`
- .font-bold {
- font-weight: 700;
- }
- `)
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toIncludeCss(css`
+ .font-bold {
+ font-weight: 700;
+ }
+ `)
})
})
diff --git a/tests/resolve-defaults-at-rules.test.js b/tests/resolve-defaults-at-rules.test.js
index 5c7e0738e..32bc25b6f 100644
--- a/tests/resolve-defaults-at-rules.test.js
+++ b/tests/resolve-defaults-at-rules.test.js
@@ -1,774 +1,844 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- test('basic utilities', async () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: ['transform', 'scale', 'rotate', 'skew'],
- }
+test('basic utilities', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: ['transform', 'scale', 'rotate', 'skew'],
+ }
- let input = css`
- @tailwind base;
- /* --- */
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ /* --- */
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- *,
- :before,
- :after,
- ::backdrop {
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- }
- .rotate-3 {
- --tw-rotate: 3deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .skew-y-6 {
- --tw-skew-y: 6deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .scale-x-110 {
- --tw-scale-x: 1.1;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- `)
- })
- })
-
- test('with pseudo-class variants', async () => {
- let config = {
- content: [
- { raw: html`
` },
- ],
- corePlugins: ['transform', 'scale', 'rotate', 'skew'],
- }
-
- let input = css`
- @tailwind base;
- /* --- */
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- *,
- :before,
- :after,
- ::backdrop {
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- }
- .hover\:scale-x-110:hover {
- --tw-scale-x: 1.1;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .focus\:rotate-3:focus {
- --tw-rotate: 3deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .hover\:focus\:skew-y-6:focus:hover {
- --tw-skew-y: 6deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- `)
- })
- })
-
- test('with pseudo-element variants', async () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: ['transform', 'scale', 'rotate', 'skew'],
- }
-
- let input = css`
- @tailwind base;
- /* --- */
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- *,
- :before,
- :after,
- ::backdrop {
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- }
- .before\:scale-x-110:before {
- content: var(--tw-content);
- --tw-scale-x: 1.1;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .after\:rotate-3:after {
- content: var(--tw-content);
- --tw-rotate: 3deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- `)
- })
- })
-
- test('with multi-class variants', async () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: ['transform', 'scale', 'rotate', 'skew'],
- }
-
- let input = css`
- @tailwind base;
- /* --- */
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- *,
- :before,
- :after,
- ::backdrop {
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- }
- .group:hover .group-hover\:scale-x-110 {
- --tw-scale-x: 1.1;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .peer:focus ~ .peer-focus\:rotate-3 {
- --tw-rotate: 3deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- `)
- })
- })
-
- test('with multi-class pseudo-element variants', async () => {
- let config = {
- content: [
- { raw: html`
` },
- ],
- corePlugins: ['transform', 'scale', 'rotate', 'skew'],
- }
-
- let input = css`
- @tailwind base;
- /* --- */
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- *,
- :before,
- :after,
- ::backdrop {
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- }
- .group:hover .group-hover\:before\:scale-x-110:before {
- content: var(--tw-content);
- --tw-scale-x: 1.1;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .peer:focus ~ .peer-focus\:after\:rotate-3:after {
- content: var(--tw-content);
- --tw-rotate: 3deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- `)
- })
- })
-
- test('with multi-class pseudo-element and pseudo-class variants', async () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: ['transform', 'scale', 'rotate', 'skew'],
- }
-
- let input = css`
- @tailwind base;
- /* --- */
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- *,
- :before,
- :after,
- ::backdrop {
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- }
- .group:hover .group-hover\:hover\:before\:scale-x-110:hover:before {
- content: var(--tw-content);
- --tw-scale-x: 1.1;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .peer:focus ~ .peer-focus\:focus\:after\:rotate-3:focus:after {
- content: var(--tw-content);
- --tw-rotate: 3deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- `)
- })
- })
-
- test('with apply', async () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: ['transform', 'scale', 'rotate', 'skew'],
- }
-
- let input = css`
- @tailwind base;
- /* --- */
- @tailwind utilities;
-
- @layer utilities {
- .foo {
- @apply rotate-3;
- }
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ *,
+ :before,
+ :after {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
}
-
- .bar {
- @apply before:scale-110;
+ ::backdrop {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
}
-
- .baz::before {
- @apply rotate-45;
+ .rotate-3 {
+ --tw-rotate: 3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
}
+ .skew-y-6 {
+ --tw-skew-y: 6deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .scale-x-110 {
+ --tw-scale-x: 1.1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ `)
+ })
+})
+test('with pseudo-class variants', async () => {
+ let config = {
+ content: [
+ { raw: html`
` },
+ ],
+ corePlugins: ['transform', 'scale', 'rotate', 'skew'],
+ }
+
+ let input = css`
+ @tailwind base;
+ /* --- */
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ *,
+ :before,
+ :after {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ }
+ ::backdrop {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ }
+ .hover\:scale-x-110:hover {
+ --tw-scale-x: 1.1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .focus\:rotate-3:focus {
+ --tw-rotate: 3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .hover\:focus\:skew-y-6:focus:hover {
+ --tw-skew-y: 6deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ `)
+ })
+})
+
+test('with pseudo-element variants', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: ['transform', 'scale', 'rotate', 'skew'],
+ }
+
+ let input = css`
+ @tailwind base;
+ /* --- */
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ *,
+ :before,
+ :after {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ }
+ ::backdrop {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ }
+ .before\:scale-x-110:before {
+ content: var(--tw-content);
+ --tw-scale-x: 1.1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .after\:rotate-3:after {
+ content: var(--tw-content);
+ --tw-rotate: 3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ `)
+ })
+})
+
+test('with multi-class variants', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: ['transform', 'scale', 'rotate', 'skew'],
+ }
+
+ let input = css`
+ @tailwind base;
+ /* --- */
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ *,
+ :before,
+ :after {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ }
+ ::backdrop {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ }
+ .group:hover .group-hover\:scale-x-110 {
+ --tw-scale-x: 1.1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .peer:focus ~ .peer-focus\:rotate-3 {
+ --tw-rotate: 3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ `)
+ })
+})
+
+test('with multi-class pseudo-element variants', async () => {
+ let config = {
+ content: [
+ { raw: html`
` },
+ ],
+ corePlugins: ['transform', 'scale', 'rotate', 'skew'],
+ }
+
+ let input = css`
+ @tailwind base;
+ /* --- */
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ *,
+ :before,
+ :after {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ }
+ ::backdrop {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ }
+ .group:hover .group-hover\:before\:scale-x-110:before {
+ content: var(--tw-content);
+ --tw-scale-x: 1.1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .peer:focus ~ .peer-focus\:after\:rotate-3:after {
+ content: var(--tw-content);
+ --tw-rotate: 3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ `)
+ })
+})
+
+test('with multi-class pseudo-element and pseudo-class variants', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: ['transform', 'scale', 'rotate', 'skew'],
+ }
+
+ let input = css`
+ @tailwind base;
+ /* --- */
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ *,
+ :before,
+ :after {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ }
+ ::backdrop {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ }
+ .group:hover .group-hover\:hover\:before\:scale-x-110:hover:before {
+ content: var(--tw-content);
+ --tw-scale-x: 1.1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .peer:focus ~ .peer-focus\:focus\:after\:rotate-3:focus:after {
+ content: var(--tw-content);
+ --tw-rotate: 3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ `)
+ })
+})
+
+test('with apply', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: ['transform', 'scale', 'rotate', 'skew'],
+ }
+
+ let input = css`
+ @tailwind base;
+ /* --- */
+ @tailwind utilities;
+
+ @layer utilities {
+ .foo {
+ @apply rotate-3;
+ }
+ }
+
+ .bar {
+ @apply before:scale-110;
+ }
+
+ .baz::before {
+ @apply rotate-45;
+ }
+
+ .whats ~ .next > span:hover {
+ @apply skew-x-6;
+ }
+
+ .media-queries {
+ @apply md:rotate-45;
+ }
+
+ .a,
+ .b,
+ .c {
+ @apply skew-y-3;
+ }
+
+ .a,
+ .b {
+ @apply rotate-45;
+ }
+
+ .a::before,
+ .b::after {
+ @apply rotate-90;
+ }
+
+ .recursive {
+ @apply foo;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ *,
+ :before,
+ :after {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ }
+ ::backdrop {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ }
+ .foo {
+ --tw-rotate: 3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .bar:before {
+ content: var(--tw-content);
+ --tw-scale-x: 1.1;
+ --tw-scale-y: 1.1;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .baz:before {
+ --tw-rotate: 45deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
.whats ~ .next > span:hover {
- @apply skew-x-6;
+ --tw-skew-x: 6deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
}
-
- .media-queries {
- @apply md:rotate-45;
+ @media (min-width: 768px) {
+ .media-queries {
+ --tw-rotate: 45deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y))
+ rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
+ scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+ }
}
-
.a,
.b,
.c {
- @apply skew-y-3;
+ --tw-skew-y: 3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
}
-
.a,
.b {
- @apply rotate-45;
+ --tw-rotate: 45deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
}
-
- .a::before,
- .b::after {
- @apply rotate-90;
- }
-
- .recursive {
- @apply foo;
- }
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- *,
- :before,
- :after,
- ::backdrop {
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- }
- .foo {
- --tw-rotate: 3deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .bar:before {
- content: var(--tw-content);
- --tw-scale-x: 1.1;
- --tw-scale-y: 1.1;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .baz:before {
- --tw-rotate: 45deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .whats ~ .next > span:hover {
- --tw-skew-x: 6deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- @media (min-width: 768px) {
- .media-queries {
- --tw-rotate: 45deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- }
- .a,
- .b,
- .c {
- --tw-skew-y: 3deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .a,
- .b {
- --tw-rotate: 45deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .a:before,
- .b:after {
- --tw-rotate: 90deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .recursive {
- --tw-rotate: 3deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- `)
- })
- })
-
- test('legacy pseudo-element syntax is supported', async () => {
- let config = {
- experimental: { optimizeUniversalDefaults: true },
- content: [{ raw: html`
` }],
- corePlugins: ['transform', 'scale', 'rotate', 'skew'],
- }
-
- let input = css`
- @tailwind base;
- /* --- */
- @tailwind utilities;
-
- .a:before {
- @apply rotate-45;
- }
-
+ .a:before,
.b:after {
- @apply rotate-3;
+ --tw-rotate: 90deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
}
-
- .c:first-line {
- @apply rotate-1;
+ .recursive {
+ --tw-rotate: 3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
}
+ `)
+ })
+})
+test('legacy pseudo-element syntax is supported', async () => {
+ let config = {
+ experimental: { optimizeUniversalDefaults: true },
+ content: [{ raw: html`
` }],
+ corePlugins: ['transform', 'scale', 'rotate', 'skew'],
+ }
+
+ let input = css`
+ @tailwind base;
+ /* --- */
+ @tailwind utilities;
+
+ .a:before {
+ @apply rotate-45;
+ }
+
+ .b:after {
+ @apply rotate-3;
+ }
+
+ .c:first-line {
+ @apply rotate-1;
+ }
+
+ .d:first-letter {
+ @apply rotate-6;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .a:before,
+ .b:after,
+ .c:first-line,
.d:first-letter {
- @apply rotate-6;
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .a:before,
- .b:after,
- .c:first-line,
- .d:first-letter {
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- }
- .a:before {
- --tw-rotate: 45deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .b:after {
- --tw-rotate: 3deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .c:first-line {
- --tw-rotate: 1deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- .d:first-letter {
- --tw-rotate: 6deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- `)
- })
+ .a:before {
+ --tw-rotate: 45deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .b:after {
+ --tw-rotate: 3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .c:first-line {
+ --tw-rotate: 1deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ .d:first-letter {
+ --tw-rotate: 6deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ `)
})
+})
- test('with borders', async () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: ['borderWidth', 'borderColor', 'borderOpacity'],
- }
+test('with borders', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: ['borderWidth', 'borderColor', 'borderOpacity'],
+ }
- let input = css`
- @tailwind base;
- /* --- */
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ /* --- */
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .border {
- border-width: 1px;
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .border {
+ border-width: 1px;
+ }
+ .border-red-500 {
+ --tw-border-opacity: 1;
+ border-color: rgb(239 68 68 / var(--tw-border-opacity));
+ }
+ @media (min-width: 768px) {
+ .md\:border-2 {
+ border-width: 2px;
}
- .border-red-500 {
- --tw-border-opacity: 1;
- border-color: rgb(239 68 68 / var(--tw-border-opacity));
- }
- @media (min-width: 768px) {
- .md\:border-2 {
- border-width: 2px;
- }
- }
- `)
- })
+ }
+ `)
})
+})
- test('with shadows', async () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: ['boxShadow', 'ringColor', 'ringWidth'],
- }
+test('with shadows', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: ['boxShadow', 'ringColor', 'ringWidth'],
+ }
- let input = css`
- @tailwind base;
- /* --- */
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ /* --- */
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- *,
- :before,
- :after,
- ::backdrop {
- --tw-ring-inset: ;
- --tw-ring-offset-width: 0px;
- --tw-ring-offset-color: #fff;
- --tw-ring-color: #3b82f680;
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-ring-shadow: 0 0 #0000;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- }
- .shadow {
- --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
- --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
- 0 1px 2px -1px var(--tw-shadow-color);
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ *,
+ :before,
+ :after {
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: #3b82f680;
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ }
+ ::backdrop {
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: #3b82f680;
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ }
+ .shadow {
+ --tw-shadow: 0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;
+ --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color),
+ 0 1px 2px -1px var(--tw-shadow-color);
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
+ var(--tw-shadow);
+ }
+ .ring-1 {
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
+ var(--tw-ring-offset-color);
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width))
+ var(--tw-ring-color);
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+ }
+ .ring-black\/25 {
+ --tw-ring-color: #00000040;
+ }
+ @media (min-width: 768px) {
+ .md\:shadow-xl {
+ --tw-shadow: 0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;
+ --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color),
+ 0 8px 10px -6px var(--tw-shadow-color);
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
var(--tw-shadow);
}
- .ring-1 {
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
- var(--tw-ring-offset-color);
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width))
- var(--tw-ring-color);
- box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow),
- var(--tw-shadow, 0 0 #0000);
- }
- .ring-black\/25 {
- --tw-ring-color: #00000040;
- }
- @media (min-width: 768px) {
- .md\:shadow-xl {
- --tw-shadow: 0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;
- --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color),
- 0 8px 10px -6px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- }
- `)
- })
- })
-
- test('when no utilities that need the defaults are used', async () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: ['transform', 'scale', 'rotate', 'skew'],
- }
-
- let input = css`
- @tailwind base;
- /* --- */
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- *,
- :before,
- :after,
- ::backdrop {
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- }
- `)
- })
- })
-
- test('when a utility uses defaults but they do not exist', async () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: ['rotate'],
- }
-
- let input = css`
- @tailwind base;
- /* --- */
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .rotate-3 {
- --tw-rotate: 3deg;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- `)
- })
- })
-
- test('selectors are reduced to the lowest possible specificity', async () => {
- let config = {
- experimental: { optimizeUniversalDefaults: true },
- content: [{ raw: html`
` }],
- corePlugins: [],
- }
-
- let input = css`
- @defaults test {
- --color: black;
}
-
- /* --- */
-
- .foo {
- @defaults test;
- background-color: var(--color);
- }
-
- #app {
- @defaults test;
- border-color: var(--color);
- }
-
- span#page {
- @defaults test;
- color: var(--color);
- }
-
- div[data-foo='bar']#other {
- @defaults test;
- fill: var(--color);
- }
-
- div[data-bar='baz'] {
- @defaults test;
- stroke: var(--color);
- }
-
- article {
- @defaults test;
- --article: var(--color);
- }
-
- div[data-foo='bar']#another::before {
- @defaults test;
- fill: var(--color);
- }
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .foo,
- [id='app'],
- [id='page'],
- [id='other'],
- [data-bar='baz'],
- article,
- [id='another']:before {
- --color: black;
- }
- .foo {
- background-color: var(--color);
- }
- #app {
- border-color: var(--color);
- }
- span#page {
- color: var(--color);
- }
- div[data-foo='bar']#other {
- fill: var(--color);
- }
- div[data-bar='baz'] {
- stroke: var(--color);
- }
- article {
- --article: var(--color);
- }
- div[data-foo='bar']#another:before {
- fill: var(--color);
- }
- `)
- })
- })
-
- test('No defaults without @tailwind base', () => {
- let config = {
- experimental: { optimizeUniversalDefaults: true },
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- // Optimize universal defaults doesn't work well with isolated modules
- // We require you to use @tailwind base to inject the defaults
- let input = css`
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .scale-150 {
- --tw-scale-x: 1.5;
- --tw-scale-y: 1.5;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- `)
- })
- })
-
- test('no defaults and apply without @tailwind base', () => {
- let config = {
- experimental: { optimizeUniversalDefaults: true },
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- // Optimize universal defaults doesn't work well with isolated modules
- // We require you to use @tailwind base to inject the defaults
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- .my-card {
- @apply scale-150;
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .my-card {
- --tw-scale-x: 1.5;
- --tw-scale-y: 1.5;
- transform: translate(var(--tw-translate-x), var(--tw-translate-y))
- rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
- scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
- }
- `)
- })
+ `)
+ })
+})
+
+test('when no utilities that need the defaults are used', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: ['transform', 'scale', 'rotate', 'skew'],
+ }
+
+ let input = css`
+ @tailwind base;
+ /* --- */
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ *,
+ :before,
+ :after {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ }
+ ::backdrop {
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ }
+ `)
+ })
+})
+
+test('when a utility uses defaults but they do not exist', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: ['rotate'],
+ }
+
+ let input = css`
+ @tailwind base;
+ /* --- */
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .rotate-3 {
+ --tw-rotate: 3deg;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ `)
+ })
+})
+
+test('selectors are reduced to the lowest possible specificity', async () => {
+ let config = {
+ experimental: { optimizeUniversalDefaults: true },
+ content: [{ raw: html`
` }],
+ corePlugins: [],
+ }
+
+ let input = css`
+ @defaults test {
+ --color: black;
+ }
+
+ /* --- */
+
+ .foo {
+ @defaults test;
+ background-color: var(--color);
+ }
+
+ #app {
+ @defaults test;
+ border-color: var(--color);
+ }
+
+ span#page {
+ @defaults test;
+ color: var(--color);
+ }
+
+ div[data-foo='bar']#other {
+ @defaults test;
+ fill: var(--color);
+ }
+
+ div[data-bar='baz'] {
+ @defaults test;
+ stroke: var(--color);
+ }
+
+ article {
+ @defaults test;
+ --article: var(--color);
+ }
+
+ div[data-foo='bar']#another::before {
+ @defaults test;
+ fill: var(--color);
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .foo,
+ [id='app'],
+ [id='page'],
+ [id='other'],
+ [data-bar='baz'],
+ article,
+ [id='another']:before {
+ --color: black;
+ }
+ .foo {
+ background-color: var(--color);
+ }
+ #app {
+ border-color: var(--color);
+ }
+ span#page {
+ color: var(--color);
+ }
+ div[data-foo='bar']#other {
+ fill: var(--color);
+ }
+ div[data-bar='baz'] {
+ stroke: var(--color);
+ }
+ article {
+ --article: var(--color);
+ }
+ div[data-foo='bar']#another:before {
+ fill: var(--color);
+ }
+ `)
+ })
+})
+
+test('No defaults without @tailwind base', () => {
+ let config = {
+ experimental: { optimizeUniversalDefaults: true },
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ // Optimize universal defaults doesn't work well with isolated modules
+ // We require you to use @tailwind base to inject the defaults
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .scale-150 {
+ --tw-scale-x: 1.5;
+ --tw-scale-y: 1.5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ `)
+ })
+})
+
+test('no defaults and apply without @tailwind base', () => {
+ let config = {
+ experimental: { optimizeUniversalDefaults: true },
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ // Optimize universal defaults doesn't work well with isolated modules
+ // We require you to use @tailwind base to inject the defaults
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ .my-card {
+ @apply scale-150;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .my-card {
+ --tw-scale-x: 1.5;
+ --tw-scale-y: 1.5;
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
+ skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
+ scaleY(var(--tw-scale-y));
+ }
+ `)
})
})
diff --git a/tests/resolveConfig.test.js b/tests/resolveConfig.test.js
index c99a986de..fd7c9bb73 100644
--- a/tests/resolveConfig.test.js
+++ b/tests/resolveConfig.test.js
@@ -1,1797 +1,1798 @@
import resolveConfig from '../src/util/resolveConfig'
import corePluginList from '../src/corePluginList'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- test('prefix key overrides default prefix', () => {
- const userConfig = {
- prefix: 'tw-',
- }
+test('prefix key overrides default prefix', () => {
+ const userConfig = {
+ prefix: 'tw-',
+ }
- const defaultConfig = {
- prefix: '',
- important: false,
- separator: ':',
- content: [],
- theme: {
- screens: {
- mobile: '400px',
- },
+ const defaultConfig = {
+ prefix: '',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ screens: {
+ mobile: '400px',
},
- }
+ },
+ }
- const result = resolveConfig([userConfig, defaultConfig])
+ const result = resolveConfig([userConfig, defaultConfig])
- expect(result).toMatchObject({
- prefix: 'tw-',
- important: false,
- separator: ':',
- theme: {
- screens: {
- mobile: '400px',
- },
+ expect(result).toMatchObject({
+ prefix: 'tw-',
+ important: false,
+ separator: ':',
+ theme: {
+ screens: {
+ mobile: '400px',
},
- })
+ },
})
+})
- test('important key overrides default important', () => {
- const userConfig = {
- important: true,
- }
+test('important key overrides default important', () => {
+ const userConfig = {
+ important: true,
+ }
- const defaultConfig = {
- prefix: '',
- important: false,
- separator: ':',
- content: [],
- theme: {
- screens: {
- mobile: '400px',
- },
+ const defaultConfig = {
+ prefix: '',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ screens: {
+ mobile: '400px',
},
- }
+ },
+ }
- const result = resolveConfig([userConfig, defaultConfig])
+ const result = resolveConfig([userConfig, defaultConfig])
- expect(result).toMatchObject({
- prefix: '',
- important: true,
- separator: ':',
- theme: {
- screens: {
- mobile: '400px',
- },
+ expect(result).toMatchObject({
+ prefix: '',
+ important: true,
+ separator: ':',
+ theme: {
+ screens: {
+ mobile: '400px',
},
- })
+ },
})
+})
- test('important (selector) key overrides default important', () => {
- const userConfig = {
- important: '#app',
- }
+test('important (selector) key overrides default important', () => {
+ const userConfig = {
+ important: '#app',
+ }
- const defaultConfig = {
- prefix: '',
- important: false,
- separator: ':',
- content: [],
- theme: {
- screens: {
- mobile: '400px',
- },
+ const defaultConfig = {
+ prefix: '',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ screens: {
+ mobile: '400px',
},
- }
+ },
+ }
- const result = resolveConfig([userConfig, defaultConfig])
+ const result = resolveConfig([userConfig, defaultConfig])
- expect(result).toMatchObject({
- prefix: '',
- important: '#app',
- separator: ':',
- theme: {
- screens: {
- mobile: '400px',
- },
+ expect(result).toMatchObject({
+ prefix: '',
+ important: '#app',
+ separator: ':',
+ theme: {
+ screens: {
+ mobile: '400px',
},
- })
+ },
})
+})
- test('separator key overrides default separator', () => {
- const userConfig = {
- separator: '__',
- }
+test('separator key overrides default separator', () => {
+ const userConfig = {
+ separator: '__',
+ }
- const defaultConfig = {
- prefix: '',
- important: false,
- separator: ':',
- content: [],
- theme: {
- screens: {
- mobile: '400px',
- },
+ const defaultConfig = {
+ prefix: '',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ screens: {
+ mobile: '400px',
},
- }
+ },
+ }
- const result = resolveConfig([userConfig, defaultConfig])
+ const result = resolveConfig([userConfig, defaultConfig])
- expect(result).toMatchObject({
- prefix: '',
- important: false,
- separator: '__',
- theme: {
- screens: {
- mobile: '400px',
- },
+ expect(result).toMatchObject({
+ prefix: '',
+ important: false,
+ separator: '__',
+ theme: {
+ screens: {
+ mobile: '400px',
},
- })
+ },
})
+})
- test('theme key is merged instead of replaced', () => {
- const userConfig = {
- theme: {
- screens: {
- mobile: '400px',
- },
+test('theme key is merged instead of replaced', () => {
+ const userConfig = {
+ theme: {
+ screens: {
+ mobile: '400px',
},
- }
+ },
+ }
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
- colors: {
- 'grey-darker': '#606f7b',
- 'grey-dark': '#8795a1',
- grey: '#b8c2cc',
- 'grey-light': '#dae1e7',
- 'grey-lighter': '#f1f5f8',
- },
- fonts: {
- sans: ['system-ui', 'BlinkMacSystemFont', '-apple-system', 'Roboto', 'sans-serif'],
- serif: ['Constantia', 'Lucida Bright', 'Georgia', 'serif'],
- },
- screens: {
- sm: '500px',
- md: '750px',
- lg: '1000px',
- },
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ colors: {
+ 'grey-darker': '#606f7b',
+ 'grey-dark': '#8795a1',
+ grey: '#b8c2cc',
+ 'grey-light': '#dae1e7',
+ 'grey-lighter': '#f1f5f8',
},
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- colors: {
- 'grey-darker': '#606f7b',
- 'grey-dark': '#8795a1',
- grey: '#b8c2cc',
- 'grey-light': '#dae1e7',
- 'grey-lighter': '#f1f5f8',
- },
- fonts: {
- sans: ['system-ui', 'BlinkMacSystemFont', '-apple-system', 'Roboto', 'sans-serif'],
- serif: ['Constantia', 'Lucida Bright', 'Georgia', 'serif'],
- },
- screens: {
- mobile: '400px',
- },
+ fonts: {
+ sans: ['system-ui', 'Roboto', 'sans-serif'],
+ serif: ['Constantia', 'Lucida Bright', 'Georgia', 'serif'],
},
- })
+ screens: {
+ sm: '500px',
+ md: '750px',
+ lg: '1000px',
+ },
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ colors: {
+ 'grey-darker': '#606f7b',
+ 'grey-dark': '#8795a1',
+ grey: '#b8c2cc',
+ 'grey-light': '#dae1e7',
+ 'grey-lighter': '#f1f5f8',
+ },
+ fonts: {
+ sans: ['system-ui', 'Roboto', 'sans-serif'],
+ serif: ['Constantia', 'Lucida Bright', 'Georgia', 'serif'],
+ },
+ screens: {
+ mobile: '400px',
+ },
+ },
})
+})
- test('theme key is deeply merged instead of replaced', () => {
- const userConfig = {
- theme: {
- extend: {
- colors: {
- grey: {
- darker: '#606f7b',
- dark: '#8795a1',
- },
- },
- },
- },
- }
-
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
- colors: {
- grey: {
- grey: '#b8c2cc',
- light: '#dae1e7',
- lighter: '#f1f5f8',
- },
- },
- },
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
+test('theme key is deeply merged instead of replaced', () => {
+ const userConfig = {
+ theme: {
+ extend: {
colors: {
grey: {
darker: '#606f7b',
dark: '#8795a1',
- grey: '#b8c2cc',
- light: '#dae1e7',
- lighter: '#f1f5f8',
},
},
},
- })
+ },
+ }
+
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ colors: {
+ grey: {
+ grey: '#b8c2cc',
+ light: '#dae1e7',
+ lighter: '#f1f5f8',
+ },
+ },
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ colors: {
+ grey: {
+ darker: '#606f7b',
+ dark: '#8795a1',
+ grey: '#b8c2cc',
+ light: '#dae1e7',
+ lighter: '#f1f5f8',
+ },
+ },
+ },
})
+})
- test('missing top level keys are pulled from the default config', () => {
- const userConfig = {}
+test('missing top level keys are pulled from the default config', () => {
+ const userConfig = {}
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
- colors: { green: '#00ff00' },
- screens: {
- mobile: '400px',
- },
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ colors: { green: '#00ff00' },
+ screens: {
+ mobile: '400px',
},
- }
+ },
+ }
- const result = resolveConfig([userConfig, defaultConfig])
+ const result = resolveConfig([userConfig, defaultConfig])
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- colors: { green: '#00ff00' },
- screens: {
- mobile: '400px',
- },
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ colors: { green: '#00ff00' },
+ screens: {
+ mobile: '400px',
},
- })
+ },
})
+})
- test('functions in the default theme section are lazily evaluated', () => {
- const userConfig = {
- theme: {
- colors: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
+test('functions in the default theme section are lazily evaluated', () => {
+ const userConfig = {
+ theme: {
+ colors: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
},
- }
+ },
+ }
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
- colors: {
- cyan: 'cyan',
- magenta: 'magenta',
- yellow: 'yellow',
- },
- backgroundColors: (theme) => theme('colors'),
- textColors: (theme) => theme('colors'),
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ colors: {
+ cyan: 'cyan',
+ magenta: 'magenta',
+ yellow: 'yellow',
},
- }
+ backgroundColors: (theme) => theme('colors'),
+ textColors: (theme) => theme('colors'),
+ },
+ }
- const result = resolveConfig([userConfig, defaultConfig])
+ const result = resolveConfig([userConfig, defaultConfig])
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- colors: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
- backgroundColors: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
- textColors: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ colors: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
},
- })
+ backgroundColors: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ },
+ textColors: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ },
+ },
})
+})
- test('functions in the user theme section are lazily evaluated', () => {
- const userConfig = {
- theme: {
- colors: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
- backgroundColors: (theme) => ({
- ...theme('colors'),
- customBackground: '#bada55',
- }),
- textColors: (theme) => ({
- ...theme('colors'),
- customText: '#facade',
- }),
+test('functions in the user theme section are lazily evaluated', () => {
+ const userConfig = {
+ theme: {
+ colors: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
},
- }
+ backgroundColors: (theme) => ({
+ ...theme('colors'),
+ customBackground: '#bada55',
+ }),
+ textColors: (theme) => ({
+ ...theme('colors'),
+ customText: '#facade',
+ }),
+ },
+ }
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
- colors: {
- cyan: 'cyan',
- magenta: 'magenta',
- yellow: 'yellow',
- },
- backgroundColors: ({ colors }) => colors,
- textColors: ({ colors }) => colors,
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ colors: {
+ cyan: 'cyan',
+ magenta: 'magenta',
+ yellow: 'yellow',
},
- }
+ backgroundColors: ({ colors }) => colors,
+ textColors: ({ colors }) => colors,
+ },
+ }
- const result = resolveConfig([userConfig, defaultConfig])
+ const result = resolveConfig([userConfig, defaultConfig])
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- colors: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
- backgroundColors: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- customBackground: '#bada55',
- },
- textColors: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- customText: '#facade',
- },
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ colors: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
},
- })
+ backgroundColors: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ customBackground: '#bada55',
+ },
+ textColors: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ customText: '#facade',
+ },
+ },
})
+})
- test('theme values in the extend section extend the existing theme', () => {
- const userConfig = {
- theme: {
- extend: {
- opacity: {
- 25: '25',
- 75: '.75',
- },
- backgroundColors: {
- customBackground: '#bada55',
- },
- },
- },
- }
-
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
- colors: {
- cyan: 'cyan',
- magenta: 'magenta',
- yellow: 'yellow',
- },
+test('theme values in the extend section extend the existing theme', () => {
+ const userConfig = {
+ theme: {
+ extend: {
opacity: {
- 0: '0',
- 50: '.5',
- 100: '1',
- },
- backgroundColors: (theme) => theme('colors'),
- },
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- colors: {
- cyan: 'cyan',
- magenta: 'magenta',
- yellow: 'yellow',
- },
- opacity: {
- 0: '0',
- 50: '.5',
- 100: '1',
25: '25',
75: '.75',
},
backgroundColors: {
- cyan: 'cyan',
- magenta: 'magenta',
- yellow: 'yellow',
customBackground: '#bada55',
},
},
- })
+ },
+ }
+
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ colors: {
+ cyan: 'cyan',
+ magenta: 'magenta',
+ yellow: 'yellow',
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ 100: '1',
+ },
+ backgroundColors: (theme) => theme('colors'),
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ colors: {
+ cyan: 'cyan',
+ magenta: 'magenta',
+ yellow: 'yellow',
+ },
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ 100: '1',
+ 25: '25',
+ 75: '.75',
+ },
+ backgroundColors: {
+ cyan: 'cyan',
+ magenta: 'magenta',
+ yellow: 'yellow',
+ customBackground: '#bada55',
+ },
+ },
})
+})
- test('theme values in the extend section extend the user theme', () => {
- const userConfig = {
- theme: {
- opacity: {
- 0: '0',
- 20: '.2',
- 40: '.4',
- },
- height: (theme) => theme('width'),
- extend: {
- opacity: {
- 60: '.6',
- 80: '.8',
- 100: '1',
- },
- height: {
- customHeight: '500vh',
- },
- },
+test('theme values in the extend section extend the user theme', () => {
+ const userConfig = {
+ theme: {
+ opacity: {
+ 0: '0',
+ 20: '.2',
+ 40: '.4',
},
- }
-
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
+ height: (theme) => theme('width'),
+ extend: {
opacity: {
- 0: '0',
- 50: '.5',
- 100: '1',
- },
- height: {
- 0: 0,
- full: '100%',
- },
- width: {
- 0: 0,
- 1: '.25rem',
- 2: '.5rem',
- 3: '.75rem',
- 4: '1rem',
- },
- },
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- opacity: {
- 0: '0',
- 20: '.2',
- 40: '.4',
60: '.6',
80: '.8',
100: '1',
},
height: {
- 0: 0,
- 1: '.25rem',
- 2: '.5rem',
- 3: '.75rem',
- 4: '1rem',
customHeight: '500vh',
},
- width: {
- 0: 0,
- 1: '.25rem',
- 2: '.5rem',
- 3: '.75rem',
- 4: '1rem',
- },
},
- })
+ },
+ }
+
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ opacity: {
+ 0: '0',
+ 50: '.5',
+ 100: '1',
+ },
+ height: {
+ 0: 0,
+ full: '100%',
+ },
+ width: {
+ 0: 0,
+ 1: '.25rem',
+ 2: '.5rem',
+ 3: '.75rem',
+ 4: '1rem',
+ },
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ opacity: {
+ 0: '0',
+ 20: '.2',
+ 40: '.4',
+ 60: '.6',
+ 80: '.8',
+ 100: '1',
+ },
+ height: {
+ 0: 0,
+ 1: '.25rem',
+ 2: '.5rem',
+ 3: '.75rem',
+ 4: '1rem',
+ customHeight: '500vh',
+ },
+ width: {
+ 0: 0,
+ 1: '.25rem',
+ 2: '.5rem',
+ 3: '.75rem',
+ 4: '1rem',
+ },
+ },
})
+})
- test('theme values in the extend section can extend values that are depended on lazily', () => {
- const userConfig = {
- theme: {
- extend: {
- colors: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
- backgroundColors: {
- customBackground: '#bada55',
- },
- },
- },
- }
-
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
+test('theme values in the extend section can extend values that are depended on lazily', () => {
+ const userConfig = {
+ theme: {
+ extend: {
colors: {
- cyan: 'cyan',
- magenta: 'magenta',
- yellow: 'yellow',
- },
- backgroundColors: (theme) => theme('colors'),
- },
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- colors: {
- cyan: 'cyan',
- magenta: 'magenta',
- yellow: 'yellow',
red: 'red',
green: 'green',
blue: 'blue',
},
backgroundColors: {
- cyan: 'cyan',
- magenta: 'magenta',
- yellow: 'yellow',
- red: 'red',
- green: 'green',
- blue: 'blue',
customBackground: '#bada55',
},
},
- })
+ },
+ }
+
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ colors: {
+ cyan: 'cyan',
+ magenta: 'magenta',
+ yellow: 'yellow',
+ },
+ backgroundColors: (theme) => theme('colors'),
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ colors: {
+ cyan: 'cyan',
+ magenta: 'magenta',
+ yellow: 'yellow',
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ },
+ backgroundColors: {
+ cyan: 'cyan',
+ magenta: 'magenta',
+ yellow: 'yellow',
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ customBackground: '#bada55',
+ },
+ },
})
+})
- test('theme values in the extend section are not deeply merged when they are simple arrays', () => {
- const userConfig = {
- theme: {
- extend: {
- fonts: {
- sans: ['Comic Sans'],
- serif: ['Papyrus', { fontFeatureSettings: '"cv11"' }],
- mono: [['Lobster', 'Papyrus'], { fontFeatureSettings: '"cv11"' }],
- },
- },
- },
- }
-
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
- fonts: {
- sans: ['system-ui', 'Helvetica Neue', 'sans-serif'],
- serif: ['Constantia', 'Georgia', 'serif'],
- mono: ['Menlo', 'Courier New', 'monospace'],
- },
- },
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
+test('theme values in the extend section are not deeply merged when they are simple arrays', () => {
+ const userConfig = {
+ theme: {
+ extend: {
fonts: {
sans: ['Comic Sans'],
serif: ['Papyrus', { fontFeatureSettings: '"cv11"' }],
mono: [['Lobster', 'Papyrus'], { fontFeatureSettings: '"cv11"' }],
},
},
- })
- })
+ },
+ }
- test('theme values in the extend section are deeply merged, when they are arrays of objects', () => {
- const userConfig = {
- theme: {
- extend: {
- typography: {
- ArrayArray: {
- css: [{ a: { backgroundColor: 'red' } }, { a: { color: 'green' } }],
- },
- ObjectArray: {
- css: { a: { backgroundColor: 'red' } },
- },
- ArrayObject: {
- css: [{ a: { backgroundColor: 'red' } }, { a: { color: 'green' } }],
- },
- },
- },
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ fonts: {
+ sans: ['system-ui', 'Helvetica Neue', 'sans-serif'],
+ serif: ['Constantia', 'Georgia', 'serif'],
+ mono: ['Menlo', 'Courier New', 'monospace'],
},
- }
+ },
+ }
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ fonts: {
+ sans: ['Comic Sans'],
+ serif: ['Papyrus', { fontFeatureSettings: '"cv11"' }],
+ mono: [['Lobster', 'Papyrus'], { fontFeatureSettings: '"cv11"' }],
+ },
+ },
+ })
+})
+
+test('theme values in the extend section are deeply merged, when they are arrays of objects', () => {
+ const userConfig = {
+ theme: {
+ extend: {
typography: {
ArrayArray: {
- css: [{ a: { underline: 'none' } }],
+ css: [{ a: { backgroundColor: 'red' } }, { a: { color: 'green' } }],
},
ObjectArray: {
- css: [{ a: { underline: 'none' } }],
+ css: { a: { backgroundColor: 'red' } },
},
ArrayObject: {
- css: { a: { underline: 'none' } },
+ css: [{ a: { backgroundColor: 'red' } }, { a: { color: 'green' } }],
},
},
},
- }
+ },
+ }
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- typography: {
- ArrayArray: {
- css: [
- { a: { underline: 'none' } },
- { a: { backgroundColor: 'red' } },
- { a: { color: 'green' } },
- ],
- },
- ObjectArray: {
- css: [{ a: { underline: 'none' } }, { a: { backgroundColor: 'red' } }],
- },
- ArrayObject: {
- css: [
- { a: { underline: 'none' } },
- { a: { backgroundColor: 'red' } },
- { a: { color: 'green' } },
- ],
- },
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ typography: {
+ ArrayArray: {
+ css: [{ a: { underline: 'none' } }],
+ },
+ ObjectArray: {
+ css: [{ a: { underline: 'none' } }],
+ },
+ ArrayObject: {
+ css: { a: { underline: 'none' } },
},
},
- })
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ typography: {
+ ArrayArray: {
+ css: [
+ { a: { underline: 'none' } },
+ { a: { backgroundColor: 'red' } },
+ { a: { color: 'green' } },
+ ],
+ },
+ ObjectArray: {
+ css: [{ a: { underline: 'none' } }, { a: { backgroundColor: 'red' } }],
+ },
+ ArrayObject: {
+ css: [
+ { a: { underline: 'none' } },
+ { a: { backgroundColor: 'red' } },
+ { a: { color: 'green' } },
+ ],
+ },
+ },
+ },
})
+})
- test('the theme function can use a default value if the key is missing', () => {
- const userConfig = {
- theme: {
- colors: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
+test('the theme function can use a default value if the key is missing', () => {
+ const userConfig = {
+ theme: {
+ colors: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
},
- }
+ },
+ }
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ colors: {
+ cyan: 'cyan',
+ magenta: 'magenta',
+ yellow: 'yellow',
+ },
+ borderColor: (theme) => ({
+ default: theme('colors.gray', 'currentColor'),
+ ...theme('colors'),
+ }),
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ colors: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ },
+ borderColor: {
+ default: 'currentColor',
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ },
+ },
+ })
+})
+
+test('the theme function can resolve function values', () => {
+ const userConfig = {
+ theme: {
+ textColor: (theme) => ({
+ lime: 'lime',
+ ...theme('colors'),
+ }),
+ backgroundColor: (theme) => ({
+ orange: 'orange',
+ ...theme('textColor'),
+ }),
+ borderColor: (theme) => theme('backgroundColor'),
+ },
+ }
+
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ colors: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ },
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ colors: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ },
+ textColor: {
+ lime: 'lime',
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ },
+ backgroundColor: {
+ lime: 'lime',
+ orange: 'orange',
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ },
+ borderColor: {
+ lime: 'lime',
+ orange: 'orange',
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ },
+ },
+ })
+})
+
+test('the theme function can resolve deep function values', () => {
+ const userConfig = {
+ theme: {
+ minWidth: (theme) => ({
+ '1/3': theme('width.1/3'),
+ }),
+ },
+ }
+
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ spacing: {
+ 0: '0',
+ },
+ width: (theme) => ({
+ ...theme('spacing'),
+ '1/3': '33.33333%',
+ }),
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ spacing: {
+ 0: '0',
+ },
+ width: {
+ 0: '0',
+ '1/3': '33.33333%',
+ },
+ minWidth: {
+ '1/3': '33.33333%',
+ },
+ },
+ })
+})
+
+test('theme values in the extend section are lazily evaluated', () => {
+ const userConfig = {
+ theme: {
+ colors: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ },
+ extend: {
colors: {
- cyan: 'cyan',
- magenta: 'magenta',
- yellow: 'yellow',
+ orange: 'orange',
},
borderColor: (theme) => ({
- default: theme('colors.gray', 'currentColor'),
- ...theme('colors'),
+ foo: theme('colors.orange'),
+ bar: theme('colors.red'),
}),
},
- }
+ },
+ }
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- colors: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
- borderColor: {
- default: 'currentColor',
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ colors: {
+ cyan: 'cyan',
+ magenta: 'magenta',
+ yellow: 'yellow',
},
- })
+ borderColor: (theme) => ({
+ default: theme('colors.yellow', 'currentColor'),
+ ...theme('colors'),
+ }),
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ colors: {
+ orange: 'orange',
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ },
+ borderColor: {
+ default: 'currentColor',
+ foo: 'orange',
+ bar: 'red',
+ orange: 'orange',
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ },
+ },
})
+})
- test('the theme function can resolve function values', () => {
- const userConfig = {
- theme: {
- textColor: (theme) => ({
- lime: 'lime',
- ...theme('colors'),
+test('lazily evaluated values have access to the config utils', () => {
+ const userConfig = {
+ theme: {
+ inset: (theme) => theme('margin'),
+ shift: (theme, { negative }) => ({
+ ...theme('spacing'),
+ ...negative(theme('spacing')),
+ }),
+ extend: {
+ nudge: (theme, { negative }) => ({
+ ...theme('spacing'),
+ ...negative(theme('spacing')),
}),
- backgroundColor: (theme) => ({
+ },
+ },
+ }
+
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ spacing: {
+ 1: '1px',
+ 2: '2px',
+ 3: '3px',
+ 4: '4px',
+ },
+ margin: (theme, { negative }) => ({
+ ...theme('spacing'),
+ ...negative(theme('spacing')),
+ }),
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ spacing: {
+ 1: '1px',
+ 2: '2px',
+ 3: '3px',
+ 4: '4px',
+ },
+ inset: {
+ '-1': '-1px',
+ '-2': '-2px',
+ '-3': '-3px',
+ '-4': '-4px',
+ 1: '1px',
+ 2: '2px',
+ 3: '3px',
+ 4: '4px',
+ },
+ margin: {
+ '-1': '-1px',
+ '-2': '-2px',
+ '-3': '-3px',
+ '-4': '-4px',
+ 1: '1px',
+ 2: '2px',
+ 3: '3px',
+ 4: '4px',
+ },
+ shift: {
+ '-1': '-1px',
+ '-2': '-2px',
+ '-3': '-3px',
+ '-4': '-4px',
+ 1: '1px',
+ 2: '2px',
+ 3: '3px',
+ 4: '4px',
+ },
+ nudge: {
+ '-1': '-1px',
+ '-2': '-2px',
+ '-3': '-3px',
+ '-4': '-4px',
+ 1: '1px',
+ 2: '2px',
+ 3: '3px',
+ 4: '4px',
+ },
+ },
+ })
+})
+
+test('the original theme is not mutated', () => {
+ const userConfig = {
+ theme: {
+ extend: {
+ colors: {
orange: 'orange',
- ...theme('textColor'),
+ },
+ },
+ },
+ }
+
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ colors: {
+ cyan: 'cyan',
+ magenta: 'magenta',
+ yellow: 'yellow',
+ },
+ },
+ }
+
+ resolveConfig([userConfig, defaultConfig])
+
+ expect(userConfig).toEqual({
+ theme: {
+ extend: {
+ colors: {
+ orange: 'orange',
+ },
+ },
+ },
+ })
+})
+
+test('custom properties are multiplied by -1 for negative values', () => {
+ const userConfig = {
+ theme: {
+ spacing: {
+ 0: 0,
+ 1: '1px',
+ 2: '2px',
+ 3: '3px',
+ 4: '4px',
+ auto: 'auto',
+ foo: 'var(--foo)',
+ bar: 'var(--bar, 500px)',
+ baz: 'calc(50% - 10px)',
+ qux: '10poops',
+ },
+ margin: (theme, { negative }) => ({
+ ...theme('spacing'),
+ ...negative(theme('spacing')),
+ }),
+ },
+ }
+
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {},
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result.theme.spacing).toEqual({
+ 0: 0,
+ 1: '1px',
+ 2: '2px',
+ 3: '3px',
+ 4: '4px',
+ auto: 'auto',
+ foo: 'var(--foo)',
+ bar: 'var(--bar, 500px)',
+ baz: 'calc(50% - 10px)',
+ qux: '10poops',
+ })
+ expect(result.theme.margin).toEqual({
+ 0: 0,
+ 1: '1px',
+ 2: '2px',
+ 3: '3px',
+ 4: '4px',
+ auto: 'auto',
+ foo: 'var(--foo)',
+ bar: 'var(--bar, 500px)',
+ baz: 'calc(50% - 10px)',
+ qux: '10poops',
+ '-0': '0',
+ '-1': '-1px',
+ '-2': '-2px',
+ '-3': '-3px',
+ '-4': '-4px',
+ '-foo': 'calc(var(--foo) * -1)',
+ '-bar': 'calc(var(--bar, 500px) * -1)',
+ '-baz': 'calc(calc(50% - 10px) * -1)',
+ '-qux': '-10poops',
+ })
+})
+
+test('more than two config objects can be resolved', () => {
+ const firstConfig = {
+ theme: {
+ extend: {
+ fontFamily: () => ({
+ code: ['Menlo', 'monospace'],
}),
- borderColor: (theme) => theme('backgroundColor'),
- },
- }
-
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
colors: {
red: 'red',
- green: 'green',
- blue: 'blue',
- },
- },
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- colors: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
- textColor: {
- lime: 'lime',
- red: 'red',
- green: 'green',
- blue: 'blue',
},
backgroundColor: {
- lime: 'lime',
+ customBackgroundOne: '#bada55',
+ },
+ textDecorationColor: {
orange: 'orange',
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
- borderColor: {
- lime: 'lime',
- orange: 'orange',
- red: 'red',
- green: 'green',
- blue: 'blue',
},
},
- })
- })
+ },
+ }
- test('the theme function can resolve deep function values', () => {
- const userConfig = {
- theme: {
- minWidth: (theme) => ({
- '1/3': theme('width.1/3'),
- }),
- },
- }
-
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
- spacing: {
- 0: '0',
- },
- width: (theme) => ({
- ...theme('spacing'),
- '1/3': '33.33333%',
- }),
- },
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- spacing: {
- 0: '0',
- },
- width: {
- 0: '0',
- '1/3': '33.33333%',
- },
- minWidth: {
- '1/3': '33.33333%',
- },
- },
- })
- })
-
- test('theme values in the extend section are lazily evaluated', () => {
- const userConfig = {
- theme: {
- colors: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
- extend: {
- colors: {
- orange: 'orange',
- },
- borderColor: (theme) => ({
- foo: theme('colors.orange'),
- bar: theme('colors.red'),
- }),
- },
- },
- }
-
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
- colors: {
- cyan: 'cyan',
- magenta: 'magenta',
- yellow: 'yellow',
- },
- borderColor: (theme) => ({
- default: theme('colors.yellow', 'currentColor'),
- ...theme('colors'),
- }),
- },
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- colors: {
- orange: 'orange',
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
- borderColor: {
- default: 'currentColor',
- foo: 'orange',
- bar: 'red',
- orange: 'orange',
- red: 'red',
- green: 'green',
- blue: 'blue',
- },
- },
- })
- })
-
- test('lazily evaluated values have access to the config utils', () => {
- const userConfig = {
- theme: {
- inset: (theme) => theme('margin'),
- shift: (theme, { negative }) => ({
- ...theme('spacing'),
- ...negative(theme('spacing')),
- }),
- extend: {
- nudge: (theme, { negative }) => ({
- ...theme('spacing'),
- ...negative(theme('spacing')),
- }),
- },
- },
- }
-
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
- spacing: {
- 1: '1px',
- 2: '2px',
- 3: '3px',
- 4: '4px',
- },
- margin: (theme, { negative }) => ({
- ...theme('spacing'),
- ...negative(theme('spacing')),
- }),
- },
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- spacing: {
- 1: '1px',
- 2: '2px',
- 3: '3px',
- 4: '4px',
- },
- inset: {
- '-1': '-1px',
- '-2': '-2px',
- '-3': '-3px',
- '-4': '-4px',
- 1: '1px',
- 2: '2px',
- 3: '3px',
- 4: '4px',
- },
- margin: {
- '-1': '-1px',
- '-2': '-2px',
- '-3': '-3px',
- '-4': '-4px',
- 1: '1px',
- 2: '2px',
- 3: '3px',
- 4: '4px',
- },
- shift: {
- '-1': '-1px',
- '-2': '-2px',
- '-3': '-3px',
- '-4': '-4px',
- 1: '1px',
- 2: '2px',
- 3: '3px',
- 4: '4px',
- },
- nudge: {
- '-1': '-1px',
- '-2': '-2px',
- '-3': '-3px',
- '-4': '-4px',
- 1: '1px',
- 2: '2px',
- 3: '3px',
- 4: '4px',
- },
- },
- })
- })
-
- test('the original theme is not mutated', () => {
- const userConfig = {
- theme: {
- extend: {
- colors: {
- orange: 'orange',
- },
- },
- },
- }
-
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
- colors: {
- cyan: 'cyan',
- magenta: 'magenta',
- yellow: 'yellow',
- },
- },
- }
-
- resolveConfig([userConfig, defaultConfig])
-
- expect(userConfig).toEqual({
- theme: {
- extend: {
- colors: {
- orange: 'orange',
- },
- },
- },
- })
- })
-
- test('custom properties are multiplied by -1 for negative values', () => {
- const userConfig = {
- theme: {
- spacing: {
- 0: 0,
- 1: '1px',
- 2: '2px',
- 3: '3px',
- 4: '4px',
- auto: 'auto',
- foo: 'var(--foo)',
- bar: 'var(--bar, 500px)',
- baz: 'calc(50% - 10px)',
- qux: '10poops',
- },
- margin: (theme, { negative }) => ({
- ...theme('spacing'),
- ...negative(theme('spacing')),
- }),
- },
- }
-
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {},
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result.theme.spacing).toEqual({
- 0: 0,
- 1: '1px',
- 2: '2px',
- 3: '3px',
- 4: '4px',
- auto: 'auto',
- foo: 'var(--foo)',
- bar: 'var(--bar, 500px)',
- baz: 'calc(50% - 10px)',
- qux: '10poops',
- })
- expect(result.theme.margin).toEqual({
- 0: 0,
- 1: '1px',
- 2: '2px',
- 3: '3px',
- 4: '4px',
- auto: 'auto',
- foo: 'var(--foo)',
- bar: 'var(--bar, 500px)',
- baz: 'calc(50% - 10px)',
- qux: '10poops',
- '-0': '0',
- '-1': '-1px',
- '-2': '-2px',
- '-3': '-3px',
- '-4': '-4px',
- '-foo': 'calc(var(--foo) * -1)',
- '-bar': 'calc(var(--bar, 500px) * -1)',
- '-baz': 'calc(calc(50% - 10px) * -1)',
- '-qux': '-10poops',
- })
- })
-
- test('more than two config objects can be resolved', () => {
- const firstConfig = {
- theme: {
- extend: {
- fontFamily: () => ({
- code: ['Menlo', 'monospace'],
- }),
- colors: {
- red: 'red',
- },
- backgroundColor: {
- customBackgroundOne: '#bada55',
- },
- textDecorationColor: {
- orange: 'orange',
- },
- },
- },
- }
-
- const secondConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- extend: {
- fontFamily: {
- quote: ['Helvetica', 'serif'],
- },
- colors: {
- green: 'green',
- },
- backgroundColor: {
- customBackgroundTwo: '#facade',
- },
- textDecorationColor: (theme) => theme('colors'),
- },
- },
- }
-
- const thirdConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- extend: {
- fontFamily: {
- hero: ['Futura', 'sans-serif'],
- },
- colors: {
- pink: 'pink',
- },
- backgroundColor: () => ({
- customBackgroundThree: '#c0ffee',
- }),
- textDecorationColor: {
- lime: 'lime',
- },
- },
- },
- }
-
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
+ const secondConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ extend: {
fontFamily: {
- body: ['Arial', 'sans-serif'],
- display: ['Georgia', 'serif'],
- },
- colors: {
- blue: 'blue',
- },
- backgroundColor: (theme) => theme('colors'),
- },
- }
-
- const result = resolveConfig([firstConfig, secondConfig, thirdConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- fontFamily: {
- body: ['Arial', 'sans-serif'],
- display: ['Georgia', 'serif'],
- code: ['Menlo', 'monospace'],
quote: ['Helvetica', 'serif'],
+ },
+ colors: {
+ green: 'green',
+ },
+ backgroundColor: {
+ customBackgroundTwo: '#facade',
+ },
+ textDecorationColor: (theme) => theme('colors'),
+ },
+ },
+ }
+
+ const thirdConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ extend: {
+ fontFamily: {
hero: ['Futura', 'sans-serif'],
},
colors: {
- red: 'red',
- green: 'green',
- blue: 'blue',
pink: 'pink',
},
- backgroundColor: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- pink: 'pink',
- customBackgroundOne: '#bada55',
- customBackgroundTwo: '#facade',
+ backgroundColor: () => ({
customBackgroundThree: '#c0ffee',
- },
+ }),
textDecorationColor: {
- red: 'red',
- green: 'green',
- blue: 'blue',
- pink: 'pink',
- orange: 'orange',
lime: 'lime',
},
},
- })
+ },
+ }
+
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ fontFamily: {
+ body: ['Arial', 'sans-serif'],
+ display: ['Georgia', 'serif'],
+ },
+ colors: {
+ blue: 'blue',
+ },
+ backgroundColor: (theme) => theme('colors'),
+ },
+ }
+
+ const result = resolveConfig([firstConfig, secondConfig, thirdConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ fontFamily: {
+ body: ['Arial', 'sans-serif'],
+ display: ['Georgia', 'serif'],
+ code: ['Menlo', 'monospace'],
+ quote: ['Helvetica', 'serif'],
+ hero: ['Futura', 'sans-serif'],
+ },
+ colors: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ pink: 'pink',
+ },
+ backgroundColor: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ pink: 'pink',
+ customBackgroundOne: '#bada55',
+ customBackgroundTwo: '#facade',
+ customBackgroundThree: '#c0ffee',
+ },
+ textDecorationColor: {
+ red: 'red',
+ green: 'green',
+ blue: 'blue',
+ pink: 'pink',
+ orange: 'orange',
+ lime: 'lime',
+ },
+ },
})
+})
- test('plugin config modifications are applied', () => {
- const userConfig = {
- plugins: [
- {
- config: {
- prefix: 'tw-',
- },
- },
- ],
- }
-
- const defaultConfig = {
- prefix: '',
- important: false,
- separator: ':',
- content: [],
- theme: {
- screens: {
- mobile: '400px',
+test('plugin config modifications are applied', () => {
+ const userConfig = {
+ plugins: [
+ {
+ config: {
+ prefix: 'tw-',
},
},
- }
+ ],
+ }
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: 'tw-',
- important: false,
- separator: ':',
- theme: {
- screens: {
- mobile: '400px',
- },
+ const defaultConfig = {
+ prefix: '',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ screens: {
+ mobile: '400px',
},
- plugins: userConfig.plugins,
- })
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: 'tw-',
+ important: false,
+ separator: ':',
+ theme: {
+ screens: {
+ mobile: '400px',
+ },
+ },
+ plugins: userConfig.plugins,
})
+})
- test('user config takes precedence over plugin config modifications', () => {
- const userConfig = {
- prefix: 'user-',
- plugins: [
- {
- config: {
- prefix: 'tw-',
- },
- },
- ],
- }
-
- const defaultConfig = {
- prefix: '',
- important: false,
- separator: ':',
- content: [],
- theme: {
- screens: {
- mobile: '400px',
+test('user config takes precedence over plugin config modifications', () => {
+ const userConfig = {
+ prefix: 'user-',
+ plugins: [
+ {
+ config: {
+ prefix: 'tw-',
},
},
- }
+ ],
+ }
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: 'user-',
- important: false,
- separator: ':',
- theme: {
- screens: {
- mobile: '400px',
- },
+ const defaultConfig = {
+ prefix: '',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ screens: {
+ mobile: '400px',
},
- plugins: userConfig.plugins,
- })
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: 'user-',
+ important: false,
+ separator: ':',
+ theme: {
+ screens: {
+ mobile: '400px',
+ },
+ },
+ plugins: userConfig.plugins,
})
+})
- test('plugin config can register plugins that also have config', () => {
- const userConfig = {
- plugins: [
- {
- config: {
- prefix: 'tw-',
- plugins: [
- {
- config: {
- important: true,
- },
+test('plugin config can register plugins that also have config', () => {
+ const userConfig = {
+ plugins: [
+ {
+ config: {
+ prefix: 'tw-',
+ plugins: [
+ {
+ config: {
+ important: true,
},
- {
- config: {
- separator: '__',
- },
+ },
+ {
+ config: {
+ separator: '__',
},
- ],
- },
- handler() {},
- },
- ],
- }
-
- const defaultConfig = {
- prefix: '',
- important: false,
- separator: ':',
- content: [],
- theme: {
- screens: {
- mobile: '400px',
+ },
+ ],
},
+ handler() {},
},
- }
+ ],
+ }
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: 'tw-',
- important: true,
- separator: '__',
- theme: {
- screens: {
- mobile: '400px',
- },
+ const defaultConfig = {
+ prefix: '',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ screens: {
+ mobile: '400px',
},
- plugins: userConfig.plugins,
- })
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: 'tw-',
+ important: true,
+ separator: '__',
+ theme: {
+ screens: {
+ mobile: '400px',
+ },
+ },
+ plugins: userConfig.plugins,
})
+})
- test('plugin configs take precedence over plugin configs registered by that plugin', () => {
- const userConfig = {
- plugins: [
- {
- config: {
- prefix: 'outer-',
- plugins: [
- {
- config: {
- prefix: 'inner-',
- },
+test('plugin configs take precedence over plugin configs registered by that plugin', () => {
+ const userConfig = {
+ plugins: [
+ {
+ config: {
+ prefix: 'outer-',
+ plugins: [
+ {
+ config: {
+ prefix: 'inner-',
},
- ],
- },
- handler() {},
- },
- ],
- }
-
- const defaultConfig = {
- prefix: '',
- important: false,
- separator: ':',
- content: [],
- theme: {
- screens: {
- mobile: '400px',
+ },
+ ],
},
+ handler() {},
},
- }
+ ],
+ }
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: 'outer-',
- important: false,
- separator: ':',
- theme: {
- screens: {
- mobile: '400px',
- },
+ const defaultConfig = {
+ prefix: '',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ screens: {
+ mobile: '400px',
},
- plugins: userConfig.plugins,
- })
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: 'outer-',
+ important: false,
+ separator: ':',
+ theme: {
+ screens: {
+ mobile: '400px',
+ },
+ },
+ plugins: userConfig.plugins,
})
+})
- test('plugin theme extensions are added even if user overrides top-level theme config', () => {
- const userConfig = {
- theme: {
- width: {
- '1px': '1px',
- },
+test('plugin theme extensions are added even if user overrides top-level theme config', () => {
+ const userConfig = {
+ theme: {
+ width: {
+ '1px': '1px',
},
- plugins: [
- {
- config: {
- theme: {
- extend: {
- width: {
- '2px': '2px',
- '3px': '3px',
- },
+ },
+ plugins: [
+ {
+ config: {
+ theme: {
+ extend: {
+ width: {
+ '2px': '2px',
+ '3px': '3px',
},
},
},
- handler() {},
- },
- ],
- }
-
- const defaultConfig = {
- prefix: '',
- important: false,
- separator: ':',
- content: [],
- theme: {
- width: {
- sm: '1rem',
- md: '2rem',
- lg: '3rem',
- },
- screens: {
- mobile: '400px',
},
+ handler() {},
},
- }
+ ],
+ }
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '',
- important: false,
- separator: ':',
- theme: {
- width: {
- '1px': '1px',
- '2px': '2px',
- '3px': '3px',
- },
- screens: {
- mobile: '400px',
- },
+ const defaultConfig = {
+ prefix: '',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ width: {
+ sm: '1rem',
+ md: '2rem',
+ lg: '3rem',
},
- plugins: userConfig.plugins,
- })
+ screens: {
+ mobile: '400px',
+ },
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '',
+ important: false,
+ separator: ':',
+ theme: {
+ width: {
+ '1px': '1px',
+ '2px': '2px',
+ '3px': '3px',
+ },
+ screens: {
+ mobile: '400px',
+ },
+ },
+ plugins: userConfig.plugins,
})
+})
- test('user theme extensions take precedence over plugin theme extensions with the same key', () => {
- const userConfig = {
- theme: {
- extend: {
- width: {
- xl: '6rem',
- },
- },
- },
- plugins: [
- {
- config: {
- theme: {
- extend: {
- width: {
- xl: '4rem',
- },
- },
- },
- },
- handler() {},
- },
- ],
- }
-
- const defaultConfig = {
- prefix: '',
- important: false,
- separator: ':',
- content: [],
- theme: {
+test('user theme extensions take precedence over plugin theme extensions with the same key', () => {
+ const userConfig = {
+ theme: {
+ extend: {
width: {
- sm: '1rem',
- md: '2rem',
- lg: '3rem',
- },
- screens: {
- mobile: '400px',
- },
- },
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '',
- important: false,
- separator: ':',
- theme: {
- width: {
- sm: '1rem',
- md: '2rem',
- lg: '3rem',
xl: '6rem',
},
- screens: {
- mobile: '400px',
- },
},
- plugins: userConfig.plugins,
- })
+ },
+ plugins: [
+ {
+ config: {
+ theme: {
+ extend: {
+ width: {
+ xl: '4rem',
+ },
+ },
+ },
+ },
+ handler() {},
+ },
+ ],
+ }
+
+ const defaultConfig = {
+ prefix: '',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ width: {
+ sm: '1rem',
+ md: '2rem',
+ lg: '3rem',
+ },
+ screens: {
+ mobile: '400px',
+ },
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '',
+ important: false,
+ separator: ':',
+ theme: {
+ width: {
+ sm: '1rem',
+ md: '2rem',
+ lg: '3rem',
+ xl: '6rem',
+ },
+ screens: {
+ mobile: '400px',
+ },
+ },
+ plugins: userConfig.plugins,
})
+})
- test('extensions are applied in the right order', () => {
- const userConfig = {
- theme: {
- extend: {
- colors: {
- grey: {
- light: '#eee',
- },
- },
- },
- },
- }
-
- const otherConfig = {
- theme: {
- extend: {
- colors: {
- grey: {
- light: '#ddd',
- darker: '#111',
- },
- },
- },
- },
- }
-
- const anotherConfig = {
- theme: {
- extend: {
- colors: {
- grey: {
- darker: '#222',
- },
- },
- },
- },
- }
-
- const defaultConfig = {
- content: [],
- theme: {
- colors: {
- grey: {
- light: '#ccc',
- dark: '#333',
- },
- },
- },
- }
-
- const result = resolveConfig([userConfig, otherConfig, anotherConfig, defaultConfig])
-
- expect(result).toMatchObject({
- theme: {
+test('extensions are applied in the right order', () => {
+ const userConfig = {
+ theme: {
+ extend: {
colors: {
grey: {
light: '#eee',
- dark: '#333',
+ },
+ },
+ },
+ },
+ }
+
+ const otherConfig = {
+ theme: {
+ extend: {
+ colors: {
+ grey: {
+ light: '#ddd',
darker: '#111',
},
},
},
- })
- })
+ },
+ }
- test('core plugin configuration builds on the default list when starting with an empty object', () => {
- const userConfig = {
- corePlugins: { display: false },
- }
-
- const defaultConfig = {
- prefix: '',
- important: false,
- separator: ':',
- content: [],
- theme: {},
- corePlugins: {},
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '',
- important: false,
- separator: ':',
- theme: {},
- corePlugins: corePluginList.filter((c) => c !== 'display'),
- })
- })
-
- test('core plugins that are disabled by default can be enabled', () => {
- const userConfig = {
- corePlugins: { display: true },
- }
-
- const defaultConfig = {
- presets: [],
- prefix: '',
- important: false,
- separator: ':',
- content: [],
- theme: {},
- corePlugins: { display: false },
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
- expect(result.corePlugins).toContain('display')
- })
-
- test('core plugin configurations stack', () => {
- const userConfig = {
- corePlugins: { display: false },
- }
-
- const otherConfig = {
- corePlugins: ({ corePlugins }) => {
- return [...corePlugins, 'margin']
- },
- }
-
- const defaultConfig = {
- prefix: '',
- important: false,
- separator: ':',
- content: [],
- theme: {},
- corePlugins: ['float', 'display', 'padding'],
- }
-
- const result = resolveConfig([userConfig, otherConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '',
- important: false,
- separator: ':',
- theme: {},
- corePlugins: ['float', 'padding', 'margin'],
- })
- })
-
- test('plugins are merged', () => {
- const userConfig = {
- plugins: ['3'],
- }
-
- const otherConfig = {
- plugins: ['2'],
- }
-
- const defaultConfig = {
- plugins: ['1'],
- prefix: '',
- important: false,
- separator: ':',
- content: [],
- theme: {},
- }
-
- const result = resolveConfig([userConfig, otherConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '',
- important: false,
- separator: ':',
- theme: {},
- plugins: ['1', '2', '3'],
- })
- })
-
- test('all helpers can be destructured from the first function argument', () => {
- const userConfig = {
- theme: {
- example: ({ theme, colors, negative, breakpoints }) => ({
- weight: theme('fontWeight.bold'),
- black: colors.black,
- white: colors.white,
- ...negative(theme('spacing')),
- ...breakpoints(theme('screens')),
- }),
- },
- }
-
- const defaultConfig = {
- prefix: '-',
- important: false,
- separator: ':',
- content: [],
- theme: {
- screens: {
- sm: '640px',
- md: '768px',
- },
- fontWeight: {
- bold: 700,
- },
- spacing: {
- 0: '0px',
- 1: '1px',
- 2: '2px',
- 3: '3px',
- 4: '4px',
- },
- },
- }
-
- const result = resolveConfig([userConfig, defaultConfig])
-
- expect(result).toMatchObject({
- prefix: '-',
- important: false,
- separator: ':',
- theme: {
- example: {
- weight: 700,
- black: '#000',
- white: '#fff',
- '-1': '-1px',
- '-2': '-2px',
- '-3': '-3px',
- '-4': '-4px',
- 'screen-sm': '640px',
- 'screen-md': '768px',
- },
- },
- })
- })
-
- test('does not duplicate extended configs every time resolveConfig is called', () => {
- let shared = {
- foo: { bar: { baz: [{ color: 'red' }] } },
- }
-
- const createConfig = (color) =>
- resolveConfig([
- {
- theme: {
- foo: shared.foo,
- extend: {
- foo: { bar: { baz: { color } } },
- },
+ const anotherConfig = {
+ theme: {
+ extend: {
+ colors: {
+ grey: {
+ darker: '#222',
},
},
- ])
+ },
+ },
+ }
- createConfig('orange')
- createConfig('yellow')
- createConfig('green')
+ const defaultConfig = {
+ content: [],
+ theme: {
+ colors: {
+ grey: {
+ light: '#ccc',
+ dark: '#333',
+ },
+ },
+ },
+ }
- const result = createConfig('blue')
+ const result = resolveConfig([userConfig, otherConfig, anotherConfig, defaultConfig])
- expect(shared.foo.bar.baz).toMatchObject([{ color: 'red' }])
- expect(result.theme.foo.bar.baz).toMatchObject([{ color: 'red' }, { color: 'blue' }])
+ expect(result).toMatchObject({
+ theme: {
+ colors: {
+ grey: {
+ light: '#eee',
+ dark: '#333',
+ darker: '#111',
+ },
+ },
+ },
})
})
+
+test('core plugin configuration builds on the default list when starting with an empty object', () => {
+ const userConfig = {
+ corePlugins: { display: false },
+ }
+
+ const defaultConfig = {
+ prefix: '',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {},
+ corePlugins: {},
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '',
+ important: false,
+ separator: ':',
+ theme: {},
+ corePlugins: corePluginList.filter((c) => c !== 'display'),
+ })
+})
+
+test('core plugins that are disabled by default can be enabled', () => {
+ const userConfig = {
+ corePlugins: { display: true },
+ }
+
+ const defaultConfig = {
+ presets: [],
+ prefix: '',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {},
+ corePlugins: { display: false },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+ expect(result.corePlugins).toContain('display')
+})
+
+test('core plugin configurations stack', () => {
+ const userConfig = {
+ corePlugins: { display: false },
+ }
+
+ const otherConfig = {
+ corePlugins: ({ corePlugins }) => {
+ return [...corePlugins, 'margin']
+ },
+ }
+
+ const defaultConfig = {
+ prefix: '',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {},
+ corePlugins: ['float', 'display', 'padding'],
+ }
+
+ const result = resolveConfig([userConfig, otherConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '',
+ important: false,
+ separator: ':',
+ theme: {},
+ corePlugins: ['float', 'padding', 'margin'],
+ })
+})
+
+test('plugins are merged', () => {
+ let p1 = { config: { order: '1' } }
+ let p2 = { config: { order: '2' } }
+ let p3 = { config: { order: '3' } }
+
+ const userConfig = {
+ plugins: [p3],
+ }
+
+ const otherConfig = {
+ plugins: [p2],
+ }
+
+ const defaultConfig = {
+ plugins: [p1],
+ prefix: '',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {},
+ }
+
+ const result = resolveConfig([userConfig, otherConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '',
+ important: false,
+ separator: ':',
+ theme: {},
+ plugins: [p1, p2, p3],
+ })
+})
+
+test('all helpers can be destructured from the first function argument', () => {
+ const userConfig = {
+ theme: {
+ example: ({ theme, colors, negative, breakpoints }) => ({
+ weight: theme('fontWeight.bold'),
+ black: colors.black,
+ white: colors.white,
+ ...negative(theme('spacing')),
+ ...breakpoints(theme('screens')),
+ }),
+ },
+ }
+
+ const defaultConfig = {
+ prefix: '-',
+ important: false,
+ separator: ':',
+ content: [],
+ theme: {
+ screens: {
+ sm: '640px',
+ md: '768px',
+ },
+ fontWeight: {
+ bold: 700,
+ },
+ spacing: {
+ 0: '0px',
+ 1: '1px',
+ 2: '2px',
+ 3: '3px',
+ 4: '4px',
+ },
+ },
+ }
+
+ const result = resolveConfig([userConfig, defaultConfig])
+
+ expect(result).toMatchObject({
+ prefix: '-',
+ important: false,
+ separator: ':',
+ theme: {
+ example: {
+ weight: 700,
+ black: '#000',
+ white: '#fff',
+ '-1': '-1px',
+ '-2': '-2px',
+ '-3': '-3px',
+ '-4': '-4px',
+ 'screen-sm': '640px',
+ 'screen-md': '768px',
+ },
+ },
+ })
+})
+
+test('does not duplicate extended configs every time resolveConfig is called', () => {
+ let shared = {
+ foo: { bar: { baz: [{ color: 'red' }] } },
+ }
+
+ const createConfig = (color) =>
+ resolveConfig([
+ {
+ theme: {
+ foo: shared.foo,
+ extend: {
+ foo: { bar: { baz: { color } } },
+ },
+ },
+ },
+ ])
+
+ createConfig('orange')
+ createConfig('yellow')
+ createConfig('green')
+
+ const result = createConfig('blue')
+
+ expect(shared.foo.bar.baz).toMatchObject([{ color: 'red' }])
+ expect(result.theme.foo.bar.baz).toMatchObject([{ color: 'red' }, { color: 'blue' }])
+})
diff --git a/tests/responsive-and-variants-atrules.test.js b/tests/responsive-and-variants-atrules.test.js
index 9d9ed5d85..4d4a0f507 100644
--- a/tests/responsive-and-variants-atrules.test.js
+++ b/tests/responsive-and-variants-atrules.test.js
@@ -1,157 +1,155 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- test('responsive and variants atrules', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
+test('responsive and variants atrules', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer utilities {
- @responsive {
- .responsive-in-utilities {
- color: blue;
- }
- }
- @variants {
- .variants-in-utilities {
- color: red;
- }
- }
- @responsive {
- @variants {
- .both-in-utilities {
- color: green;
- }
- }
- }
- }
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+ @layer utilities {
@responsive {
- .responsive-at-root {
- color: white;
+ .responsive-in-utilities {
+ color: blue;
}
}
@variants {
- .variants-at-root {
- color: orange;
+ .variants-in-utilities {
+ color: red;
}
}
@responsive {
@variants {
- .both-at-root {
- color: pink;
+ .both-in-utilities {
+ color: green;
}
}
}
+ }
- @layer components {
- @responsive {
- .responsive-in-components {
- color: blue;
- }
- }
- @variants {
- .variants-in-components {
- color: red;
- }
- }
- @responsive {
- @variants {
- .both-in-components {
- color: green;
- }
- }
- }
+ @responsive {
+ .responsive-at-root {
+ color: white;
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .responsive-in-components {
- color: #00f;
- }
- .variants-in-components {
- color: red;
- }
- .both-in-components {
- color: green;
- }
- .responsive-in-utilities {
- color: #00f;
- }
- .variants-in-utilities {
- color: red;
- }
- .both-in-utilities {
- color: green;
- }
- .responsive-at-root {
- color: #fff;
- }
- .variants-at-root {
- color: orange;
- }
+ }
+ @variants {
+ .variants-at-root {
+ color: orange;
+ }
+ }
+ @responsive {
+ @variants {
.both-at-root {
color: pink;
}
- @media (min-width: 768px) {
- .md\:focus\:responsive-in-components:focus {
- color: #00f;
- }
- .md\:focus\:variants-in-components:focus {
- color: red;
- }
- .md\:focus\:both-in-components:focus {
+ }
+ }
+
+ @layer components {
+ @responsive {
+ .responsive-in-components {
+ color: blue;
+ }
+ }
+ @variants {
+ .variants-in-components {
+ color: red;
+ }
+ }
+ @responsive {
+ @variants {
+ .both-in-components {
color: green;
}
- .md\:focus\:responsive-in-utilities:focus {
- color: #00f;
- }
- .md\:focus\:variants-in-utilities:focus {
- color: red;
- }
- .md\:focus\:both-in-utilities:focus {
- color: green;
- }
- .md\:focus\:responsive-at-root:focus {
- color: #fff;
- }
- .md\:focus\:variants-at-root:focus {
- color: orange;
- }
- .md\:focus\:both-at-root:focus {
- color: pink;
- }
}
- `)
- })
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .responsive-in-components {
+ color: #00f;
+ }
+ .variants-in-components {
+ color: red;
+ }
+ .both-in-components {
+ color: green;
+ }
+ .responsive-in-utilities {
+ color: #00f;
+ }
+ .variants-in-utilities {
+ color: red;
+ }
+ .both-in-utilities {
+ color: green;
+ }
+ .responsive-at-root {
+ color: #fff;
+ }
+ .variants-at-root {
+ color: orange;
+ }
+ .both-at-root {
+ color: pink;
+ }
+ @media (min-width: 768px) {
+ .md\:focus\:responsive-in-components:focus {
+ color: #00f;
+ }
+ .md\:focus\:variants-in-components:focus {
+ color: red;
+ }
+ .md\:focus\:both-in-components:focus {
+ color: green;
+ }
+ .md\:focus\:responsive-in-utilities:focus {
+ color: #00f;
+ }
+ .md\:focus\:variants-in-utilities:focus {
+ color: red;
+ }
+ .md\:focus\:both-in-utilities:focus {
+ color: green;
+ }
+ .md\:focus\:responsive-at-root:focus {
+ color: #fff;
+ }
+ .md\:focus\:variants-at-root:focus {
+ color: orange;
+ }
+ .md\:focus\:both-at-root:focus {
+ color: pink;
+ }
+ }
+ `)
})
})
diff --git a/tests/safelist.test.js b/tests/safelist.test.js
index cbbd1e245..e2621f846 100644
--- a/tests/safelist.test.js
+++ b/tests/safelist.test.js
@@ -1,636 +1,491 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(({ stable, oxide }) => {
- it('should not safelist anything', () => {
- let config = {
- content: [{ raw: html`
` }],
- }
+it('should not safelist anything', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .uppercase {
- text-transform: uppercase;
- }
- `)
- })
- })
-
- it('should safelist strings', () => {
- let config = {
- content: [{ raw: html`
` }],
- safelist: ['mt-[20px]', 'font-bold', 'text-gray-200', 'hover:underline'],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .mt-\[20px\] {
- margin-top: 20px;
- }
- .font-bold {
- font-weight: 700;
- }
- .uppercase {
- text-transform: uppercase;
- }
- .text-gray-200 {
- --tw-text-opacity: 1;
- color: rgb(229 231 235 / var(--tw-text-opacity));
- }
- .hover\:underline:hover {
- text-decoration-line: underline;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .mt-\[20px\] {
- margin-top: 20px;
- }
- .font-bold {
- font-weight: 700;
- }
- .uppercase {
- text-transform: uppercase;
- }
- .text-gray-200 {
- color: #e5e7eb;
- }
- .hover\:underline:hover {
- text-decoration-line: underline;
- }
- `)
- })
- })
-
- it('should safelist based on a pattern regex', () => {
- let config = {
- content: [{ raw: html`
` }],
- safelist: [
- {
- pattern: /^bg-(red)-(100|200)$/,
- variants: ['hover'],
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .bg-red-100 {
- --tw-bg-opacity: 1;
- background-color: rgb(254 226 226 / var(--tw-bg-opacity));
- }
- .bg-red-200 {
- --tw-bg-opacity: 1;
- background-color: rgb(254 202 202 / var(--tw-bg-opacity));
- }
- .uppercase {
- text-transform: uppercase;
- }
- .hover\:bg-red-100:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(254 226 226 / var(--tw-bg-opacity));
- }
- .hover\:bg-red-200:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(254 202 202 / var(--tw-bg-opacity));
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .bg-red-100 {
- background-color: #fee2e2;
- }
- .bg-red-200 {
- background-color: #fecaca;
- }
- .uppercase {
- text-transform: uppercase;
- }
- .hover\:bg-red-100:hover {
- background-color: #fee2e2;
- }
- .hover\:bg-red-200:hover {
- background-color: #fecaca;
- }
- `)
- })
- })
-
- it('should not generate duplicates', () => {
- let config = {
- content: [{ raw: html`
` }],
- safelist: [
- 'uppercase',
- {
- pattern: /^bg-(red)-(100|200)$/,
- variants: ['hover'],
- },
- {
- pattern: /^bg-(red)-(100|200)$/,
- variants: ['hover'],
- },
- {
- pattern: /^bg-(red)-(100|200)$/,
- variants: ['hover'],
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .bg-red-100 {
- --tw-bg-opacity: 1;
- background-color: rgb(254 226 226 / var(--tw-bg-opacity));
- }
- .bg-red-200 {
- --tw-bg-opacity: 1;
- background-color: rgb(254 202 202 / var(--tw-bg-opacity));
- }
- .uppercase {
- text-transform: uppercase;
- }
- .hover\:bg-red-100:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(254 226 226 / var(--tw-bg-opacity));
- }
- .hover\:bg-red-200:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(254 202 202 / var(--tw-bg-opacity));
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .bg-red-100 {
- background-color: #fee2e2;
- }
- .bg-red-200 {
- background-color: #fecaca;
- }
- .uppercase {
- text-transform: uppercase;
- }
- .hover\:bg-red-100:hover {
- background-color: #fee2e2;
- }
- .hover\:bg-red-200:hover {
- background-color: #fecaca;
- }
- `)
- })
- })
-
- it('should safelist when using a custom prefix', () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`
` }],
- safelist: [
- {
- pattern: /^tw-bg-red-(100|200)$/g,
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .tw-bg-red-100 {
- --tw-bg-opacity: 1;
- background-color: rgb(254 226 226 / var(--tw-bg-opacity));
- }
- .tw-bg-red-200 {
- --tw-bg-opacity: 1;
- background-color: rgb(254 202 202 / var(--tw-bg-opacity));
- }
- .tw-uppercase {
- text-transform: uppercase;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .tw-bg-red-100 {
- background-color: #fee2e2;
- }
- .tw-bg-red-200 {
- background-color: #fecaca;
- }
- .tw-uppercase {
- text-transform: uppercase;
- }
- `)
- })
- })
-
- it('should not safelist when an empty list is provided', () => {
- let config = {
- content: [{ raw: html`
` }],
- safelist: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .uppercase {
- text-transform: uppercase;
- }
- `)
- })
- })
-
- it('should not safelist when an sparse/holey list is provided', () => {
- let config = {
- content: [{ raw: html`
` }],
- safelist: [, , ,],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .uppercase {
- text-transform: uppercase;
- }
- `)
- })
- })
-
- it('should not safelist any invalid variants if provided', () => {
- let config = {
- content: [{ raw: html`
` }],
- safelist: [
- {
- pattern: /^bg-(red)-(100|200)$/,
- variants: ['foo', 'bar'],
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .bg-red-100 {
- --tw-bg-opacity: 1;
- background-color: rgb(254 226 226 / var(--tw-bg-opacity));
- }
- .bg-red-200 {
- --tw-bg-opacity: 1;
- background-color: rgb(254 202 202 / var(--tw-bg-opacity));
- }
- .uppercase {
- text-transform: uppercase;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .bg-red-100 {
- background-color: #fee2e2;
- }
- .bg-red-200 {
- background-color: #fecaca;
- }
- .uppercase {
- text-transform: uppercase;
- }
- `)
- })
- })
-
- it('should safelist negatives based on a pattern regex', () => {
- let config = {
- content: [{ raw: html`
` }],
- safelist: [
- {
- pattern: /^-top-1$/,
- variants: ['hover'],
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .-top-1 {
- top: -0.25rem;
- }
- .uppercase {
- text-transform: uppercase;
- }
- .hover\:-top-1:hover {
- top: -0.25rem;
- }
- `)
- })
- })
-
- it('should safelist negatives based on a pattern regex', () => {
- let config = {
- content: [{ raw: html`
` }],
- safelist: [
- {
- pattern: /^bg-red-(400|500)(\/(40|50))?$/,
- variants: ['hover'],
- },
- {
- pattern: /^(fill|ring|text)-red-200\/50$/,
- variants: ['hover'],
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .bg-red-400 {
- --tw-bg-opacity: 1;
- background-color: rgb(248 113 113 / var(--tw-bg-opacity));
- }
- .bg-red-400\/40 {
- background-color: #f8717166;
- }
- .bg-red-400\/50 {
- background-color: #f8717180;
- }
- .bg-red-500 {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .bg-red-500\/40 {
- background-color: #ef444466;
- }
- .bg-red-500\/50 {
- background-color: #ef444480;
- }
- .fill-red-200\/50 {
- fill: #fecaca80;
- }
- .uppercase {
- text-transform: uppercase;
- }
- .text-red-200\/50 {
- color: #fecaca80;
- }
- .ring-red-200\/50 {
- --tw-ring-color: #fecaca80;
- }
- .hover\:bg-red-400:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(248 113 113 / var(--tw-bg-opacity));
- }
- .hover\:bg-red-400\/40:hover {
- background-color: #f8717166;
- }
- .hover\:bg-red-400\/50:hover {
- background-color: #f8717180;
- }
- .hover\:bg-red-500:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
- }
- .hover\:bg-red-500\/40:hover {
- background-color: #ef444466;
- }
- .hover\:bg-red-500\/50:hover {
- background-color: #ef444480;
- }
- .hover\:fill-red-200\/50:hover {
- fill: #fecaca80;
- }
- .hover\:text-red-200\/50:hover {
- color: #fecaca80;
- }
- .hover\:ring-red-200\/50:hover {
- --tw-ring-color: #fecaca80;
- }
- `)
- })
- })
-
- it('should safelist pattern regex with !important selector', () => {
- let config = {
- content: [{ raw: html`
` }],
- safelist: [{ pattern: /^!grid-cols-(4|5|6)$/ }],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .\!grid-cols-4 {
- grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
- }
- .\!grid-cols-5 {
- grid-template-columns: repeat(5, minmax(0, 1fr)) !important;
- }
- .\!grid-cols-6 {
- grid-template-columns: repeat(6, minmax(0, 1fr)) !important;
- }
- .uppercase {
- text-transform: uppercase;
- }
- `)
- })
- })
-
- it('should safelist pattern regex with custom prefix along with !important selector', () => {
- let config = {
- prefix: 'tw-',
- content: [{ raw: html`
` }],
- safelist: [{ pattern: /^!tw-grid-cols-(4|5|6)$/ }],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .\!tw-grid-cols-4 {
- grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
- }
- .\!tw-grid-cols-5 {
- grid-template-columns: repeat(5, minmax(0, 1fr)) !important;
- }
- .\!tw-grid-cols-6 {
- grid-template-columns: repeat(6, minmax(0, 1fr)) !important;
- }
- .tw-uppercase {
- text-transform: uppercase;
- }
- `)
- })
- })
-
- it('should safelist pattern regex having !important selector with variants', () => {
- let config = {
- content: [{ raw: html`
` }],
- safelist: [
- {
- pattern: /^!bg-gray-(500|600|700|800)$/,
- variants: ['hover'],
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .\!bg-gray-500 {
- --tw-bg-opacity: 1 !important;
- background-color: rgb(107 114 128 / var(--tw-bg-opacity)) !important;
- }
- .\!bg-gray-600 {
- --tw-bg-opacity: 1 !important;
- background-color: rgb(75 85 99 / var(--tw-bg-opacity)) !important;
- }
- .\!bg-gray-700 {
- --tw-bg-opacity: 1 !important;
- background-color: rgb(55 65 81 / var(--tw-bg-opacity)) !important;
- }
- .\!bg-gray-800 {
- --tw-bg-opacity: 1 !important;
- background-color: rgb(31 41 55 / var(--tw-bg-opacity)) !important;
- }
- .uppercase {
- text-transform: uppercase;
- }
- .hover\:\!bg-gray-500:hover {
- --tw-bg-opacity: 1 !important;
- background-color: rgb(107 114 128 / var(--tw-bg-opacity)) !important;
- }
- .hover\:\!bg-gray-600:hover {
- --tw-bg-opacity: 1 !important;
- background-color: rgb(75 85 99 / var(--tw-bg-opacity)) !important;
- }
- .hover\:\!bg-gray-700:hover {
- --tw-bg-opacity: 1 !important;
- background-color: rgb(55 65 81 / var(--tw-bg-opacity)) !important;
- }
- .hover\:\!bg-gray-800:hover {
- --tw-bg-opacity: 1 !important;
- background-color: rgb(31 41 55 / var(--tw-bg-opacity)) !important;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .\!bg-gray-500 {
- background-color: #6b7280 !important;
- }
- .\!bg-gray-600 {
- background-color: #4b5563 !important;
- }
- .\!bg-gray-700 {
- background-color: #374151 !important;
- }
- .\!bg-gray-800 {
- background-color: #1f2937 !important;
- }
- .uppercase {
- text-transform: uppercase;
- }
- .hover\:\!bg-gray-500:hover {
- background-color: #6b7280 !important;
- }
- .hover\:\!bg-gray-600:hover {
- background-color: #4b5563 !important;
- }
- .hover\:\!bg-gray-700:hover {
- background-color: #374151 !important;
- }
- .hover\:\!bg-gray-800:hover {
- background-color: #1f2937 !important;
- }
- `)
- })
- })
-
- it('should safelist multiple patterns with !important selector', () => {
- let config = {
- content: [{ raw: html`
` }],
- safelist: [
- {
- pattern: /^!text-gray-(700|800|900)$/,
- variants: ['hover'],
- },
- {
- pattern: /^!bg-gray-(200|300|400)$/,
- variants: ['hover'],
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .\!bg-gray-200 {
- --tw-bg-opacity: 1 !important;
- background-color: rgb(229 231 235 / var(--tw-bg-opacity)) !important;
- }
- .\!bg-gray-300 {
- --tw-bg-opacity: 1 !important;
- background-color: rgb(209 213 219 / var(--tw-bg-opacity)) !important;
- }
- .\!bg-gray-400 {
- --tw-bg-opacity: 1 !important;
- background-color: rgb(156 163 175 / var(--tw-bg-opacity)) !important;
- }
- .uppercase {
- text-transform: uppercase;
- }
- .\!text-gray-700 {
- --tw-text-opacity: 1 !important;
- color: rgb(55 65 81 / var(--tw-text-opacity)) !important;
- }
- .\!text-gray-800 {
- --tw-text-opacity: 1 !important;
- color: rgb(31 41 55 / var(--tw-text-opacity)) !important;
- }
- .\!text-gray-900 {
- --tw-text-opacity: 1 !important;
- color: rgb(17 24 39 / var(--tw-text-opacity)) !important;
- }
- .hover\:\!bg-gray-200:hover {
- --tw-bg-opacity: 1 !important;
- background-color: rgb(229 231 235 / var(--tw-bg-opacity)) !important;
- }
- .hover\:\!bg-gray-300:hover {
- --tw-bg-opacity: 1 !important;
- background-color: rgb(209 213 219 / var(--tw-bg-opacity)) !important;
- }
- .hover\:\!bg-gray-400:hover {
- --tw-bg-opacity: 1 !important;
- background-color: rgb(156 163 175 / var(--tw-bg-opacity)) !important;
- }
- .hover\:\!text-gray-700:hover {
- --tw-text-opacity: 1 !important;
- color: rgb(55 65 81 / var(--tw-text-opacity)) !important;
- }
- .hover\:\!text-gray-800:hover {
- --tw-text-opacity: 1 !important;
- color: rgb(31 41 55 / var(--tw-text-opacity)) !important;
- }
- .hover\:\!text-gray-900:hover {
- --tw-text-opacity: 1 !important;
- color: rgb(17 24 39 / var(--tw-text-opacity)) !important;
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .\!bg-gray-200 {
- background-color: #e5e7eb !important;
- }
- .\!bg-gray-300 {
- background-color: #d1d5db !important;
- }
- .\!bg-gray-400 {
- background-color: #9ca3af !important;
- }
- .uppercase {
- text-transform: uppercase;
- }
- .\!text-gray-700 {
- color: #374151 !important;
- }
- .\!text-gray-800 {
- color: #1f2937 !important;
- }
- .\!text-gray-900 {
- color: #111827 !important;
- }
- .hover\:\!bg-gray-200:hover {
- background-color: #e5e7eb !important;
- }
- .hover\:\!bg-gray-300:hover {
- background-color: #d1d5db !important;
- }
- .hover\:\!bg-gray-400:hover {
- background-color: #9ca3af !important;
- }
- .hover\:\!text-gray-700:hover {
- color: #374151 !important;
- }
- .hover\:\!text-gray-800:hover {
- color: #1f2937 !important;
- }
- .hover\:\!text-gray-900:hover {
- color: #111827 !important;
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .uppercase {
+ text-transform: uppercase;
+ }
+ `)
+ })
+})
+
+it('should safelist strings', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ safelist: ['mt-[20px]', 'font-bold', 'text-gray-200', 'hover:underline'],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .mt-\[20px\] {
+ margin-top: 20px;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .uppercase {
+ text-transform: uppercase;
+ }
+ .text-gray-200 {
+ --tw-text-opacity: 1;
+ color: rgb(229 231 235 / var(--tw-text-opacity));
+ }
+ .hover\:underline:hover {
+ text-decoration-line: underline;
+ }
+ `)
+ })
+})
+
+it('should safelist based on a pattern regex', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ safelist: [
+ {
+ pattern: /^bg-(red)-(100|200)$/,
+ variants: ['hover'],
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-red-100 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 226 226 / var(--tw-bg-opacity));
+ }
+ .bg-red-200 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 202 202 / var(--tw-bg-opacity));
+ }
+ .uppercase {
+ text-transform: uppercase;
+ }
+ .hover\:bg-red-100:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 226 226 / var(--tw-bg-opacity));
+ }
+ .hover\:bg-red-200:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 202 202 / var(--tw-bg-opacity));
+ }
+ `)
+ })
+})
+
+it('should not generate duplicates', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ safelist: [
+ 'uppercase',
+ {
+ pattern: /^bg-(red)-(100|200)$/,
+ variants: ['hover'],
+ },
+ {
+ pattern: /^bg-(red)-(100|200)$/,
+ variants: ['hover'],
+ },
+ {
+ pattern: /^bg-(red)-(100|200)$/,
+ variants: ['hover'],
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-red-100 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 226 226 / var(--tw-bg-opacity));
+ }
+ .bg-red-200 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 202 202 / var(--tw-bg-opacity));
+ }
+ .uppercase {
+ text-transform: uppercase;
+ }
+ .hover\:bg-red-100:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 226 226 / var(--tw-bg-opacity));
+ }
+ .hover\:bg-red-200:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 202 202 / var(--tw-bg-opacity));
+ }
+ `)
+ })
+})
+
+it('should safelist when using a custom prefix', () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`
` }],
+ safelist: [
+ {
+ pattern: /^tw-bg-red-(100|200)$/g,
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .tw-bg-red-100 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 226 226 / var(--tw-bg-opacity));
+ }
+ .tw-bg-red-200 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 202 202 / var(--tw-bg-opacity));
+ }
+ .tw-uppercase {
+ text-transform: uppercase;
+ }
+ `)
+ })
+})
+
+it('should not safelist when an empty list is provided', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ safelist: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .uppercase {
+ text-transform: uppercase;
+ }
+ `)
+ })
+})
+
+it('should not safelist when an sparse/holey list is provided', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ safelist: [, , ,],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .uppercase {
+ text-transform: uppercase;
+ }
+ `)
+ })
+})
+
+it('should not safelist any invalid variants if provided', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ safelist: [
+ {
+ pattern: /^bg-(red)-(100|200)$/,
+ variants: ['foo', 'bar'],
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-red-100 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 226 226 / var(--tw-bg-opacity));
+ }
+ .bg-red-200 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(254 202 202 / var(--tw-bg-opacity));
+ }
+ .uppercase {
+ text-transform: uppercase;
+ }
+ `)
+ })
+})
+
+it('should safelist negatives based on a pattern regex', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ safelist: [
+ {
+ pattern: /^-top-1$/,
+ variants: ['hover'],
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .-top-1 {
+ top: -0.25rem;
+ }
+ .uppercase {
+ text-transform: uppercase;
+ }
+ .hover\:-top-1:hover {
+ top: -0.25rem;
+ }
+ `)
+ })
+})
+
+it('should safelist negatives based on a pattern regex', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ safelist: [
+ {
+ pattern: /^bg-red-(400|500)(\/(40|50))?$/,
+ variants: ['hover'],
+ },
+ {
+ pattern: /^(fill|ring|text)-red-200\/50$/,
+ variants: ['hover'],
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-red-400 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(248 113 113 / var(--tw-bg-opacity));
+ }
+ .bg-red-400\/40 {
+ background-color: #f8717166;
+ }
+ .bg-red-400\/50 {
+ background-color: #f8717180;
+ }
+ .bg-red-500 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(239 68 68 / var(--tw-bg-opacity));
+ }
+ .bg-red-500\/40 {
+ background-color: #ef444466;
+ }
+ .bg-red-500\/50 {
+ background-color: #ef444480;
+ }
+ .fill-red-200\/50 {
+ fill: #fecaca80;
+ }
+ .uppercase {
+ text-transform: uppercase;
+ }
+ .text-red-200\/50 {
+ color: #fecaca80;
+ }
+ .ring-red-200\/50 {
+ --tw-ring-color: #fecaca80;
+ }
+ .hover\:bg-red-400:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(248 113 113 / var(--tw-bg-opacity));
+ }
+ .hover\:bg-red-400\/40:hover {
+ background-color: #f8717166;
+ }
+ .hover\:bg-red-400\/50:hover {
+ background-color: #f8717180;
+ }
+ .hover\:bg-red-500:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(239 68 68 / var(--tw-bg-opacity));
+ }
+ .hover\:bg-red-500\/40:hover {
+ background-color: #ef444466;
+ }
+ .hover\:bg-red-500\/50:hover {
+ background-color: #ef444480;
+ }
+ .hover\:fill-red-200\/50:hover {
+ fill: #fecaca80;
+ }
+ .hover\:text-red-200\/50:hover {
+ color: #fecaca80;
+ }
+ .hover\:ring-red-200\/50:hover {
+ --tw-ring-color: #fecaca80;
+ }
+ `)
+ })
+})
+
+it('should safelist pattern regex with !important selector', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ safelist: [{ pattern: /^!grid-cols-(4|5|6)$/ }],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .\!grid-cols-4 {
+ grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
+ }
+ .\!grid-cols-5 {
+ grid-template-columns: repeat(5, minmax(0, 1fr)) !important;
+ }
+ .\!grid-cols-6 {
+ grid-template-columns: repeat(6, minmax(0, 1fr)) !important;
+ }
+ .uppercase {
+ text-transform: uppercase;
+ }
+ `)
+ })
+})
+
+it('should safelist pattern regex with custom prefix along with !important selector', () => {
+ let config = {
+ prefix: 'tw-',
+ content: [{ raw: html`
` }],
+ safelist: [{ pattern: /^!tw-grid-cols-(4|5|6)$/ }],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .\!tw-grid-cols-4 {
+ grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
+ }
+ .\!tw-grid-cols-5 {
+ grid-template-columns: repeat(5, minmax(0, 1fr)) !important;
+ }
+ .\!tw-grid-cols-6 {
+ grid-template-columns: repeat(6, minmax(0, 1fr)) !important;
+ }
+ .tw-uppercase {
+ text-transform: uppercase;
+ }
+ `)
+ })
+})
+
+it('should safelist pattern regex having !important selector with variants', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ safelist: [
+ {
+ pattern: /^!bg-gray-(500|600|700|800)$/,
+ variants: ['hover'],
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .\!bg-gray-500 {
+ --tw-bg-opacity: 1 !important;
+ background-color: rgb(107 114 128 / var(--tw-bg-opacity)) !important;
+ }
+ .\!bg-gray-600 {
+ --tw-bg-opacity: 1 !important;
+ background-color: rgb(75 85 99 / var(--tw-bg-opacity)) !important;
+ }
+ .\!bg-gray-700 {
+ --tw-bg-opacity: 1 !important;
+ background-color: rgb(55 65 81 / var(--tw-bg-opacity)) !important;
+ }
+ .\!bg-gray-800 {
+ --tw-bg-opacity: 1 !important;
+ background-color: rgb(31 41 55 / var(--tw-bg-opacity)) !important;
+ }
+ .uppercase {
+ text-transform: uppercase;
+ }
+ .hover\:\!bg-gray-500:hover {
+ --tw-bg-opacity: 1 !important;
+ background-color: rgb(107 114 128 / var(--tw-bg-opacity)) !important;
+ }
+ .hover\:\!bg-gray-600:hover {
+ --tw-bg-opacity: 1 !important;
+ background-color: rgb(75 85 99 / var(--tw-bg-opacity)) !important;
+ }
+ .hover\:\!bg-gray-700:hover {
+ --tw-bg-opacity: 1 !important;
+ background-color: rgb(55 65 81 / var(--tw-bg-opacity)) !important;
+ }
+ .hover\:\!bg-gray-800:hover {
+ --tw-bg-opacity: 1 !important;
+ background-color: rgb(31 41 55 / var(--tw-bg-opacity)) !important;
+ }
+ `)
+ })
+})
+
+it('should safelist multiple patterns with !important selector', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ safelist: [
+ {
+ pattern: /^!text-gray-(700|800|900)$/,
+ variants: ['hover'],
+ },
+ {
+ pattern: /^!bg-gray-(200|300|400)$/,
+ variants: ['hover'],
+ },
+ ],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .\!bg-gray-200 {
+ --tw-bg-opacity: 1 !important;
+ background-color: rgb(229 231 235 / var(--tw-bg-opacity)) !important;
+ }
+ .\!bg-gray-300 {
+ --tw-bg-opacity: 1 !important;
+ background-color: rgb(209 213 219 / var(--tw-bg-opacity)) !important;
+ }
+ .\!bg-gray-400 {
+ --tw-bg-opacity: 1 !important;
+ background-color: rgb(156 163 175 / var(--tw-bg-opacity)) !important;
+ }
+ .uppercase {
+ text-transform: uppercase;
+ }
+ .\!text-gray-700 {
+ --tw-text-opacity: 1 !important;
+ color: rgb(55 65 81 / var(--tw-text-opacity)) !important;
+ }
+ .\!text-gray-800 {
+ --tw-text-opacity: 1 !important;
+ color: rgb(31 41 55 / var(--tw-text-opacity)) !important;
+ }
+ .\!text-gray-900 {
+ --tw-text-opacity: 1 !important;
+ color: rgb(17 24 39 / var(--tw-text-opacity)) !important;
+ }
+ .hover\:\!bg-gray-200:hover {
+ --tw-bg-opacity: 1 !important;
+ background-color: rgb(229 231 235 / var(--tw-bg-opacity)) !important;
+ }
+ .hover\:\!bg-gray-300:hover {
+ --tw-bg-opacity: 1 !important;
+ background-color: rgb(209 213 219 / var(--tw-bg-opacity)) !important;
+ }
+ .hover\:\!bg-gray-400:hover {
+ --tw-bg-opacity: 1 !important;
+ background-color: rgb(156 163 175 / var(--tw-bg-opacity)) !important;
+ }
+ .hover\:\!text-gray-700:hover {
+ --tw-text-opacity: 1 !important;
+ color: rgb(55 65 81 / var(--tw-text-opacity)) !important;
+ }
+ .hover\:\!text-gray-800:hover {
+ --tw-text-opacity: 1 !important;
+ color: rgb(31 41 55 / var(--tw-text-opacity)) !important;
+ }
+ .hover\:\!text-gray-900:hover {
+ --tw-text-opacity: 1 !important;
+ color: rgb(17 24 39 / var(--tw-text-opacity)) !important;
+ }
+ `)
})
})
diff --git a/tests/screenAtRule.test.js b/tests/screenAtRule.test.js
index 6352fcde0..af13b5ddf 100644
--- a/tests/screenAtRule.test.js
+++ b/tests/screenAtRule.test.js
@@ -1,60 +1,58 @@
import postcss from 'postcss'
import plugin from '../src/lib/substituteScreenAtRules'
import config from '../stubs/config.full.js'
-import { crosscheck, css } from './util/run'
+import { css } from './util/run'
function run(input, opts = config) {
return postcss([plugin({ tailwindConfig: opts })]).process(input, { from: undefined })
}
-crosscheck(() => {
- test('it can generate media queries from configured screen sizes', () => {
- let input = css`
- @screen sm {
+test('it can generate media queries from configured screen sizes', () => {
+ let input = css`
+ @screen sm {
+ .banana {
+ color: yellow;
+ }
+ }
+ @screen md {
+ .banana {
+ color: red;
+ }
+ }
+ @screen lg {
+ .banana {
+ color: green;
+ }
+ }
+ `
+
+ return run(input, {
+ theme: {
+ screens: {
+ sm: '500px',
+ md: '750px',
+ lg: '1000px',
+ },
+ },
+ separator: ':',
+ }).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 500px) {
.banana {
color: yellow;
}
}
- @screen md {
+ @media (min-width: 750px) {
.banana {
color: red;
}
}
- @screen lg {
+ @media (min-width: 1000px) {
.banana {
color: green;
}
}
- `
-
- return run(input, {
- theme: {
- screens: {
- sm: '500px',
- md: '750px',
- lg: '1000px',
- },
- },
- separator: ':',
- }).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 500px) {
- .banana {
- color: #ff0;
- }
- }
- @media (min-width: 750px) {
- .banana {
- color: red;
- }
- }
- @media (min-width: 1000px) {
- .banana {
- color: green;
- }
- }
- `)
- expect(result.warnings().length).toBe(0)
- })
+ `)
+ expect(result.warnings().length).toBe(0)
})
})
diff --git a/tests/shared-state.test.js b/tests/shared-state.test.js
index 4791d07dc..a3a9f2870 100644
--- a/tests/shared-state.test.js
+++ b/tests/shared-state.test.js
@@ -1,23 +1,20 @@
import { resolveDebug } from '../src/lib/sharedState'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- it.each`
- value | expected
- ${'true'} | ${true}
- ${'1'} | ${true}
- ${'false'} | ${false}
- ${'0'} | ${false}
- ${'*'} | ${true}
- ${'tailwindcss'} | ${true}
- ${'tailwindcss:*'} | ${true}
- ${'other,tailwindcss'} | ${true}
- ${'other,tailwindcss:*'} | ${true}
- ${'other,-tailwindcss'} | ${false}
- ${'other,-tailwindcss:*'} | ${false}
- ${'-tailwindcss'} | ${false}
- ${'-tailwindcss:*'} | ${false}
- `('should resolve the debug ($value) flag correctly ($expected)', ({ value, expected }) => {
- expect(resolveDebug(value)).toBe(expected)
- })
+it.each`
+ value | expected
+ ${'true'} | ${true}
+ ${'1'} | ${true}
+ ${'false'} | ${false}
+ ${'0'} | ${false}
+ ${'*'} | ${true}
+ ${'tailwindcss'} | ${true}
+ ${'tailwindcss:*'} | ${true}
+ ${'other,tailwindcss'} | ${true}
+ ${'other,tailwindcss:*'} | ${true}
+ ${'other,-tailwindcss'} | ${false}
+ ${'other,-tailwindcss:*'} | ${false}
+ ${'-tailwindcss'} | ${false}
+ ${'-tailwindcss:*'} | ${false}
+`('should resolve the debug ($value) flag correctly ($expected)', ({ value, expected }) => {
+ expect(resolveDebug(value)).toBe(expected)
})
diff --git a/tests/source-maps.test.js b/tests/source-maps.test.js
index dc0092dbc..a1e2a7dd8 100644
--- a/tests/source-maps.test.js
+++ b/tests/source-maps.test.js
@@ -1,532 +1,553 @@
import postcss from 'postcss'
import { parseSourceMaps } from './util/source-maps'
-import { crosscheck, runWithSourceMaps as run, html, css, map } from './util/run'
+import { runWithSourceMaps as run, html, css, map } from './util/run'
-crosscheck(({ stable, oxide }) => {
- oxide.test.todo('apply generates source maps')
- stable.test('apply generates source maps', async () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- .with-declaration {
- background-color: red;
- @apply h-4 w-4 bg-green-500;
- }
-
- .with-comment {
- /* sourcemap will work here too */
- @apply h-4 w-4 bg-red-500;
- }
-
- .just-apply {
- @apply h-4 w-4 bg-black;
- }
- `
-
- let result = await run(input, config)
- let { sources, annotations } = parseSourceMaps(result)
-
- // All CSS generated by Tailwind CSS should be annotated with source maps
- // And always be able to point to the original source file
- expect(sources).not.toContain('
')
- expect(sources.length).toBe(1)
-
- expect(annotations).toEqual([
- '2:6 -> 2:6',
- '3:8-29 -> 3:8-29',
- '4:8-35 -> 4:8-20',
- '4:8-35 -> 5:8-19',
- '4:8-35 -> 6:8-26',
- '4:8-35 -> 7:8-63',
- '5:6 -> 8:6',
- '7:6 -> 10:6',
- '8:8-41 -> 11:8-41',
- '9:8-33 -> 12:8-20',
- '9:8-33 -> 13:8-19',
- '9:8-33 -> 14:8-26',
- '9:8-33 -> 15:8-63',
- '10:6 -> 16:6',
- '13:8 -> 18:6',
- '13:8-31 -> 19:8-20',
- '13:8-31 -> 20:8-19',
- '13:8-31 -> 21:8-26',
- '13:8 -> 22:8',
- '13:31 -> 23:0',
- ])
- })
-
- oxide.test.todo('preflight + base have source maps')
- stable.test('preflight + base have source maps', async () => {
- let config = {
- content: [],
- }
-
- let input = css`
- @tailwind base;
- `
-
- let result = await run(input, config)
- let { sources, annotations } = parseSourceMaps(result)
-
- // All CSS generated by Tailwind CSS should be annotated with source maps
- // And always be able to point to the original source file
- expect(sources).not.toContain('')
- expect(sources.length).toBe(1)
-
- expect(annotations).toEqual([
- '2:6 -> 1:0',
- '2:20-6 -> 3:1-2',
- '2:20 -> 6:1',
- '2:6 -> 8:0',
- '2:6-20 -> 11:2-32',
- '2:6-20 -> 12:2-25',
- '2:6-20 -> 13:2-29',
- '2:6-20 -> 14:2-31',
- '2:20 -> 15:0',
- '2:6 -> 17:0',
- '2:6-20 -> 19:2-18',
- '2:20 -> 20:0',
- '2:6 -> 22:0',
- '2:20 -> 29:1',
- '2:6 -> 31:0',
- '2:6-20 -> 32:2-26',
- '2:6-20 -> 33:2-40',
- '2:6-20 -> 34:2-26',
- '2:6-20 -> 35:2-21',
- '2:6-20 -> 36:2-230',
- '2:6-20 -> 37:2-39',
- '2:6-20 -> 38:2-41',
- '2:20 -> 39:0',
- '2:6 -> 41:0',
- '2:20 -> 44:1',
- '2:6 -> 46:0',
- '2:6-20 -> 47:2-19',
- '2:6-20 -> 48:2-30',
- '2:20 -> 49:0',
- '2:6 -> 51:0',
- '2:20 -> 55:1',
- '2:6 -> 57:0',
- '2:6-20 -> 58:2-19',
- '2:6-20 -> 59:2-24',
- '2:6-20 -> 60:2-31',
- '2:20 -> 61:0',
- '2:6 -> 63:0',
- '2:20 -> 65:1',
- '2:6 -> 67:0',
- '2:6-20 -> 68:2-35',
- '2:20 -> 69:0',
- '2:6 -> 71:0',
- '2:20 -> 73:1',
- '2:6 -> 75:0',
- '2:6-20 -> 81:2-20',
- '2:6-20 -> 82:2-22',
- '2:20 -> 83:0',
- '2:6 -> 85:0',
- '2:20 -> 87:1',
- '2:6 -> 89:0',
- '2:6-20 -> 90:2-16',
- '2:6-20 -> 91:2-26',
- '2:20 -> 92:0',
- '2:6 -> 94:0',
- '2:20 -> 96:1',
- '2:6 -> 98:0',
- '2:6-20 -> 100:2-21',
- '2:20 -> 101:0',
- '2:6 -> 103:0',
- '2:20 -> 106:1',
- '2:6 -> 108:0',
- '2:6-20 -> 112:2-121',
- '2:6-20 -> 113:2-24',
- '2:20 -> 114:0',
- '2:6 -> 116:0',
- '2:20 -> 118:1',
- '2:6 -> 120:0',
- '2:6-20 -> 121:2-16',
- '2:20 -> 122:0',
- '2:6 -> 124:0',
- '2:20 -> 126:1',
- '2:6 -> 128:0',
- '2:6-20 -> 130:2-16',
- '2:6-20 -> 131:2-16',
- '2:6-20 -> 132:2-20',
- '2:6-20 -> 133:2-26',
- '2:20 -> 134:0',
- '2:6 -> 136:0',
- '2:6-20 -> 137:2-17',
- '2:20 -> 138:0',
- '2:6 -> 140:0',
- '2:6-20 -> 141:2-13',
- '2:20 -> 142:0',
- '2:6 -> 144:0',
- '2:20 -> 148:1',
- '2:6 -> 150:0',
- '2:6-20 -> 151:2-24',
- '2:6-20 -> 152:2-31',
- '2:6-20 -> 153:2-35',
- '2:20 -> 154:0',
- '2:6 -> 156:0',
- '2:20 -> 160:1',
- '2:6 -> 162:0',
- '2:6-20 -> 167:2-30',
- '2:6-20 -> 168:2-25',
- '2:6-20 -> 169:2-30',
- '2:6-20 -> 170:2-30',
- '2:6-20 -> 171:2-24',
- '2:6-20 -> 172:2-19',
- '2:6-20 -> 173:2-20',
- '2:20 -> 174:0',
- '2:6 -> 176:0',
- '2:20 -> 178:1',
- '2:6 -> 180:0',
- '2:6-20 -> 182:2-22',
- '2:20 -> 183:0',
- '2:6 -> 185:0',
- '2:20 -> 188:1',
- '2:6 -> 190:0',
- '2:6-20 -> 194:2-36',
- '2:6-20 -> 195:2-39',
- '2:6-20 -> 196:2-32',
- '2:20 -> 197:0',
- '2:6 -> 199:0',
- '2:20 -> 201:1',
- '2:6 -> 203:0',
- '2:6-20 -> 204:2-15',
- '2:20 -> 205:0',
- '2:6 -> 207:0',
- '2:20 -> 209:1',
- '2:6 -> 211:0',
- '2:6-20 -> 212:2-18',
- '2:20 -> 213:0',
- '2:6 -> 215:0',
- '2:20 -> 217:1',
- '2:6 -> 219:0',
- '2:6-20 -> 220:2-26',
- '2:20 -> 221:0',
- '2:6 -> 223:0',
- '2:20 -> 225:1',
- '2:6 -> 227:0',
- '2:6-20 -> 229:2-14',
- '2:20 -> 230:0',
- '2:6 -> 232:0',
- '2:20 -> 235:1',
- '2:6 -> 237:0',
- '2:6-20 -> 238:2-39',
- '2:6-20 -> 239:2-30',
- '2:20 -> 240:0',
- '2:6 -> 242:0',
- '2:20 -> 244:1',
- '2:6 -> 246:0',
- '2:6-20 -> 247:2-26',
- '2:20 -> 248:0',
- '2:6 -> 250:0',
- '2:20 -> 253:1',
- '2:6 -> 255:0',
- '2:6-20 -> 256:2-36',
- '2:6-20 -> 257:2-23',
- '2:20 -> 258:0',
- '2:6 -> 260:0',
- '2:20 -> 262:1',
- '2:6 -> 264:0',
- '2:6-20 -> 265:2-20',
- '2:20 -> 266:0',
- '2:6 -> 268:0',
- '2:20 -> 270:1',
- '2:6 -> 272:0',
- '2:6-20 -> 285:2-11',
- '2:20 -> 286:0',
- '2:6 -> 288:0',
- '2:6-20 -> 289:2-11',
- '2:6-20 -> 290:2-12',
- '2:20 -> 291:0',
- '2:6 -> 293:0',
- '2:6-20 -> 294:2-12',
- '2:20 -> 295:0',
- '2:6 -> 297:0',
- '2:6-20 -> 300:2-18',
- '2:6-20 -> 301:2-11',
- '2:6-20 -> 302:2-12',
- '2:20 -> 303:0',
- '2:6 -> 305:0',
- '2:20 -> 307:1',
- '2:6 -> 309:0',
- '2:6-20 -> 310:2-18',
- '2:20 -> 311:0',
- '2:6 -> 313:0',
- '2:20 -> 316:1',
- '2:6 -> 318:0',
- '2:6-20 -> 320:2-20',
- '2:6-20 -> 321:2-24',
- '2:20 -> 322:0',
- '2:6 -> 324:0',
- '2:20 -> 326:1',
- '2:6 -> 328:0',
- '2:6-20 -> 330:2-17',
- '2:20 -> 331:0',
- '2:6 -> 333:0',
- '2:20 -> 335:1',
- '2:6 -> 336:0',
- '2:6-20 -> 337:2-17',
- '2:20 -> 338:0',
- '2:6 -> 340:0',
- '2:20 -> 344:1',
- '2:6 -> 346:0',
- '2:6-20 -> 354:2-24',
- '2:6-20 -> 355:2-32',
- '2:20 -> 356:0',
- '2:6 -> 358:0',
- '2:20 -> 360:1',
- '2:6 -> 362:0',
- '2:6-20 -> 364:2-17',
- '2:6-20 -> 365:2-14',
- '2:20 -> 366:0',
- '2:6-20 -> 368:0-72',
- '2:6 -> 369:0',
- '2:6-20 -> 370:2-15',
- '2:20 -> 371:0',
- '2:6 -> 373:0',
- '2:6-20 -> 374:2-26',
- '2:6-20 -> 375:2-26',
- '2:6-20 -> 376:2-21',
- '2:6-20 -> 377:2-21',
- '2:6-20 -> 378:2-16',
- '2:6-20 -> 379:2-16',
- '2:6-20 -> 380:2-16',
- '2:6-20 -> 381:2-17',
- '2:6-20 -> 382:2-17',
- '2:6-20 -> 383:2-15',
- '2:6-20 -> 384:2-15',
- '2:6-20 -> 385:2-20',
- '2:6-20 -> 386:2-40',
- '2:6-20 -> 387:2-32',
- '2:6-20 -> 388:2-31',
- '2:6-20 -> 389:2-30',
- '2:6-20 -> 390:2-17',
- '2:6-20 -> 391:2-22',
- '2:6-20 -> 392:2-24',
- '2:6-20 -> 393:2-25',
- '2:6-20 -> 394:2-26',
- '2:6-20 -> 395:2-20',
- '2:6-20 -> 396:2-29',
- '2:6-20 -> 397:2-30',
- '2:6-20 -> 398:2-40',
- '2:6-20 -> 399:2-36',
- '2:6-20 -> 400:2-29',
- '2:6-20 -> 401:2-24',
- '2:6-20 -> 402:2-32',
- '2:6-20 -> 403:2-14',
- '2:6-20 -> 404:2-20',
- '2:6-20 -> 405:2-18',
- '2:6-20 -> 406:2-19',
- '2:6-20 -> 407:2-20',
- '2:6-20 -> 408:2-16',
- '2:6-20 -> 409:2-18',
- '2:6-20 -> 410:2-15',
- '2:6-20 -> 411:2-21',
- '2:6-20 -> 412:2-23',
- '2:6-20 -> 413:2-29',
- '2:6-20 -> 414:2-27',
- '2:6-20 -> 415:2-28',
- '2:6-20 -> 416:2-29',
- '2:6-20 -> 417:2-25',
- '2:6-20 -> 418:2-26',
- '2:6-20 -> 419:2-27',
- '2:6 -> 420:2',
- '2:20 -> 421:0',
- '2:6 -> 423:0',
- '2:6-20 -> 424:2-26',
- '2:6-20 -> 425:2-26',
- '2:6-20 -> 426:2-21',
- '2:6-20 -> 427:2-21',
- '2:6-20 -> 428:2-16',
- '2:6-20 -> 429:2-16',
- '2:6-20 -> 430:2-16',
- '2:6-20 -> 431:2-17',
- '2:6-20 -> 432:2-17',
- '2:6-20 -> 433:2-15',
- '2:6-20 -> 434:2-15',
- '2:6-20 -> 435:2-20',
- '2:6-20 -> 436:2-40',
- '2:6-20 -> 437:2-32',
- '2:6-20 -> 438:2-31',
- '2:6-20 -> 439:2-30',
- '2:6-20 -> 440:2-17',
- '2:6-20 -> 441:2-22',
- '2:6-20 -> 442:2-24',
- '2:6-20 -> 443:2-25',
- '2:6-20 -> 444:2-26',
- '2:6-20 -> 445:2-20',
- '2:6-20 -> 446:2-29',
- '2:6-20 -> 447:2-30',
- '2:6-20 -> 448:2-40',
- '2:6-20 -> 449:2-36',
- '2:6-20 -> 450:2-29',
- '2:6-20 -> 451:2-24',
- '2:6-20 -> 452:2-32',
- '2:6-20 -> 453:2-14',
- '2:6-20 -> 454:2-20',
- '2:6-20 -> 455:2-18',
- '2:6-20 -> 456:2-19',
- '2:6-20 -> 457:2-20',
- '2:6-20 -> 458:2-16',
- '2:6-20 -> 459:2-18',
- '2:6-20 -> 460:2-15',
- '2:6-20 -> 461:2-21',
- '2:6-20 -> 462:2-23',
- '2:6-20 -> 463:2-29',
- '2:6-20 -> 464:2-27',
- '2:6-20 -> 465:2-28',
- '2:6-20 -> 466:2-29',
- '2:6-20 -> 467:2-25',
- '2:6-20 -> 468:2-26',
- '2:6-20 -> 469:2-27',
- '2:6 -> 470:2',
- '2:20 -> 471:0',
- ])
- })
-
- oxide.test.todo('utilities have source maps')
- stable.test('utilities have source maps', async () => {
- let config = {
- content: [{ raw: `text-red-500` }],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
- let { sources, annotations } = parseSourceMaps(result)
-
- // All CSS generated by Tailwind CSS should be annotated with source maps
- // And always be able to point to the original source file
- expect(sources).not.toContain('')
- expect(sources.length).toBe(1)
-
- expect(annotations).toStrictEqual([
- '2:6 -> 1:0',
- '2:6-25 -> 2:4-24',
- '2:6 -> 3:4',
- '2:25 -> 4:0',
- ])
- })
-
- oxide.test.todo('components have source maps')
- stable.test('components have source maps', async () => {
- let config = {
- content: [{ raw: `container` }],
- }
-
- let input = css`
- @tailwind components;
- `
-
- let result = await run(input, config)
- let { sources, annotations } = parseSourceMaps(result)
-
- // All CSS generated by Tailwind CSS should be annotated with source maps
- // And always be able to point to the original source file
- expect(sources).not.toContain('')
- expect(sources.length).toBe(1)
-
- expect(annotations).toEqual([
- '2:6 -> 1:0',
- '2:6 -> 2:4',
- '2:26 -> 3:0',
- '2:6 -> 4:0',
- '2:6 -> 5:4',
- '2:6 -> 6:8',
- '2:26 -> 7:4',
- '2:26 -> 8:0',
- '2:6 -> 9:0',
- '2:6 -> 10:4',
- '2:6 -> 11:8',
- '2:26 -> 12:4',
- '2:26 -> 13:0',
- '2:6 -> 14:0',
- '2:6 -> 15:4',
- '2:6 -> 16:8',
- '2:26 -> 17:4',
- '2:26 -> 18:0',
- '2:6 -> 19:0',
- '2:6 -> 20:4',
- '2:6 -> 21:8',
- '2:26 -> 22:4',
- '2:26 -> 23:0',
- '2:6 -> 24:0',
- '2:6 -> 25:4',
- '2:6 -> 26:8',
- '2:26 -> 27:4',
- '2:26 -> 28:0',
- ])
- })
-
- oxide.test.todo('source maps for layer rules are not rewritten to point to @tailwind directives')
- stable.test(
- 'source maps for layer rules are not rewritten to point to @tailwind directives',
- async () => {
- let config = {
- content: [{ raw: `font-normal foo hover:foo` }],
- }
-
- let utilitiesFile = postcss.parse(
- css`
- @tailwind utilities;
+test('apply generates source maps', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
`,
- { from: 'components.css', map: { prev: map } }
- )
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
- let mainCssFile = postcss.parse(
- css`
- @layer utilities {
- .foo {
- background-color: red;
- }
- }
- `,
- { from: 'input.css', map: { prev: map } }
- )
-
- // Just pretend that there's an @import in `mainCssFile` that imports the nodes from `utilitiesFile`
- let input = postcss.root({
- nodes: [...utilitiesFile.nodes, ...mainCssFile.nodes],
- source: mainCssFile.source,
- })
-
- let result = await run(input, config)
-
- let { sources, annotations } = parseSourceMaps(result)
-
- // All CSS generated by Tailwind CSS should be annotated with source maps
- // And always be able to point to the original source file
- expect(sources).not.toContain('')
-
- // And we should see that the source map for the layer rule is not rewritten
- // to point to the @tailwind directive but instead points to the original
- expect(sources.length).toBe(2)
- expect(sources).toEqual(['components.css', 'input.css'])
-
- expect(annotations).toEqual([
- '2:10 -> 1:0',
- '2:10 -> 2:14',
- '2:29 -> 3:0',
- '3:12 -> 4:12',
- '4:14-35 -> 5:14-35',
- '5:12 -> 6:12',
- '3:12 -> 7:12',
- '4:14-35 -> 8:14-35',
- '5:12 -> 9:12',
- ])
+ let input = css`
+ .with-declaration {
+ background-color: red;
+ @apply h-4 w-4 bg-green-500;
}
- )
+
+ .with-comment {
+ /* sourcemap will work here too */
+ @apply h-4 w-4 bg-red-500;
+ }
+
+ .just-apply {
+ @apply h-4 w-4 bg-black;
+ }
+ `
+
+ let result = await run(input, config)
+ let { sources, annotations } = parseSourceMaps(result)
+
+ // All CSS generated by Tailwind CSS should be annotated with source maps
+ // And always be able to point to the original source file
+ expect(sources).not.toContain('')
+ expect(sources.length).toBe(2)
+
+ expect(annotations).toMatchInlineSnapshot(`
+ [
+ "2:4 -> 1:0-65",
+ "2:0 -> 2:0",
+ "3:2-20 -> 3:2-20",
+ "4:2-23 -> 4:2-23",
+ "5:2-57 -> 5:2-57",
+ "6:2-13 -> 6:2-13",
+ "7:2-14 -> 7:2-14",
+ "8:0 -> 8:0",
+ "10:0 -> 10:0",
+ "11:2-20 -> 11:2-20",
+ "12:2-57 -> 12:2-57",
+ "13:2-13 -> 13:2-13",
+ "14:2-14 -> 14:2-14",
+ "15:0 -> 15:0",
+ "17:0 -> 17:0",
+ "18:2-20 -> 18:2-20",
+ "19:2-53 -> 19:2-53",
+ "20:2-13 -> 20:2-13",
+ "21:2-14 -> 21:2-14",
+ "22:0 -> 22:0",
+ ]
+ `)
+})
+
+test('preflight + base have source maps', async () => {
+ let config = {
+ content: [],
+ }
+
+ let input = css`
+ @tailwind base;
+ `
+
+ let result = await run(input, config)
+ let { sources, annotations } = parseSourceMaps(result)
+
+ // All CSS generated by Tailwind CSS should be annotated with source maps
+ // And always be able to point to the original source file
+ expect(sources).not.toContain('')
+ expect(sources.length).toBe(2)
+
+ expect(annotations).toMatchInlineSnapshot(`
+ [
+ "2:4 -> 1:0-65",
+ "2:0 -> 2:0",
+ "3:2-24 -> 3:2-24",
+ "4:2-25 -> 4:2-25",
+ "5:0 -> 5:0",
+ "7:0 -> 7:0",
+ "8:2-18 -> 8:2-18",
+ "9:0 -> 9:0",
+ "11:0 -> 11:0",
+ "12:2-32 -> 12:2-32",
+ "13:2-13 -> 13:2-13",
+ "14:2-31 -> 14:2-31",
+ "15:2-33 -> 15:2-33",
+ "16:2-42 -> 16:2-42",
+ "17:2-121 -> 17:2-121",
+ "18:2-18 -> 18:2-18",
+ "19:0 -> 19:0",
+ "21:0 -> 21:0",
+ "22:2-22 -> 22:2-22",
+ "23:2-11 -> 23:2-11",
+ "24:0 -> 24:0",
+ "26:0 -> 26:0",
+ "27:2-16 -> 27:2-16",
+ "28:2-23 -> 28:2-23",
+ "29:2-11 -> 29:2-11",
+ "30:0 -> 30:0",
+ "32:0 -> 32:0",
+ "33:2-43 -> 33:2-43",
+ "34:2-35 -> 34:2-35",
+ "35:0 -> 35:0",
+ "37:0 -> 37:0",
+ "38:2-20 -> 38:2-20",
+ "39:2-22 -> 39:2-22",
+ "40:0 -> 40:0",
+ "42:0 -> 42:0",
+ "43:2-16 -> 43:2-16",
+ "44:2-34 -> 44:2-34",
+ "45:2-26 -> 45:2-26",
+ "46:0 -> 46:0",
+ "48:0 -> 48:0",
+ "49:2-21 -> 49:2-21",
+ "50:0 -> 50:0",
+ "52:0 -> 52:0",
+ "53:2-31 -> 53:2-31",
+ "54:2-33 -> 54:2-33",
+ "55:2-109 -> 55:2-109",
+ "56:2-16 -> 56:2-16",
+ "57:0 -> 57:0",
+ "59:0 -> 59:0",
+ "60:2-16 -> 60:2-16",
+ "61:0 -> 61:0",
+ "63:0 -> 63:0",
+ "64:2-26 -> 64:2-26",
+ "65:2-16 -> 65:2-16",
+ "66:2-16 -> 66:2-16",
+ "67:2-20 -> 67:2-20",
+ "68:0 -> 68:0",
+ "70:0 -> 70:0",
+ "71:2-16 -> 71:2-16",
+ "72:0 -> 72:0",
+ "74:0 -> 74:0",
+ "75:2-12 -> 75:2-12",
+ "76:0 -> 76:0",
+ "78:0 -> 78:0",
+ "79:2-16 -> 79:2-16",
+ "80:2-23 -> 80:2-23",
+ "81:2-27 -> 81:2-27",
+ "82:0 -> 82:0",
+ "84:0 -> 84:0",
+ "85:2-32 -> 85:2-32",
+ "86:2-34 -> 86:2-34",
+ "87:2-22 -> 87:2-22",
+ "88:2-17 -> 88:2-17",
+ "89:2-22 -> 89:2-22",
+ "90:2-22 -> 90:2-22",
+ "91:2-16 -> 91:2-16",
+ "92:2-11 -> 92:2-11",
+ "93:2-12 -> 93:2-12",
+ "94:0 -> 94:0",
+ "96:0 -> 96:0",
+ "97:2-22 -> 97:2-22",
+ "98:0 -> 98:0",
+ "100:0 -> 100:0",
+ "101:2-28 -> 101:2-28",
+ "102:2-25 -> 102:2-25",
+ "103:2-24 -> 103:2-24",
+ "104:0 -> 104:0",
+ "106:0 -> 106:0",
+ "107:2-15 -> 107:2-15",
+ "108:0 -> 108:0",
+ "110:0 -> 110:0",
+ "111:2-18 -> 111:2-18",
+ "112:0 -> 112:0",
+ "114:0 -> 114:0",
+ "115:2-26 -> 115:2-26",
+ "116:0 -> 116:0",
+ "118:0 -> 118:0",
+ "119:2-14 -> 119:2-14",
+ "120:0 -> 120:0",
+ "122:0 -> 122:0",
+ "123:2-14 -> 123:2-14",
+ "124:0 -> 124:0",
+ "126:0 -> 126:0",
+ "127:2-31 -> 127:2-31",
+ "128:2-22 -> 128:2-22",
+ "129:0 -> 129:0",
+ "131:0 -> 131:0",
+ "132:2-26 -> 132:2-26",
+ "133:0 -> 133:0",
+ "135:0 -> 135:0",
+ "136:2-28 -> 136:2-28",
+ "137:2-15 -> 137:2-15",
+ "138:0 -> 138:0",
+ "140:0 -> 140:0",
+ "141:2-20 -> 141:2-20",
+ "142:0 -> 142:0",
+ "144:0 -> 144:0",
+ "145:2-11 -> 145:2-11",
+ "146:0 -> 146:0",
+ "148:0 -> 148:0",
+ "149:2-11 -> 149:2-11",
+ "150:2-12 -> 150:2-12",
+ "151:0 -> 151:0",
+ "153:0 -> 153:0",
+ "154:2-12 -> 154:2-12",
+ "155:0 -> 155:0",
+ "157:0 -> 157:0",
+ "158:2-11 -> 158:2-11",
+ "159:2-12 -> 159:2-12",
+ "160:2-18 -> 160:2-18",
+ "161:0 -> 161:0",
+ "163:0 -> 163:0",
+ "164:2-12 -> 164:2-12",
+ "165:0 -> 165:0",
+ "167:0 -> 167:0",
+ "168:2-18 -> 168:2-18",
+ "169:0 -> 169:0",
+ "171:0 -> 171:0",
+ "172:2-12 -> 172:2-12",
+ "173:2-16 -> 173:2-16",
+ "174:0 -> 174:0",
+ "176:0 -> 176:0",
+ "177:2-17 -> 177:2-17",
+ "178:0 -> 178:0",
+ "180:0 -> 180:0",
+ "181:2-17 -> 181:2-17",
+ "182:0 -> 182:0",
+ "184:0 -> 184:0",
+ "185:2-24 -> 185:2-24",
+ "186:2-16 -> 186:2-16",
+ "187:0 -> 187:0",
+ "189:0 -> 189:0",
+ "190:2-17 -> 190:2-17",
+ "191:2-14 -> 191:2-14",
+ "192:0 -> 192:0",
+ "194:0 -> 194:0",
+ "195:2-15 -> 195:2-15",
+ "196:0 -> 196:0",
+ "198:0 -> 198:0",
+ "199:2-26 -> 199:2-26",
+ "200:2-26 -> 200:2-26",
+ "201:2-21 -> 201:2-21",
+ "202:2-21 -> 202:2-21",
+ "203:2-16 -> 203:2-16",
+ "204:2-16 -> 204:2-16",
+ "205:2-16 -> 205:2-16",
+ "206:2-17 -> 206:2-17",
+ "207:2-17 -> 207:2-17",
+ "208:2-14 -> 208:2-14",
+ "209:2-14 -> 209:2-14",
+ "210:2-19 -> 210:2-19",
+ "211:2-40 -> 211:2-40",
+ "212:2-31 -> 212:2-31",
+ "213:2-30 -> 213:2-30",
+ "214:2-29 -> 214:2-29",
+ "215:2-16 -> 215:2-16",
+ "216:2-21 -> 216:2-21",
+ "217:2-23 -> 217:2-23",
+ "218:2-24 -> 218:2-24",
+ "219:2-25 -> 219:2-25",
+ "220:2-19 -> 220:2-19",
+ "221:2-29 -> 221:2-29",
+ "222:2-30 -> 222:2-30",
+ "223:2-28 -> 223:2-28",
+ "224:2-36 -> 224:2-36",
+ "225:2-29 -> 225:2-29",
+ "226:2-24 -> 226:2-24",
+ "227:2-32 -> 227:2-32",
+ "228:2-13 -> 228:2-13",
+ "229:2-19 -> 229:2-19",
+ "230:2-17 -> 230:2-17",
+ "231:2-18 -> 231:2-18",
+ "232:2-19 -> 232:2-19",
+ "233:2-15 -> 233:2-15",
+ "234:2-17 -> 234:2-17",
+ "235:2-14 -> 235:2-14",
+ "236:2-20 -> 236:2-20",
+ "237:2-22 -> 237:2-22",
+ "238:2-28 -> 238:2-28",
+ "239:2-26 -> 239:2-26",
+ "240:2-27 -> 240:2-27",
+ "241:2-28 -> 241:2-28",
+ "242:2-24 -> 242:2-24",
+ "243:2-25 -> 243:2-25",
+ "244:2-26 -> 244:2-26",
+ "245:2-23 -> 245:2-23",
+ "246:0 -> 246:0",
+ "248:0 -> 248:0",
+ "249:2-26 -> 249:2-26",
+ "250:2-26 -> 250:2-26",
+ "251:2-21 -> 251:2-21",
+ "252:2-21 -> 252:2-21",
+ "253:2-16 -> 253:2-16",
+ "254:2-16 -> 254:2-16",
+ "255:2-16 -> 255:2-16",
+ "256:2-17 -> 256:2-17",
+ "257:2-17 -> 257:2-17",
+ "258:2-14 -> 258:2-14",
+ "259:2-14 -> 259:2-14",
+ "260:2-19 -> 260:2-19",
+ "261:2-40 -> 261:2-40",
+ "262:2-31 -> 262:2-31",
+ "263:2-30 -> 263:2-30",
+ "264:2-29 -> 264:2-29",
+ "265:2-16 -> 265:2-16",
+ "266:2-21 -> 266:2-21",
+ "267:2-23 -> 267:2-23",
+ "268:2-24 -> 268:2-24",
+ "269:2-25 -> 269:2-25",
+ "270:2-19 -> 270:2-19",
+ "271:2-29 -> 271:2-29",
+ "272:2-30 -> 272:2-30",
+ "273:2-28 -> 273:2-28",
+ "274:2-36 -> 274:2-36",
+ "275:2-29 -> 275:2-29",
+ "276:2-24 -> 276:2-24",
+ "277:2-32 -> 277:2-32",
+ "278:2-13 -> 278:2-13",
+ "279:2-19 -> 279:2-19",
+ "280:2-17 -> 280:2-17",
+ "281:2-18 -> 281:2-18",
+ "282:2-19 -> 282:2-19",
+ "283:2-15 -> 283:2-15",
+ "284:2-17 -> 284:2-17",
+ "285:2-14 -> 285:2-14",
+ "286:2-20 -> 286:2-20",
+ "287:2-22 -> 287:2-22",
+ "288:2-28 -> 288:2-28",
+ "289:2-26 -> 289:2-26",
+ "290:2-27 -> 290:2-27",
+ "291:2-28 -> 291:2-28",
+ "292:2-24 -> 292:2-24",
+ "293:2-25 -> 293:2-25",
+ "294:2-26 -> 294:2-26",
+ "295:2-23 -> 295:2-23",
+ "296:0 -> 296:0",
+ ]
+ `)
+})
+
+test('utilities have source maps', async () => {
+ let config = {
+ content: [{ raw: `text-red-500` }],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+ let { sources, annotations } = parseSourceMaps(result)
+
+ // All CSS generated by Tailwind CSS should be annotated with source maps
+ // And always be able to point to the original source file
+ expect(sources).not.toContain('')
+ expect(sources.length).toBe(2)
+
+ expect(annotations).toMatchInlineSnapshot(`
+ [
+ "2:4 -> 1:0-65",
+ "2:0 -> 2:0",
+ "3:2-22 -> 3:2-22",
+ "4:2-48 -> 4:2-48",
+ "5:0 -> 5:0",
+ ]
+ `)
+})
+
+test('components have source maps', async () => {
+ let config = {
+ content: [{ raw: `container` }],
+ }
+
+ let input = css`
+ @tailwind components;
+ `
+
+ let result = await run(input, config)
+ let { sources, annotations } = parseSourceMaps(result)
+
+ // All CSS generated by Tailwind CSS should be annotated with source maps
+ // And always be able to point to the original source file
+ expect(sources).not.toContain('')
+ expect(sources.length).toBe(2)
+
+ expect(annotations).toMatchInlineSnapshot(`
+ [
+ "2:4 -> 1:0-65",
+ "2:0 -> 2:0",
+ "3:2-13 -> 3:2-13",
+ "4:0 -> 4:0",
+ "6:0 -> 6:0",
+ "7:2 -> 7:2",
+ "8:4-20 -> 8:4-20",
+ "9:2 -> 9:2",
+ "10:0 -> 10:0",
+ "12:0 -> 12:0",
+ "13:2 -> 13:2",
+ "14:4-20 -> 14:4-20",
+ "15:2 -> 15:2",
+ "16:0 -> 16:0",
+ "18:0 -> 18:0",
+ "19:2 -> 19:2",
+ "20:4-21 -> 20:4-21",
+ "21:2 -> 21:2",
+ "22:0 -> 22:0",
+ "24:0 -> 24:0",
+ "25:2 -> 25:2",
+ "26:4-21 -> 26:4-21",
+ "27:2 -> 27:2",
+ "28:0 -> 28:0",
+ "30:0 -> 30:0",
+ "31:2 -> 31:2",
+ "32:4-21 -> 32:4-21",
+ "33:2 -> 33:2",
+ "34:0 -> 34:0",
+ ]
+ `)
+})
+
+test('source maps for layer rules are not rewritten to point to @tailwind directives', async () => {
+ let config = {
+ content: [{ raw: `font-normal foo hover:foo lg:foo` }],
+ }
+
+ let utilitiesFile = postcss.parse(
+ css`
+ @tailwind utilities;
+ `,
+ { from: 'components.css', map: { prev: map } }
+ )
+
+ let mainCssFile = postcss.parse(
+ css`
+ @layer utilities {
+ .foo {
+ background-color: red;
+ }
+ }
+ `,
+ { from: 'input.css', map: { prev: map } }
+ )
+
+ // Just pretend that there's an @import in `mainCssFile` that imports the nodes from `utilitiesFile`
+ let input = postcss.root({
+ nodes: [...utilitiesFile.nodes, ...mainCssFile.nodes],
+ source: mainCssFile.source,
+ })
+
+ let result = await run(input, config)
+
+ let { sources, annotations } = parseSourceMaps(result)
+
+ // All CSS generated by Tailwind CSS should be annotated with source maps
+ // And always be able to point to the original source file
+ expect(sources).not.toContain('')
+
+ // And we should see that the source map for the layer rule is not rewritten
+ // to point to the @tailwind directive but instead points to the original
+ expect(sources.length).toBe(2)
+ expect(sources).toMatchInlineSnapshot(`
+ [
+ "components.css",
+ "source-maps.test.js%3Ftest=c291cmNlIG1hcHMgZm9yIGxheWVyIHJ1bGVzIGFyZSBub3QgcmV3cml0dGVuIHRvIHBvaW50IHRvIEB0YWlsd2luZCBkaXJlY3RpdmVz",
+ ]
+ `)
+
+ expect(annotations).toMatchInlineSnapshot(`
+ [
+ "2:6 -> 1:0-65",
+ "2:0 -> 2:0",
+ "3:2-18 -> 3:2-18",
+ "4:0 -> 4:0",
+ "6:0 -> 6:0",
+ "7:2-23 -> 7:2-23",
+ "8:0 -> 8:0",
+ "10:0 -> 10:0",
+ "11:2 -> 11:2",
+ "12:4-25 -> 12:4-25",
+ "13:2 -> 13:2",
+ "14:0 -> 14:0",
+ ]
+ `)
+})
+
+test('it handles `map: true` correctly', async () => {
+ let config = {
+ content: [{ raw: `text-red-500` }],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config, {
+ map: true,
+ })
+ let { sources, annotations } = parseSourceMaps(result)
+
+ // All CSS generated by Tailwind CSS should be annotated with source maps
+ // And always be able to point to the original source file
+ expect(sources).not.toContain('')
+ expect(sources.length).toBe(2)
+
+ expect(annotations).toMatchInlineSnapshot(`
+ [
+ "2:4 -> 1:0-65",
+ "2:0 -> 2:0",
+ "3:2-22 -> 3:2-22",
+ "4:2-48 -> 4:2-48",
+ "5:0 -> 5:0",
+ ]
+ `)
+})
+
+test('it handles `map: { inline: true }` correctly', async () => {
+ let config = {
+ content: [{ raw: `text-red-500` }],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config, {
+ map: {
+ inline: true,
+ },
+ })
+ let { sources, annotations } = parseSourceMaps(result)
+
+ // All CSS generated by Tailwind CSS should be annotated with source maps
+ // And always be able to point to the original source file
+ expect(sources).not.toContain('')
+ expect(sources.length).toBe(2)
+
+ expect(annotations).toMatchInlineSnapshot(`
+ [
+ "2:4 -> 1:0-65",
+ "2:0 -> 2:0",
+ "3:2-22 -> 3:2-22",
+ "4:2-48 -> 4:2-48",
+ "5:0 -> 5:0",
+ ]
+ `)
})
diff --git a/tests/space-utilities.test.js b/tests/space-utilities.test.js
new file mode 100644
index 000000000..194c63ce2
--- /dev/null
+++ b/tests/space-utilities.test.js
@@ -0,0 +1,43 @@
+import { run, html, css, defaults } from './util/run'
+
+test('space-x uses non-logical properties', () => {
+ let config = {
+ future: {
+ logicalSiblingUtilities: false,
+ },
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ return run('@tailwind base; @tailwind utilities;', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .space-x-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-right: calc(1rem * var(--tw-space-x-reverse));
+ margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
+ }
+ `)
+ })
+})
+
+test('space-x uses logical properties', () => {
+ let config = {
+ future: {
+ logicalSiblingUtilities: true,
+ },
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ return run('@tailwind base; @tailwind utilities;', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .space-x-4 > :not([hidden]) ~ :not([hidden]) {
+ --tw-space-x-reverse: 0;
+ margin-inline-start: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-end: calc(1rem * var(--tw-space-x-reverse));
+ }
+ `)
+ })
+})
diff --git a/tests/syntax-lit-html.test.js b/tests/syntax-lit-html.test.js
index 952a9b969..a3bdfebda 100644
--- a/tests/syntax-lit-html.test.js
+++ b/tests/syntax-lit-html.test.js
@@ -1,72 +1,45 @@
-import { crosscheck, run, css } from './util/run'
+import { run, css } from './util/run'
-crosscheck(({ stable, oxide }) => {
- test('it detects classes in lit-html templates', () => {
- let config = {
- content: [
- {
- raw: `html\`\${data.title} \`;`,
- },
- ],
- corePlugins: { preflight: false },
- theme: {},
- plugins: [],
- }
+test('it detects classes in lit-html templates', () => {
+ let config = {
+ content: [
+ {
+ raw: `html\`\${data.title} \`;`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {},
+ plugins: [],
+ }
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .rounded {
- border-radius: 0.25rem;
- }
- .bg-blue-400 {
- --tw-bg-opacity: 1;
- background-color: rgb(96 165 250 / var(--tw-bg-opacity));
- }
- .px-4 {
- padding-left: 1rem;
- padding-right: 1rem;
- }
- .py-2 {
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
- }
- .font-bold {
- font-weight: 700;
- }
- .text-white {
- --tw-text-opacity: 1;
- color: rgb(255 255 255 / var(--tw-text-opacity));
- }
- .hover\:bg-blue-600:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(37 99 235 / var(--tw-bg-opacity));
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .rounded {
- border-radius: 0.25rem;
- }
- .bg-blue-400 {
- background-color: #60a5fa;
- }
- .px-4 {
- padding-left: 1rem;
- padding-right: 1rem;
- }
- .py-2 {
- padding-top: 0.5rem;
- padding-bottom: 0.5rem;
- }
- .font-bold {
- font-weight: 700;
- }
- .text-white {
- color: #fff;
- }
- .hover\:bg-blue-600:hover {
- background-color: #2563eb;
- }
- `)
- })
+ return run('@tailwind utilities', config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .rounded {
+ border-radius: 0.25rem;
+ }
+ .bg-blue-400 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(96 165 250 / var(--tw-bg-opacity));
+ }
+ .px-4 {
+ padding-left: 1rem;
+ padding-right: 1rem;
+ }
+ .py-2 {
+ padding-top: 0.5rem;
+ padding-bottom: 0.5rem;
+ }
+ .font-bold {
+ font-weight: 700;
+ }
+ .text-white {
+ --tw-text-opacity: 1;
+ color: rgb(255 255 255 / var(--tw-text-opacity));
+ }
+ .hover\:bg-blue-600:hover {
+ --tw-bg-opacity: 1;
+ background-color: rgb(37 99 235 / var(--tw-bg-opacity));
+ }
+ `)
})
})
diff --git a/tests/syntax-svelte.test.js b/tests/syntax-svelte.test.js
index be2c33e8b..b6df41f13 100644
--- a/tests/syntax-svelte.test.js
+++ b/tests/syntax-svelte.test.js
@@ -1,43 +1,40 @@
import path from 'path'
-import { crosscheck, run, css } from './util/run'
+import { run, css } from './util/run'
-crosscheck(({ stable, oxide }) => {
- oxide.test.todo('it detects svelte based on the file extension')
- stable.test('it detects svelte based on the file extension', () => {
- let config = {
- content: [path.resolve(__dirname, './syntax-svelte.test.svelte')],
- corePlugins: { preflight: false },
- theme: {},
- plugins: [],
- }
+test('it detects svelte based on the file extension', () => {
+ let config = {
+ content: [path.resolve(__dirname, './syntax-svelte.test.svelte')],
+ corePlugins: { preflight: false },
+ theme: {},
+ plugins: [],
+ }
- let input = css`
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchCss(css`
- .bg-red-500 {
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-red-500 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(239 68 68 / var(--tw-bg-opacity));
+ }
+ @media (min-width: 1024px) {
+ .lg\:hover\:bg-blue-500:hover {
--tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
+ background-color: rgb(59 130 246 / var(--tw-bg-opacity));
}
- @media (min-width: 1024px) {
- .lg\:hover\:bg-blue-500:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(59 130 246 / var(--tw-bg-opacity));
- }
- }
- `)
- })
+ }
+ `)
})
+})
- oxide.test.todo('using raw with svelte extension')
- stable.test('using raw with svelte extension', () => {
- let config = {
- content: [
- {
- raw: `
+test('using raw with svelte extension', () => {
+ let config = {
+ content: [
+ {
+ raw: `
@@ -50,32 +47,31 @@ crosscheck(({ stable, oxide }) => {
Click me
`,
- extension: 'svelte',
- },
- ],
- corePlugins: { preflight: false },
- theme: {},
- plugins: [],
- }
+ extension: 'svelte',
+ },
+ ],
+ corePlugins: { preflight: false },
+ theme: {},
+ plugins: [],
+ }
- let input = css`
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- expect(result.css).toMatchCss(css`
- .bg-red-500 {
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .bg-red-500 {
+ --tw-bg-opacity: 1;
+ background-color: rgb(239 68 68 / var(--tw-bg-opacity));
+ }
+ @media (min-width: 1024px) {
+ .lg\:hover\:bg-blue-500:hover {
--tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
+ background-color: rgb(59 130 246 / var(--tw-bg-opacity));
}
- @media (min-width: 1024px) {
- .lg\:hover\:bg-blue-500:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(59 130 246 / var(--tw-bg-opacity));
- }
- }
- `)
- })
+ }
+ `)
})
})
diff --git a/tests/tailwind-screens.test.js b/tests/tailwind-screens.test.js
index f968fd0e3..009c02bc3 100644
--- a/tests/tailwind-screens.test.js
+++ b/tests/tailwind-screens.test.js
@@ -1,65 +1,63 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- test('class variants are inserted at `@tailwind variants`', async () => {
- let config = {
- content: [{ raw: html`
` }],
+test('class variants are inserted at `@tailwind variants`', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @tailwind variants;
+ .foo {
+ color: black;
}
+ `
- let input = css`
- @tailwind utilities;
- @tailwind variants;
- .foo {
- color: black;
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .font-bold,
+ .hover\:font-bold:hover {
+ font-weight: 700;
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .font-bold,
- .hover\:font-bold:hover {
+ @media (min-width: 768px) {
+ .md\:font-bold {
font-weight: 700;
}
- @media (min-width: 768px) {
- .md\:font-bold {
- font-weight: 700;
- }
- }
- .foo {
- color: #000;
- }
- `)
- })
- })
-
- test('`@tailwind screens` works as an alias for `@tailwind variants`', async () => {
- let config = {
- content: [{ raw: html`
` }],
- }
-
- let input = css`
- @tailwind utilities;
- @tailwind screens;
- .foo {
- color: black;
}
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .font-bold,
- .hover\:font-bold:hover {
- font-weight: 700;
- }
- @media (min-width: 768px) {
- .md\:font-bold {
- font-weight: 700;
- }
- }
- .foo {
- color: #000;
- }
- `)
- })
+ .foo {
+ color: #000;
+ }
+ `)
+ })
+})
+
+test('`@tailwind screens` works as an alias for `@tailwind variants`', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @tailwind screens;
+ .foo {
+ color: black;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .font-bold,
+ .hover\:font-bold:hover {
+ font-weight: 700;
+ }
+ @media (min-width: 768px) {
+ .md\:font-bold {
+ font-weight: 700;
+ }
+ }
+ .foo {
+ color: #000;
+ }
+ `)
})
})
diff --git a/tests/to-path.test.js b/tests/to-path.test.js
index 1e6021ba9..8737194ed 100644
--- a/tests/to-path.test.js
+++ b/tests/to-path.test.js
@@ -1,21 +1,18 @@
import { toPath } from '../src/util/toPath'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- it('should keep an array as an array', () => {
- let input = ['a', 'b', '0', 'c']
+it('should keep an array as an array', () => {
+ let input = ['a', 'b', '0', 'c']
- expect(toPath(input)).toBe(input)
- })
-
- it.each`
- input | output
- ${'a.b.c'} | ${['a', 'b', 'c']}
- ${'a[0].b.c'} | ${['a', '0', 'b', 'c']}
- ${'.a'} | ${['a']}
- ${'[].a'} | ${['a']}
- ${'a[1.5][b][c]'} | ${['a', '1.5', 'b', 'c']}
- `('should convert "$input" to "$output"', ({ input, output }) => {
- expect(toPath(input)).toEqual(output)
- })
+ expect(toPath(input)).toBe(input)
+})
+
+it.each`
+ input | output
+ ${'a.b.c'} | ${['a', 'b', 'c']}
+ ${'a[0].b.c'} | ${['a', '0', 'b', 'c']}
+ ${'.a'} | ${['a']}
+ ${'[].a'} | ${['a']}
+ ${'a[1.5][b][c]'} | ${['a', '1.5', 'b', 'c']}
+`('should convert "$input" to "$output"', ({ input, output }) => {
+ expect(toPath(input)).toEqual(output)
})
diff --git a/tests/util/apply-important-selector.test.js b/tests/util/apply-important-selector.test.js
deleted file mode 100644
index 0ec22792f..000000000
--- a/tests/util/apply-important-selector.test.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import { crosscheck } from '../util/run'
-import { applyImportantSelector } from '../../src/util/applyImportantSelector'
-
-crosscheck(() => {
- it.each`
- before | after
- ${'.foo'} | ${'#app :is(.foo)'}
- ${'.foo .bar'} | ${'#app :is(.foo .bar)'}
- ${'.foo:hover'} | ${'#app :is(.foo:hover)'}
- ${'.foo .bar:hover'} | ${'#app :is(.foo .bar:hover)'}
- ${'.foo::before'} | ${'#app :is(.foo)::before'}
- ${'.foo::before'} | ${'#app :is(.foo)::before'}
- ${'.foo::file-selector-button'} | ${'#app :is(.foo)::file-selector-button'}
- ${'.foo::-webkit-progress-bar'} | ${'#app :is(.foo)::-webkit-progress-bar'}
- ${'.foo:hover::before'} | ${'#app :is(.foo:hover)::before'}
- ${':is(.dark :is([dir="rtl"] .foo::before))'} | ${'#app :is(.dark :is([dir="rtl"] .foo))::before'}
- ${':is(.dark .foo) .bar'} | ${'#app :is(:is(.dark .foo) .bar)'}
- ${':is(.foo) :is(.bar)'} | ${'#app :is(:is(.foo) :is(.bar))'}
- ${':is(.foo)::before'} | ${'#app :is(.foo)::before'}
- ${'.foo:before'} | ${'#app :is(.foo):before'}
- `('should generate "$after" from "$before"', ({ before, after }) => {
- expect(applyImportantSelector(before, '#app')).toEqual(after)
- })
-})
diff --git a/tests/util/crosscheck.test.js b/tests/util/crosscheck.test.js
deleted file mode 100644
index 032473386..000000000
--- a/tests/util/crosscheck.test.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { crosscheck } from './run'
-
-crosscheck(({ stable, oxide, engine }) => {
- stable.test('should run on stable', () => {
- expect(engine.stable).toBe(true)
- expect(engine.oxide).toBe(false)
- })
- oxide.test('should run on oxide', () => {
- expect(engine.stable).toBe(false)
- expect(engine.oxide).toBe(true)
- })
- test('should run on both', () => {
- oxide.expect(engine.oxide).toBe(true)
- oxide.expect(engine.stable).toBe(false)
- stable.expect(engine.oxide).toBe(false)
- stable.expect(engine.stable).toBe(true)
- })
-})
diff --git a/tests/util/defaults.js b/tests/util/defaults.js
index bea97d338..945cc753b 100644
--- a/tests/util/defaults.js
+++ b/tests/util/defaults.js
@@ -9,7 +9,56 @@ export function defaults({ defaultRingColor = `#3b82f680` } = {}) {
return css`
*,
:before,
- :after,
+ :after {
+ --tw-border-spacing-x: 0;
+ --tw-border-spacing-y: 0;
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ --tw-pan-x: ;
+ --tw-pan-y: ;
+ --tw-pinch-zoom: ;
+ --tw-scroll-snap-strictness: proximity;
+ --tw-gradient-from-position: ;
+ --tw-gradient-via-position: ;
+ --tw-gradient-to-position: ;
+ --tw-ordinal: ;
+ --tw-slashed-zero: ;
+ --tw-numeric-figure: ;
+ --tw-numeric-spacing: ;
+ --tw-numeric-fraction: ;
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: ${defaultRingColor};
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ --tw-blur: ;
+ --tw-brightness: ;
+ --tw-contrast: ;
+ --tw-grayscale: ;
+ --tw-hue-rotate: ;
+ --tw-invert: ;
+ --tw-saturate: ;
+ --tw-sepia: ;
+ --tw-drop-shadow: ;
+ --tw-backdrop-blur: ;
+ --tw-backdrop-brightness: ;
+ --tw-backdrop-contrast: ;
+ --tw-backdrop-grayscale: ;
+ --tw-backdrop-hue-rotate: ;
+ --tw-backdrop-invert: ;
+ --tw-backdrop-opacity: ;
+ --tw-backdrop-saturate: ;
+ --tw-backdrop-sepia: ;
+ }
+
::backdrop {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
diff --git a/tests/util/run.js b/tests/util/run.js
index 118edcb75..cd469b5b3 100644
--- a/tests/util/run.js
+++ b/tests/util/run.js
@@ -1,7 +1,12 @@
-import path from 'path'
+import pkg from '../../package.json'
import postcss from 'postcss'
import tailwind from '../../src'
-import { env } from '../../src/lib/sharedState'
+import corePluginList from '../../src/corePluginList'
+import resolveConfig from '../../src/public/resolve-config'
+import { createContext } from '../../src/lib/setupContextUtils'
+import { variantPlugins } from '../../src/corePlugins'
+
+import { css } from './strings'
export * from './strings'
export * from './defaults'
@@ -14,81 +19,149 @@ export let map = JSON.stringify({
mappings: '',
})
-globalThis.__OXIDE__ = env.ENGINE === 'oxide'
-
export function run(input, config, plugin = tailwind) {
- let { currentTestName } = expect.getState()
+ let { currentTestName, testPath } = expect.getState()
+ let path = `${testPath}?test=${Buffer.from(currentTestName).toString('base64')}`
return postcss(plugin(config)).process(input, {
- from: `${path.resolve(__filename)}?test=${currentTestName}`,
+ from: path,
+ to: path,
})
}
-export function runWithSourceMaps(input, config, plugin = tailwind) {
- let { currentTestName } = expect.getState()
+export function runWithSourceMaps(
+ input,
+ config,
+ options = { map: { prev: map } },
+ plugin = tailwind
+) {
+ let { currentTestName, testPath } = expect.getState()
+ let path = `${testPath}?test=${Buffer.from(currentTestName).toString('base64')}`
return postcss(plugin(config)).process(input, {
- from: `${path.resolve(__filename)}?test=${currentTestName}`,
- map: {
- prev: map,
- },
+ from: path,
+ to: path,
+ ...options,
})
}
-let nullTest = Object.assign(function () {}, {
- skip: () => {},
- only: () => {},
- each: () => () => {},
- todo: () => {},
-})
-let nullProxy = new Proxy(
- {
- test: nullTest,
- it: nullTest,
- xit: nullTest.skip,
- fit: nullTest.only,
- xdescribe: nullTest.skip,
- fdescribe: nullTest.only,
- },
- {
- get(target, prop, _receiver) {
- if (prop in target) {
- return target[prop]
- }
- return Object.assign(() => {
- return nullProxy
- }, nullProxy)
- },
- }
-)
+export function quickPluginTest(pluginName, extendedConfig = {}) {
+ return new Proxy(
+ {},
+ {
+ get: (_, prop) => {
+ return (...args) => {
+ it(`should test the '${pluginName}' plugin`, () => {
+ expect.assertions(3)
-/**
- * @typedef {object} CrossCheck
- * @property {typeof import('@jest/globals')} oxide
- * @property {typeof import('@jest/globals')} stable
- * @property {object} engine
- * @property {boolean} engine.oxide
- * @property {boolean} engine.stable
- */
+ // Ensure the plugin exists, this will help if you made a typo in the plugin name and
+ // didn't realize it.
+ expect(corePluginList).toContain(pluginName)
-/**
- * @param {(data: CrossCheck) => void} fn
- */
-export function crosscheck(fn) {
- let engines =
- env.ENGINE === 'oxide' ? [{ engine: 'Stable' }, { engine: 'Oxide' }] : [{ engine: 'Stable' }]
+ let { safelist = [], corePlugins = [], ...rest } = extendedConfig || {}
- describe.each(engines)('$engine', ({ engine }) => {
- let engines = {
- oxide: engine === 'Oxide' ? globalThis : nullProxy,
- stable: engine === 'Stable' ? globalThis : nullProxy,
- engine: { oxide: engine === 'Oxide', stable: engine === 'Stable' },
+ let config = {
+ safelist: [{ pattern: /./g }, ...safelist], // Generate all known classes
+ corePlugins: [pluginName, ...corePlugins], // Only load the plugin we're testing
+ content: [], // Be explicit about the empty content, otherwise auto-detection will kick in
+ ...rest,
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ let firstNewLine = result.css.indexOf('\n')
+
+ let license = result.css.slice(0, firstNewLine)
+ let css = result.css.slice(firstNewLine)
+
+ // Ensure we have a license
+ expect(license).toEqual(
+ `/* ! tailwindcss v${pkg.version} | MIT License | https://tailwindcss.com */`
+ )
+
+ expect(css)[prop](...args)
+ })
+ })
+ }
+ },
}
-
- beforeEach(() => {
- globalThis.__OXIDE__ = engines.engine.oxide
- })
-
- fn(engines)
- })
+ )
+}
+
+export function quickVariantPluginTest(pluginName, extendedConfig = {}) {
+ // Drop the _other_ variant related plugins
+ for (let variant in variantPlugins) {
+ if (variant !== pluginName) {
+ variantPlugins[variant] = () => {}
+ }
+ }
+
+ return new Proxy(
+ {},
+ {
+ get: (_, prop) => {
+ return (...args) => {
+ it(`should test the '${pluginName}' plugin`, () => {
+ expect.assertions(3)
+
+ // Ensure the plugin exists, this will help if you made a typo in the plugin name and
+ // didn't realize it.
+ expect(Object.keys(variantPlugins)).toContain(pluginName)
+
+ let context
+ let config = {
+ corePlugins: [],
+ get content() {
+ if (!context) return [] // Context is not ready yet
+
+ return context
+ .getVariants()
+ .flatMap((variant) => {
+ return variant.values.length > 0
+ ? variant.values.map((value) => `${variant.name}-${value}`)
+ : variant.name
+ })
+ .map((variant) => ({ raw: `${variant}:flex` }))
+ },
+ plugins: [
+ function testPlugin({ addUtilities }) {
+ addUtilities({
+ '.flex': { display: 'flex' },
+ })
+ },
+ ],
+ ...extendedConfig,
+ }
+
+ context = createContext(resolveConfig(config))
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ let firstNewLine = result.css.indexOf('\n')
+
+ let license = result.css.slice(0, firstNewLine)
+ let css = result.css.slice(firstNewLine)
+
+ // Ensure we have a license
+ expect(license).toEqual(
+ `/* ! tailwindcss v${pkg.version} | MIT License | https://tailwindcss.com */`
+ )
+
+ expect(css)[prop](...args)
+ })
+ })
+ }
+ },
+ }
+ )
}
diff --git a/tests/util/source-maps.js b/tests/util/source-maps.js
index 4ed263126..fe460d844 100644
--- a/tests/util/source-maps.js
+++ b/tests/util/source-maps.js
@@ -6,7 +6,16 @@ import { SourceMapConsumer } from 'source-map-js'
* @param {import('postcss').Result} result
*/
export function parseSourceMaps(result) {
- let map = result.map.toJSON()
+ let map = result.map
+ ? result.map.toJSON()
+ : (() => {
+ let css = result.toString()
+ let sourceMappingURL = css.match(/\/\*# sourceMappingURL=(.*) \*\//)?.[1]
+ let raw = sourceMappingURL
+ ? Buffer.from(sourceMappingURL.split(',')[1], 'base64').toString()
+ : null
+ return JSON.parse(raw ?? '{}')
+ })()
return {
sources: map.sources,
@@ -15,7 +24,7 @@ export function parseSourceMaps(result) {
}
/**
- * An string annotation that represents a source map
+ * A string annotation that represents a source map
*
* It's not meant to be exhaustive just enough to
* verify that the source map is working and that
diff --git a/tests/variant-grouping.test.skip.js b/tests/variant-grouping.test.skip.js
deleted file mode 100644
index aba113783..000000000
--- a/tests/variant-grouping.test.skip.js
+++ /dev/null
@@ -1,280 +0,0 @@
-import { run, html, css } from './util/run'
-
-// TODO: Remove this once we enable this by default
-it('should not generate nested selectors if the feature flag is not enabled', () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .italic {
- font-style: italic;
- }
- .underline {
- text-decoration-line: underline;
- }
- `)
- })
-})
-
-it('should be possible to group variants', () => {
- let config = {
- experimental: 'all',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 768px) {
- .md\:\(underline\2c italic\) {
- font-style: italic;
- text-decoration-line: underline;
- }
- }
- `)
- })
-})
-
-it('should be possible to group using constrained and arbitrary variants together', () => {
- let config = {
- experimental: 'all',
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (prefers-color-scheme: dark) {
- @supports (hover: hover) {
- .dark\:\[\@supports\(hover\:hover\)\]\:hover\:\[\&\>\*\]\:\(\[--potato\:baked\]\2c
- bg-\[\#0088cc\]\)
- > *:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(0 136 204 / var(--tw-bg-opacity));
- --potato: baked;
- }
- }
- }
- `)
- })
-})
-
-it('should be possible to group multiple variants', () => {
- let config = {
- experimental: 'all',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 768px) {
- @media (prefers-color-scheme: dark) {
- .md\:dark\:\(underline\2c italic\) {
- font-style: italic;
- text-decoration-line: underline;
- }
- }
- }
- `)
- })
-})
-
-it('should be possible to group nested grouped variants', () => {
- let config = {
- experimental: 'all',
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 768px) {
- .md\:\(underline\2c italic\2c hover\:\(uppercase\2c font-bold\)\) {
- font-style: italic;
- text-decoration-line: underline;
- }
- .md\:\(underline\2c italic\2c hover\:\(uppercase\2c font-bold\)\):hover {
- font-weight: 700;
- text-transform: uppercase;
- }
- }
- `)
- })
-})
-
-it('should be possible to use nested multiple grouped variants', () => {
- let config = {
- experimental: 'all',
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 768px) {
- .md\:\(text-black\2c dark\:\(text-white\2c hover\:focus\:text-gray-100\)\) {
- --tw-text-opacity: 1;
- color: rgb(0 0 0 / var(--tw-text-opacity));
- }
- @media (prefers-color-scheme: dark) {
- .md\:\(text-black\2c dark\:\(text-white\2c hover\:focus\:text-gray-100\)\) {
- --tw-text-opacity: 1;
- color: rgb(255 255 255 / var(--tw-text-opacity));
- }
- .md\:\(text-black\2c dark\:\(text-white\2c hover\:focus\:text-gray-100\)\):focus:hover {
- --tw-text-opacity: 1;
- color: rgb(243 244 246 / var(--tw-text-opacity));
- }
- }
- }
- `)
- })
-})
-
-it('should be possible to mix and match nesting and different variant combinations', () => {
- let config = {
- experimental: 'all',
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 768px) {
- .md\:\[\&\>\*\]\:\(text-black\2c
- dark\:\(text-white\2c
- hover\:\[\@supports\(color\:green\)\]\:\[\&\:nth-child\(2n\=1\)\]\:text-gray-100\)\)
- > * {
- --tw-text-opacity: 1;
- color: rgb(0 0 0 / var(--tw-text-opacity));
- }
- @media (prefers-color-scheme: dark) {
- .md\:\[\&\>\*\]\:\(text-black\2c
- dark\:\(text-white\2c
- hover\:\[\@supports\(color\:green\)\]\:\[\&\:nth-child\(2n\=1\)\]\:text-gray-100\)\)
- > * {
- --tw-text-opacity: 1;
- color: rgb(255 255 255 / var(--tw-text-opacity));
- }
- @supports (color: green) {
- .md\:\[\&\>\*\]\:\(text-black\2c
- dark\:\(text-white\2c
- hover\:\[\@supports\(color\:green\)\]\:\[\&\:nth-child\(2n\=1\)\]\:text-gray-100\)\):nth-child(
- 2n=1
- ):hover
- > * {
- --tw-text-opacity: 1;
- color: rgb(243 244 246 / var(--tw-text-opacity));
- }
- }
- }
- }
- `)
- })
-})
-
-it('should group with variants defined in external plugins', () => {
- let config = {
- experimental: 'all',
- content: [
- {
- raw: html`
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- plugins: [
- ({ addVariant }) => {
- addVariant('ui-active', ['&[data-ui-state~="active"]', '[data-ui-state~="active"] &'])
- addVariant('ui-selected', ['&[data-ui-state~="selected"]', '[data-ui-state~="selected"] &'])
- },
- ],
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .ui-active\:\(bg-black\2c text-white\)[data-ui-state~='active'] {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- --tw-text-opacity: 1;
- color: rgb(255 255 255 / var(--tw-text-opacity));
- }
- [data-ui-state~='active'] .ui-active\:\(bg-black\2c text-white\) {
- --tw-bg-opacity: 1;
- background-color: rgb(0 0 0 / var(--tw-bg-opacity));
- --tw-text-opacity: 1;
- color: rgb(255 255 255 / var(--tw-text-opacity));
- }
- .ui-selected\:\(bg-indigo-500\2c underline\)[data-ui-state~='selected'] {
- --tw-bg-opacity: 1;
- background-color: rgb(99 102 241 / var(--tw-bg-opacity));
- text-decoration-line: underline;
- }
- [data-ui-state~='selected'] .ui-selected\:\(bg-indigo-500\2c underline\) {
- --tw-bg-opacity: 1;
- background-color: rgb(99 102 241 / var(--tw-bg-opacity));
- text-decoration-line: underline;
- }
- `)
- })
-})
diff --git a/tests/variants.oxide.test.css b/tests/variants.oxide.test.css
deleted file mode 100644
index 5e06f3942..000000000
--- a/tests/variants.oxide.test.css
+++ /dev/null
@@ -1,412 +0,0 @@
-*,
-:before,
-:after,
-::backdrop {
- --tw-border-spacing-x: 0;
- --tw-border-spacing-y: 0;
- --tw-translate-x: 0;
- --tw-translate-y: 0;
- --tw-rotate: 0;
- --tw-skew-x: 0;
- --tw-skew-y: 0;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- --tw-pan-x: ;
- --tw-pan-y: ;
- --tw-pinch-zoom: ;
- --tw-scroll-snap-strictness: proximity;
- --tw-gradient-from-position: ;
- --tw-gradient-via-position: ;
- --tw-gradient-to-position: ;
- --tw-ordinal: ;
- --tw-slashed-zero: ;
- --tw-numeric-figure: ;
- --tw-numeric-spacing: ;
- --tw-numeric-fraction: ;
- --tw-ring-inset: ;
- --tw-ring-offset-width: 0px;
- --tw-ring-offset-color: #fff;
- --tw-ring-color: #3b82f680;
- --tw-ring-offset-shadow: 0 0 #0000;
- --tw-ring-shadow: 0 0 #0000;
- --tw-shadow: 0 0 #0000;
- --tw-shadow-colored: 0 0 #0000;
- --tw-blur: ;
- --tw-brightness: ;
- --tw-contrast: ;
- --tw-grayscale: ;
- --tw-hue-rotate: ;
- --tw-invert: ;
- --tw-saturate: ;
- --tw-sepia: ;
- --tw-drop-shadow: ;
- --tw-backdrop-blur: ;
- --tw-backdrop-brightness: ;
- --tw-backdrop-contrast: ;
- --tw-backdrop-grayscale: ;
- --tw-backdrop-hue-rotate: ;
- --tw-backdrop-invert: ;
- --tw-backdrop-opacity: ;
- --tw-backdrop-saturate: ;
- --tw-backdrop-sepia: ;
-}
-.first-letter\:text-2xl:first-letter {
- font-size: 1.5rem;
- line-height: 2rem;
-}
-.first-letter\:text-red-500:first-letter {
- color: #ef4444;
-}
-.first-line\:bg-yellow-300:first-line {
- background-color: #fde047;
-}
-.first-line\:underline:first-line {
- text-decoration-line: underline;
-}
-.marker\:text-lg ::marker {
- font-size: 1.125rem;
- line-height: 1.75rem;
-}
-.marker\:text-red-500 ::marker {
- color: #ef4444;
-}
-.marker\:text-lg::marker {
- font-size: 1.125rem;
- line-height: 1.75rem;
-}
-.marker\:text-red-500::marker {
- color: #ef4444;
-}
-.selection\:bg-blue-500 ::selection {
- background-color: #3b82f6;
-}
-.selection\:text-white ::selection {
- color: #fff;
-}
-.selection\:bg-blue-500::selection {
- background-color: #3b82f6;
-}
-.selection\:text-white::selection {
- color: #fff;
-}
-.file\:bg-blue-500::file-selector-button {
- background-color: #3b82f6;
-}
-.file\:text-white::file-selector-button {
- color: #fff;
-}
-.placeholder\:font-bold::placeholder {
- font-weight: 700;
-}
-.placeholder\:text-red-500::placeholder {
- color: #ef4444;
-}
-.backdrop\:shadow-md::backdrop {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.before\:block:before {
- content: var(--tw-content);
- display: block;
-}
-.before\:bg-red-500:before {
- content: var(--tw-content);
- background-color: #ef4444;
-}
-.after\:flex:after {
- content: var(--tw-content);
- display: flex;
-}
-.after\:uppercase:after {
- content: var(--tw-content);
- text-transform: uppercase;
-}
-.first\:shadow-md:first-child,
-.last\:shadow-md:last-child,
-.only\:shadow-md:only-child,
-.odd\:shadow-md:nth-child(2n + 1),
-.even\:shadow-md:nth-child(2n),
-.first-of-type\:shadow-md:first-of-type,
-.last-of-type\:shadow-md:last-of-type,
-.only-of-type\:shadow-md:only-of-type,
-.visited\:shadow-md:visited,
-.target\:shadow-md:target {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.open\:bg-red-200[open] {
- background-color: #fecaca;
-}
-.default\:shadow-md:default,
-.checked\:shadow-md:checked,
-.indeterminate\:shadow-md:indeterminate,
-.placeholder-shown\:shadow-md:placeholder-shown,
-.autofill\:shadow-md:autofill,
-.optional\:shadow-md:optional,
-.required\:shadow-md:required,
-.valid\:shadow-md:valid,
-.invalid\:shadow-md:invalid,
-.in-range\:shadow-md:in-range,
-.out-of-range\:shadow-md:out-of-range,
-.read-only\:shadow-md:read-only,
-.empty\:shadow-md:empty,
-.focus-within\:shadow-md:focus-within {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-@keyframes spin {
- to {
- transform: rotate(360deg);
- }
-}
-.hover\:animate-spin:hover {
- animation: 1s linear infinite spin;
-}
-.hover\:shadow-md:hover {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.file\:hover\:bg-blue-600:hover::file-selector-button {
- background-color: #2563eb;
-}
-.open\:hover\:bg-red-200:hover[open] {
- background-color: #fecaca;
-}
-.focus\:shadow-md:focus,
-.focus\:hover\:shadow-md:hover:focus,
-.focus-visible\:shadow-md:focus-visible,
-.active\:shadow-md:active,
-.enabled\:shadow-md:enabled,
-.disabled\:shadow-md:disabled,
-.group:first-child .group-first\:shadow-md,
-.group:last-child .group-last\:shadow-md,
-.group:only-child .group-only\:shadow-md,
-.group:nth-child(2n + 1) .group-odd\:shadow-md,
-.group:nth-child(2n) .group-even\:shadow-md,
-.group:first-of-type .group-first-of-type\:shadow-md,
-.group:last-of-type .group-last-of-type\:shadow-md,
-.group:only-of-type .group-only-of-type\:shadow-md,
-.group:visited .group-visited\:shadow-md,
-.group:target .group-target\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.group[open] .group-open\:bg-red-200 {
- background-color: #fecaca;
-}
-.group:default .group-default\:shadow-md,
-.group:checked .group-checked\:shadow-md,
-.group:indeterminate .group-indeterminate\:shadow-md,
-.group:placeholder-shown .group-placeholder-shown\:shadow-md,
-.group:autofill .group-autofill\:shadow-md,
-.group:optional .group-optional\:shadow-md,
-.group:required .group-required\:shadow-md,
-.group:valid .group-valid\:shadow-md,
-.group:invalid .group-invalid\:shadow-md,
-.group:in-range .group-in-range\:shadow-md,
-.group:out-of-range .group-out-of-range\:shadow-md,
-.group:read-only .group-read-only\:shadow-md,
-.group:empty .group-empty\:shadow-md,
-.group:focus-within .group-focus-within\:shadow-md,
-.group:hover .group-hover\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.group[open]:hover .group-open\:group-hover\:space-x-2 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-inline-start: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
- margin-inline-end: calc(0.5rem * var(--tw-space-x-reverse));
-}
-.group:focus .group-focus\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.group[open]:focus .group-open\:group-focus\:bg-red-200 {
- background-color: #fecaca;
-}
-.group:focus:hover .group-focus\:group-hover\:shadow-md,
-.group:focus-visible .group-focus-visible\:shadow-md,
-.group:active .group-active\:shadow-md,
-.group:enabled .group-enabled\:shadow-md,
-.group:disabled .group-disabled\:shadow-md,
-.group:disabled:focus:hover .group-disabled\:group-focus\:group-hover\:shadow-md,
-.group:disabled:focus:hover .group-disabled\:group-focus\:group-hover\:first\:shadow-md:first-child,
-.peer:first-child ~ .peer-first\:shadow-md,
-.peer:last-child ~ .peer-last\:shadow-md,
-.peer:only-child ~ .peer-only\:shadow-md,
-.peer:nth-child(2n + 1) ~ .peer-odd\:shadow-md,
-.peer:nth-child(2n) ~ .peer-even\:shadow-md,
-.peer:first-of-type ~ .peer-first-of-type\:shadow-md,
-.peer:last-of-type ~ .peer-last-of-type\:shadow-md,
-.peer:only-of-type ~ .peer-only-of-type\:shadow-md,
-.peer:visited ~ .peer-visited\:shadow-md,
-.peer:target ~ .peer-target\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.peer[open] ~ .peer-open\:bg-red-200 {
- background-color: #fecaca;
-}
-.peer:default ~ .peer-default\:shadow-md,
-.peer:checked ~ .peer-checked\:shadow-md,
-.peer:indeterminate ~ .peer-indeterminate\:shadow-md,
-.peer:placeholder-shown ~ .peer-placeholder-shown\:shadow-md,
-.peer:autofill ~ .peer-autofill\:shadow-md,
-.peer:optional ~ .peer-optional\:shadow-md,
-.peer:required ~ .peer-required\:shadow-md,
-.peer:valid ~ .peer-valid\:shadow-md,
-.peer:invalid ~ .peer-invalid\:shadow-md,
-.peer:in-range ~ .peer-in-range\:shadow-md,
-.peer:out-of-range ~ .peer-out-of-range\:shadow-md,
-.peer:read-only ~ .peer-read-only\:shadow-md,
-.peer:empty ~ .peer-empty\:shadow-md,
-.peer:focus-within ~ .peer-focus-within\:shadow-md,
-.peer:hover ~ .peer-hover\:shadow-md,
-.peer:focus ~ .peer-focus\:shadow-md,
-.peer:focus:hover ~ .peer-focus\:peer-hover\:shadow-md,
-.peer:focus-visible ~ .peer-focus-visible\:shadow-md,
-.peer:active ~ .peer-active\:shadow-md,
-.peer:enabled ~ .peer-enabled\:shadow-md,
-.peer:disabled ~ .peer-disabled\:shadow-md,
-.peer:disabled:focus:hover ~ .peer-disabled\:peer-focus\:peer-hover\:shadow-md,
-.peer:disabled:focus:hover ~ .peer-disabled\:peer-focus\:peer-hover\:first\:shadow-md:first-child,
-:is([dir='ltr'] .ltr\:shadow-md),
-:is([dir='rtl'] .rtl\:shadow-md) {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-@media (prefers-reduced-motion: no-preference) {
- .motion-safe\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
-}
-@media (prefers-reduced-motion: reduce) {
- .motion-reduce\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
-}
-@media (prefers-contrast: more) {
- .contrast-more\:bg-yellow-300 {
- background-color: #fde047;
- }
-}
-@media (prefers-contrast: less) {
- .contrast-less\:bg-yellow-300 {
- background-color: #fde047;
- }
-}
-:is(.dark .dark\:shadow-md),
-:is(.dark .group:disabled:focus:hover .dark\:group-disabled\:group-focus\:group-hover\:shadow-md),
-:is(.dark .peer:disabled:focus:hover ~ .dark\:peer-disabled\:peer-focus\:peer-hover\:shadow-md) {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-@media print {
- .print\:bg-yellow-300 {
- background-color: #fde047;
- }
-}
-@media (min-width: 640px) {
- .sm\:shadow-md,
- .sm\:active\:shadow-md:active {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
-}
-@media (min-width: 768px) {
- .md\:shadow-md,
- .group:focus .md\:group-focus\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
-}
-@media (min-width: 1024px) {
- @keyframes spin {
- to {
- transform: rotate(360deg);
- }
- }
- .lg\:animate-spin {
- animation: 1s linear infinite spin;
- }
- .lg\:shadow-md,
- :is(.dark .lg\:dark\:shadow-md) {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
-}
-@media (min-width: 1280px) {
- .xl\:shadow-md,
- :is(.dark .xl\:dark\:disabled\:shadow-md:disabled) {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
-}
-@media (min-width: 1536px) {
- .\32 xl\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- @media (prefers-reduced-motion: no-preference) {
- :is(.dark .\32 xl\:dark\:motion-safe\:focus-within\:shadow-md:focus-within) {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
- }
- }
-}
-@media (orientation: portrait) {
- .portrait\:bg-yellow-300 {
- background-color: #fde047;
- }
-}
-@media (orientation: landscape) {
- .landscape\:bg-yellow-300 {
- background-color: #fde047;
- }
-}
diff --git a/tests/variants.test.css b/tests/variants.test.css
index 8a9d481ee..cedb35bb6 100644
--- a/tests/variants.test.css
+++ b/tests/variants.test.css
@@ -1,6 +1,54 @@
*,
:before,
-:after,
+:after {
+ --tw-border-spacing-x: 0;
+ --tw-border-spacing-y: 0;
+ --tw-translate-x: 0;
+ --tw-translate-y: 0;
+ --tw-rotate: 0;
+ --tw-skew-x: 0;
+ --tw-skew-y: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ --tw-pan-x: ;
+ --tw-pan-y: ;
+ --tw-pinch-zoom: ;
+ --tw-scroll-snap-strictness: proximity;
+ --tw-gradient-from-position: ;
+ --tw-gradient-via-position: ;
+ --tw-gradient-to-position: ;
+ --tw-ordinal: ;
+ --tw-slashed-zero: ;
+ --tw-numeric-figure: ;
+ --tw-numeric-spacing: ;
+ --tw-numeric-fraction: ;
+ --tw-ring-inset: ;
+ --tw-ring-offset-width: 0px;
+ --tw-ring-offset-color: #fff;
+ --tw-ring-color: #3b82f680;
+ --tw-ring-offset-shadow: 0 0 #0000;
+ --tw-ring-shadow: 0 0 #0000;
+ --tw-shadow: 0 0 #0000;
+ --tw-shadow-colored: 0 0 #0000;
+ --tw-blur: ;
+ --tw-brightness: ;
+ --tw-contrast: ;
+ --tw-grayscale: ;
+ --tw-hue-rotate: ;
+ --tw-invert: ;
+ --tw-saturate: ;
+ --tw-sepia: ;
+ --tw-drop-shadow: ;
+ --tw-backdrop-blur: ;
+ --tw-backdrop-brightness: ;
+ --tw-backdrop-contrast: ;
+ --tw-backdrop-grayscale: ;
+ --tw-backdrop-hue-rotate: ;
+ --tw-backdrop-invert: ;
+ --tw-backdrop-opacity: ;
+ --tw-backdrop-saturate: ;
+ --tw-backdrop-sepia: ;
+}
::backdrop {
--tw-border-spacing-x: 0;
--tw-border-spacing-y: 0;
@@ -50,384 +98,254 @@
--tw-backdrop-saturate: ;
--tw-backdrop-sepia: ;
}
-.first-letter\:text-2xl:first-letter {
- font-size: 1.5rem;
- line-height: 2rem;
+.first-letter\:flex:first-letter,
+.first-line\:flex:first-line,
+.marker\:flex ::marker,
+.marker\:flex::marker {
+ display: flex;
}
-.first-letter\:text-red-500:first-letter {
- --tw-text-opacity: 1;
- color: rgb(239 68 68 / var(--tw-text-opacity));
+.selection\:flex ::selection {
+ display: flex;
}
-.first-line\:bg-yellow-300:first-line {
- --tw-bg-opacity: 1;
- background-color: rgb(253 224 71 / var(--tw-bg-opacity));
+.selection\:flex::selection {
+ display: flex;
}
-.first-line\:underline:first-line {
- text-decoration-line: underline;
+.file\:flex::-webkit-file-upload-button {
+ display: flex;
}
-.marker\:text-lg ::marker {
- font-size: 1.125rem;
- line-height: 1.75rem;
+.file\:flex::file-selector-button {
+ display: flex;
}
-.marker\:text-red-500 ::marker {
- color: #ef4444;
+.placeholder\:flex::placeholder {
+ display: flex;
}
-.marker\:text-lg::marker {
- font-size: 1.125rem;
- line-height: 1.75rem;
-}
-.marker\:text-red-500::marker {
- color: #ef4444;
-}
-.selection\:bg-blue-500 ::selection {
- --tw-bg-opacity: 1;
- background-color: rgb(59 130 246 / var(--tw-bg-opacity));
-}
-.selection\:text-white ::selection {
- --tw-text-opacity: 1;
- color: rgb(255 255 255 / var(--tw-text-opacity));
-}
-.selection\:bg-blue-500::selection {
- --tw-bg-opacity: 1;
- background-color: rgb(59 130 246 / var(--tw-bg-opacity));
-}
-.selection\:text-white::selection {
- --tw-text-opacity: 1;
- color: rgb(255 255 255 / var(--tw-text-opacity));
-}
-.file\:bg-blue-500::file-selector-button {
- --tw-bg-opacity: 1;
- background-color: rgb(59 130 246 / var(--tw-bg-opacity));
-}
-.file\:text-white::file-selector-button {
- --tw-text-opacity: 1;
- color: rgb(255 255 255 / var(--tw-text-opacity));
-}
-.placeholder\:font-bold::placeholder {
- font-weight: 700;
-}
-.placeholder\:text-red-500::placeholder {
- --tw-text-opacity: 1;
- color: rgb(239 68 68 / var(--tw-text-opacity));
-}
-.backdrop\:shadow-md::backdrop {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
-}
-.before\:block:before {
- content: var(--tw-content);
- display: block;
-}
-.before\:bg-red-500:before {
- content: var(--tw-content);
- --tw-bg-opacity: 1;
- background-color: rgb(239 68 68 / var(--tw-bg-opacity));
+.backdrop\:flex::backdrop {
+ display: flex;
}
+.before\:flex:before,
.after\:flex:after {
content: var(--tw-content);
display: flex;
}
-.after\:uppercase:after {
- content: var(--tw-content);
- text-transform: uppercase;
+.first\:flex:first-child,
+.last\:flex:last-child,
+.only\:flex:only-child,
+.odd\:flex:nth-child(odd),
+.even\:flex:nth-child(2n),
+.first-of-type\:flex:first-of-type,
+.last-of-type\:flex:last-of-type,
+.only-of-type\:flex:only-of-type,
+.visited\:flex:visited,
+.target\:flex:target,
+.open\:flex[open],
+.default\:flex:default,
+.checked\:flex:checked,
+.indeterminate\:flex:indeterminate,
+.placeholder-shown\:flex:placeholder-shown {
+ display: flex;
}
-.first\:shadow-md:first-child,
-.last\:shadow-md:last-child,
-.only\:shadow-md:only-child,
-.odd\:shadow-md:nth-child(2n + 1),
-.even\:shadow-md:nth-child(2n),
-.first-of-type\:shadow-md:first-of-type,
-.last-of-type\:shadow-md:last-of-type,
-.only-of-type\:shadow-md:only-of-type,
-.visited\:shadow-md:visited,
-.target\:shadow-md:target {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+.autofill\:flex:-webkit-autofill {
+ display: flex;
}
-.open\:bg-red-200[open] {
- --tw-bg-opacity: 1;
- background-color: rgb(254 202 202 / var(--tw-bg-opacity));
+.autofill\:flex:autofill {
+ display: flex;
}
-.default\:shadow-md:default,
-.checked\:shadow-md:checked,
-.indeterminate\:shadow-md:indeterminate,
-.placeholder-shown\:shadow-md:placeholder-shown,
-.autofill\:shadow-md:autofill,
-.optional\:shadow-md:optional,
-.required\:shadow-md:required,
-.valid\:shadow-md:valid,
-.invalid\:shadow-md:invalid,
-.in-range\:shadow-md:in-range,
-.out-of-range\:shadow-md:out-of-range,
-.read-only\:shadow-md:read-only,
-.empty\:shadow-md:empty,
-.focus-within\:shadow-md:focus-within {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+.optional\:flex:optional,
+.required\:flex:required,
+.valid\:flex:valid,
+.invalid\:flex:invalid,
+.in-range\:flex:in-range,
+.out-of-range\:flex:out-of-range,
+.read-only\:flex:read-only,
+.empty\:flex:empty,
+.focus-within\:flex:focus-within,
+.hover\:flex:hover {
+ display: flex;
}
-@keyframes spin {
- to {
- transform: rotate(360deg);
- }
+.file\:hover\:flex:hover::-webkit-file-upload-button {
+ display: flex;
}
-.hover\:animate-spin:hover {
- animation: 1s linear infinite spin;
+.file\:hover\:flex:hover::file-selector-button {
+ display: flex;
}
-.hover\:shadow-md:hover {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+.open\:hover\:flex:hover[open],
+.focus\:flex:focus,
+.focus\:hover\:flex:hover:focus {
+ display: flex;
}
-.file\:hover\:bg-blue-600:hover::file-selector-button {
- --tw-bg-opacity: 1;
- background-color: rgb(37 99 235 / var(--tw-bg-opacity));
+.focus-visible\:flex:focus-visible {
+ display: flex;
}
-.open\:hover\:bg-red-200:hover[open] {
- --tw-bg-opacity: 1;
- background-color: rgb(254 202 202 / var(--tw-bg-opacity));
+.active\:flex:active,
+.enabled\:flex:enabled,
+.disabled\:flex:disabled,
+.group:first-child .group-first\:flex,
+.group:last-child .group-last\:flex,
+.group:only-child .group-only\:flex,
+.group:nth-child(odd) .group-odd\:flex,
+.group:nth-child(2n) .group-even\:flex,
+.group:first-of-type .group-first-of-type\:flex,
+.group:last-of-type .group-last-of-type\:flex,
+.group:only-of-type .group-only-of-type\:flex,
+.group:visited .group-visited\:flex,
+.group:target .group-target\:flex,
+.group[open] .group-open\:flex,
+.group:default .group-default\:flex,
+.group:checked .group-checked\:flex,
+.group:indeterminate .group-indeterminate\:flex,
+.group:placeholder-shown .group-placeholder-shown\:flex {
+ display: flex;
}
-.focus\:shadow-md:focus,
-.focus\:hover\:shadow-md:hover:focus,
-.focus-visible\:shadow-md:focus-visible,
-.active\:shadow-md:active,
-.enabled\:shadow-md:enabled,
-.disabled\:shadow-md:disabled,
-.group:first-child .group-first\:shadow-md,
-.group:last-child .group-last\:shadow-md,
-.group:only-child .group-only\:shadow-md,
-.group:nth-child(2n + 1) .group-odd\:shadow-md,
-.group:nth-child(2n) .group-even\:shadow-md,
-.group:first-of-type .group-first-of-type\:shadow-md,
-.group:last-of-type .group-last-of-type\:shadow-md,
-.group:only-of-type .group-only-of-type\:shadow-md,
-.group:visited .group-visited\:shadow-md,
-.group:target .group-target\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+.group:-webkit-autofill .group-autofill\:flex {
+ display: flex;
}
-.group[open] .group-open\:bg-red-200 {
- --tw-bg-opacity: 1;
- background-color: rgb(254 202 202 / var(--tw-bg-opacity));
+.group:autofill .group-autofill\:flex {
+ display: flex;
}
-.group:default .group-default\:shadow-md,
-.group:checked .group-checked\:shadow-md,
-.group:indeterminate .group-indeterminate\:shadow-md,
-.group:placeholder-shown .group-placeholder-shown\:shadow-md,
-.group:autofill .group-autofill\:shadow-md,
-.group:optional .group-optional\:shadow-md,
-.group:required .group-required\:shadow-md,
-.group:valid .group-valid\:shadow-md,
-.group:invalid .group-invalid\:shadow-md,
-.group:in-range .group-in-range\:shadow-md,
-.group:out-of-range .group-out-of-range\:shadow-md,
-.group:read-only .group-read-only\:shadow-md,
-.group:empty .group-empty\:shadow-md,
-.group:focus-within .group-focus-within\:shadow-md,
-.group:hover .group-hover\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+.group:optional .group-optional\:flex,
+.group:required .group-required\:flex,
+.group:valid .group-valid\:flex,
+.group:invalid .group-invalid\:flex,
+.group:in-range .group-in-range\:flex,
+.group:out-of-range .group-out-of-range\:flex,
+.group:read-only .group-read-only\:flex,
+.group:empty .group-empty\:flex,
+.group:focus-within .group-focus-within\:flex,
+.group:hover .group-hover\:flex,
+.group[open]:hover .group-open\:group-hover\:flex,
+.group:focus .group-focus\:flex,
+.group[open]:focus .group-open\:group-focus\:flex,
+.group:focus:hover .group-focus\:group-hover\:flex {
+ display: flex;
}
-.group[open]:hover .group-open\:group-hover\:space-x-2 > :not([hidden]) ~ :not([hidden]) {
- --tw-space-x-reverse: 0;
- margin-right: calc(0.5rem * var(--tw-space-x-reverse));
- margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
+.group:focus-visible .group-focus-visible\:flex {
+ display: flex;
}
-.group:focus .group-focus\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+.group:active .group-active\:flex,
+.group:enabled .group-enabled\:flex,
+.group:disabled .group-disabled\:flex,
+.group:disabled:focus:hover .group-disabled\:group-focus\:group-hover\:flex,
+.group:disabled:focus:hover .group-disabled\:group-focus\:group-hover\:first\:flex:first-child,
+.peer:first-child ~ .peer-first\:flex,
+.peer:last-child ~ .peer-last\:flex,
+.peer:only-child ~ .peer-only\:flex,
+.peer:nth-child(odd) ~ .peer-odd\:flex,
+.peer:nth-child(2n) ~ .peer-even\:flex,
+.peer:first-of-type ~ .peer-first-of-type\:flex,
+.peer:last-of-type ~ .peer-last-of-type\:flex,
+.peer:only-of-type ~ .peer-only-of-type\:flex,
+.peer:visited ~ .peer-visited\:flex,
+.peer:target ~ .peer-target\:flex,
+.peer[open] ~ .peer-open\:flex,
+.peer:default ~ .peer-default\:flex,
+.peer:checked ~ .peer-checked\:flex,
+.peer:indeterminate ~ .peer-indeterminate\:flex,
+.peer:placeholder-shown ~ .peer-placeholder-shown\:flex {
+ display: flex;
}
-.group[open]:focus .group-open\:group-focus\:bg-red-200 {
- --tw-bg-opacity: 1;
- background-color: rgb(254 202 202 / var(--tw-bg-opacity));
+.peer:-webkit-autofill ~ .peer-autofill\:flex {
+ display: flex;
}
-.group:focus:hover .group-focus\:group-hover\:shadow-md,
-.group:focus-visible .group-focus-visible\:shadow-md,
-.group:active .group-active\:shadow-md,
-.group:enabled .group-enabled\:shadow-md,
-.group:disabled .group-disabled\:shadow-md,
-.group:disabled:focus:hover .group-disabled\:group-focus\:group-hover\:shadow-md,
-.group:disabled:focus:hover .group-disabled\:group-focus\:group-hover\:first\:shadow-md:first-child,
-.peer:first-child ~ .peer-first\:shadow-md,
-.peer:last-child ~ .peer-last\:shadow-md,
-.peer:only-child ~ .peer-only\:shadow-md,
-.peer:nth-child(2n + 1) ~ .peer-odd\:shadow-md,
-.peer:nth-child(2n) ~ .peer-even\:shadow-md,
-.peer:first-of-type ~ .peer-first-of-type\:shadow-md,
-.peer:last-of-type ~ .peer-last-of-type\:shadow-md,
-.peer:only-of-type ~ .peer-only-of-type\:shadow-md,
-.peer:visited ~ .peer-visited\:shadow-md,
-.peer:target ~ .peer-target\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+.peer:autofill ~ .peer-autofill\:flex {
+ display: flex;
}
-.peer[open] ~ .peer-open\:bg-red-200 {
- --tw-bg-opacity: 1;
- background-color: rgb(254 202 202 / var(--tw-bg-opacity));
+.peer:optional ~ .peer-optional\:flex,
+.peer:required ~ .peer-required\:flex,
+.peer:valid ~ .peer-valid\:flex,
+.peer:invalid ~ .peer-invalid\:flex,
+.peer:in-range ~ .peer-in-range\:flex,
+.peer:out-of-range ~ .peer-out-of-range\:flex,
+.peer:read-only ~ .peer-read-only\:flex,
+.peer:empty ~ .peer-empty\:flex,
+.peer:focus-within ~ .peer-focus-within\:flex,
+.peer:hover ~ .peer-hover\:flex,
+.peer:focus ~ .peer-focus\:flex,
+.peer:focus:hover ~ .peer-focus\:peer-hover\:flex {
+ display: flex;
}
-.peer:default ~ .peer-default\:shadow-md,
-.peer:checked ~ .peer-checked\:shadow-md,
-.peer:indeterminate ~ .peer-indeterminate\:shadow-md,
-.peer:placeholder-shown ~ .peer-placeholder-shown\:shadow-md,
-.peer:autofill ~ .peer-autofill\:shadow-md,
-.peer:optional ~ .peer-optional\:shadow-md,
-.peer:required ~ .peer-required\:shadow-md,
-.peer:valid ~ .peer-valid\:shadow-md,
-.peer:invalid ~ .peer-invalid\:shadow-md,
-.peer:in-range ~ .peer-in-range\:shadow-md,
-.peer:out-of-range ~ .peer-out-of-range\:shadow-md,
-.peer:read-only ~ .peer-read-only\:shadow-md,
-.peer:empty ~ .peer-empty\:shadow-md,
-.peer:focus-within ~ .peer-focus-within\:shadow-md,
-.peer:hover ~ .peer-hover\:shadow-md,
-.peer:focus ~ .peer-focus\:shadow-md,
-.peer:focus:hover ~ .peer-focus\:peer-hover\:shadow-md,
-.peer:focus-visible ~ .peer-focus-visible\:shadow-md,
-.peer:active ~ .peer-active\:shadow-md,
-.peer:enabled ~ .peer-enabled\:shadow-md,
-.peer:disabled ~ .peer-disabled\:shadow-md,
-.peer:disabled:focus:hover ~ .peer-disabled\:peer-focus\:peer-hover\:shadow-md,
-.peer:disabled:focus:hover ~ .peer-disabled\:peer-focus\:peer-hover\:first\:shadow-md:first-child,
-:is([dir='ltr'] .ltr\:shadow-md),
-:is([dir='rtl'] .rtl\:shadow-md) {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+.peer:focus-visible ~ .peer-focus-visible\:flex {
+ display: flex;
+}
+.peer:active ~ .peer-active\:flex,
+.peer:enabled ~ .peer-enabled\:flex,
+.peer:disabled ~ .peer-disabled\:flex,
+.peer:disabled:focus:hover ~ .peer-disabled\:peer-focus\:peer-hover\:flex,
+.peer:disabled:focus:hover ~ .peer-disabled\:peer-focus\:peer-hover\:first\:flex:first-child,
+:is([dir='ltr'] .ltr\:flex),
+:is([dir='rtl'] .rtl\:flex) {
+ display: flex;
}
@media (prefers-reduced-motion: no-preference) {
- .motion-safe\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+ .motion-safe\:flex {
+ display: flex;
}
}
@media (prefers-reduced-motion: reduce) {
- .motion-reduce\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+ .motion-reduce\:flex {
+ display: flex;
}
}
@media (prefers-contrast: more) {
- .contrast-more\:bg-yellow-300 {
- --tw-bg-opacity: 1;
- background-color: rgb(253 224 71 / var(--tw-bg-opacity));
+ .contrast-more\:flex {
+ display: flex;
}
}
@media (prefers-contrast: less) {
- .contrast-less\:bg-yellow-300 {
- --tw-bg-opacity: 1;
- background-color: rgb(253 224 71 / var(--tw-bg-opacity));
+ .contrast-less\:flex {
+ display: flex;
}
}
-:is(.dark .dark\:shadow-md),
-:is(.dark .group:disabled:focus:hover .dark\:group-disabled\:group-focus\:group-hover\:shadow-md),
-:is(.dark .peer:disabled:focus:hover ~ .dark\:peer-disabled\:peer-focus\:peer-hover\:shadow-md) {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+:is(.dark .dark\:flex),
+:is(.dark .group:disabled:focus:hover .dark\:group-disabled\:group-focus\:group-hover\:flex),
+:is(.dark .peer:disabled:focus:hover ~ .dark\:peer-disabled\:peer-focus\:peer-hover\:flex) {
+ display: flex;
}
@media print {
- .print\:bg-yellow-300 {
- --tw-bg-opacity: 1;
- background-color: rgb(253 224 71 / var(--tw-bg-opacity));
+ .print\:flex {
+ display: flex;
}
}
@media (min-width: 640px) {
- .sm\:shadow-md,
- .sm\:active\:shadow-md:active {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+ .sm\:flex,
+ .sm\:active\:flex:active {
+ display: flex;
}
}
@media (min-width: 768px) {
- .md\:shadow-md,
- .group:focus .md\:group-focus\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+ .md\:flex,
+ .group:focus .md\:group-focus\:flex {
+ display: flex;
}
}
@media (min-width: 1024px) {
- @keyframes spin {
- to {
- transform: rotate(360deg);
- }
- }
- .lg\:animate-spin {
- animation: 1s linear infinite spin;
- }
- .lg\:shadow-md,
- :is(.dark .lg\:dark\:shadow-md) {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+ .lg\:flex,
+ :is(.dark .lg\:dark\:flex) {
+ display: flex;
}
}
@media (min-width: 1280px) {
- .xl\:shadow-md,
- :is(.dark .xl\:dark\:disabled\:shadow-md:disabled) {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+ .xl\:flex,
+ :is(.dark .xl\:dark\:disabled\:flex:disabled) {
+ display: flex;
}
}
@media (min-width: 1536px) {
- .\32 xl\:shadow-md {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+ .\32 xl\:flex {
+ display: flex;
}
@media (prefers-reduced-motion: no-preference) {
- :is(.dark .\32 xl\:dark\:motion-safe\:focus-within\:shadow-md:focus-within) {
- --tw-shadow: 0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;
- --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color),
- 0 2px 4px -2px var(--tw-shadow-color);
- box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
- var(--tw-shadow);
+ :is(.dark .\32 xl\:dark\:motion-safe\:focus-within\:flex:focus-within) {
+ display: flex;
}
}
}
@media (orientation: portrait) {
- .portrait\:bg-yellow-300 {
- --tw-bg-opacity: 1;
- background-color: rgb(253 224 71 / var(--tw-bg-opacity));
+ .portrait\:flex {
+ display: flex;
}
}
@media (orientation: landscape) {
- .landscape\:bg-yellow-300 {
- --tw-bg-opacity: 1;
- background-color: rgb(253 224 71 / var(--tw-bg-opacity));
+ .landscape\:flex {
+ display: flex;
}
}
diff --git a/tests/variants.test.html b/tests/variants.test.html
index bd40b625f..a9b2c2f16 100644
--- a/tests/variants.test.html
+++ b/tests/variants.test.html
@@ -1,166 +1,166 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
diff --git a/tests/variants.test.js b/tests/variants.test.js
index da62419d4..51980d8a0 100644
--- a/tests/variants.test.js
+++ b/tests/variants.test.js
@@ -1,349 +1,77 @@
import fs from 'fs'
import path from 'path'
import postcss from 'postcss'
-import { crosscheck, run, html, css, defaults } from './util/run'
+import { run, html, css, defaults } from './util/run'
-crosscheck(({ stable, oxide }) => {
- test('variants', () => {
- let config = {
- darkMode: 'class',
- content: [path.resolve(__dirname, './variants.test.html')],
- corePlugins: { preflight: false },
- }
+test('variants', () => {
+ let config = {
+ darkMode: 'class',
+ content: [path.resolve(__dirname, './variants.test.html')],
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
- return run(input, config).then((result) => {
- stable
- .expect(result.css)
- .toMatchFormattedCss(
- fs.readFileSync(path.resolve(__dirname, './variants.test.css'), 'utf8')
- )
- oxide
- .expect(result.css)
- .toMatchFormattedCss(
- fs.readFileSync(path.resolve(__dirname, './variants.oxide.test.css'), 'utf8')
- )
- })
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(
+ fs.readFileSync(path.resolve(__dirname, './variants.test.css'), 'utf8')
+ )
})
+})
- test('order matters and produces different behaviour', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
- `,
- },
- ],
- }
+test('order matters and produces different behaviour', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+ `,
+ },
+ ],
+ }
- return run('@tailwind utilities', config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- .file\:hover\:bg-pink-600:hover::file-selector-button {
- --tw-bg-opacity: 1;
- background-color: rgb(219 39 119 / var(--tw-bg-opacity));
- }
- .hover\:file\:bg-pink-600::file-selector-button:hover {
- --tw-bg-opacity: 1;
- background-color: rgb(219 39 119 / var(--tw-bg-opacity));
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- .file\:hover\:bg-pink-600:hover::file-selector-button {
- background-color: #db2777;
- }
- .hover\:file\:bg-pink-600::file-selector-button:hover {
- background-color: #db2777;
- }
- `)
- })
- })
-
- describe('custom advanced variants', () => {
- test('prose-headings usage on its own', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addVariant }) {
- addVariant('prose-headings', ':where(&) :is(h1, h2, h3, h4)')
- },
- ],
- }
-
- return run('@tailwind components;@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- :where(.prose-headings\:text-center) :is(h1, h2, h3, h4) {
- text-align: center;
- }
- `)
- })
- })
-
- test('prose-headings with another "simple" variant', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
- `,
- },
- ],
- plugins: [
- function ({ addVariant }) {
- addVariant('prose-headings', ':where(&) :is(h1, h2, h3, h4)')
- },
- ],
- }
-
- return run('@tailwind components;@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- :where(.hover\:prose-headings\:text-center) :is(h1, h2, h3, h4):hover,
- :where(.prose-headings\:hover\:text-center:hover) :is(h1, h2, h3, h4) {
- text-align: center;
- }
- `)
- })
- })
-
- test('prose-headings with another "complex" variant', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
- `,
- },
- ],
- plugins: [
- function ({ addVariant }) {
- addVariant('prose-headings', ':where(&) :is(h1, h2, h3, h4)')
- },
- ],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .group:hover :where(.group-hover\:prose-headings\:text-center) :is(h1, h2, h3, h4),
- :where(.group:hover .prose-headings\:group-hover\:text-center) :is(h1, h2, h3, h4) {
- text-align: center;
- }
- `)
- })
- })
-
- test('using variants with multi-class selectors', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addVariant, addComponents }) {
- addComponents({
- '.parent .child': {
- foo: 'bar',
- },
- })
- addVariant('screen', '@media screen')
- },
- ],
- }
-
- return run('@tailwind components;@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- @media screen {
- .screen\:parent .child,
- .parent .screen\:child {
- foo: bar;
- }
- }
- `)
- })
- })
-
- test('using multiple classNames in your custom variant', () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addVariant }) {
- addVariant('my-variant', '&:where(.one, .two, .three)')
- },
- ],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
-
- @layer components {
- .test {
- @apply my-variant:italic;
- }
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .test:where(.one, .two, .three) {
- font-style: italic;
- }
- .my-variant\:underline:where(.one, .two, .three) {
- text-decoration-line: underline;
- }
- `)
- })
- })
-
- test('variant format string must include at-rule or & (1)', async () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addVariant }) {
- addVariant('wtf-bbq', 'lol')
- },
- ],
- }
-
- await expect(run('@tailwind components;@tailwind utilities', config)).rejects.toThrowError(
- "Your custom variant `wtf-bbq` has an invalid format string. Make sure it's an at-rule or contains a `&` placeholder."
- )
- })
-
- test('variant format string must include at-rule or & (2)', async () => {
- let config = {
- content: [
- {
- raw: html`
`,
- },
- ],
- plugins: [
- function ({ addVariant }) {
- addVariant('wtf-bbq', () => 'lol')
- },
- ],
- }
-
- await expect(run('@tailwind components;@tailwind utilities', config)).rejects.toThrowError(
- "Your custom variant `wtf-bbq` has an invalid format string. Make sure it's an at-rule or contains a `&` placeholder."
- )
- })
- })
-
- test('stacked peer variants', async () => {
- let config = {
- content: [{ raw: 'peer-disabled:peer-focus:peer-hover:border-blue-500' }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- let result = await run(input, config)
- stable.expect(result.css).toIncludeCss(css`
- .peer:disabled:focus:hover ~ .peer-disabled\:peer-focus\:peer-hover\:border-blue-500 {
- --tw-border-opacity: 1;
- border-color: rgb(59 130 246 / var(--tw-border-opacity));
- }
- `)
- oxide.expect(result.css).toIncludeCss(css`
- .peer:disabled:focus:hover ~ .peer-disabled\:peer-focus\:peer-hover\:border-blue-500 {
- border-color: #3b82f6;
- }
- `)
- })
-
- it('should properly handle keyframes with multiple variants', async () => {
- let config = {
- content: [
- {
- raw: 'animate-spin hover:animate-spin focus:animate-spin hover:animate-bounce focus:animate-bounce',
- },
- ],
- }
-
- let input = css`
- @tailwind components;
- @tailwind utilities;
- `
-
- let result = await run(input, config)
+ return run('@tailwind utilities', config).then((result) => {
expect(result.css).toMatchFormattedCss(css`
- @keyframes spin {
- to {
- transform: rotate(360deg);
- }
+ .file\:hover\:\[--value\:2\]:hover::-webkit-file-upload-button {
+ --value: 2;
}
- .animate-spin {
- animation: 1s linear infinite spin;
+ .file\:hover\:\[--value\:2\]:hover::file-selector-button {
+ --value: 2;
}
- @keyframes bounce {
- 0%,
- 100% {
- animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
- transform: translateY(-25%);
- }
- 50% {
- animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
- transform: none;
- }
+ .hover\:file\:\[--value\:1\]::-webkit-file-upload-button:hover {
+ --value: 1;
}
- .hover\:animate-bounce:hover {
- animation: 1s infinite bounce;
- }
- .hover\:animate-spin:hover {
- animation: 1s linear infinite spin;
- }
- .focus\:animate-bounce:focus {
- animation: 1s infinite bounce;
- }
- .focus\:animate-spin:focus {
- animation: 1s linear infinite spin;
+ .hover\:file\:\[--value\:1\]::file-selector-button:hover {
+ --value: 1;
}
`)
})
+})
- test('custom addVariant with more complex media query params', () => {
+describe('custom advanced variants', () => {
+ test('at-rules without params', () => {
let config = {
content: [
{
- raw: html`
`,
+ raw: html`
`,
},
],
plugins: [
function ({ addVariant }) {
- addVariant('magic', '@media screen and (max-width: 600px)')
+ addVariant('ogre', '@layer')
},
],
}
- return run('@tailwind components;@tailwind utilities', config).then((result) => {
+ return run('@tailwind components; @tailwind utilities', config).then((result) => {
return expect(result.css).toMatchFormattedCss(css`
- @media screen and (max-width: 600px) {
- .magic\:text-center {
+ @layer {
+ .ogre\:text-center {
text-align: center;
}
}
@@ -351,64 +79,36 @@ crosscheck(({ stable, oxide }) => {
})
})
- test('custom addVariant with nested media & format shorthand', () => {
+ test('prose-headings usage on its own', () => {
let config = {
content: [
{
- raw: html`
`,
+ raw: html`
`,
},
],
plugins: [
function ({ addVariant }) {
- addVariant('magic', '@supports (hover: hover) { @media print { &:disabled } }')
+ addVariant('prose-headings', ':where(&) :is(h1, h2, h3, h4)')
},
],
}
return run('@tailwind components;@tailwind utilities', config).then((result) => {
return expect(result.css).toMatchFormattedCss(css`
- @supports (hover: hover) {
- @media print {
- .magic\:text-center:disabled {
- text-align: center;
- }
- }
- }
- `)
- })
- })
-
- test('before and after variants are a bit special, and forced to the end', () => {
- let config = {
- content: [
- {
- raw: html`
-
-
- `,
- },
- ],
- plugins: [],
- }
-
- return run('@tailwind components;@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .before\:hover\:text-center:hover:before,
- .hover\:before\:text-center:hover:before {
- content: var(--tw-content);
+ :where(.prose-headings\:text-center) :is(h1, h2, h3, h4) {
text-align: center;
}
`)
})
})
- test('before and after variants are a bit special, and forced to the end (2)', () => {
+ test('prose-headings with another "simple" variant', () => {
let config = {
content: [
{
raw: html`
-
-
+
+
`,
},
],
@@ -421,759 +121,1049 @@ crosscheck(({ stable, oxide }) => {
return run('@tailwind components;@tailwind utilities', config).then((result) => {
return expect(result.css).toMatchFormattedCss(css`
- :where(.before\:prose-headings\:text-center) :is(h1, h2, h3, h4):before,
- :where(.prose-headings\:before\:text-center) :is(h1, h2, h3, h4):before {
- content: var(--tw-content);
+ :where(.hover\:prose-headings\:text-center) :is(h1, h2, h3, h4):hover,
+ :where(.prose-headings\:hover\:text-center:hover) :is(h1, h2, h3, h4) {
text-align: center;
}
`)
})
})
- test('returning non-strings and non-selectors in addVariant', () => {
- /** @type {import('../types/config').Config} */
+ test('prose-headings with another "complex" variant', () => {
let config = {
content: [
{
raw: html`
-
-
+
+
`,
},
],
plugins: [
- function ({ addVariant, e }) {
- addVariant('peer-aria-expanded', ({ modifySelectors, separator }) =>
- // Returning anything other string | string[] | undefined here is not supported
- // But we're trying to be lenient here and just throw it out
- modifySelectors(
- ({ className }) =>
- `.peer[aria-expanded="true"] ~ .${e(`peer-aria-expanded${separator}${className}`)}`
- )
- )
+ function ({ addVariant }) {
+ addVariant('prose-headings', ':where(&) :is(h1, h2, h3, h4)')
+ },
+ ],
+ }
- addVariant('peer-aria-expanded-2', ({ modifySelectors, separator }) => {
- let nodes = modifySelectors(
- ({ className }) => `.${e(`peer-aria-expanded-2${separator}${className}`)}`
- )
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .group:hover :where(.group-hover\:prose-headings\:text-center) :is(h1, h2, h3, h4),
+ :where(.group:hover .prose-headings\:group-hover\:text-center) :is(h1, h2, h3, h4) {
+ text-align: center;
+ }
+ `)
+ })
+ })
- return [
- // Returning anything other than strings here is not supported
- // But we're trying to be lenient here and just throw it out
- nodes,
- '.peer[aria-expanded="false"] ~ &',
- ]
+ test('using variants with multi-class selectors', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addVariant, addComponents }) {
+ addComponents({
+ '.parent .child': {
+ foo: 'bar',
+ },
})
+ addVariant('screen', '@media screen')
},
],
}
return run('@tailwind components;@tailwind utilities', config).then((result) => {
return expect(result.css).toMatchFormattedCss(css`
- .peer[aria-expanded='true'] ~ .peer-aria-expanded\:text-center,
- .peer[aria-expanded='false'] ~ .peer-aria-expanded-2\:text-center {
- text-align: center;
+ @media screen {
+ .screen\:parent .child,
+ .parent .screen\:child {
+ foo: bar;
+ }
}
`)
})
})
- it('should not generate variants of user css if it is not inside a layer', () => {
+ test('using multiple classNames in your custom variant', () => {
let config = {
- content: [{ raw: html`
` }],
- plugins: [],
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addVariant }) {
+ addVariant('my-variant', '&:where(.one, .two, .three)')
+ },
+ ],
}
let input = css`
@tailwind components;
@tailwind utilities;
- .foo {
- color: red;
+ @layer components {
+ .test {
+ @apply my-variant:italic;
+ }
}
`
return run(input, config).then((result) => {
return expect(result.css).toMatchFormattedCss(css`
- .foo {
- color: red;
+ .test:where(.one, .two, .three) {
+ font-style: italic;
}
- `)
- })
- })
-
- it('should be possible to use responsive modifiers that are defined with special characters', () => {
- let config = {
- content: [{ raw: html`
` }],
- theme: {
- screens: {
- ' {
- return expect(result.css).toMatchFormattedCss(css`
- @media (max-width: 399px) {
- .\ {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- return run('@tailwind base', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(
- css`
- ${defaults}
- `
- )
- })
- })
-
- it('variants for components should not be produced in a file without a components layer', () => {
- let config = {
- content: [{ raw: html`
` }],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 640px) {
- .sm\:underline {
- text-decoration-line: underline;
- }
- }
- `)
- })
- })
-
- it('variants for utilities should not be produced in a file without a utilities layer', () => {
- let config = {
- content: [{ raw: html`
` }],
- }
-
- return run('@tailwind components', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 640px) {
- .sm\:container {
- width: 100%;
- }
- @media (min-width: 640px) {
- .sm\:container {
- max-width: 640px;
- }
- }
- @media (min-width: 768px) {
- .sm\:container {
- max-width: 768px;
- }
- }
- @media (min-width: 1024px) {
- .sm\:container {
- max-width: 1024px;
- }
- }
- @media (min-width: 1280px) {
- .sm\:container {
- max-width: 1280px;
- }
- }
- @media (min-width: 1536px) {
- .sm\:container {
- max-width: 1536px;
- }
- }
- }
- `)
- })
- })
-
- test('The visited variant removes opacity support', () => {
- let config = {
- content: [
- {
- raw: html`
- Look, it's a link!
- `,
- },
- ],
- plugins: [],
- }
-
- return run('@tailwind utilities', config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- .visited\:border-red-500:visited {
- border-color: #ef4444;
- }
- .visited\:bg-red-500:visited {
- background-color: #ef4444;
- }
- .visited\:text-red-500:visited {
- color: #ef4444;
- }
- `)
- })
- })
-
- it('appends variants to the correct place when using postcss documents', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- corePlugins: { preflight: false },
- }
-
- const doc = postcss.document()
- doc.append(postcss.parse(`a {}`))
- doc.append(postcss.parse(`@tailwind base`))
- doc.append(postcss.parse(`@tailwind utilities`))
- doc.append(postcss.parse(`b {}`))
-
- const result = doc.toResult()
-
- return run(result, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- .underline {
+ .my-variant\:underline:where(.one, .two, .three) {
text-decoration-line: underline;
}
- @media (min-width: 640px) {
- .sm\:underline {
- text-decoration-line: underline;
- }
- }
`)
})
})
- it('variants support multiple, grouped selectors (html)', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- @layer utilities {
- .base1 .foo,
- .base1 .bar {
- color: red;
- }
-
- .base2 .bar .base2-foo {
- color: red;
- }
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 640px) {
- .sm\:base1 .foo,
- .sm\:base1 .bar,
- .sm\:base2 .bar .base2-foo {
- color: red;
- }
- }
- `)
- })
- })
-
- it('variants support multiple, grouped selectors (apply)', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- @layer utilities {
- .base .foo,
- .base .bar {
- color: red;
- }
- }
- .baz {
- @apply sm:base;
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 640px) {
- .baz .foo,
- .baz .bar {
- color: red;
- }
- }
- `)
- })
- })
-
- it('variants only picks the used selectors in a group (html)', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- @layer utilities {
- .a,
- .b {
- color: red;
- }
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 640px) {
- .sm\:b {
- color: red;
- }
- }
- `)
- })
- })
-
- it('variants only picks the used selectors in a group (apply)', () => {
- let config = {
- content: [{ raw: html`
` }],
- plugins: [],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- @layer utilities {
- .a,
- .b {
- color: red;
- }
- }
- .baz {
- @apply sm:b;
- }
- `
-
- return run(input, config).then((result) => {
- return expect(result.css).toMatchFormattedCss(css`
- @media (min-width: 640px) {
- .baz {
- color: red;
- }
- }
- `)
- })
- })
-
- test('hoverOnlyWhenSupported adds hover and pointer media features by default', () => {
- let config = {
- future: {
- hoverOnlyWhenSupported: true,
- },
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- @tailwind components;
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- ${defaults}
- @media (hover: hover) and (pointer: fine) {
- .hover\:underline:hover,
- .group:hover .group-hover\:underline,
- .peer:hover ~ .peer-hover\:underline {
- text-decoration-line: underline;
- }
- }
- `)
- })
- })
-
- test('multi-class utilities handle selector-mutating variants correctly', () => {
+ test('variant format string must include at-rule or & (1)', async () => {
let config = {
content: [
{
- raw: html`
`,
- },
- {
- raw: html`
`,
+ raw: html`
`,
},
],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- @layer utilities {
- .foo.bar.baz {
- color: red;
- }
- .foo1 .bar1 .baz1 {
- color: red;
- }
- }
- `
-
- // The second set of ::after cases (w/ descendant selectors)
- // are clearly "wrong" BUT you can't have a descendant of a
- // pseudo - element so the utilities `after:foo1` and
- // `after:bar1` are non-sensical so this is still
- // perfectly fine behavior
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- .after\:foo.bar.baz:after,
- .after\:bar.foo.baz:after,
- .after\:baz.foo.bar:after,
- .after\:foo1 .bar1 .baz1:after,
- .foo1 .after\:bar1 .baz1:after,
- .foo1 .bar1 .after\:baz1:after {
- content: var(--tw-content);
- color: red;
- }
- .hover\:foo:hover.bar.baz,
- .hover\:bar:hover.foo.baz,
- .hover\:baz:hover.foo.bar,
- .hover\:foo1:hover .bar1 .baz1,
- .foo1 .hover\:bar1:hover .baz1,
- .foo1 .bar1 .hover\:baz1:hover,
- .group:hover .group-hover\:foo.bar.baz,
- .group:hover .group-hover\:bar.foo.baz,
- .group:hover .group-hover\:baz.foo.bar,
- .group:hover .group-hover\:foo1 .bar1 .baz1,
- .foo1 .group:hover .group-hover\:bar1 .baz1,
- .foo1 .bar1 .group:hover .group-hover\:baz1,
- .peer:checked ~ .peer-checked\:foo.bar.baz,
- .peer:checked ~ .peer-checked\:bar.foo.baz,
- .peer:checked ~ .peer-checked\:baz.foo.bar,
- .peer:checked ~ .peer-checked\:foo1 .bar1 .baz1,
- .foo1 .peer:checked ~ .peer-checked\:bar1 .baz1,
- .foo1 .bar1 .peer:checked ~ .peer-checked\:baz1 {
- color: red;
- }
- `)
- })
- })
-
- test('class inside pseudo-class function :has', () => {
- let config = {
- content: [
- { raw: html`
` },
- { raw: html`
` },
- { raw: html`
` },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- @layer utilities {
- :where(.foo) {
- color: red;
- }
- :is(.foo, .bar, .baz) {
- color: orange;
- }
- :is(.foo) {
- color: yellow;
- }
- html:has(.foo) {
- color: green;
- }
- }
- `
-
- return run(input, config).then((result) => {
- expect(result.css).toMatchFormattedCss(css`
- :where(.foo) {
- color: red;
- }
- :is(.foo, .bar, .baz) {
- color: orange;
- }
- .foo {
- color: #ff0;
- }
- html:has(.foo) {
- color: green;
- }
- :where(.hover\:foo:hover) {
- color: red;
- }
- :is(.hover\:foo:hover, .bar, .baz),
- :is(.foo, .hover\:bar:hover, .baz),
- :is(.foo, .bar, .hover\:baz:hover) {
- color: orange;
- }
- .hover\:foo:hover {
- color: #ff0;
- }
- html:has(.hover\:foo:hover) {
- color: green;
- }
- @media (min-width: 640px) {
- :where(.sm\:foo) {
- color: red;
- }
- :is(.sm\:foo, .bar, .baz),
- :is(.foo, .sm\:bar, .baz),
- :is(.foo, .bar, .sm\:baz) {
- color: orange;
- }
- .sm\:foo {
- color: #ff0;
- }
- html:has(.sm\:foo) {
- color: green;
- }
- }
- `)
- })
- })
-
- test('variant functions returning arrays should output correct results when nesting', async () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
plugins: [
- function ({ addUtilities, addVariant }) {
- addVariant('test', () => ['@media (test)'])
- addUtilities({
- '.foo': {
- display: 'grid',
- '> *': {
- 'grid-column': 'span 2',
- },
- },
- })
+ function ({ addVariant }) {
+ addVariant('wtf-bbq', 'lol')
},
],
}
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- @media (test) {
- .test\:foo {
- display: grid;
- }
- .test\:foo > * {
- grid-column: span 2;
- }
- }
- `)
+ await expect(run('@tailwind components;@tailwind utilities', config)).rejects.toThrowError(
+ "Your custom variant `wtf-bbq` has an invalid format string. Make sure it's an at-rule or contains a `&` placeholder."
+ )
})
- test('variants with slashes in them work', () => {
+ test('variant format string must include at-rule or & (2)', async () => {
let config = {
content: [
{
- raw: html` ar-1/10
`,
+ raw: html`
`,
},
],
- theme: {
- extend: {
- screens: {
- 'ar-1/10': { raw: '(min-aspect-ratio: 1/10)' },
- },
- },
- },
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- @media (min-aspect-ratio: 1 / 10) {
- .ar-1\/10\:text-red-500 {
- --tw-text-opacity: 1;
- color: rgb(239 68 68 / var(--tw-text-opacity));
- }
- }
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- @media (min-aspect-ratio: 1 / 10) {
- .ar-1\/10\:text-red-500 {
- color: #ef4444;
- }
- }
- `)
- })
- })
-
- test('variants with slashes support modifiers', () => {
- let config = {
- content: [
- {
- raw: html` ar-1/10
`,
- },
- ],
- corePlugins: { preflight: false },
plugins: [
- function ({ matchVariant }) {
- matchVariant(
- 'ar',
- (value, { modifier }) => {
- return [`@media (min-aspect-ratio: ${value}) and (foo: ${modifier})`]
- },
- { values: { '1/10': '1/10' } }
- )
+ function ({ addVariant }) {
+ addVariant('wtf-bbq', () => 'lol')
},
],
}
- let input = css`
- @tailwind utilities;
- `
+ await expect(run('@tailwind components;@tailwind utilities', config)).rejects.toThrowError(
+ "Your custom variant `wtf-bbq` has an invalid format string. Make sure it's an at-rule or contains a `&` placeholder."
+ )
+ })
+})
- return run(input, config).then((result) => {
- stable.expect(result.css).toMatchFormattedCss(css`
- @media (min-aspect-ratio: 1 / 10) and (foo: 20) {
- .ar-1\/10\/20\:text-red-500 {
- --tw-text-opacity: 1;
- color: rgb(239 68 68 / var(--tw-text-opacity));
- }
+test('stacked peer variants', async () => {
+ let config = {
+ content: [{ raw: 'peer-disabled:peer-focus:peer-hover:flex' }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+ expect(result.css).toIncludeCss(css`
+ .peer:disabled:focus:hover ~ .peer-disabled\:peer-focus\:peer-hover\:flex {
+ display: flex;
+ }
+ `)
+})
+
+it('should properly handle keyframes with multiple variants', async () => {
+ let config = {
+ content: [
+ {
+ raw: 'animate-spin hover:animate-spin focus:animate-spin hover:animate-bounce focus:animate-bounce',
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+ expect(result.css).toMatchFormattedCss(css`
+ @keyframes spin {
+ to {
+ transform: rotate(360deg);
+ }
+ }
+ .animate-spin {
+ animation: 1s linear infinite spin;
+ }
+ @keyframes bounce {
+ 0%,
+ 100% {
+ animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
+ transform: translateY(-25%);
+ }
+ 50% {
+ animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
+ transform: none;
+ }
+ }
+ .hover\:animate-bounce:hover {
+ animation: 1s infinite bounce;
+ }
+ .hover\:animate-spin:hover {
+ animation: 1s linear infinite spin;
+ }
+ .focus\:animate-bounce:focus {
+ animation: 1s infinite bounce;
+ }
+ .focus\:animate-spin:focus {
+ animation: 1s linear infinite spin;
+ }
+ `)
+})
+
+test('custom addVariant with more complex media query params', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addVariant }) {
+ addVariant('magic', '@media screen and (max-width: 600px)')
+ },
+ ],
+ }
+
+ return run('@tailwind components;@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ @media screen and (max-width: 600px) {
+ .magic\:text-center {
+ text-align: center;
}
- `)
- oxide.expect(result.css).toMatchFormattedCss(css`
- @media (min-aspect-ratio: 1 / 10) and (foo: 20) {
- .ar-1\/10\/20\:text-red-500 {
- color: #ef4444;
- }
- }
- `)
- })
- })
-
- test('arbitrary variant selectors should not re-order scrollbar pseudo classes', async () => {
- let config = {
- content: [
- {
- raw: html`
-
-
-
-
-
-
-
- `,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- .\[\&\:\:-webkit-resizer\:hover\]\:underline::-webkit-resizer:hover {
- text-decoration-line: underline;
- }
- .\[\&\:\:-webkit-scrollbar-button\:hover\]\:underline::-webkit-scrollbar-button:hover {
- text-decoration-line: underline;
- }
- .\[\&\:\:-webkit-scrollbar-corner\:hover\]\:underline::-webkit-scrollbar-corner:hover {
- text-decoration-line: underline;
- }
- .\[\&\:\:-webkit-scrollbar-thumb\:hover\]\:underline::-webkit-scrollbar-thumb:hover {
- text-decoration-line: underline;
- }
- .\[\&\:\:-webkit-scrollbar-track-piece\:hover\]\:underline::-webkit-scrollbar-track-piece:hover {
- text-decoration-line: underline;
- }
- .\[\&\:\:-webkit-scrollbar-track\:hover\]\:underline::-webkit-scrollbar-track:hover {
- text-decoration-line: underline;
- }
- .\[\&\:\:-webkit-scrollbar\:hover\]\:underline::-webkit-scrollbar:hover {
- text-decoration-line: underline;
- }
- `)
- })
-
- test('stacking dark and rtl variants', async () => {
- let config = {
- darkMode: 'class',
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- :is(.dark :is([dir='rtl'] .dark\:rtl\:italic)) {
- font-style: italic;
- }
- `)
- })
-
- test('stacking dark and rtl variants with pseudo elements', async () => {
- let config = {
- darkMode: 'class',
- content: [
- {
- raw: html`
`,
- },
- ],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- let result = await run(input, config)
-
- expect(result.css).toMatchFormattedCss(css`
- :is(.dark :is([dir='rtl'] .dark\:rtl\:placeholder\:italic))::placeholder {
- font-style: italic;
}
`)
})
})
+
+test('custom addVariant with nested media & format shorthand', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ plugins: [
+ function ({ addVariant }) {
+ addVariant('magic', '@supports (hover: hover) { @media print { &:disabled } }')
+ },
+ ],
+ }
+
+ return run('@tailwind components;@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ @supports (hover: hover) {
+ @media print {
+ .magic\:text-center:disabled {
+ text-align: center;
+ }
+ }
+ }
+ `)
+ })
+})
+
+test('before and after variants are a bit special, and forced to the end', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+ `,
+ },
+ ],
+ plugins: [],
+ }
+
+ return run('@tailwind components;@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .before\:hover\:text-center:hover:before,
+ .hover\:before\:text-center:hover:before {
+ content: var(--tw-content);
+ text-align: center;
+ }
+ `)
+ })
+})
+
+test('before and after variants are a bit special, and forced to the end (2)', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+ `,
+ },
+ ],
+ plugins: [
+ function ({ addVariant }) {
+ addVariant('prose-headings', ':where(&) :is(h1, h2, h3, h4)')
+ },
+ ],
+ }
+
+ return run('@tailwind components;@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ :where(.before\:prose-headings\:text-center) :is(h1, h2, h3, h4):before,
+ :where(.prose-headings\:before\:text-center) :is(h1, h2, h3, h4):before {
+ content: var(--tw-content);
+ text-align: center;
+ }
+ `)
+ })
+})
+
+test('returning non-strings and non-selectors in addVariant', () => {
+ /** @type {import('../types/config').Config} */
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+ `,
+ },
+ ],
+ plugins: [
+ function ({ addVariant, e }) {
+ addVariant('peer-aria-expanded', ({ modifySelectors, separator }) =>
+ // Returning anything other string | string[] | undefined here is not supported
+ // But we're trying to be lenient here and just throw it out
+ modifySelectors(
+ ({ className }) =>
+ `.peer[aria-expanded="true"] ~ .${e(`peer-aria-expanded${separator}${className}`)}`
+ )
+ )
+
+ addVariant('peer-aria-expanded-2', ({ modifySelectors, separator }) => {
+ let nodes = modifySelectors(
+ ({ className }) => `.${e(`peer-aria-expanded-2${separator}${className}`)}`
+ )
+
+ return [
+ // Returning anything other than strings here is not supported
+ // But we're trying to be lenient here and just throw it out
+ nodes,
+ '.peer[aria-expanded="false"] ~ &',
+ ]
+ })
+ },
+ ],
+ }
+
+ return run('@tailwind components;@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .peer[aria-expanded='true'] ~ .peer-aria-expanded\:text-center,
+ .peer[aria-expanded='false'] ~ .peer-aria-expanded-2\:text-center {
+ text-align: center;
+ }
+ `)
+ })
+})
+
+it('should not generate variants of user css if it is not inside a layer', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ }
+
+ let input = css`
+ @tailwind components;
+ @tailwind utilities;
+
+ .foo {
+ color: red;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .foo {
+ color: red;
+ }
+ `)
+ })
+})
+
+it('should be possible to use responsive modifiers that are defined with special characters', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ theme: {
+ screens: {
+ ' {
+ return expect(result.css).toMatchFormattedCss(css`
+ @media (max-width: 399px) {
+ .\ {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ return run('@tailwind base', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(
+ css`
+ ${defaults}
+ `
+ )
+ })
+})
+
+it('variants for components should not be produced in a file without a components layer', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 640px) {
+ .sm\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ `)
+ })
+})
+
+it('variants for utilities should not be produced in a file without a utilities layer', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ }
+
+ return run('@tailwind components', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 640px) {
+ .sm\:container {
+ width: 100%;
+ }
+ @media (min-width: 640px) {
+ .sm\:container {
+ max-width: 640px;
+ }
+ }
+ @media (min-width: 768px) {
+ .sm\:container {
+ max-width: 768px;
+ }
+ }
+ @media (min-width: 1024px) {
+ .sm\:container {
+ max-width: 1024px;
+ }
+ }
+ @media (min-width: 1280px) {
+ .sm\:container {
+ max-width: 1280px;
+ }
+ }
+ @media (min-width: 1536px) {
+ .sm\:container {
+ max-width: 1536px;
+ }
+ }
+ }
+ `)
+ })
+})
+
+test('The visited variant removes opacity support', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+ Look, it's a link!
+ `,
+ },
+ ],
+ plugins: [],
+ }
+
+ return run('@tailwind utilities', config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ .visited\:border-red-500:visited {
+ border-color: #ef4444;
+ }
+ .visited\:bg-red-500:visited {
+ background-color: #ef4444;
+ }
+ .visited\:text-red-500:visited {
+ color: #ef4444;
+ }
+ `)
+ })
+})
+
+it('appends variants to the correct place when using postcss documents', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ corePlugins: { preflight: false },
+ }
+
+ const doc = postcss.document()
+ doc.append(postcss.parse(`a {}`))
+ doc.append(postcss.parse(`@tailwind base`))
+ doc.append(postcss.parse(`@tailwind utilities`))
+ doc.append(postcss.parse(`b {}`))
+
+ const result = doc.toResult()
+
+ return run(result, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ .underline {
+ text-decoration-line: underline;
+ }
+ @media (min-width: 640px) {
+ .sm\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ `)
+ })
+})
+
+it('variants support multiple, grouped selectors (html)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
+ .base1 .foo,
+ .base1 .bar {
+ color: red;
+ }
+
+ .base2 .bar .base2-foo {
+ color: red;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 640px) {
+ .sm\:base1 .foo,
+ .sm\:base1 .bar,
+ .sm\:base2 .bar .base2-foo {
+ color: red;
+ }
+ }
+ `)
+ })
+})
+
+it('variants support multiple, grouped selectors (apply)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
+ .base .foo,
+ .base .bar {
+ color: red;
+ }
+ }
+ .baz {
+ @apply sm:base;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 640px) {
+ .baz .foo,
+ .baz .bar {
+ color: red;
+ }
+ }
+ `)
+ })
+})
+
+it('variants only picks the used selectors in a group (html)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
+ .a,
+ .b {
+ color: red;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 640px) {
+ .sm\:b {
+ color: red;
+ }
+ }
+ `)
+ })
+})
+
+it('variants only picks the used selectors in a group (apply)', () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ plugins: [],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
+ .a,
+ .b {
+ color: red;
+ }
+ }
+ .baz {
+ @apply sm:b;
+ }
+ `
+
+ return run(input, config).then((result) => {
+ return expect(result.css).toMatchFormattedCss(css`
+ @media (min-width: 640px) {
+ .baz {
+ color: red;
+ }
+ }
+ `)
+ })
+})
+
+test('hoverOnlyWhenSupported adds hover and pointer media features by default', () => {
+ let config = {
+ future: {
+ hoverOnlyWhenSupported: true,
+ },
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ @tailwind components;
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ ${defaults}
+ @media (hover: hover) and (pointer: fine) {
+ .hover\:underline:hover,
+ .group:hover .group-hover\:underline,
+ .peer:hover ~ .peer-hover\:underline {
+ text-decoration-line: underline;
+ }
+ }
+ `)
+ })
+})
+
+test('multi-class utilities handle selector-mutating variants correctly', () => {
+ let config = {
+ content: [
+ {
+ raw: html`
`,
+ },
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
+ .foo.bar.baz {
+ color: red;
+ }
+ .foo1 .bar1 .baz1 {
+ color: red;
+ }
+ }
+ `
+
+ // The second set of ::after cases (w/ descendant selectors)
+ // are clearly "wrong" BUT you can't have a descendant of a
+ // pseudo - element so the utilities `after:foo1` and
+ // `after:bar1` are non-sensical so this is still
+ // perfectly fine behavior
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ .after\:foo.bar.baz:after,
+ .after\:bar.foo.baz:after,
+ .after\:baz.foo.bar:after,
+ .after\:foo1 .bar1 .baz1:after,
+ .foo1 .after\:bar1 .baz1:after,
+ .foo1 .bar1 .after\:baz1:after {
+ content: var(--tw-content);
+ color: red;
+ }
+ .hover\:foo:hover.bar.baz,
+ .hover\:bar:hover.foo.baz,
+ .hover\:baz:hover.foo.bar,
+ .hover\:foo1:hover .bar1 .baz1,
+ .foo1 .hover\:bar1:hover .baz1,
+ .foo1 .bar1 .hover\:baz1:hover,
+ .group:hover .group-hover\:foo.bar.baz,
+ .group:hover .group-hover\:bar.foo.baz,
+ .group:hover .group-hover\:baz.foo.bar,
+ .group:hover .group-hover\:foo1 .bar1 .baz1,
+ .foo1 .group:hover .group-hover\:bar1 .baz1,
+ .foo1 .bar1 .group:hover .group-hover\:baz1,
+ .peer:checked ~ .peer-checked\:foo.bar.baz,
+ .peer:checked ~ .peer-checked\:bar.foo.baz,
+ .peer:checked ~ .peer-checked\:baz.foo.bar,
+ .peer:checked ~ .peer-checked\:foo1 .bar1 .baz1,
+ .foo1 .peer:checked ~ .peer-checked\:bar1 .baz1,
+ .foo1 .bar1 .peer:checked ~ .peer-checked\:baz1 {
+ color: red;
+ }
+ `)
+ })
+})
+
+test('class inside pseudo-class function :has', () => {
+ let config = {
+ content: [
+ { raw: html`
` },
+ { raw: html`
` },
+ { raw: html`
` },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ @layer utilities {
+ :where(.foo) {
+ color: red;
+ }
+ :is(.foo, .bar, .baz) {
+ color: orange;
+ }
+ :is(.foo) {
+ color: yellow;
+ }
+ html:has(.foo) {
+ color: green;
+ }
+ }
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ :where(.foo) {
+ color: red;
+ }
+ :is(.foo, .bar, .baz) {
+ color: orange;
+ }
+ .foo {
+ color: #ff0;
+ }
+ html:has(.foo) {
+ color: green;
+ }
+ :where(.hover\:foo:hover) {
+ color: red;
+ }
+ :is(.hover\:foo:hover, .bar, .baz),
+ :is(.foo, .hover\:bar:hover, .baz),
+ :is(.foo, .bar, .hover\:baz:hover) {
+ color: orange;
+ }
+ .hover\:foo:hover {
+ color: #ff0;
+ }
+ html:has(.hover\:foo:hover) {
+ color: green;
+ }
+ @media (min-width: 640px) {
+ :where(.sm\:foo) {
+ color: red;
+ }
+ :is(.sm\:foo, .bar, .baz),
+ :is(.foo, .sm\:bar, .baz),
+ :is(.foo, .bar, .sm\:baz) {
+ color: orange;
+ }
+ .sm\:foo {
+ color: #ff0;
+ }
+ html:has(.sm\:foo) {
+ color: green;
+ }
+ }
+ `)
+ })
+})
+
+test('variant functions returning arrays should output correct results when nesting', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ plugins: [
+ function ({ addUtilities, addVariant }) {
+ addVariant('test', () => ['@media (test)'])
+ addUtilities({
+ '.foo': {
+ display: 'grid',
+ '> *': {
+ 'grid-column': 'span 2',
+ },
+ },
+ })
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ @media (test) {
+ .test\:foo {
+ display: grid;
+ }
+ .test\:foo > * {
+ grid-column: span 2;
+ }
+ }
+ `)
+})
+
+test('variants with slashes in them work', () => {
+ let config = {
+ content: [
+ {
+ raw: html` ar-1/10
`,
+ },
+ ],
+ theme: {
+ extend: {
+ screens: {
+ 'ar-1/10': { raw: '(min-aspect-ratio: 1/10)' },
+ },
+ },
+ },
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-aspect-ratio: 1 / 10) {
+ .ar-1\/10\:flex {
+ display: flex;
+ }
+ }
+ `)
+ })
+})
+
+test('variants with slashes support modifiers', () => {
+ let config = {
+ content: [
+ {
+ raw: html` ar-1/10
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ plugins: [
+ function ({ matchVariant }) {
+ matchVariant(
+ 'ar',
+ (value, { modifier }) => {
+ return [`@media (min-aspect-ratio: ${value}) and (foo: ${modifier})`]
+ },
+ { values: { '1/10': '1/10' } }
+ )
+ },
+ ],
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ return run(input, config).then((result) => {
+ expect(result.css).toMatchFormattedCss(css`
+ @media (min-aspect-ratio: 1 / 10) and (foo: 20) {
+ .ar-1\/10\/20\:flex {
+ display: flex;
+ }
+ }
+ `)
+ })
+})
+
+test('arbitrary variant selectors should not re-order scrollbar pseudo classes', async () => {
+ let config = {
+ content: [
+ {
+ raw: html`
+
+
+
+
+
+
+
+ `,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ .\[\&\:\:-webkit-resizer\:hover\]\:underline::-webkit-resizer:hover {
+ text-decoration-line: underline;
+ }
+ .\[\&\:\:-webkit-scrollbar-button\:hover\]\:underline::-webkit-scrollbar-button:hover {
+ text-decoration-line: underline;
+ }
+ .\[\&\:\:-webkit-scrollbar-corner\:hover\]\:underline::-webkit-scrollbar-corner:hover {
+ text-decoration-line: underline;
+ }
+ .\[\&\:\:-webkit-scrollbar-thumb\:hover\]\:underline::-webkit-scrollbar-thumb:hover {
+ text-decoration-line: underline;
+ }
+ .\[\&\:\:-webkit-scrollbar-track-piece\:hover\]\:underline::-webkit-scrollbar-track-piece:hover {
+ text-decoration-line: underline;
+ }
+ .\[\&\:\:-webkit-scrollbar-track\:hover\]\:underline::-webkit-scrollbar-track:hover {
+ text-decoration-line: underline;
+ }
+ .\[\&\:\:-webkit-scrollbar\:hover\]\:underline::-webkit-scrollbar:hover {
+ text-decoration-line: underline;
+ }
+ `)
+})
+
+test('stacking dark and rtl variants', async () => {
+ let config = {
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ :is(.dark :is([dir='rtl'] .dark\:rtl\:italic)) {
+ font-style: italic;
+ }
+ `)
+})
+
+test('stacking dark and rtl variants with pseudo elements', async () => {
+ let config = {
+ darkMode: 'class',
+ content: [
+ {
+ raw: html`
`,
+ },
+ ],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ let result = await run(input, config)
+
+ expect(result.css).toMatchFormattedCss(css`
+ :is(.dark :is([dir='rtl'] .dark\:rtl\:placeholder\:italic))::placeholder {
+ font-style: italic;
+ }
+ `)
+})
diff --git a/tests/warnings.test.js b/tests/warnings.test.js
index e3ea94fe5..d74f1dd52 100644
--- a/tests/warnings.test.js
+++ b/tests/warnings.test.js
@@ -1,62 +1,61 @@
-import { crosscheck, run, html, css } from './util/run'
+import { run, html, css } from './util/run'
-crosscheck(() => {
- test('it warns when there is no content key', async () => {
- let config = {
- corePlugins: { preflight: false },
- }
+test('it warns when there is no content key', async () => {
+ let config = {
+ presets: [], // Prevents the default config from being merged in and therefore `content: ['auto']` is not used.
+ corePlugins: { preflight: false },
+ }
- let input = css`
- @tailwind base;
- `
+ let input = css`
+ @tailwind base;
+ `
- await run(input, config)
+ await run(input, config)
- expect().toHaveBeenWarnedWith(['content-problems'])
- })
-
- test('it warns when there is an empty content key', async () => {
- let config = {
- content: [],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind base;
- `
-
- await run(input, config)
-
- expect().toHaveBeenWarnedWith(['content-problems'])
- })
-
- test('it warns when there are no utilities generated', async () => {
- let config = {
- content: [{ raw: html`nothing here matching a utility` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- await run(input, config)
-
- expect().toHaveBeenWarnedWith(['content-problems'])
- })
-
- it('warnings are not thrown when only variant utilities are generated', async () => {
- let config = {
- content: [{ raw: html`
` }],
- corePlugins: { preflight: false },
- }
-
- let input = css`
- @tailwind utilities;
- `
-
- await run(input, config)
-
- expect().not.toHaveBeenWarned()
- })
+ expect().toHaveBeenWarnedWith(['content-problems'])
+})
+
+test('it warns when there is an empty content key', async () => {
+ let config = {
+ content: [],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind base;
+ `
+
+ await run(input, config)
+
+ expect().toHaveBeenWarnedWith(['content-problems'])
+})
+
+test('it warns when there are no utilities generated', async () => {
+ let config = {
+ content: [{ raw: html`nothing here matching a utility` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ await run(input, config)
+
+ expect().toHaveBeenWarnedWith(['content-problems'])
+})
+
+it('warnings are not thrown when only variant utilities are generated', async () => {
+ let config = {
+ content: [{ raw: html`
` }],
+ corePlugins: { preflight: false },
+ }
+
+ let input = css`
+ @tailwind utilities;
+ `
+
+ await run(input, config)
+
+ expect().not.toHaveBeenWarned()
})
diff --git a/tests/withAlphaVariable.test.js b/tests/withAlphaVariable.test.js
index 29d39c7aa..d543dfc6e 100644
--- a/tests/withAlphaVariable.test.js
+++ b/tests/withAlphaVariable.test.js
@@ -1,243 +1,240 @@
import withAlphaVariable from '../src/util/withAlphaVariable'
-import { crosscheck } from './util/run'
-crosscheck(() => {
- test('it adds the right custom property', () => {
- expect(
- withAlphaVariable({ color: '#ff0000', property: 'color', variable: '--tw-text-opacity' })
- ).toEqual({
- '--tw-text-opacity': '1',
- color: 'rgb(255 0 0 / var(--tw-text-opacity))',
- })
- expect(
- withAlphaVariable({
- color: 'hsl(240 100% 50%)',
- property: 'color',
- variable: '--tw-text-opacity',
- })
- ).toEqual({
- '--tw-text-opacity': '1',
- color: 'hsl(240 100% 50% / var(--tw-text-opacity))',
- })
+test('it adds the right custom property', () => {
+ expect(
+ withAlphaVariable({ color: '#ff0000', property: 'color', variable: '--tw-text-opacity' })
+ ).toEqual({
+ '--tw-text-opacity': '1',
+ color: 'rgb(255 0 0 / var(--tw-text-opacity))',
})
-
- test('it ignores colors that cannot be parsed', () => {
- expect(
- withAlphaVariable({
- color: 'currentColor',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': 'currentColor',
- })
- expect(
- withAlphaVariable({
- color: 'rgb(255, 0)',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': 'rgb(255, 0)',
- })
- expect(
- withAlphaVariable({
- color: 'rgb(255)',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': 'rgb(255)',
- })
- expect(
- withAlphaVariable({
- color: 'rgb(255, 0, 0, 255)',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': 'rgb(255, 0, 0, 255)',
- })
- expect(
- withAlphaVariable({
- color: 'rgb(var(--color))',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': 'rgb(var(--color))',
- })
- })
-
- test('it ignores colors that already have an alpha channel', () => {
- expect(
- withAlphaVariable({
- color: '#ff0000ff',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': '#ff0000ff',
- })
- expect(
- withAlphaVariable({
- color: '#ff000080',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': '#ff000080',
- })
- expect(
- withAlphaVariable({
- color: '#f00a',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': '#f00a',
- })
- expect(
- withAlphaVariable({
- color: '#f00f',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': '#f00f',
- })
- expect(
- withAlphaVariable({
- color: 'rgba(255, 255, 255, 1)',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': 'rgba(255, 255, 255, 1)',
- })
- expect(
- withAlphaVariable({
- color: 'rgba(255, 255, 255, 0.5)',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': 'rgba(255, 255, 255, 0.5)',
- })
- expect(
- withAlphaVariable({
- color: 'rgba(255 255 255 / 0.5)',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': 'rgba(255 255 255 / 0.5)',
- })
- expect(
- withAlphaVariable({
- color: 'hsla(240, 100%, 50%, 1)',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': 'hsla(240, 100%, 50%, 1)',
- })
- expect(
- withAlphaVariable({
- color: 'hsla(240, 100%, 50%, 0.5)',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': 'hsla(240, 100%, 50%, 0.5)',
- })
- expect(
- withAlphaVariable({
- color: 'hsl(240 100% 50% / 0.5)',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- 'background-color': 'hsl(240 100% 50% / 0.5)',
- })
- })
-
- test('it allows a closure to be passed', () => {
- expect(
- withAlphaVariable({
- color: ({ opacityVariable }) => `rgba(0, 0, 0, var(${opacityVariable}))`,
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- '--tw-bg-opacity': '1',
- 'background-color': 'rgba(0, 0, 0, var(--tw-bg-opacity))',
- })
- expect(
- withAlphaVariable({
- color: ({ opacityValue }) => `rgba(0, 0, 0, ${opacityValue})`,
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- '--tw-bg-opacity': '1',
- 'background-color': 'rgba(0, 0, 0, var(--tw-bg-opacity))',
- })
- })
-
- test('it transforms rgb and hsl to space-separated rgb and hsl', () => {
- expect(
- withAlphaVariable({
- color: 'rgb(50, 50, 50)',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- '--tw-bg-opacity': '1',
- 'background-color': 'rgb(50 50 50 / var(--tw-bg-opacity))',
- })
- expect(
- withAlphaVariable({
- color: 'rgb(50 50 50)',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- '--tw-bg-opacity': '1',
- 'background-color': 'rgb(50 50 50 / var(--tw-bg-opacity))',
- })
- expect(
- withAlphaVariable({
- color: 'hsl(50, 50%, 50%)',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- '--tw-bg-opacity': '1',
- 'background-color': 'hsl(50 50% 50% / var(--tw-bg-opacity))',
- })
- expect(
- withAlphaVariable({
- color: 'hsl(50 50% 50%)',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- '--tw-bg-opacity': '1',
- 'background-color': 'hsl(50 50% 50% / var(--tw-bg-opacity))',
- })
- })
-
- test('it transforms named colors to rgb', () => {
- expect(
- withAlphaVariable({
- color: 'red',
- property: 'background-color',
- variable: '--tw-bg-opacity',
- })
- ).toEqual({
- '--tw-bg-opacity': '1',
- 'background-color': 'rgb(255 0 0 / var(--tw-bg-opacity))',
+ expect(
+ withAlphaVariable({
+ color: 'hsl(240 100% 50%)',
+ property: 'color',
+ variable: '--tw-text-opacity',
})
+ ).toEqual({
+ '--tw-text-opacity': '1',
+ color: 'hsl(240 100% 50% / var(--tw-text-opacity))',
+ })
+})
+
+test('it ignores colors that cannot be parsed', () => {
+ expect(
+ withAlphaVariable({
+ color: 'currentColor',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': 'currentColor',
+ })
+ expect(
+ withAlphaVariable({
+ color: 'rgb(255, 0)',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': 'rgb(255, 0)',
+ })
+ expect(
+ withAlphaVariable({
+ color: 'rgb(255)',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': 'rgb(255)',
+ })
+ expect(
+ withAlphaVariable({
+ color: 'rgb(255, 0, 0, 255)',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': 'rgb(255, 0, 0, 255)',
+ })
+ expect(
+ withAlphaVariable({
+ color: 'rgb(var(--color))',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': 'rgb(var(--color))',
+ })
+})
+
+test('it ignores colors that already have an alpha channel', () => {
+ expect(
+ withAlphaVariable({
+ color: '#ff0000ff',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': '#ff0000ff',
+ })
+ expect(
+ withAlphaVariable({
+ color: '#ff000080',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': '#ff000080',
+ })
+ expect(
+ withAlphaVariable({
+ color: '#f00a',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': '#f00a',
+ })
+ expect(
+ withAlphaVariable({
+ color: '#f00f',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': '#f00f',
+ })
+ expect(
+ withAlphaVariable({
+ color: 'rgba(255, 255, 255, 1)',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': 'rgba(255, 255, 255, 1)',
+ })
+ expect(
+ withAlphaVariable({
+ color: 'rgba(255, 255, 255, 0.5)',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': 'rgba(255, 255, 255, 0.5)',
+ })
+ expect(
+ withAlphaVariable({
+ color: 'rgba(255 255 255 / 0.5)',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': 'rgba(255 255 255 / 0.5)',
+ })
+ expect(
+ withAlphaVariable({
+ color: 'hsla(240, 100%, 50%, 1)',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': 'hsla(240, 100%, 50%, 1)',
+ })
+ expect(
+ withAlphaVariable({
+ color: 'hsla(240, 100%, 50%, 0.5)',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': 'hsla(240, 100%, 50%, 0.5)',
+ })
+ expect(
+ withAlphaVariable({
+ color: 'hsl(240 100% 50% / 0.5)',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ 'background-color': 'hsl(240 100% 50% / 0.5)',
+ })
+})
+
+test('it allows a closure to be passed', () => {
+ expect(
+ withAlphaVariable({
+ color: ({ opacityVariable }) => `rgba(0, 0, 0, var(${opacityVariable}))`,
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ '--tw-bg-opacity': '1',
+ 'background-color': 'rgba(0, 0, 0, var(--tw-bg-opacity))',
+ })
+ expect(
+ withAlphaVariable({
+ color: ({ opacityValue }) => `rgba(0, 0, 0, ${opacityValue})`,
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ '--tw-bg-opacity': '1',
+ 'background-color': 'rgba(0, 0, 0, var(--tw-bg-opacity))',
+ })
+})
+
+test('it transforms rgb and hsl to space-separated rgb and hsl', () => {
+ expect(
+ withAlphaVariable({
+ color: 'rgb(50, 50, 50)',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ '--tw-bg-opacity': '1',
+ 'background-color': 'rgb(50 50 50 / var(--tw-bg-opacity))',
+ })
+ expect(
+ withAlphaVariable({
+ color: 'rgb(50 50 50)',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ '--tw-bg-opacity': '1',
+ 'background-color': 'rgb(50 50 50 / var(--tw-bg-opacity))',
+ })
+ expect(
+ withAlphaVariable({
+ color: 'hsl(50, 50%, 50%)',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ '--tw-bg-opacity': '1',
+ 'background-color': 'hsl(50 50% 50% / var(--tw-bg-opacity))',
+ })
+ expect(
+ withAlphaVariable({
+ color: 'hsl(50 50% 50%)',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ '--tw-bg-opacity': '1',
+ 'background-color': 'hsl(50 50% 50% / var(--tw-bg-opacity))',
+ })
+})
+
+test('it transforms named colors to rgb', () => {
+ expect(
+ withAlphaVariable({
+ color: 'red',
+ property: 'background-color',
+ variable: '--tw-bg-opacity',
+ })
+ ).toEqual({
+ '--tw-bg-opacity': '1',
+ 'background-color': 'rgb(255 0 0 / var(--tw-bg-opacity))',
})
})
diff --git a/turbo.json b/turbo.json
index ef1c9043d..8ddd398f5 100644
--- a/turbo.json
+++ b/turbo.json
@@ -2,7 +2,7 @@
"$schema": "https://turbo.build/schema.json",
"pipeline": {
"//#build": {
- "outputs": ["lib/**", "peers/**", "types/generated/**"],
+ "outputs": ["lib/**", "types/generated/**"],
"inputs": ["src/**", "oxide/**", "nesting/**", "oxide-node-api-shim/**", "types/**"]
},
"test": {
diff --git a/types/config.d.ts b/types/config.d.ts
index bb40c8b71..051ccad5b 100644
--- a/types/config.d.ts
+++ b/types/config.d.ts
@@ -46,13 +46,13 @@ type PrefixConfig = string
type SeparatorConfig = string
// Safelist related config
-type SafelistConfig = (string | { pattern: RegExp; variants?: string[] })[]
+type SafelistConfig = string | { pattern: RegExp; variants?: string[] }
// Blocklist related config
-type BlocklistConfig = string[]
+type BlocklistConfig = string
// Presets related config
-type PresetsConfig = Config[]
+type PresetsConfig = Partial
// Future related config
type FutureConfigValues =
@@ -60,10 +60,11 @@ type FutureConfigValues =
| 'respectDefaultRingColorOpacity'
| 'disableColorOpacityUtilitiesByDefault'
| 'relativeContentPathsByDefault'
+ | 'logicalSiblingUtilities'
type FutureConfig = Expand<'all' | Partial>> | []
// Experimental related config
-type ExperimentalConfigValues = 'optimizeUniversalDefaults' | 'matchVariant'
+type ExperimentalConfigValues = 'optimizeUniversalDefaults' | 'oxideParser'
type ExperimentalConfig = Expand<'all' | Partial>> | []
// DarkMode related config
@@ -79,7 +80,7 @@ type Screen = { raw: string } | { min: string } | { max: string } | { min: strin
type ScreensConfig = string[] | KeyValuePair
// Theme related config
-interface ThemeConfig {
+export interface ThemeConfig {
// Responsiveness
screens: ResolvableTo
supports: ResolvableTo>
@@ -234,8 +235,9 @@ interface ThemeConfig {
transitionDuration: ResolvableTo
willChange: ResolvableTo
content: ResolvableTo
+}
- // Custom
+interface CustomThemeConfig extends ThemeConfig {
[key: string]: any
}
@@ -341,6 +343,8 @@ export type PluginsConfig = (
(options: any): { handler: PluginCreator; config?: Partial }
__isOptionsFunction: true
}
+ | string
+ | [string, Record]
)[]
// Top level config related
@@ -352,13 +356,13 @@ interface OptionalConfig {
important: Partial
prefix: Partial
separator: Partial
- safelist: Partial
- blocklist: Partial
- presets: Partial
+ safelist: Array
+ blocklist: Array
+ presets: Array
future: Partial
experimental: Partial
darkMode: Partial
- theme: Partial }>
+ theme: Partial }>
corePlugins: Partial
plugins: Partial
// Custom
diff --git a/types/index.d.ts b/types/index.d.ts
index 131877e77..b7fc92659 100644
--- a/types/index.d.ts
+++ b/types/index.d.ts
@@ -1,7 +1,11 @@
-import { PluginCreator } from 'postcss'
+import type { PluginCreator } from 'postcss'
import type { Config } from './config.d'
declare const plugin: PluginCreator
-export { Config }
-export default plugin
+declare type _Config = Config
+declare namespace plugin {
+ export type { _Config as Config }
+}
+
+export = plugin