diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index fa622b1..f0447e2 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -4,33 +4,33 @@ "requires": true, "packages": { "node_modules/@clack/core": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.4.1.tgz", - "integrity": "sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.4.2.tgz", + "integrity": "sha512-NYQfcEy8MWIxrT5Fj8nIVchfRFA26yYKJcvBS7WlUIlw2OmQOY9DhGGXMovyI5J5PpxrCPGkgUi207EBrjpBvg==", "dependencies": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "node_modules/@clack/prompts": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.10.0.tgz", - "integrity": "sha512-H3rCl6CwW1NdQt9rE3n373t7o5cthPv7yUoxF2ytZvyvlJv89C5RYMJu83Hed8ODgys5vpBU0GKxIRG83jd8NQ==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.10.1.tgz", + "integrity": "sha512-Q0T02vx8ZM9XSv9/Yde0jTmmBQufZhPJfYAg2XrrrxWWaZgq1rr8nU8Hv710BQ1dhoP8rtY7YUdpGej2Qza/cw==", "dependencies": { - "@clack/core": "0.4.1", + "@clack/core": "0.4.2", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "node_modules/@discordjs/builders": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.10.1.tgz", - "integrity": "sha512-OWo1fY4ztL1/M/DUyRPShB4d/EzVfuUvPTRRHRIt/YxBrUYSz0a+JicD5F5zHFoNs2oTuWavxCOVFV1UljHTng==", + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.11.2.tgz", + "integrity": "sha512-F1WTABdd8/R9D1icJzajC4IuLyyS8f3rTOz66JsSI3pKvpCAtsMBweu8cyNYsIyvcrKAVn9EPK+Psoymq+XC0A==", "dependencies": { - "@discordjs/formatters": "^0.6.0", + "@discordjs/formatters": "^0.6.1", "@discordjs/util": "^1.1.1", "@sapphire/shapeshift": "^4.0.0", - "discord-api-types": "^0.37.119", + "discord-api-types": "^0.38.1", "fast-deep-equal": "^3.1.3", "ts-mixer": "^6.0.4", "tslib": "^2.6.3" @@ -51,11 +51,11 @@ } }, "node_modules/@discordjs/formatters": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.0.tgz", - "integrity": "sha512-YIruKw4UILt/ivO4uISmrGq2GdMY6EkoTtD0oS0GvkJFRZbTSdPhzYiUILbJ/QslsvC9H9nTgGgnarnIl4jMfw==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.1.tgz", + "integrity": "sha512-5cnX+tASiPCqCWtFcFslxBVUaCetB0thvM/JyavhbXInP1HJIEU+Qv/zMrnuwSsX3yWH2lVXNJZeDK3EiP4HHg==", "dependencies": { - "discord-api-types": "^0.37.114" + "discord-api-types": "^0.38.1" }, "engines": { "node": ">=16.11.0" @@ -65,16 +65,16 @@ } }, "node_modules/@discordjs/rest": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.4.3.tgz", - "integrity": "sha512-+SO4RKvWsM+y8uFHgYQrcTl/3+cY02uQOH7/7bKbVZsTfrfpoE62o5p+mmV+s7FVhTX82/kQUGGbu4YlV60RtA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.5.0.tgz", + "integrity": "sha512-PWhchxTzpn9EV3vvPRpwS0EE2rNYB9pvzDU/eLLW3mByJl0ZHZjHI2/wA8EbH2gRMQV7nu+0FoDF84oiPl8VAQ==", "dependencies": { "@discordjs/collection": "^2.1.1", "@discordjs/util": "^1.1.1", "@sapphire/async-queue": "^1.5.3", "@sapphire/snowflake": "^3.5.3", "@vladfrangu/async_event_emitter": "^2.4.6", - "discord-api-types": "^0.37.119", + "discord-api-types": "^0.38.1", "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", "undici": "6.21.1" @@ -109,17 +109,17 @@ } }, "node_modules/@discordjs/ws": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.1.tgz", - "integrity": "sha512-PBvenhZG56a6tMWF/f4P6f4GxZKJTBG95n7aiGSPTnodmz4N5g60t79rSIAq7ywMbv8A4jFtexMruH+oe51aQQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.2.tgz", + "integrity": "sha512-dyfq7yn0wO0IYeYOs3z79I6/HumhmKISzFL0Z+007zQJMtAFGtt3AEoq1nuLXtcunUE5YYYQqgKvybXukAK8/w==", "dependencies": { "@discordjs/collection": "^2.1.0", - "@discordjs/rest": "^2.4.3", + "@discordjs/rest": "^2.5.0", "@discordjs/util": "^1.1.0", "@sapphire/async-queue": "^1.5.2", "@types/ws": "^8.5.10", "@vladfrangu/async_event_emitter": "^2.2.4", - "discord-api-types": "^0.37.119", + "discord-api-types": "^0.38.1", "tslib": "^2.6.2", "ws": "^8.17.0" }, @@ -172,9 +172,9 @@ } }, "node_modules/@types/node": { - "version": "22.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", - "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", + "version": "22.15.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.3.tgz", + "integrity": "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==", "dependencies": { "undici-types": "~6.21.0" } @@ -246,9 +246,9 @@ } }, "node_modules/axios": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", - "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -484,25 +484,26 @@ } }, "node_modules/discord-api-types": { - "version": "0.37.119", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.119.tgz", - "integrity": "sha512-WasbGFXEB+VQWXlo6IpW3oUv73Yuau1Ig4AZF/m13tXcTKnMpc/mHjpztIlz4+BM9FG9BHQkEXiPto3bKduQUg==" + "version": "0.38.2", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.2.tgz", + "integrity": "sha512-GAPY1/Kv3aqEoBYgUYXB2tHdWJCZXfytlCzxZ4QMQ1/TIQn1JI+xUOukehl4iEa9m7fCURnMIOpOxpaTWqzX2w==" }, "node_modules/discord.js": { - "version": "14.18.0", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.18.0.tgz", - "integrity": "sha512-SvU5kVUvwunQhN2/+0t55QW/1EHfB1lp0TtLZUSXVHDmyHTrdOj5LRKdR0zLcybaA15F+NtdWuWmGOX9lE+CAw==", + "version": "14.19.3", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.19.3.tgz", + "integrity": "sha512-lncTRk0k+8Q5D3nThnODBR8fR8x2fM798o8Vsr40Krx0DjPwpZCuxxTcFMrXMQVOqM1QB9wqWgaXPg3TbmlHqA==", "dependencies": { - "@discordjs/builders": "^1.10.1", + "@discordjs/builders": "^1.11.2", "@discordjs/collection": "1.5.3", - "@discordjs/formatters": "^0.6.0", - "@discordjs/rest": "^2.4.3", + "@discordjs/formatters": "^0.6.1", + "@discordjs/rest": "^2.5.0", "@discordjs/util": "^1.1.1", - "@discordjs/ws": "^1.2.1", + "@discordjs/ws": "^1.2.2", "@sapphire/snowflake": "3.5.3", - "discord-api-types": "^0.37.119", + "discord-api-types": "^0.38.1", "fast-deep-equal": "3.1.3", "lodash.snakecase": "4.1.1", + "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", "undici": "6.21.1" }, @@ -899,9 +900,9 @@ "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" }, "node_modules/long": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", - "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==" + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==" }, "node_modules/lru-cache": { "version": "7.18.3", @@ -926,9 +927,9 @@ } }, "node_modules/magic-bytes.js": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz", - "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.12.1.tgz", + "integrity": "sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA==" }, "node_modules/math-intrinsics": { "version": "1.1.0", @@ -1057,9 +1058,9 @@ } }, "node_modules/mysql2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.14.0.tgz", - "integrity": "sha512-8eMhmG6gt/hRkU1G+8KlGOdQi2w+CgtNoD1ksXZq9gQfkfDsX4LHaBwTe1SY0Imx//t2iZA03DFnyYKPinxSRw==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.14.1.tgz", + "integrity": "sha512-7ytuPQJjQB8TNAYX/H2yhL+iQOnIBjAMam361R7UAL0lOVXWjtdrmoL9HYKqKoLp/8UUTRcvo1QPvK9KL7wA8w==", "dependencies": { "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", @@ -1543,9 +1544,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", "engines": { "node": ">=10.0.0" }, diff --git a/node_modules/@clack/core/CHANGELOG.md b/node_modules/@clack/core/CHANGELOG.md index 178b1f5..355ac19 100644 --- a/node_modules/@clack/core/CHANGELOG.md +++ b/node_modules/@clack/core/CHANGELOG.md @@ -1,5 +1,13 @@ # @clack/core +## 0.4.2 + +### Patch Changes + +- 30aa7ed: Adds a new `selectableGroups` boolean to the group multi-select prompt. Using `selectableGroups: false` will disable the ability to select a top-level group, but still allow every child to be selected individually. +- 5dfce8a: Fixes an edge case for placeholder values. Previously, when pressing `enter` on an empty prompt, placeholder values would be ignored. Now, placeholder values are treated as the prompt value. +- f574297: Fix "TTY initialization failed: uv_tty_init returned EBADF (bad file descriptor)" error happening on Windows for non-tty terminals. + ## 0.4.1 ### Patch Changes diff --git a/node_modules/@clack/core/dist/index.cjs b/node_modules/@clack/core/dist/index.cjs index 14bcbf7..a6b36b2 100644 --- a/node_modules/@clack/core/dist/index.cjs +++ b/node_modules/@clack/core/dist/index.cjs @@ -1,15 +1,15 @@ -"use strict";const sisteransi=require("sisteransi"),node_process=require("node:process"),s$2=require("node:readline"),node_tty=require("node:tty"),i$1=require("picocolors");function _interopDefaultCompat(C){return C&&typeof C=="object"&&"default"in C?C.default:C}function _interopNamespaceCompat(C){if(C&&typeof C=="object"&&"default"in C)return C;const t=Object.create(null);if(C)for(const F in C)t[F]=C[F];return t.default=C,t}const s__namespace=_interopNamespaceCompat(s$2),s__default=_interopDefaultCompat(s$2),i__default=_interopDefaultCompat(i$1);function ansiRegex({onlyFirst:C=!1}={}){const F=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(F,C?void 0:"g")}const regex=ansiRegex();function stripAnsi(C){if(typeof C!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof C}\``);return C.replace(regex,"")}function getDefaultExportFromCjs(C){return C&&C.__esModule&&Object.prototype.hasOwnProperty.call(C,"default")?C.default:C}var eastasianwidth={exports:{}};(function(C){var t={};C.exports=t,t.eastAsianWidth=function(E){var h=E.charCodeAt(0),B=E.length==2?E.charCodeAt(1):0,D=h;return 55296<=h&&h<=56319&&56320<=B&&B<=57343&&(h&=1023,B&=1023,D=h<<10|B,D+=65536),D==12288||65281<=D&&D<=65376||65504<=D&&D<=65510?"F":D==8361||65377<=D&&D<=65470||65474<=D&&D<=65479||65482<=D&&D<=65487||65490<=D&&D<=65495||65498<=D&&D<=65500||65512<=D&&D<=65518?"H":4352<=D&&D<=4447||4515<=D&&D<=4519||4602<=D&&D<=4607||9001<=D&&D<=9002||11904<=D&&D<=11929||11931<=D&&D<=12019||12032<=D&&D<=12245||12272<=D&&D<=12283||12289<=D&&D<=12350||12353<=D&&D<=12438||12441<=D&&D<=12543||12549<=D&&D<=12589||12593<=D&&D<=12686||12688<=D&&D<=12730||12736<=D&&D<=12771||12784<=D&&D<=12830||12832<=D&&D<=12871||12880<=D&&D<=13054||13056<=D&&D<=19903||19968<=D&&D<=42124||42128<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||55216<=D&&D<=55238||55243<=D&&D<=55291||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65106||65108<=D&&D<=65126||65128<=D&&D<=65131||110592<=D&&D<=110593||127488<=D&&D<=127490||127504<=D&&D<=127546||127552<=D&&D<=127560||127568<=D&&D<=127569||131072<=D&&D<=194367||177984<=D&&D<=196605||196608<=D&&D<=262141?"W":32<=D&&D<=126||162<=D&&D<=163||165<=D&&D<=166||D==172||D==175||10214<=D&&D<=10221||10629<=D&&D<=10630?"Na":D==161||D==164||167<=D&&D<=168||D==170||173<=D&&D<=174||176<=D&&D<=180||182<=D&&D<=186||188<=D&&D<=191||D==198||D==208||215<=D&&D<=216||222<=D&&D<=225||D==230||232<=D&&D<=234||236<=D&&D<=237||D==240||242<=D&&D<=243||247<=D&&D<=250||D==252||D==254||D==257||D==273||D==275||D==283||294<=D&&D<=295||D==299||305<=D&&D<=307||D==312||319<=D&&D<=322||D==324||328<=D&&D<=331||D==333||338<=D&&D<=339||358<=D&&D<=359||D==363||D==462||D==464||D==466||D==468||D==470||D==472||D==474||D==476||D==593||D==609||D==708||D==711||713<=D&&D<=715||D==717||D==720||728<=D&&D<=731||D==733||D==735||768<=D&&D<=879||913<=D&&D<=929||931<=D&&D<=937||945<=D&&D<=961||963<=D&&D<=969||D==1025||1040<=D&&D<=1103||D==1105||D==8208||8211<=D&&D<=8214||8216<=D&&D<=8217||8220<=D&&D<=8221||8224<=D&&D<=8226||8228<=D&&D<=8231||D==8240||8242<=D&&D<=8243||D==8245||D==8251||D==8254||D==8308||D==8319||8321<=D&&D<=8324||D==8364||D==8451||D==8453||D==8457||D==8467||D==8470||8481<=D&&D<=8482||D==8486||D==8491||8531<=D&&D<=8532||8539<=D&&D<=8542||8544<=D&&D<=8555||8560<=D&&D<=8569||D==8585||8592<=D&&D<=8601||8632<=D&&D<=8633||D==8658||D==8660||D==8679||D==8704||8706<=D&&D<=8707||8711<=D&&D<=8712||D==8715||D==8719||D==8721||D==8725||D==8730||8733<=D&&D<=8736||D==8739||D==8741||8743<=D&&D<=8748||D==8750||8756<=D&&D<=8759||8764<=D&&D<=8765||D==8776||D==8780||D==8786||8800<=D&&D<=8801||8804<=D&&D<=8807||8810<=D&&D<=8811||8814<=D&&D<=8815||8834<=D&&D<=8835||8838<=D&&D<=8839||D==8853||D==8857||D==8869||D==8895||D==8978||9312<=D&&D<=9449||9451<=D&&D<=9547||9552<=D&&D<=9587||9600<=D&&D<=9615||9618<=D&&D<=9621||9632<=D&&D<=9633||9635<=D&&D<=9641||9650<=D&&D<=9651||9654<=D&&D<=9655||9660<=D&&D<=9661||9664<=D&&D<=9665||9670<=D&&D<=9672||D==9675||9678<=D&&D<=9681||9698<=D&&D<=9701||D==9711||9733<=D&&D<=9734||D==9737||9742<=D&&D<=9743||9748<=D&&D<=9749||D==9756||D==9758||D==9792||D==9794||9824<=D&&D<=9825||9827<=D&&D<=9829||9831<=D&&D<=9834||9836<=D&&D<=9837||D==9839||9886<=D&&D<=9887||9918<=D&&D<=9919||9924<=D&&D<=9933||9935<=D&&D<=9953||D==9955||9960<=D&&D<=9983||D==10045||D==10071||10102<=D&&D<=10111||11093<=D&&D<=11097||12872<=D&&D<=12879||57344<=D&&D<=63743||65024<=D&&D<=65039||D==65533||127232<=D&&D<=127242||127248<=D&&D<=127277||127280<=D&&D<=127337||127344<=D&&D<=127386||917760<=D&&D<=917999||983040<=D&&D<=1048573||1048576<=D&&D<=1114109?"A":"N"},t.characterLength=function(E){var h=this.eastAsianWidth(E);return h=="F"||h=="W"||h=="A"?2:1};function F(E){return E.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}t.length=function(E){for(var h=F(E),B=0,D=0;D=h-(g==2?1:0))if(A+g<=B)D+=w;else break;A+=g}return D}})(eastasianwidth);var eastasianwidthExports=eastasianwidth.exports;const eastAsianWidth=getDefaultExportFromCjs(eastasianwidthExports);var emojiRegex=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g};const emojiRegex$1=getDefaultExportFromCjs(emojiRegex);function stringWidth(C,t={}){if(typeof C!="string"||C.length===0||(t={ambiguousIsNarrow:!0,...t},C=stripAnsi(C),C.length===0))return 0;C=C.replace(emojiRegex$1()," ");const F=t.ambiguousIsNarrow?1:2;let E=0;for(const h of C){const B=h.codePointAt(0);if(B<=31||B>=127&&B<=159||B>=768&&B<=879)continue;switch(eastAsianWidth.eastAsianWidth(h)){case"F":case"W":E+=2;break;case"A":E+=F;break;default:E+=1}}return E}const ANSI_BACKGROUND_OFFSET=10,wrapAnsi16=(C=0)=>t=>`\x1B[${t+C}m`,wrapAnsi256=(C=0)=>t=>`\x1B[${38+C};5;${t}m`,wrapAnsi16m=(C=0)=>(t,F,E)=>`\x1B[${38+C};2;${t};${F};${E}m`,styles={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(styles.modifier);const foregroundColorNames=Object.keys(styles.color),backgroundColorNames=Object.keys(styles.bgColor);[...foregroundColorNames,...backgroundColorNames];function assembleStyles(){const C=new Map;for(const[t,F]of Object.entries(styles)){for(const[E,h]of Object.entries(F))styles[E]={open:`\x1B[${h[0]}m`,close:`\x1B[${h[1]}m`},F[E]=styles[E],C.set(h[0],h[1]);Object.defineProperty(styles,t,{value:F,enumerable:!1})}return Object.defineProperty(styles,"codes",{value:C,enumerable:!1}),styles.color.close="\x1B[39m",styles.bgColor.close="\x1B[49m",styles.color.ansi=wrapAnsi16(),styles.color.ansi256=wrapAnsi256(),styles.color.ansi16m=wrapAnsi16m(),styles.bgColor.ansi=wrapAnsi16(ANSI_BACKGROUND_OFFSET),styles.bgColor.ansi256=wrapAnsi256(ANSI_BACKGROUND_OFFSET),styles.bgColor.ansi16m=wrapAnsi16m(ANSI_BACKGROUND_OFFSET),Object.defineProperties(styles,{rgbToAnsi256:{value:(t,F,E)=>t===F&&F===E?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(F/255*5)+Math.round(E/255*5),enumerable:!1},hexToRgb:{value:t=>{const F=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!F)return[0,0,0];let[E]=F;E.length===3&&(E=[...E].map(B=>B+B).join(""));const h=Number.parseInt(E,16);return[h>>16&255,h>>8&255,h&255]},enumerable:!1},hexToAnsi256:{value:t=>styles.rgbToAnsi256(...styles.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value:t=>{if(t<8)return 30+t;if(t<16)return 90+(t-8);let F,E,h;if(t>=232)F=((t-232)*10+8)/255,E=F,h=F;else{t-=16;const A=t%36;F=Math.floor(t/36)/5,E=Math.floor(A/6)/5,h=A%6/5}const B=Math.max(F,E,h)*2;if(B===0)return 30;let D=30+(Math.round(h)<<2|Math.round(E)<<1|Math.round(F));return B===2&&(D+=60),D},enumerable:!1},rgbToAnsi:{value:(t,F,E)=>styles.ansi256ToAnsi(styles.rgbToAnsi256(t,F,E)),enumerable:!1},hexToAnsi:{value:t=>styles.ansi256ToAnsi(styles.hexToAnsi256(t)),enumerable:!1}}),styles}const ansiStyles=assembleStyles(),ESCAPES=new Set(["\x1B","\x9B"]),END_CODE=39,ANSI_ESCAPE_BELL="\x07",ANSI_CSI="[",ANSI_OSC="]",ANSI_SGR_TERMINATOR="m",ANSI_ESCAPE_LINK=`${ANSI_OSC}8;;`,wrapAnsiCode=C=>`${ESCAPES.values().next().value}${ANSI_CSI}${C}${ANSI_SGR_TERMINATOR}`,wrapAnsiHyperlink=C=>`${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${C}${ANSI_ESCAPE_BELL}`,wordLengths=C=>C.split(" ").map(t=>stringWidth(t)),wrapWord=(C,t,F)=>{const E=[...t];let h=!1,B=!1,D=stringWidth(stripAnsi(C[C.length-1]));for(const[A,d]of E.entries()){const f=stringWidth(d);if(D+f<=F?C[C.length-1]+=d:(C.push(d),D=0),ESCAPES.has(d)&&(h=!0,B=E.slice(A+1).join("").startsWith(ANSI_ESCAPE_LINK)),h){B?d===ANSI_ESCAPE_BELL&&(h=!1,B=!1):d===ANSI_SGR_TERMINATOR&&(h=!1);continue}D+=f,D===F&&A0&&C.length>1&&(C[C.length-2]+=C.pop())},stringVisibleTrimSpacesRight=C=>{const t=C.split(" ");let F=t.length;for(;F>0&&!(stringWidth(t[F-1])>0);)F--;return F===t.length?C:t.slice(0,F).join(" ")+t.slice(F).join("")},exec=(C,t,F={})=>{if(F.trim!==!1&&C.trim()==="")return"";let E="",h,B;const D=wordLengths(C);let A=[""];for(const[f,w]of C.split(" ").entries()){F.trim!==!1&&(A[A.length-1]=A[A.length-1].trimStart());let g=stringWidth(A[A.length-1]);if(f!==0&&(g>=t&&(F.wordWrap===!1||F.trim===!1)&&(A.push(""),g=0),(g>0||F.trim===!1)&&(A[A.length-1]+=" ",g++)),F.hard&&D[f]>t){const y=t-g,_=1+Math.floor((D[f]-y-1)/t);Math.floor((D[f]-1)/t)<_&&A.push(""),wrapWord(A,w,t);continue}if(g+D[f]>t&&g>0&&D[f]>0){if(F.wordWrap===!1&&gt&&F.wordWrap===!1){wrapWord(A,w,t);continue}A[A.length-1]+=w}F.trim!==!1&&(A=A.map(f=>stringVisibleTrimSpacesRight(f)));const d=[...A.join(` -`)];for(const[f,w]of d.entries()){if(E+=w,ESCAPES.has(w)){const{groups:y}=new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(d.slice(f).join(""))||{groups:{}};if(y.code!==void 0){const _=Number.parseFloat(y.code);h=_===END_CODE?void 0:_}else y.uri!==void 0&&(B=y.uri.length===0?void 0:y.uri)}const g=ansiStyles.codes.get(Number(h));d[f+1]===` -`?(B&&(E+=wrapAnsiHyperlink("")),h&&g&&(E+=wrapAnsiCode(g))):w===` -`&&(h&&g&&(E+=wrapAnsiCode(h)),B&&(E+=wrapAnsiHyperlink(B)))}return E};function wrapAnsi(C,t,F){return String(C).normalize().replace(/\r\n/g,` +"use strict";const sisteransi=require("sisteransi"),node_process=require("node:process"),s$2=require("node:readline"),node_stream=require("node:stream"),i$1=require("picocolors");function _interopDefaultCompat(C){return C&&typeof C=="object"&&"default"in C?C.default:C}function _interopNamespaceCompat(C){if(C&&typeof C=="object"&&"default"in C)return C;const t=Object.create(null);if(C)for(const F in C)t[F]=C[F];return t.default=C,t}const s__namespace=_interopNamespaceCompat(s$2),s__default=_interopDefaultCompat(s$2),i__default=_interopDefaultCompat(i$1);function ansiRegex({onlyFirst:C=!1}={}){const F=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(F,C?void 0:"g")}const regex=ansiRegex();function stripAnsi(C){if(typeof C!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof C}\``);return C.replace(regex,"")}function getDefaultExportFromCjs(C){return C&&C.__esModule&&Object.prototype.hasOwnProperty.call(C,"default")?C.default:C}var eastasianwidth={exports:{}};(function(C){var t={};C.exports=t,t.eastAsianWidth=function(E){var B=E.charCodeAt(0),A=E.length==2?E.charCodeAt(1):0,D=B;return 55296<=B&&B<=56319&&56320<=A&&A<=57343&&(B&=1023,A&=1023,D=B<<10|A,D+=65536),D==12288||65281<=D&&D<=65376||65504<=D&&D<=65510?"F":D==8361||65377<=D&&D<=65470||65474<=D&&D<=65479||65482<=D&&D<=65487||65490<=D&&D<=65495||65498<=D&&D<=65500||65512<=D&&D<=65518?"H":4352<=D&&D<=4447||4515<=D&&D<=4519||4602<=D&&D<=4607||9001<=D&&D<=9002||11904<=D&&D<=11929||11931<=D&&D<=12019||12032<=D&&D<=12245||12272<=D&&D<=12283||12289<=D&&D<=12350||12353<=D&&D<=12438||12441<=D&&D<=12543||12549<=D&&D<=12589||12593<=D&&D<=12686||12688<=D&&D<=12730||12736<=D&&D<=12771||12784<=D&&D<=12830||12832<=D&&D<=12871||12880<=D&&D<=13054||13056<=D&&D<=19903||19968<=D&&D<=42124||42128<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||55216<=D&&D<=55238||55243<=D&&D<=55291||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65106||65108<=D&&D<=65126||65128<=D&&D<=65131||110592<=D&&D<=110593||127488<=D&&D<=127490||127504<=D&&D<=127546||127552<=D&&D<=127560||127568<=D&&D<=127569||131072<=D&&D<=194367||177984<=D&&D<=196605||196608<=D&&D<=262141?"W":32<=D&&D<=126||162<=D&&D<=163||165<=D&&D<=166||D==172||D==175||10214<=D&&D<=10221||10629<=D&&D<=10630?"Na":D==161||D==164||167<=D&&D<=168||D==170||173<=D&&D<=174||176<=D&&D<=180||182<=D&&D<=186||188<=D&&D<=191||D==198||D==208||215<=D&&D<=216||222<=D&&D<=225||D==230||232<=D&&D<=234||236<=D&&D<=237||D==240||242<=D&&D<=243||247<=D&&D<=250||D==252||D==254||D==257||D==273||D==275||D==283||294<=D&&D<=295||D==299||305<=D&&D<=307||D==312||319<=D&&D<=322||D==324||328<=D&&D<=331||D==333||338<=D&&D<=339||358<=D&&D<=359||D==363||D==462||D==464||D==466||D==468||D==470||D==472||D==474||D==476||D==593||D==609||D==708||D==711||713<=D&&D<=715||D==717||D==720||728<=D&&D<=731||D==733||D==735||768<=D&&D<=879||913<=D&&D<=929||931<=D&&D<=937||945<=D&&D<=961||963<=D&&D<=969||D==1025||1040<=D&&D<=1103||D==1105||D==8208||8211<=D&&D<=8214||8216<=D&&D<=8217||8220<=D&&D<=8221||8224<=D&&D<=8226||8228<=D&&D<=8231||D==8240||8242<=D&&D<=8243||D==8245||D==8251||D==8254||D==8308||D==8319||8321<=D&&D<=8324||D==8364||D==8451||D==8453||D==8457||D==8467||D==8470||8481<=D&&D<=8482||D==8486||D==8491||8531<=D&&D<=8532||8539<=D&&D<=8542||8544<=D&&D<=8555||8560<=D&&D<=8569||D==8585||8592<=D&&D<=8601||8632<=D&&D<=8633||D==8658||D==8660||D==8679||D==8704||8706<=D&&D<=8707||8711<=D&&D<=8712||D==8715||D==8719||D==8721||D==8725||D==8730||8733<=D&&D<=8736||D==8739||D==8741||8743<=D&&D<=8748||D==8750||8756<=D&&D<=8759||8764<=D&&D<=8765||D==8776||D==8780||D==8786||8800<=D&&D<=8801||8804<=D&&D<=8807||8810<=D&&D<=8811||8814<=D&&D<=8815||8834<=D&&D<=8835||8838<=D&&D<=8839||D==8853||D==8857||D==8869||D==8895||D==8978||9312<=D&&D<=9449||9451<=D&&D<=9547||9552<=D&&D<=9587||9600<=D&&D<=9615||9618<=D&&D<=9621||9632<=D&&D<=9633||9635<=D&&D<=9641||9650<=D&&D<=9651||9654<=D&&D<=9655||9660<=D&&D<=9661||9664<=D&&D<=9665||9670<=D&&D<=9672||D==9675||9678<=D&&D<=9681||9698<=D&&D<=9701||D==9711||9733<=D&&D<=9734||D==9737||9742<=D&&D<=9743||9748<=D&&D<=9749||D==9756||D==9758||D==9792||D==9794||9824<=D&&D<=9825||9827<=D&&D<=9829||9831<=D&&D<=9834||9836<=D&&D<=9837||D==9839||9886<=D&&D<=9887||9918<=D&&D<=9919||9924<=D&&D<=9933||9935<=D&&D<=9953||D==9955||9960<=D&&D<=9983||D==10045||D==10071||10102<=D&&D<=10111||11093<=D&&D<=11097||12872<=D&&D<=12879||57344<=D&&D<=63743||65024<=D&&D<=65039||D==65533||127232<=D&&D<=127242||127248<=D&&D<=127277||127280<=D&&D<=127337||127344<=D&&D<=127386||917760<=D&&D<=917999||983040<=D&&D<=1048573||1048576<=D&&D<=1114109?"A":"N"},t.characterLength=function(E){var B=this.eastAsianWidth(E);return B=="F"||B=="W"||B=="A"?2:1};function F(E){return E.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}t.length=function(E){for(var B=F(E),A=0,D=0;D=B-(w==2?1:0))if(f+w<=A)D+=_;else break;f+=w}return D}})(eastasianwidth);var eastasianwidthExports=eastasianwidth.exports;const eastAsianWidth=getDefaultExportFromCjs(eastasianwidthExports);var emojiRegex=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g};const emojiRegex$1=getDefaultExportFromCjs(emojiRegex);function stringWidth(C,t={}){if(typeof C!="string"||C.length===0||(t={ambiguousIsNarrow:!0,...t},C=stripAnsi(C),C.length===0))return 0;C=C.replace(emojiRegex$1()," ");const F=t.ambiguousIsNarrow?1:2;let E=0;for(const B of C){const A=B.codePointAt(0);if(A<=31||A>=127&&A<=159||A>=768&&A<=879)continue;switch(eastAsianWidth.eastAsianWidth(B)){case"F":case"W":E+=2;break;case"A":E+=F;break;default:E+=1}}return E}const ANSI_BACKGROUND_OFFSET=10,wrapAnsi16=(C=0)=>t=>`\x1B[${t+C}m`,wrapAnsi256=(C=0)=>t=>`\x1B[${38+C};5;${t}m`,wrapAnsi16m=(C=0)=>(t,F,E)=>`\x1B[${38+C};2;${t};${F};${E}m`,styles={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(styles.modifier);const foregroundColorNames=Object.keys(styles.color),backgroundColorNames=Object.keys(styles.bgColor);[...foregroundColorNames,...backgroundColorNames];function assembleStyles(){const C=new Map;for(const[t,F]of Object.entries(styles)){for(const[E,B]of Object.entries(F))styles[E]={open:`\x1B[${B[0]}m`,close:`\x1B[${B[1]}m`},F[E]=styles[E],C.set(B[0],B[1]);Object.defineProperty(styles,t,{value:F,enumerable:!1})}return Object.defineProperty(styles,"codes",{value:C,enumerable:!1}),styles.color.close="\x1B[39m",styles.bgColor.close="\x1B[49m",styles.color.ansi=wrapAnsi16(),styles.color.ansi256=wrapAnsi256(),styles.color.ansi16m=wrapAnsi16m(),styles.bgColor.ansi=wrapAnsi16(ANSI_BACKGROUND_OFFSET),styles.bgColor.ansi256=wrapAnsi256(ANSI_BACKGROUND_OFFSET),styles.bgColor.ansi16m=wrapAnsi16m(ANSI_BACKGROUND_OFFSET),Object.defineProperties(styles,{rgbToAnsi256:{value:(t,F,E)=>t===F&&F===E?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(F/255*5)+Math.round(E/255*5),enumerable:!1},hexToRgb:{value:t=>{const F=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!F)return[0,0,0];let[E]=F;E.length===3&&(E=[...E].map(A=>A+A).join(""));const B=Number.parseInt(E,16);return[B>>16&255,B>>8&255,B&255]},enumerable:!1},hexToAnsi256:{value:t=>styles.rgbToAnsi256(...styles.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value:t=>{if(t<8)return 30+t;if(t<16)return 90+(t-8);let F,E,B;if(t>=232)F=((t-232)*10+8)/255,E=F,B=F;else{t-=16;const f=t%36;F=Math.floor(t/36)/5,E=Math.floor(f/6)/5,B=f%6/5}const A=Math.max(F,E,B)*2;if(A===0)return 30;let D=30+(Math.round(B)<<2|Math.round(E)<<1|Math.round(F));return A===2&&(D+=60),D},enumerable:!1},rgbToAnsi:{value:(t,F,E)=>styles.ansi256ToAnsi(styles.rgbToAnsi256(t,F,E)),enumerable:!1},hexToAnsi:{value:t=>styles.ansi256ToAnsi(styles.hexToAnsi256(t)),enumerable:!1}}),styles}const ansiStyles=assembleStyles(),ESCAPES=new Set(["\x1B","\x9B"]),END_CODE=39,ANSI_ESCAPE_BELL="\x07",ANSI_CSI="[",ANSI_OSC="]",ANSI_SGR_TERMINATOR="m",ANSI_ESCAPE_LINK=`${ANSI_OSC}8;;`,wrapAnsiCode=C=>`${ESCAPES.values().next().value}${ANSI_CSI}${C}${ANSI_SGR_TERMINATOR}`,wrapAnsiHyperlink=C=>`${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${C}${ANSI_ESCAPE_BELL}`,wordLengths=C=>C.split(" ").map(t=>stringWidth(t)),wrapWord=(C,t,F)=>{const E=[...t];let B=!1,A=!1,D=stringWidth(stripAnsi(C[C.length-1]));for(const[f,y]of E.entries()){const d=stringWidth(y);if(D+d<=F?C[C.length-1]+=y:(C.push(y),D=0),ESCAPES.has(y)&&(B=!0,A=E.slice(f+1).join("").startsWith(ANSI_ESCAPE_LINK)),B){A?y===ANSI_ESCAPE_BELL&&(B=!1,A=!1):y===ANSI_SGR_TERMINATOR&&(B=!1);continue}D+=d,D===F&&f0&&C.length>1&&(C[C.length-2]+=C.pop())},stringVisibleTrimSpacesRight=C=>{const t=C.split(" ");let F=t.length;for(;F>0&&!(stringWidth(t[F-1])>0);)F--;return F===t.length?C:t.slice(0,F).join(" ")+t.slice(F).join("")},exec=(C,t,F={})=>{if(F.trim!==!1&&C.trim()==="")return"";let E="",B,A;const D=wordLengths(C);let f=[""];for(const[d,_]of C.split(" ").entries()){F.trim!==!1&&(f[f.length-1]=f[f.length-1].trimStart());let w=stringWidth(f[f.length-1]);if(d!==0&&(w>=t&&(F.wordWrap===!1||F.trim===!1)&&(f.push(""),w=0),(w>0||F.trim===!1)&&(f[f.length-1]+=" ",w++)),F.hard&&D[d]>t){const S=t-w,$=1+Math.floor((D[d]-S-1)/t);Math.floor((D[d]-1)/t)<$&&f.push(""),wrapWord(f,_,t);continue}if(w+D[d]>t&&w>0&&D[d]>0){if(F.wordWrap===!1&&wt&&F.wordWrap===!1){wrapWord(f,_,t);continue}f[f.length-1]+=_}F.trim!==!1&&(f=f.map(d=>stringVisibleTrimSpacesRight(d)));const y=[...f.join(` +`)];for(const[d,_]of y.entries()){if(E+=_,ESCAPES.has(_)){const{groups:S}=new RegExp(`(?:\\${ANSI_CSI}(?\\d+)m|\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(y.slice(d).join(""))||{groups:{}};if(S.code!==void 0){const $=Number.parseFloat(S.code);B=$===END_CODE?void 0:$}else S.uri!==void 0&&(A=S.uri.length===0?void 0:S.uri)}const w=ansiStyles.codes.get(Number(B));y[d+1]===` +`?(A&&(E+=wrapAnsiHyperlink("")),B&&w&&(E+=wrapAnsiCode(w))):_===` +`&&(B&&w&&(E+=wrapAnsiCode(B)),A&&(E+=wrapAnsiHyperlink(A)))}return E};function wrapAnsi(C,t,F){return String(C).normalize().replace(/\r\n/g,` `).split(` `).map(E=>exec(E,t,F)).join(` -`)}const a$2=["up","down","left","right","space","enter","cancel"],settings={actions:new Set(a$2),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]])};function updateSettings(C){for(const t in C){const F=t;if(!Object.hasOwn(C,F))continue;const E=C[F];switch(F){case"aliases":{for(const h in E)Object.hasOwn(E,h)&&(settings.aliases.has(h)||settings.aliases.set(h,E[h]));break}}}}function isActionKey(C,t){if(typeof C=="string")return settings.aliases.get(C)===t;for(const F of C)if(F!==void 0&&isActionKey(F,t))return!0;return!1}function diffLines(C,t){if(C===t)return;const F=C.split(` +`)}const a$1=["up","down","left","right","space","enter","cancel"],settings={actions:new Set(a$1),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]])};function updateSettings(C){for(const t in C){const F=t;if(!Object.hasOwn(C,F))continue;const E=C[F];switch(F){case"aliases":{for(const B in E)Object.hasOwn(E,B)&&(settings.aliases.has(B)||settings.aliases.set(B,E[B]));break}}}}function isActionKey(C,t){if(typeof C=="string")return settings.aliases.get(C)===t;for(const F of C)if(F!==void 0&&isActionKey(F,t))return!0;return!1}function diffLines(C,t){if(C===t)return;const F=C.split(` `),E=t.split(` -`),h=[];for(let B=0;B{const f=String(D);if(isActionKey([f,A,d],"cancel")){E&&t.write(sisteransi.cursor.show),process.exit(0);return}if(!F)return;const w=A==="return"?0:-1,g=A==="return"?-1:0;s__namespace.moveCursor(t,w,g,()=>{s__namespace.clearLine(t,1,()=>{C.once("keypress",B)})})};return E&&t.write(sisteransi.cursor.hide),C.once("keypress",B),()=>{C.off("keypress",B),E&&t.write(sisteransi.cursor.show),C.isTTY&&!x&&C.setRawMode(!1),h.terminal=!1,h.close()}}var b=Object.defineProperty,v=(C,t,F)=>t in C?b(C,t,{enumerable:!0,configurable:!0,writable:!0,value:F}):C[t]=F,s$1=(C,t,F)=>(v(C,typeof t!="symbol"?t+"":t,F),F);class k{constructor(t,F=!0){s$1(this,"input"),s$1(this,"output"),s$1(this,"_abortSignal"),s$1(this,"rl"),s$1(this,"opts"),s$1(this,"_render"),s$1(this,"_track",!1),s$1(this,"_prevFrame",""),s$1(this,"_subscribers",new Map),s$1(this,"_cursor",0),s$1(this,"state","initial"),s$1(this,"error",""),s$1(this,"value");const{input:E=node_process.stdin,output:h=node_process.stdout,render:B,signal:D,...A}=t;this.opts=A,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=B.bind(this),this._track=F,this._abortSignal=D,this.input=E,this.output=h}unsubscribe(){this._subscribers.clear()}setSubscriber(t,F){const E=this._subscribers.get(t)??[];E.push(F),this._subscribers.set(t,E)}on(t,F){this.setSubscriber(t,{cb:F})}once(t,F){this.setSubscriber(t,{cb:F,once:!0})}emit(t,...F){const E=this._subscribers.get(t)??[],h=[];for(const B of E)B.cb(...F),B.once&&h.push(()=>E.splice(E.indexOf(B),1));for(const B of h)B()}prompt(){return new Promise((t,F)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),t(CANCEL_SYMBOL);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}const E=new node_tty.WriteStream(0);E._write=(h,B,D)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),D()},this.input.pipe(E),this.rl=s__default.createInterface({input:this.input,output:E,tabSize:2,prompt:"",escapeCodeTimeout:50}),s__default.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),setRawMode(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(sisteransi.cursor.show),this.output.off("resize",this.render),setRawMode(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(sisteransi.cursor.show),this.output.off("resize",this.render),setRawMode(this.input,!1),t(CANCEL_SYMBOL)})})}onKeypress(t,F){if(this.state==="error"&&(this.state="active"),F?.name&&(!this._track&&settings.aliases.has(F.name)&&this.emit("cursor",settings.aliases.get(F.name)),settings.actions.has(F.name)&&this.emit("cursor",F.name)),t&&(t.toLowerCase()==="y"||t.toLowerCase()==="n")&&this.emit("confirm",t.toLowerCase()==="y"),t===" "&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),t&&this.emit("key",t.toLowerCase()),F?.name==="return"){if(this.opts.validate){const E=this.opts.validate(this.value);E&&(this.error=E instanceof Error?E.message:E,this.state="error",this.rl?.write(this.value))}this.state!=="error"&&(this.state="submit")}isActionKey([t,F?.name,F?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(` +`),B=[];for(let A=0;A{const d=String(D);if(isActionKey([d,f,y],"cancel")){E&&t.write(sisteransi.cursor.show),process.exit(0);return}if(!F)return;const _=f==="return"?0:-1,w=f==="return"?-1:0;s__namespace.moveCursor(t,_,w,()=>{s__namespace.clearLine(t,1,()=>{C.once("keypress",A)})})};return E&&t.write(sisteransi.cursor.hide),C.once("keypress",A),()=>{C.off("keypress",A),E&&t.write(sisteransi.cursor.show),C.isTTY&&!x&&C.setRawMode(!1),B.terminal=!1,B.close()}}var b=Object.defineProperty,v$1=(C,t,F)=>t in C?b(C,t,{enumerable:!0,configurable:!0,writable:!0,value:F}):C[t]=F,s$1=(C,t,F)=>(v$1(C,typeof t!="symbol"?t+"":t,F),F);class k{constructor(t,F=!0){s$1(this,"input"),s$1(this,"output"),s$1(this,"_abortSignal"),s$1(this,"rl"),s$1(this,"opts"),s$1(this,"_render"),s$1(this,"_track",!1),s$1(this,"_prevFrame",""),s$1(this,"_subscribers",new Map),s$1(this,"_cursor",0),s$1(this,"state","initial"),s$1(this,"error",""),s$1(this,"value");const{input:E=node_process.stdin,output:B=node_process.stdout,render:A,signal:D,...f}=t;this.opts=f,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=A.bind(this),this._track=F,this._abortSignal=D,this.input=E,this.output=B}unsubscribe(){this._subscribers.clear()}setSubscriber(t,F){const E=this._subscribers.get(t)??[];E.push(F),this._subscribers.set(t,E)}on(t,F){this.setSubscriber(t,{cb:F})}once(t,F){this.setSubscriber(t,{cb:F,once:!0})}emit(t,...F){const E=this._subscribers.get(t)??[],B=[];for(const A of E)A.cb(...F),A.once&&B.push(()=>E.splice(E.indexOf(A),1));for(const A of B)A()}prompt(){return new Promise((t,F)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),t(CANCEL_SYMBOL);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}const E=new node_stream.Writable;E._write=(B,A,D)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),D()},this.input.pipe(E),this.rl=s__default.createInterface({input:this.input,output:E,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),s__default.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),setRawMode(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(sisteransi.cursor.show),this.output.off("resize",this.render),setRawMode(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(sisteransi.cursor.show),this.output.off("resize",this.render),setRawMode(this.input,!1),t(CANCEL_SYMBOL)})})}onKeypress(t,F){if(this.state==="error"&&(this.state="active"),F?.name&&(!this._track&&settings.aliases.has(F.name)&&this.emit("cursor",settings.aliases.get(F.name)),settings.actions.has(F.name)&&this.emit("cursor",F.name)),t&&(t.toLowerCase()==="y"||t.toLowerCase()==="n")&&this.emit("confirm",t.toLowerCase()==="y"),t===" "&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),t&&this.emit("key",t.toLowerCase()),F?.name==="return"){if(!this.value&&this.opts.placeholder&&(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder)),this.opts.validate){const E=this.opts.validate(this.value);E&&(this.error=E instanceof Error?E.message:E,this.state="error",this.rl?.write(this.value))}this.state!=="error"&&(this.state="submit")}isActionKey([t,F?.name,F?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(` `),setRawMode(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){const t=wrapAnsi(this._prevFrame,process.stdout.columns,{hard:!0}).split(` -`).length-1;this.output.write(sisteransi.cursor.move(-999,t*-1))}render(){const t=wrapAnsi(this._render(this)??"",process.stdout.columns,{hard:!0});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(sisteransi.cursor.hide);else{const F=diffLines(this._prevFrame,t);if(this.restoreCursor(),F&&F?.length===1){const E=F[0];this.output.write(sisteransi.cursor.move(0,E)),this.output.write(sisteransi.erase.lines(1));const h=t.split(` -`);this.output.write(h[E]),this._prevFrame=t,this.output.write(sisteransi.cursor.move(0,h.length-E-1));return}if(F&&F?.length>1){const E=F[0];this.output.write(sisteransi.cursor.move(0,E)),this.output.write(sisteransi.erase.down());const h=t.split(` -`).slice(E);this.output.write(h.join(` -`)),this._prevFrame=t;return}this.output.write(sisteransi.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}class s extends k{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",F=>{this.output.write(sisteransi.cursor.move(0,-1)),this.value=F,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var a$1=Object.defineProperty,n$2=(C,t,F)=>t in C?a$1(C,t,{enumerable:!0,configurable:!0,writable:!0,value:F}):C[t]=F,l$2=(C,t,F)=>(n$2(C,typeof t!="symbol"?t+"":t,F),F);let c$1=class extends k{constructor(t){super(t,!1),l$2(this,"options"),l$2(this,"cursor",0);const{options:F}=t;this.options=Object.entries(F).flatMap(([E,h])=>[{value:E,group:!0,label:E},...h.map(B=>({...B,group:E}))]),this.value=[...t.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:E})=>E===t.cursorAt),0),this.on("cursor",E=>{switch(E){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break;case"space":this.toggleValue();break}})}getGroupItems(t){return this.options.filter(F=>F.group===t)}isGroupSelected(t){return this.getGroupItems(t).every(F=>this.value.includes(F.value))}toggleValue(){const t=this.options[this.cursor];if(t.group===!0){const F=t.value,E=this.getGroupItems(F);this.isGroupSelected(F)?this.value=this.value.filter(h=>E.findIndex(B=>B.value===h)===-1):this.value=[...this.value,...E.map(h=>h.value)],this.value=Array.from(new Set(this.value))}else{const F=this.value.includes(t.value);this.value=F?this.value.filter(E=>E!==t.value):[...this.value,t.value]}}};var o$2=Object.defineProperty,a=(C,t,F)=>t in C?o$2(C,t,{enumerable:!0,configurable:!0,writable:!0,value:F}):C[t]=F,l$1=(C,t,F)=>(a(C,typeof t!="symbol"?t+"":t,F),F);let u$2=class extends k{constructor(t){super(t,!1),l$1(this,"options"),l$1(this,"cursor",0),this.options=t.options,this.value=[...t.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:F})=>F===t.cursorAt),0),this.on("key",F=>{F==="a"&&this.toggleAll()}),this.on("cursor",F=>{switch(F){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break;case"space":this.toggleValue();break}})}get _value(){return this.options[this.cursor].value}toggleAll(){const t=this.value.length===this.options.length;this.value=t?[]:this.options.map(F=>F.value)}toggleValue(){const t=this.value.includes(this._value);this.value=t?this.value.filter(F=>F!==this._value):[...this.value,this._value]}};var u$1=Object.defineProperty,n$1=(C,t,F)=>t in C?u$1(C,t,{enumerable:!0,configurable:!0,writable:!0,value:F}):C[t]=F,e=(C,t,F)=>(n$1(C,typeof t!="symbol"?t+"":t,F),F);class m extends k{constructor({mask:t,...F}){super(F),e(this,"valueWithCursor",""),e(this,"_mask","\u2022"),this._mask=t??"\u2022",this.on("finalize",()=>{this.valueWithCursor=this.masked}),this.on("value",()=>{if(this.cursor>=this.value.length)this.valueWithCursor=`${this.masked}${i__default.inverse(i__default.hidden("_"))}`;else{const E=this.masked.slice(0,this.cursor),h=this.masked.slice(this.cursor);this.valueWithCursor=`${E}${i__default.inverse(h[0])}${h.slice(1)}`}})}get cursor(){return this._cursor}get masked(){return this.value.replaceAll(/./g,this._mask)}}var o$1=Object.defineProperty,n=(C,t,F)=>t in C?o$1(C,t,{enumerable:!0,configurable:!0,writable:!0,value:F}):C[t]=F,r=(C,t,F)=>(n(C,typeof t!="symbol"?t+"":t,F),F);class u extends k{constructor(t){super(t,!1),r(this,"options"),r(this,"cursor",0),this.options=t.options,this.cursor=this.options.findIndex(({value:F})=>F===t.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on("cursor",F=>{switch(F){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}this.changeValue()})}get _value(){return this.options[this.cursor]}changeValue(){this.value=this._value.value}}var p=Object.defineProperty,l=(C,t,F)=>t in C?p(C,t,{enumerable:!0,configurable:!0,writable:!0,value:F}):C[t]=F,i=(C,t,F)=>(l(C,typeof t!="symbol"?t+"":t,F),F);class c extends k{constructor(t){super(t,!1),i(this,"options"),i(this,"cursor",0),this.options=t.options;const F=this.options.map(({value:[E]})=>E?.toLowerCase());this.cursor=Math.max(F.indexOf(t.initialValue),0),this.on("key",E=>{if(!F.includes(E))return;const h=this.options.find(({value:[B]})=>B?.toLowerCase()===E);h&&(this.value=h.value,this.state="submit",this.emit("submit"))})}}class o extends k{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return`${this.value}\u2588`;const t=this.value.slice(0,this.cursor),[F,...E]=this.value.slice(this.cursor);return`${t}${i__default.inverse(F)}${E.join("")}`}get cursor(){return this._cursor}constructor(t){super(t),this.on("finalize",()=>{this.value||(this.value=t.defaultValue)})}}exports.ConfirmPrompt=s,exports.GroupMultiSelectPrompt=c$1,exports.MultiSelectPrompt=u$2,exports.PasswordPrompt=m,exports.Prompt=k,exports.SelectKeyPrompt=c,exports.SelectPrompt=u,exports.TextPrompt=o,exports.block=block,exports.isCancel=isCancel,exports.updateSettings=updateSettings; +`).length-1;this.output.write(sisteransi.cursor.move(-999,t*-1))}render(){const t=wrapAnsi(this._render(this)??"",process.stdout.columns,{hard:!0});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(sisteransi.cursor.hide);else{const F=diffLines(this._prevFrame,t);if(this.restoreCursor(),F&&F?.length===1){const E=F[0];this.output.write(sisteransi.cursor.move(0,E)),this.output.write(sisteransi.erase.lines(1));const B=t.split(` +`);this.output.write(B[E]),this._prevFrame=t,this.output.write(sisteransi.cursor.move(0,B.length-E-1));return}if(F&&F?.length>1){const E=F[0];this.output.write(sisteransi.cursor.move(0,E)),this.output.write(sisteransi.erase.down());const B=t.split(` +`).slice(E);this.output.write(B.join(` +`)),this._prevFrame=t;return}this.output.write(sisteransi.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}}class s extends k{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",F=>{this.output.write(sisteransi.cursor.move(0,-1)),this.value=F,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var v=Object.defineProperty,g=(C,t,F)=>t in C?v(C,t,{enumerable:!0,configurable:!0,writable:!0,value:F}):C[t]=F,n$2=(C,t,F)=>(g(C,typeof t!="symbol"?t+"":t,F),F),c$1=(C,t,F)=>{if(!t.has(C))throw TypeError("Cannot "+F)},l$2=(C,t,F)=>(c$1(C,t,"read from private field"),F?F.call(C):t.get(C)),h=(C,t,F)=>{if(t.has(C))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(C):t.set(C,F)},p$1=(C,t,F,E)=>(c$1(C,t,"write to private field"),E?E.call(C,F):t.set(C,F),F),u$3;let m$1=class extends k{constructor(t){super(t,!1),n$2(this,"options"),n$2(this,"cursor",0),h(this,u$3,void 0);const{options:F}=t;p$1(this,u$3,t.selectableGroups!==!1),this.options=Object.entries(F).flatMap(([E,B])=>[{value:E,group:!0,label:E},...B.map(A=>({...A,group:E}))]),this.value=[...t.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:E})=>E===t.cursorAt),l$2(this,u$3)?0:1),this.on("cursor",E=>{switch(E){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;const B=this.options[this.cursor]?.group===!0;!l$2(this,u$3)&&B&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;const B=this.options[this.cursor]?.group===!0;!l$2(this,u$3)&&B&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}getGroupItems(t){return this.options.filter(F=>F.group===t)}isGroupSelected(t){return this.getGroupItems(t).every(F=>this.value.includes(F.value))}toggleValue(){const t=this.options[this.cursor];if(t.group===!0){const F=t.value,E=this.getGroupItems(F);this.isGroupSelected(F)?this.value=this.value.filter(B=>E.findIndex(A=>A.value===B)===-1):this.value=[...this.value,...E.map(B=>B.value)],this.value=Array.from(new Set(this.value))}else{const F=this.value.includes(t.value);this.value=F?this.value.filter(E=>E!==t.value):[...this.value,t.value]}}};u$3=new WeakMap;var o$2=Object.defineProperty,a=(C,t,F)=>t in C?o$2(C,t,{enumerable:!0,configurable:!0,writable:!0,value:F}):C[t]=F,l$1=(C,t,F)=>(a(C,typeof t!="symbol"?t+"":t,F),F);let u$2=class extends k{constructor(t){super(t,!1),l$1(this,"options"),l$1(this,"cursor",0),this.options=t.options,this.value=[...t.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:F})=>F===t.cursorAt),0),this.on("key",F=>{F==="a"&&this.toggleAll()}),this.on("cursor",F=>{switch(F){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break;case"space":this.toggleValue();break}})}get _value(){return this.options[this.cursor].value}toggleAll(){const t=this.value.length===this.options.length;this.value=t?[]:this.options.map(F=>F.value)}toggleValue(){const t=this.value.includes(this._value);this.value=t?this.value.filter(F=>F!==this._value):[...this.value,this._value]}};var u$1=Object.defineProperty,n$1=(C,t,F)=>t in C?u$1(C,t,{enumerable:!0,configurable:!0,writable:!0,value:F}):C[t]=F,e=(C,t,F)=>(n$1(C,typeof t!="symbol"?t+"":t,F),F);class m extends k{constructor({mask:t,...F}){super(F),e(this,"valueWithCursor",""),e(this,"_mask","\u2022"),this._mask=t??"\u2022",this.on("finalize",()=>{this.valueWithCursor=this.masked}),this.on("value",()=>{if(this.cursor>=this.value.length)this.valueWithCursor=`${this.masked}${i__default.inverse(i__default.hidden("_"))}`;else{const E=this.masked.slice(0,this.cursor),B=this.masked.slice(this.cursor);this.valueWithCursor=`${E}${i__default.inverse(B[0])}${B.slice(1)}`}})}get cursor(){return this._cursor}get masked(){return this.value.replaceAll(/./g,this._mask)}}var o$1=Object.defineProperty,n=(C,t,F)=>t in C?o$1(C,t,{enumerable:!0,configurable:!0,writable:!0,value:F}):C[t]=F,r=(C,t,F)=>(n(C,typeof t!="symbol"?t+"":t,F),F);class u extends k{constructor(t){super(t,!1),r(this,"options"),r(this,"cursor",0),this.options=t.options,this.cursor=this.options.findIndex(({value:F})=>F===t.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on("cursor",F=>{switch(F){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}this.changeValue()})}get _value(){return this.options[this.cursor]}changeValue(){this.value=this._value.value}}var p=Object.defineProperty,l=(C,t,F)=>t in C?p(C,t,{enumerable:!0,configurable:!0,writable:!0,value:F}):C[t]=F,i=(C,t,F)=>(l(C,typeof t!="symbol"?t+"":t,F),F);class c extends k{constructor(t){super(t,!1),i(this,"options"),i(this,"cursor",0),this.options=t.options;const F=this.options.map(({value:[E]})=>E?.toLowerCase());this.cursor=Math.max(F.indexOf(t.initialValue),0),this.on("key",E=>{if(!F.includes(E))return;const B=this.options.find(({value:[A]})=>A?.toLowerCase()===E);B&&(this.value=B.value,this.state="submit",this.emit("submit"))})}}class o extends k{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return`${this.value}\u2588`;const t=this.value.slice(0,this.cursor),[F,...E]=this.value.slice(this.cursor);return`${t}${i__default.inverse(F)}${E.join("")}`}get cursor(){return this._cursor}constructor(t){super(t),this.on("finalize",()=>{this.value||(this.value=t.defaultValue)})}}exports.ConfirmPrompt=s,exports.GroupMultiSelectPrompt=m$1,exports.MultiSelectPrompt=u$2,exports.PasswordPrompt=m,exports.Prompt=k,exports.SelectKeyPrompt=c,exports.SelectPrompt=u,exports.TextPrompt=o,exports.block=block,exports.isCancel=isCancel,exports.updateSettings=updateSettings; //# sourceMappingURL=index.cjs.map diff --git a/node_modules/@clack/core/dist/index.cjs.map b/node_modules/@clack/core/dist/index.cjs.map index b0051d7..ca38d5b 100644 --- a/node_modules/@clack/core/dist/index.cjs.map +++ b/node_modules/@clack/core/dist/index.cjs.map @@ -1 +1 @@ -{"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js","../../../node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js","../../../node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js","../../../node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js","../../../node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js","../../../node_modules/.pnpm/ansi-styles@6.2.1/node_modules/ansi-styles/index.js","../../../node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js","../src/utils/settings.ts","../src/utils/string.ts","../src/utils/index.ts","../src/prompts/prompt.ts","../src/prompts/confirm.ts","../src/prompts/group-multiselect.ts","../src/prompts/multi-select.ts","../src/prompts/password.ts","../src/prompts/select.ts","../src/prompts/select-key.ts","../src/prompts/text.ts"],"sourcesContent":["export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","var eaw = {};\n\nif ('undefined' == typeof module) {\n window.eastasianwidth = eaw;\n} else {\n module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n var x = character.charCodeAt(0);\n var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n x &= 0x3FF;\n y &= 0x3FF;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if ((0x3000 == codePoint) ||\n (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n return 'F';\n }\n if ((0x20A9 == codePoint) ||\n (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n return 'H';\n }\n if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n (0x2329 <= codePoint && codePoint <= 0x232A) ||\n (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n (0x3001 <= codePoint && codePoint <= 0x303E) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n (0x3105 <= codePoint && codePoint <= 0x312D) ||\n (0x3131 <= codePoint && codePoint <= 0x318E) ||\n (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n return 'W';\n }\n if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n (0x00AC == codePoint) ||\n (0x00AF == codePoint) ||\n (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)) {\n return 'Na';\n }\n if ((0x00A1 == codePoint) ||\n (0x00A4 == codePoint) ||\n (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n (0x00AA == codePoint) ||\n (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n (0x00C6 == codePoint) ||\n (0x00D0 == codePoint) ||\n (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n (0x00E6 == codePoint) ||\n (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n (0x00F0 == codePoint) ||\n (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n (0x00FC == codePoint) ||\n (0x00FE == codePoint) ||\n (0x0101 == codePoint) ||\n (0x0111 == codePoint) ||\n (0x0113 == codePoint) ||\n (0x011B == codePoint) ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n (0x012B == codePoint) ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n (0x0138 == codePoint) ||\n (0x013F <= codePoint && codePoint <= 0x0142) ||\n (0x0144 == codePoint) ||\n (0x0148 <= codePoint && codePoint <= 0x014B) ||\n (0x014D == codePoint) ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n (0x016B == codePoint) ||\n (0x01CE == codePoint) ||\n (0x01D0 == codePoint) ||\n (0x01D2 == codePoint) ||\n (0x01D4 == codePoint) ||\n (0x01D6 == codePoint) ||\n (0x01D8 == codePoint) ||\n (0x01DA == codePoint) ||\n (0x01DC == codePoint) ||\n (0x0251 == codePoint) ||\n (0x0261 == codePoint) ||\n (0x02C4 == codePoint) ||\n (0x02C7 == codePoint) ||\n (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n (0x02CD == codePoint) ||\n (0x02D0 == codePoint) ||\n (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n (0x02DD == codePoint) ||\n (0x02DF == codePoint) ||\n (0x0300 <= codePoint && codePoint <= 0x036F) ||\n (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n (0x0401 == codePoint) ||\n (0x0410 <= codePoint && codePoint <= 0x044F) ||\n (0x0451 == codePoint) ||\n (0x2010 == codePoint) ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201C <= codePoint && codePoint <= 0x201D) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n (0x2030 == codePoint) ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n (0x2035 == codePoint) ||\n (0x203B == codePoint) ||\n (0x203E == codePoint) ||\n (0x2074 == codePoint) ||\n (0x207F == codePoint) ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n (0x20AC == codePoint) ||\n (0x2103 == codePoint) ||\n (0x2105 == codePoint) ||\n (0x2109 == codePoint) ||\n (0x2113 == codePoint) ||\n (0x2116 == codePoint) ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n (0x2126 == codePoint) ||\n (0x212B == codePoint) ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215B <= codePoint && codePoint <= 0x215E) ||\n (0x2160 <= codePoint && codePoint <= 0x216B) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n (0x2189 == codePoint) ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n (0x21D2 == codePoint) ||\n (0x21D4 == codePoint) ||\n (0x21E7 == codePoint) ||\n (0x2200 == codePoint) ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n (0x220B == codePoint) ||\n (0x220F == codePoint) ||\n (0x2211 == codePoint) ||\n (0x2215 == codePoint) ||\n (0x221A == codePoint) ||\n (0x221D <= codePoint && codePoint <= 0x2220) ||\n (0x2223 == codePoint) ||\n (0x2225 == codePoint) ||\n (0x2227 <= codePoint && codePoint <= 0x222C) ||\n (0x222E == codePoint) ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223C <= codePoint && codePoint <= 0x223D) ||\n (0x2248 == codePoint) ||\n (0x224C == codePoint) ||\n (0x2252 == codePoint) ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226A <= codePoint && codePoint <= 0x226B) ||\n (0x226E <= codePoint && codePoint <= 0x226F) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n (0x2295 == codePoint) ||\n (0x2299 == codePoint) ||\n (0x22A5 == codePoint) ||\n (0x22BF == codePoint) ||\n (0x2312 == codePoint) ||\n (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n (0x24EB <= codePoint && codePoint <= 0x254B) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258F) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n (0x25CB == codePoint) ||\n (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n (0x25EF == codePoint) ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n (0x2609 == codePoint) ||\n (0x260E <= codePoint && codePoint <= 0x260F) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n (0x261C == codePoint) ||\n (0x261E == codePoint) ||\n (0x2640 == codePoint) ||\n (0x2642 == codePoint) ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266A) ||\n (0x266C <= codePoint && codePoint <= 0x266D) ||\n (0x266F == codePoint) ||\n (0x269E <= codePoint && codePoint <= 0x269F) ||\n (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n (0x26E3 == codePoint) ||\n (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n (0x273D == codePoint) ||\n (0x2757 == codePoint) ||\n (0x2776 <= codePoint && codePoint <= 0x277F) ||\n (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n (0x3248 <= codePoint && codePoint <= 0x324F) ||\n (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n (0xFFFD == codePoint) ||\n (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n return 'A';\n }\n\n return 'N';\n};\n\neaw.characterLength = function(character) {\n var code = this.eastAsianWidth(character);\n if (code == 'F' || code == 'W' || code == 'A') {\n return 2;\n } else {\n return 1;\n }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n var characters = stringToArray(string);\n var len = 0;\n for (var i = 0; i < characters.length; i++) {\n len = len + this.characterLength(characters[i]);\n }\n return len;\n};\n\neaw.slice = function(text, start, end) {\n textLen = eaw.length(text)\n start = start ? start : 0;\n end = end ? end : 1;\n if (start < 0) {\n start = textLen + start;\n }\n if (end < 0) {\n end = textLen + end;\n }\n var result = '';\n var eawLen = 0;\n var chars = stringToArray(text);\n for (var i = 0; i < chars.length; i++) {\n var char = chars[i];\n var charLen = eaw.length(char);\n if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n if (eawLen + charLen <= end) {\n result += char;\n } else {\n break;\n }\n }\n eawLen += charLen;\n }\n return result;\n};\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n","const actions = ['up', 'down', 'left', 'right', 'space', 'enter', 'cancel'] as const;\nexport type Action = (typeof actions)[number];\n\n/** Global settings for Clack programs, stored in memory */\ninterface InternalClackSettings {\n\tactions: Set;\n\taliases: Map;\n}\n\nexport const settings: InternalClackSettings = {\n\tactions: new Set(actions),\n\taliases: new Map([\n\t\t// vim support\n\t\t['k', 'up'],\n\t\t['j', 'down'],\n\t\t['h', 'left'],\n\t\t['l', 'right'],\n\t\t['\\x03', 'cancel'],\n\t\t// opinionated defaults!\n\t\t['escape', 'cancel'],\n\t]),\n};\n\nexport interface ClackSettings {\n\t/**\n\t * Set custom global aliases for the default actions.\n\t * This will not overwrite existing aliases, it will only add new ones!\n\t *\n\t * @param aliases - An object that maps aliases to actions\n\t * @default { k: 'up', j: 'down', h: 'left', l: 'right', '\\x03': 'cancel', 'escape': 'cancel' }\n\t */\n\taliases: Record;\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\tfor (const _key in updates) {\n\t\tconst key = _key as keyof ClackSettings;\n\t\tif (!Object.hasOwn(updates, key)) continue;\n\t\tconst value = updates[key];\n\n\t\tswitch (key) {\n\t\t\tcase 'aliases': {\n\t\t\t\tfor (const alias in value) {\n\t\t\t\t\tif (!Object.hasOwn(value, alias)) continue;\n\t\t\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\t\t\tsettings.aliases.set(alias, value[alias]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Check if a key is an alias for a default action\n * @param key - The raw key which might match to an action\n * @param action - The action to match\n * @returns boolean\n */\nexport function isActionKey(key: string | Array, action: Action) {\n\tif (typeof key === 'string') {\n\t\treturn settings.aliases.get(key) === action;\n\t}\n\n\tfor (const value of key) {\n\t\tif (value === undefined) continue;\n\t\tif (isActionKey(value, action)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n","export function diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < Math.max(aLines.length, bLines.length); i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn diff;\n}\n","import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings';\n\nexport * from './string';\nexport * from './settings';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport const CANCEL_SYMBOL = Symbol('clack:cancel');\n\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === CANCEL_SYMBOL;\n}\n\nexport function setRawMode(input: Readable, value: boolean) {\n\tconst i = input as typeof stdin;\n\n\tif (i.isTTY) i.setRawMode(value);\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n} = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\tif (input.isTTY) input.setRawMode(true);\n\n\tconst clear = (data: Buffer, { name, sequence }: Key) => {\n\t\tconst str = String(data);\n\t\tif (isActionKey([str, name, sequence], 'cancel')) {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tconst dx = name === 'return' ? 0 : -1;\n\t\tconst dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/natemoo-re/clack/issues/176\n\t\tif (input.isTTY && !isWindows) input.setRawMode(false);\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n","import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable, Writable } from 'node:stream';\nimport { WriteStream } from 'node:tty';\nimport { cursor, erase } from 'sisteransi';\nimport wrap from 'wrap-ansi';\n\nimport { CANCEL_SYMBOL, diffLines, isActionKey, setRawMode, settings } from '../utils';\n\nimport type { ClackEvents, ClackState } from '../types';\nimport type { Action } from '../utils';\n\nexport interface PromptOptions {\n\trender(this: Omit): string | undefined;\n\tplaceholder?: string;\n\tinitialValue?: any;\n\tvalidate?: ((value: any) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit) => string | undefined;\n\tprivate _track = false;\n\tprivate _prevFrame = '';\n\tprivate _subscribers = new Map any; once?: boolean }[]>();\n\tprotected _cursor = 0;\n\n\tpublic state: ClackState = 'initial';\n\tpublic error = '';\n\tpublic value: any;\n\n\tconstructor(options: PromptOptions, trackValue = true) {\n\t\tconst { input = stdin, output = stdout, render, signal, ...opts } = options;\n\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\t\tthis._abortSignal = signal;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\t/**\n\t * Unsubscribe all listeners\n\t */\n\tprotected unsubscribe() {\n\t\tthis._subscribers.clear();\n\t}\n\n\t/**\n\t * Set a subscriber with opts\n\t * @param event - The event name\n\t */\n\tprivate setSubscriber(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents[T]; once?: boolean }\n\t) {\n\t\tconst params = this._subscribers.get(event) ?? [];\n\t\tparams.push(opts);\n\t\tthis._subscribers.set(event, params);\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic on(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb });\n\t}\n\n\t/**\n\t * Subscribe to an event once\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic once(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb, once: true });\n\t}\n\n\t/**\n\t * Emit an event with data\n\t * @param event - The event name\n\t * @param data - The data to pass to the callback\n\t */\n\tpublic emit(event: T, ...data: Parameters) {\n\t\tconst cbs = this._subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\n\tpublic prompt() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (this._abortSignal) {\n\t\t\t\tif (this._abortSignal.aborted) {\n\t\t\t\t\tthis.state = 'cancel';\n\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn resolve(CANCEL_SYMBOL);\n\t\t\t\t}\n\n\t\t\t\tthis._abortSignal.addEventListener(\n\t\t\t\t\t'abort',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.state = 'cancel';\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst sink = new WriteStream(0);\n\t\t\tsink._write = (chunk, encoding, done) => {\n\t\t\t\tif (this._track) {\n\t\t\t\t\tthis.value = this.rl?.line.replace(/\\t/g, '');\n\t\t\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\t\t\tthis.emit('value', this.value);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t};\n\t\t\tthis.input.pipe(sink);\n\n\t\t\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\n\t\t\t\toutput: sink,\n\t\t\t\ttabSize: 2,\n\t\t\t\tprompt: '',\n\t\t\t\tescapeCodeTimeout: 50,\n\t\t\t});\n\t\t\treadline.emitKeypressEvents(this.input, this.rl);\n\t\t\tthis.rl.prompt();\n\t\t\tif (this.opts.initialValue !== undefined && this._track) {\n\t\t\t\tthis.rl.write(this.opts.initialValue);\n\t\t\t}\n\n\t\t\tthis.input.on('keypress', this.onKeypress);\n\t\t\tsetRawMode(this.input, true);\n\t\t\tthis.output.on('resize', this.render);\n\n\t\t\tthis.render();\n\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(CANCEL_SYMBOL);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate onKeypress(char: string, key?: Key) {\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name) {\n\t\t\tif (!this._track && settings.aliases.has(key.name)) {\n\t\t\t\tthis.emit('cursor', settings.aliases.get(key.name));\n\t\t\t}\n\t\t\tif (settings.actions.has(key.name as Action)) {\n\t\t\t\tthis.emit('cursor', key.name as Action);\n\t\t\t}\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\t\tif (char === '\\t' && this.opts.placeholder) {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\t\t}\n\t\tif (char) {\n\t\t\tthis.emit('key', char.toLowerCase());\n\t\t}\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem instanceof Error ? problem.message : problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl?.write(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\n\t\tif (isActionKey([char, key?.name, key?.sequence], 'cancel')) {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl?.close();\n\t\tthis.rl = undefined;\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrap(this._prevFrame, process.stdout.columns, { hard: true }).split('\\n').length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrap(this._render(this) ?? '', process.stdout.columns, { hard: true });\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tthis.restoreCursor();\n\t\t\t// If a single line has changed, only update that line\n\t\t\tif (diff && diff?.length === 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\treturn;\n\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t}\n\t\t\tif (diff && diff?.length > 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.down());\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n","import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface ConfirmOptions extends PromptOptions {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\nexport default class ConfirmPrompt extends Prompt {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = !!opts.initialValue;\n\n\t\tthis.on('value', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface GroupMultiSelectOptions\n\textends PromptOptions> {\n\toptions: Record;\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class GroupMultiSelectPrompt extends Prompt {\n\toptions: (T & { group: string | boolean })[];\n\tcursor = 0;\n\n\tgetGroupItems(group: string): T[] {\n\t\treturn this.options.filter((o) => o.group === group);\n\t}\n\n\tisGroupSelected(group: string) {\n\t\tconst items = this.getGroupItems(group);\n\t\treturn items.every((i) => this.value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (item.group === true) {\n\t\t\tconst group = item.value;\n\t\t\tconst groupedItems = this.getGroupItems(group);\n\t\t\tif (this.isGroupSelected(group)) {\n\t\t\t\tthis.value = this.value.filter(\n\t\t\t\t\t(v: string) => groupedItems.findIndex((i) => i.value === v) === -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.value = [...this.value, ...groupedItems.map((i) => i.value)];\n\t\t\t}\n\t\t\tthis.value = Array.from(new Set(this.value));\n\t\t} else {\n\t\t\tconst selected = this.value.includes(item.value);\n\t\t\tthis.value = selected\n\t\t\t\t? this.value.filter((v: T['value']) => v !== item.value)\n\t\t\t\t: [...this.value, item.value];\n\t\t}\n\t}\n\n\tconstructor(opts: GroupMultiSelectOptions) {\n\t\tsuper(opts, false);\n\t\tconst { options } = opts;\n\t\tthis.options = Object.entries(options).flatMap(([key, option]) => [\n\t\t\t{ value: key, group: true, label: key },\n\t\t\t...option.map((opt) => ({ ...opt, group: key })),\n\t\t]) as any;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface MultiSelectOptions extends PromptOptions> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate toggleAll() {\n\t\tconst allSelected = this.value.length === this.options.length;\n\t\tthis.value = allSelected ? [] : this.options.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value: T['value']) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface PasswordOptions extends PromptOptions {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.value.replaceAll(/./g, this._mask);\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\n\t\tthis.on('finalize', () => {\n\t\t\tthis.valueWithCursor = this.masked;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.masked.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.masked.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectOptions extends PromptOptions> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._value.value;\n\t}\n\n\tconstructor(opts: SelectOptions) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.cursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tif (this.cursor === -1) this.cursor = 0;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectKeyOptions extends PromptOptions> {\n\toptions: T[];\n}\nexport default class SelectKeyPrompt extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tconstructor(opts: SelectKeyOptions) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tconst keys = this.options.map(({ value: [initial] }) => initial?.toLowerCase());\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key) => {\n\t\t\tif (!keys.includes(key)) return;\n\t\t\tconst value = this.options.find(({ value: [initial] }) => initial?.toLowerCase() === key);\n\t\t\tif (value) {\n\t\t\t\tthis.value = value.value;\n\t\t\t\tthis.state = 'submit';\n\t\t\t\tthis.emit('submit');\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\nexport interface TextOptions extends PromptOptions {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt {\n\tget valueWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.value;\n\t\t}\n\t\tif (this.cursor >= this.value.length) {\n\t\t\treturn `${this.value}█`;\n\t\t}\n\t\tconst s1 = this.value.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = this.value.slice(this.cursor);\n\t\treturn `${s1}${color.inverse(s2)}${s3.join('')}`;\n\t}\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper(opts);\n\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t});\n\t}\n}\n"],"names":["onlyFirst","pattern","string","eaw","module","character","x","y","codePoint","code","stringToArray","characters","len","i","text","start","end","result","eawLen","chars","char","charLen","options","emojiRegex","ambiguousCharacterWidth","width","offset","red","green","blue","codes","groupName","group","styleName","style","hex","matches","colorString","integer","remainder","value","uri","rows","word","columns","isInsideEscape","isInsideLinkEscape","visible","index","characterLength","words","last","returnValue","escapeCode","escapeUrl","lengths","rowLength","remainingColumns","breaksStartingThisLine","row","pre","groups","line","actions","updates","_key","key","alias","action","a","b","aLines","bLines","diff","isWindows","input","stdin","output","stdout","overwrite","hideCursor","rl","readline","clear","data","name","sequence","str","isActionKey","cursor","dx","dy","e","s","Prompt","trackValue","__publicField","render","signal","opts","event","params","cb","cbs","cleanup","subscriber","resolve","reject","CANCEL_SYMBOL","sink","WriteStream","chunk","encoding","done","setRawMode","settings","problem","lines","wrap","frame","diffLines","diffLine","erase","newLines","ConfirmPrompt","confirm","n","r","l","GroupMultiSelectPrompt","option","opt","o","item","groupedItems","v","selected","t","allSelected","PasswordPrompt","mask","color","s1","s2","SelectPrompt","SelectKeyPrompt","keys","initial","TextPrompt","s3"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]} \ No newline at end of file +{"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js","../../../node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js","../../../node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js","../../../node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js","../../../node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js","../../../node_modules/.pnpm/ansi-styles@6.2.1/node_modules/ansi-styles/index.js","../../../node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js","../src/utils/settings.ts","../src/utils/string.ts","../src/utils/index.ts","../src/prompts/prompt.ts","../src/prompts/confirm.ts","../src/prompts/group-multiselect.ts","../src/prompts/multi-select.ts","../src/prompts/password.ts","../src/prompts/select.ts","../src/prompts/select-key.ts","../src/prompts/text.ts"],"sourcesContent":["export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","var eaw = {};\n\nif ('undefined' == typeof module) {\n window.eastasianwidth = eaw;\n} else {\n module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n var x = character.charCodeAt(0);\n var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n x &= 0x3FF;\n y &= 0x3FF;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if ((0x3000 == codePoint) ||\n (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n return 'F';\n }\n if ((0x20A9 == codePoint) ||\n (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n return 'H';\n }\n if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n (0x2329 <= codePoint && codePoint <= 0x232A) ||\n (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n (0x3001 <= codePoint && codePoint <= 0x303E) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n (0x3105 <= codePoint && codePoint <= 0x312D) ||\n (0x3131 <= codePoint && codePoint <= 0x318E) ||\n (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n return 'W';\n }\n if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n (0x00AC == codePoint) ||\n (0x00AF == codePoint) ||\n (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)) {\n return 'Na';\n }\n if ((0x00A1 == codePoint) ||\n (0x00A4 == codePoint) ||\n (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n (0x00AA == codePoint) ||\n (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n (0x00C6 == codePoint) ||\n (0x00D0 == codePoint) ||\n (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n (0x00E6 == codePoint) ||\n (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n (0x00F0 == codePoint) ||\n (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n (0x00FC == codePoint) ||\n (0x00FE == codePoint) ||\n (0x0101 == codePoint) ||\n (0x0111 == codePoint) ||\n (0x0113 == codePoint) ||\n (0x011B == codePoint) ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n (0x012B == codePoint) ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n (0x0138 == codePoint) ||\n (0x013F <= codePoint && codePoint <= 0x0142) ||\n (0x0144 == codePoint) ||\n (0x0148 <= codePoint && codePoint <= 0x014B) ||\n (0x014D == codePoint) ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n (0x016B == codePoint) ||\n (0x01CE == codePoint) ||\n (0x01D0 == codePoint) ||\n (0x01D2 == codePoint) ||\n (0x01D4 == codePoint) ||\n (0x01D6 == codePoint) ||\n (0x01D8 == codePoint) ||\n (0x01DA == codePoint) ||\n (0x01DC == codePoint) ||\n (0x0251 == codePoint) ||\n (0x0261 == codePoint) ||\n (0x02C4 == codePoint) ||\n (0x02C7 == codePoint) ||\n (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n (0x02CD == codePoint) ||\n (0x02D0 == codePoint) ||\n (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n (0x02DD == codePoint) ||\n (0x02DF == codePoint) ||\n (0x0300 <= codePoint && codePoint <= 0x036F) ||\n (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n (0x0401 == codePoint) ||\n (0x0410 <= codePoint && codePoint <= 0x044F) ||\n (0x0451 == codePoint) ||\n (0x2010 == codePoint) ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201C <= codePoint && codePoint <= 0x201D) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n (0x2030 == codePoint) ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n (0x2035 == codePoint) ||\n (0x203B == codePoint) ||\n (0x203E == codePoint) ||\n (0x2074 == codePoint) ||\n (0x207F == codePoint) ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n (0x20AC == codePoint) ||\n (0x2103 == codePoint) ||\n (0x2105 == codePoint) ||\n (0x2109 == codePoint) ||\n (0x2113 == codePoint) ||\n (0x2116 == codePoint) ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n (0x2126 == codePoint) ||\n (0x212B == codePoint) ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215B <= codePoint && codePoint <= 0x215E) ||\n (0x2160 <= codePoint && codePoint <= 0x216B) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n (0x2189 == codePoint) ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n (0x21D2 == codePoint) ||\n (0x21D4 == codePoint) ||\n (0x21E7 == codePoint) ||\n (0x2200 == codePoint) ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n (0x220B == codePoint) ||\n (0x220F == codePoint) ||\n (0x2211 == codePoint) ||\n (0x2215 == codePoint) ||\n (0x221A == codePoint) ||\n (0x221D <= codePoint && codePoint <= 0x2220) ||\n (0x2223 == codePoint) ||\n (0x2225 == codePoint) ||\n (0x2227 <= codePoint && codePoint <= 0x222C) ||\n (0x222E == codePoint) ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223C <= codePoint && codePoint <= 0x223D) ||\n (0x2248 == codePoint) ||\n (0x224C == codePoint) ||\n (0x2252 == codePoint) ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226A <= codePoint && codePoint <= 0x226B) ||\n (0x226E <= codePoint && codePoint <= 0x226F) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n (0x2295 == codePoint) ||\n (0x2299 == codePoint) ||\n (0x22A5 == codePoint) ||\n (0x22BF == codePoint) ||\n (0x2312 == codePoint) ||\n (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n (0x24EB <= codePoint && codePoint <= 0x254B) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258F) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n (0x25CB == codePoint) ||\n (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n (0x25EF == codePoint) ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n (0x2609 == codePoint) ||\n (0x260E <= codePoint && codePoint <= 0x260F) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n (0x261C == codePoint) ||\n (0x261E == codePoint) ||\n (0x2640 == codePoint) ||\n (0x2642 == codePoint) ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266A) ||\n (0x266C <= codePoint && codePoint <= 0x266D) ||\n (0x266F == codePoint) ||\n (0x269E <= codePoint && codePoint <= 0x269F) ||\n (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n (0x26E3 == codePoint) ||\n (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n (0x273D == codePoint) ||\n (0x2757 == codePoint) ||\n (0x2776 <= codePoint && codePoint <= 0x277F) ||\n (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n (0x3248 <= codePoint && codePoint <= 0x324F) ||\n (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n (0xFFFD == codePoint) ||\n (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n return 'A';\n }\n\n return 'N';\n};\n\neaw.characterLength = function(character) {\n var code = this.eastAsianWidth(character);\n if (code == 'F' || code == 'W' || code == 'A') {\n return 2;\n } else {\n return 1;\n }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n var characters = stringToArray(string);\n var len = 0;\n for (var i = 0; i < characters.length; i++) {\n len = len + this.characterLength(characters[i]);\n }\n return len;\n};\n\neaw.slice = function(text, start, end) {\n textLen = eaw.length(text)\n start = start ? start : 0;\n end = end ? end : 1;\n if (start < 0) {\n start = textLen + start;\n }\n if (end < 0) {\n end = textLen + end;\n }\n var result = '';\n var eawLen = 0;\n var chars = stringToArray(text);\n for (var i = 0; i < chars.length; i++) {\n var char = chars[i];\n var charLen = eaw.length(char);\n if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n if (eawLen + charLen <= end) {\n result += char;\n } else {\n break;\n }\n }\n eawLen += charLen;\n }\n return result;\n};\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n","const actions = ['up', 'down', 'left', 'right', 'space', 'enter', 'cancel'] as const;\nexport type Action = (typeof actions)[number];\n\n/** Global settings for Clack programs, stored in memory */\ninterface InternalClackSettings {\n\tactions: Set;\n\taliases: Map;\n}\n\nexport const settings: InternalClackSettings = {\n\tactions: new Set(actions),\n\taliases: new Map([\n\t\t// vim support\n\t\t['k', 'up'],\n\t\t['j', 'down'],\n\t\t['h', 'left'],\n\t\t['l', 'right'],\n\t\t['\\x03', 'cancel'],\n\t\t// opinionated defaults!\n\t\t['escape', 'cancel'],\n\t]),\n};\n\nexport interface ClackSettings {\n\t/**\n\t * Set custom global aliases for the default actions.\n\t * This will not overwrite existing aliases, it will only add new ones!\n\t *\n\t * @param aliases - An object that maps aliases to actions\n\t * @default { k: 'up', j: 'down', h: 'left', l: 'right', '\\x03': 'cancel', 'escape': 'cancel' }\n\t */\n\taliases: Record;\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\tfor (const _key in updates) {\n\t\tconst key = _key as keyof ClackSettings;\n\t\tif (!Object.hasOwn(updates, key)) continue;\n\t\tconst value = updates[key];\n\n\t\tswitch (key) {\n\t\t\tcase 'aliases': {\n\t\t\t\tfor (const alias in value) {\n\t\t\t\t\tif (!Object.hasOwn(value, alias)) continue;\n\t\t\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\t\t\tsettings.aliases.set(alias, value[alias]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Check if a key is an alias for a default action\n * @param key - The raw key which might match to an action\n * @param action - The action to match\n * @returns boolean\n */\nexport function isActionKey(key: string | Array, action: Action) {\n\tif (typeof key === 'string') {\n\t\treturn settings.aliases.get(key) === action;\n\t}\n\n\tfor (const value of key) {\n\t\tif (value === undefined) continue;\n\t\tif (isActionKey(value, action)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n","export function diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < Math.max(aLines.length, bLines.length); i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn diff;\n}\n","import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings';\n\nexport * from './string';\nexport * from './settings';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport const CANCEL_SYMBOL = Symbol('clack:cancel');\n\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === CANCEL_SYMBOL;\n}\n\nexport function setRawMode(input: Readable, value: boolean) {\n\tconst i = input as typeof stdin;\n\n\tif (i.isTTY) i.setRawMode(value);\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n} = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\tif (input.isTTY) input.setRawMode(true);\n\n\tconst clear = (data: Buffer, { name, sequence }: Key) => {\n\t\tconst str = String(data);\n\t\tif (isActionKey([str, name, sequence], 'cancel')) {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tconst dx = name === 'return' ? 0 : -1;\n\t\tconst dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/bombshell-dev/clack/issues/176\n\t\tif (input.isTTY && !isWindows) input.setRawMode(false);\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n","import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { Writable } from 'node:stream';\nimport { cursor, erase } from 'sisteransi';\nimport wrap from 'wrap-ansi';\n\nimport { CANCEL_SYMBOL, diffLines, isActionKey, setRawMode, settings } from '../utils';\n\nimport type { ClackEvents, ClackState } from '../types';\nimport type { Action } from '../utils';\n\nexport interface PromptOptions {\n\trender(this: Omit): string | undefined;\n\tplaceholder?: string;\n\tinitialValue?: any;\n\tvalidate?: ((value: any) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit) => string | undefined;\n\tprivate _track = false;\n\tprivate _prevFrame = '';\n\tprivate _subscribers = new Map any; once?: boolean }[]>();\n\tprotected _cursor = 0;\n\n\tpublic state: ClackState = 'initial';\n\tpublic error = '';\n\tpublic value: any;\n\n\tconstructor(options: PromptOptions, trackValue = true) {\n\t\tconst { input = stdin, output = stdout, render, signal, ...opts } = options;\n\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\t\tthis._abortSignal = signal;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\t/**\n\t * Unsubscribe all listeners\n\t */\n\tprotected unsubscribe() {\n\t\tthis._subscribers.clear();\n\t}\n\n\t/**\n\t * Set a subscriber with opts\n\t * @param event - The event name\n\t */\n\tprivate setSubscriber(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents[T]; once?: boolean }\n\t) {\n\t\tconst params = this._subscribers.get(event) ?? [];\n\t\tparams.push(opts);\n\t\tthis._subscribers.set(event, params);\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic on(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb });\n\t}\n\n\t/**\n\t * Subscribe to an event once\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic once(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb, once: true });\n\t}\n\n\t/**\n\t * Emit an event with data\n\t * @param event - The event name\n\t * @param data - The data to pass to the callback\n\t */\n\tpublic emit(event: T, ...data: Parameters) {\n\t\tconst cbs = this._subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\n\tpublic prompt() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (this._abortSignal) {\n\t\t\t\tif (this._abortSignal.aborted) {\n\t\t\t\t\tthis.state = 'cancel';\n\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn resolve(CANCEL_SYMBOL);\n\t\t\t\t}\n\n\t\t\t\tthis._abortSignal.addEventListener(\n\t\t\t\t\t'abort',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.state = 'cancel';\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst sink = new Writable();\n\t\t\tsink._write = (chunk, encoding, done) => {\n\t\t\t\tif (this._track) {\n\t\t\t\t\tthis.value = this.rl?.line.replace(/\\t/g, '');\n\t\t\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\t\t\tthis.emit('value', this.value);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t};\n\t\t\tthis.input.pipe(sink);\n\n\t\t\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\n\t\t\t\toutput: sink,\n\t\t\t\ttabSize: 2,\n\t\t\t\tprompt: '',\n\t\t\t\tescapeCodeTimeout: 50,\n\t\t\t\tterminal: true,\n\t\t\t});\n\t\t\treadline.emitKeypressEvents(this.input, this.rl);\n\t\t\tthis.rl.prompt();\n\t\t\tif (this.opts.initialValue !== undefined && this._track) {\n\t\t\t\tthis.rl.write(this.opts.initialValue);\n\t\t\t}\n\n\t\t\tthis.input.on('keypress', this.onKeypress);\n\t\t\tsetRawMode(this.input, true);\n\t\t\tthis.output.on('resize', this.render);\n\n\t\t\tthis.render();\n\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(CANCEL_SYMBOL);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate onKeypress(char: string, key?: Key) {\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name) {\n\t\t\tif (!this._track && settings.aliases.has(key.name)) {\n\t\t\t\tthis.emit('cursor', settings.aliases.get(key.name));\n\t\t\t}\n\t\t\tif (settings.actions.has(key.name as Action)) {\n\t\t\t\tthis.emit('cursor', key.name as Action);\n\t\t\t}\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\t\tif (char === '\\t' && this.opts.placeholder) {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\t\t}\n\t\tif (char) {\n\t\t\tthis.emit('key', char.toLowerCase());\n\t\t}\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (!this.value && this.opts.placeholder) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem instanceof Error ? problem.message : problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl?.write(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\n\t\tif (isActionKey([char, key?.name, key?.sequence], 'cancel')) {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl?.close();\n\t\tthis.rl = undefined;\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrap(this._prevFrame, process.stdout.columns, { hard: true }).split('\\n').length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrap(this._render(this) ?? '', process.stdout.columns, { hard: true });\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tthis.restoreCursor();\n\t\t\t// If a single line has changed, only update that line\n\t\t\tif (diff && diff?.length === 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\treturn;\n\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t}\n\t\t\tif (diff && diff?.length > 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.down());\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n","import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface ConfirmOptions extends PromptOptions {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\nexport default class ConfirmPrompt extends Prompt {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = !!opts.initialValue;\n\n\t\tthis.on('value', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface GroupMultiSelectOptions\n\textends PromptOptions> {\n\toptions: Record;\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n\tselectableGroups?: boolean;\n}\nexport default class GroupMultiSelectPrompt extends Prompt {\n\toptions: (T & { group: string | boolean })[];\n\tcursor = 0;\n\t#selectableGroups: boolean;\n\n\tgetGroupItems(group: string): T[] {\n\t\treturn this.options.filter((o) => o.group === group);\n\t}\n\n\tisGroupSelected(group: string) {\n\t\tconst items = this.getGroupItems(group);\n\t\treturn items.every((i) => this.value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (item.group === true) {\n\t\t\tconst group = item.value;\n\t\t\tconst groupedItems = this.getGroupItems(group);\n\t\t\tif (this.isGroupSelected(group)) {\n\t\t\t\tthis.value = this.value.filter(\n\t\t\t\t\t(v: string) => groupedItems.findIndex((i) => i.value === v) === -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.value = [...this.value, ...groupedItems.map((i) => i.value)];\n\t\t\t}\n\t\t\tthis.value = Array.from(new Set(this.value));\n\t\t} else {\n\t\t\tconst selected = this.value.includes(item.value);\n\t\t\tthis.value = selected\n\t\t\t\t? this.value.filter((v: T['value']) => v !== item.value)\n\t\t\t\t: [...this.value, item.value];\n\t\t}\n\t}\n\n\tconstructor(opts: GroupMultiSelectOptions) {\n\t\tsuper(opts, false);\n\t\tconst { options } = opts;\n\t\tthis.#selectableGroups = opts.selectableGroups !== false;\n\t\tthis.options = Object.entries(options).flatMap(([key, option]) => [\n\t\t\t{ value: key, group: true, label: key },\n\t\t\t...option.map((opt) => ({ ...opt, group: key })),\n\t\t]) as any;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\tthis.#selectableGroups ? 0 : 1\n\t\t);\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up': {\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right': {\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface MultiSelectOptions extends PromptOptions> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate toggleAll() {\n\t\tconst allSelected = this.value.length === this.options.length;\n\t\tthis.value = allSelected ? [] : this.options.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value: T['value']) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface PasswordOptions extends PromptOptions {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.value.replaceAll(/./g, this._mask);\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\n\t\tthis.on('finalize', () => {\n\t\t\tthis.valueWithCursor = this.masked;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.masked.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.masked.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectOptions extends PromptOptions> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._value.value;\n\t}\n\n\tconstructor(opts: SelectOptions) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.cursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tif (this.cursor === -1) this.cursor = 0;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectKeyOptions extends PromptOptions> {\n\toptions: T[];\n}\nexport default class SelectKeyPrompt extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tconstructor(opts: SelectKeyOptions) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tconst keys = this.options.map(({ value: [initial] }) => initial?.toLowerCase());\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key) => {\n\t\t\tif (!keys.includes(key)) return;\n\t\t\tconst value = this.options.find(({ value: [initial] }) => initial?.toLowerCase() === key);\n\t\t\tif (value) {\n\t\t\t\tthis.value = value.value;\n\t\t\t\tthis.state = 'submit';\n\t\t\t\tthis.emit('submit');\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\nexport interface TextOptions extends PromptOptions {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt {\n\tget valueWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.value;\n\t\t}\n\t\tif (this.cursor >= this.value.length) {\n\t\t\treturn `${this.value}█`;\n\t\t}\n\t\tconst s1 = this.value.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = this.value.slice(this.cursor);\n\t\treturn `${s1}${color.inverse(s2)}${s3.join('')}`;\n\t}\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper(opts);\n\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t});\n\t}\n}\n"],"names":["onlyFirst","pattern","string","eaw","module","character","x","y","codePoint","code","stringToArray","characters","len","i","text","start","end","result","eawLen","chars","char","charLen","options","emojiRegex","ambiguousCharacterWidth","width","offset","red","green","blue","codes","groupName","group","styleName","style","hex","matches","colorString","integer","remainder","value","uri","rows","word","columns","isInsideEscape","isInsideLinkEscape","visible","index","characterLength","words","last","returnValue","escapeCode","escapeUrl","lengths","rowLength","remainingColumns","breaksStartingThisLine","row","pre","groups","line","actions","updates","_key","key","alias","action","a","b","aLines","bLines","diff","isWindows","input","stdin","output","stdout","overwrite","hideCursor","rl","readline","clear","data","name","sequence","str","isActionKey","cursor","dx","dy","v","e","s","Prompt","trackValue","__publicField","render","signal","opts","event","params","cb","cbs","cleanup","subscriber","resolve","reject","CANCEL_SYMBOL","sink","Writable","chunk","encoding","done","setRawMode","settings","problem","lines","wrap","frame","diffLines","diffLine","erase","newLines","ConfirmPrompt","confirm","t","n","c","l","p","_selectableGroups","__privateAdd","__privateSet","option","opt","__privateGet","currentIsGroup","o","item","groupedItems","selected","allSelected","PasswordPrompt","mask","color","s1","s2","SelectPrompt","SelectKeyPrompt","keys","initial","TextPrompt","s3"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]} \ No newline at end of file diff --git a/node_modules/@clack/core/dist/index.d.cts b/node_modules/@clack/core/dist/index.d.cts index c123716..e4e326b 100644 --- a/node_modules/@clack/core/dist/index.d.cts +++ b/node_modules/@clack/core/dist/index.d.cts @@ -111,10 +111,12 @@ interface GroupMultiSelectOptions extends Prompt { + #private; options: (T & { group: string | boolean; })[]; diff --git a/node_modules/@clack/core/dist/index.d.mts b/node_modules/@clack/core/dist/index.d.mts index c123716..e4e326b 100644 --- a/node_modules/@clack/core/dist/index.d.mts +++ b/node_modules/@clack/core/dist/index.d.mts @@ -111,10 +111,12 @@ interface GroupMultiSelectOptions extends Prompt { + #private; options: (T & { group: string | boolean; })[]; diff --git a/node_modules/@clack/core/dist/index.d.ts b/node_modules/@clack/core/dist/index.d.ts index c123716..e4e326b 100644 --- a/node_modules/@clack/core/dist/index.d.ts +++ b/node_modules/@clack/core/dist/index.d.ts @@ -111,10 +111,12 @@ interface GroupMultiSelectOptions extends Prompt { + #private; options: (T & { group: string | boolean; })[]; diff --git a/node_modules/@clack/core/dist/index.mjs b/node_modules/@clack/core/dist/index.mjs index 978dc06..891d5c3 100644 --- a/node_modules/@clack/core/dist/index.mjs +++ b/node_modules/@clack/core/dist/index.mjs @@ -1,15 +1,15 @@ -import{cursor as l,erase as b}from"sisteransi";import{stdin as $,stdout as j}from"node:process";import*as f from"node:readline";import M from"node:readline";import{WriteStream as U}from"node:tty";import g from"picocolors";function J({onlyFirst:t=!1}={}){const F=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(F,t?void 0:"g")}const Q=J();function T(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(Q,"")}function O(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var P={exports:{}};(function(t){var u={};t.exports=u,u.eastAsianWidth=function(e){var s=e.charCodeAt(0),i=e.length==2?e.charCodeAt(1):0,D=s;return 55296<=s&&s<=56319&&56320<=i&&i<=57343&&(s&=1023,i&=1023,D=s<<10|i,D+=65536),D==12288||65281<=D&&D<=65376||65504<=D&&D<=65510?"F":D==8361||65377<=D&&D<=65470||65474<=D&&D<=65479||65482<=D&&D<=65487||65490<=D&&D<=65495||65498<=D&&D<=65500||65512<=D&&D<=65518?"H":4352<=D&&D<=4447||4515<=D&&D<=4519||4602<=D&&D<=4607||9001<=D&&D<=9002||11904<=D&&D<=11929||11931<=D&&D<=12019||12032<=D&&D<=12245||12272<=D&&D<=12283||12289<=D&&D<=12350||12353<=D&&D<=12438||12441<=D&&D<=12543||12549<=D&&D<=12589||12593<=D&&D<=12686||12688<=D&&D<=12730||12736<=D&&D<=12771||12784<=D&&D<=12830||12832<=D&&D<=12871||12880<=D&&D<=13054||13056<=D&&D<=19903||19968<=D&&D<=42124||42128<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||55216<=D&&D<=55238||55243<=D&&D<=55291||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65106||65108<=D&&D<=65126||65128<=D&&D<=65131||110592<=D&&D<=110593||127488<=D&&D<=127490||127504<=D&&D<=127546||127552<=D&&D<=127560||127568<=D&&D<=127569||131072<=D&&D<=194367||177984<=D&&D<=196605||196608<=D&&D<=262141?"W":32<=D&&D<=126||162<=D&&D<=163||165<=D&&D<=166||D==172||D==175||10214<=D&&D<=10221||10629<=D&&D<=10630?"Na":D==161||D==164||167<=D&&D<=168||D==170||173<=D&&D<=174||176<=D&&D<=180||182<=D&&D<=186||188<=D&&D<=191||D==198||D==208||215<=D&&D<=216||222<=D&&D<=225||D==230||232<=D&&D<=234||236<=D&&D<=237||D==240||242<=D&&D<=243||247<=D&&D<=250||D==252||D==254||D==257||D==273||D==275||D==283||294<=D&&D<=295||D==299||305<=D&&D<=307||D==312||319<=D&&D<=322||D==324||328<=D&&D<=331||D==333||338<=D&&D<=339||358<=D&&D<=359||D==363||D==462||D==464||D==466||D==468||D==470||D==472||D==474||D==476||D==593||D==609||D==708||D==711||713<=D&&D<=715||D==717||D==720||728<=D&&D<=731||D==733||D==735||768<=D&&D<=879||913<=D&&D<=929||931<=D&&D<=937||945<=D&&D<=961||963<=D&&D<=969||D==1025||1040<=D&&D<=1103||D==1105||D==8208||8211<=D&&D<=8214||8216<=D&&D<=8217||8220<=D&&D<=8221||8224<=D&&D<=8226||8228<=D&&D<=8231||D==8240||8242<=D&&D<=8243||D==8245||D==8251||D==8254||D==8308||D==8319||8321<=D&&D<=8324||D==8364||D==8451||D==8453||D==8457||D==8467||D==8470||8481<=D&&D<=8482||D==8486||D==8491||8531<=D&&D<=8532||8539<=D&&D<=8542||8544<=D&&D<=8555||8560<=D&&D<=8569||D==8585||8592<=D&&D<=8601||8632<=D&&D<=8633||D==8658||D==8660||D==8679||D==8704||8706<=D&&D<=8707||8711<=D&&D<=8712||D==8715||D==8719||D==8721||D==8725||D==8730||8733<=D&&D<=8736||D==8739||D==8741||8743<=D&&D<=8748||D==8750||8756<=D&&D<=8759||8764<=D&&D<=8765||D==8776||D==8780||D==8786||8800<=D&&D<=8801||8804<=D&&D<=8807||8810<=D&&D<=8811||8814<=D&&D<=8815||8834<=D&&D<=8835||8838<=D&&D<=8839||D==8853||D==8857||D==8869||D==8895||D==8978||9312<=D&&D<=9449||9451<=D&&D<=9547||9552<=D&&D<=9587||9600<=D&&D<=9615||9618<=D&&D<=9621||9632<=D&&D<=9633||9635<=D&&D<=9641||9650<=D&&D<=9651||9654<=D&&D<=9655||9660<=D&&D<=9661||9664<=D&&D<=9665||9670<=D&&D<=9672||D==9675||9678<=D&&D<=9681||9698<=D&&D<=9701||D==9711||9733<=D&&D<=9734||D==9737||9742<=D&&D<=9743||9748<=D&&D<=9749||D==9756||D==9758||D==9792||D==9794||9824<=D&&D<=9825||9827<=D&&D<=9829||9831<=D&&D<=9834||9836<=D&&D<=9837||D==9839||9886<=D&&D<=9887||9918<=D&&D<=9919||9924<=D&&D<=9933||9935<=D&&D<=9953||D==9955||9960<=D&&D<=9983||D==10045||D==10071||10102<=D&&D<=10111||11093<=D&&D<=11097||12872<=D&&D<=12879||57344<=D&&D<=63743||65024<=D&&D<=65039||D==65533||127232<=D&&D<=127242||127248<=D&&D<=127277||127280<=D&&D<=127337||127344<=D&&D<=127386||917760<=D&&D<=917999||983040<=D&&D<=1048573||1048576<=D&&D<=1114109?"A":"N"},u.characterLength=function(e){var s=this.eastAsianWidth(e);return s=="F"||s=="W"||s=="A"?2:1};function F(e){return e.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}u.length=function(e){for(var s=F(e),i=0,D=0;D=s-(n==2?1:0))if(C+n<=i)D+=a;else break;C+=n}return D}})(P);var X=P.exports;const DD=O(X);var uD=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g};const FD=O(uD);function A(t,u={}){if(typeof t!="string"||t.length===0||(u={ambiguousIsNarrow:!0,...u},t=T(t),t.length===0))return 0;t=t.replace(FD()," ");const F=u.ambiguousIsNarrow?1:2;let e=0;for(const s of t){const i=s.codePointAt(0);if(i<=31||i>=127&&i<=159||i>=768&&i<=879)continue;switch(DD.eastAsianWidth(s)){case"F":case"W":e+=2;break;case"A":e+=F;break;default:e+=1}}return e}const m=10,L=(t=0)=>u=>`\x1B[${u+t}m`,N=(t=0)=>u=>`\x1B[${38+t};5;${u}m`,I=(t=0)=>(u,F,e)=>`\x1B[${38+t};2;${u};${F};${e}m`,r={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(r.modifier);const tD=Object.keys(r.color),eD=Object.keys(r.bgColor);[...tD,...eD];function sD(){const t=new Map;for(const[u,F]of Object.entries(r)){for(const[e,s]of Object.entries(F))r[e]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},F[e]=r[e],t.set(s[0],s[1]);Object.defineProperty(r,u,{value:F,enumerable:!1})}return Object.defineProperty(r,"codes",{value:t,enumerable:!1}),r.color.close="\x1B[39m",r.bgColor.close="\x1B[49m",r.color.ansi=L(),r.color.ansi256=N(),r.color.ansi16m=I(),r.bgColor.ansi=L(m),r.bgColor.ansi256=N(m),r.bgColor.ansi16m=I(m),Object.defineProperties(r,{rgbToAnsi256:{value:(u,F,e)=>u===F&&F===e?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(F/255*5)+Math.round(e/255*5),enumerable:!1},hexToRgb:{value:u=>{const F=/[a-f\d]{6}|[a-f\d]{3}/i.exec(u.toString(16));if(!F)return[0,0,0];let[e]=F;e.length===3&&(e=[...e].map(i=>i+i).join(""));const s=Number.parseInt(e,16);return[s>>16&255,s>>8&255,s&255]},enumerable:!1},hexToAnsi256:{value:u=>r.rgbToAnsi256(...r.hexToRgb(u)),enumerable:!1},ansi256ToAnsi:{value:u=>{if(u<8)return 30+u;if(u<16)return 90+(u-8);let F,e,s;if(u>=232)F=((u-232)*10+8)/255,e=F,s=F;else{u-=16;const C=u%36;F=Math.floor(u/36)/5,e=Math.floor(C/6)/5,s=C%6/5}const i=Math.max(F,e,s)*2;if(i===0)return 30;let D=30+(Math.round(s)<<2|Math.round(e)<<1|Math.round(F));return i===2&&(D+=60),D},enumerable:!1},rgbToAnsi:{value:(u,F,e)=>r.ansi256ToAnsi(r.rgbToAnsi256(u,F,e)),enumerable:!1},hexToAnsi:{value:u=>r.ansi256ToAnsi(r.hexToAnsi256(u)),enumerable:!1}}),r}const iD=sD(),v=new Set(["\x1B","\x9B"]),CD=39,w="\x07",W="[",rD="]",R="m",y=`${rD}8;;`,V=t=>`${v.values().next().value}${W}${t}${R}`,z=t=>`${v.values().next().value}${y}${t}${w}`,ED=t=>t.split(" ").map(u=>A(u)),_=(t,u,F)=>{const e=[...u];let s=!1,i=!1,D=A(T(t[t.length-1]));for(const[C,o]of e.entries()){const E=A(o);if(D+E<=F?t[t.length-1]+=o:(t.push(o),D=0),v.has(o)&&(s=!0,i=e.slice(C+1).join("").startsWith(y)),s){i?o===w&&(s=!1,i=!1):o===R&&(s=!1);continue}D+=E,D===F&&C0&&t.length>1&&(t[t.length-2]+=t.pop())},nD=t=>{const u=t.split(" ");let F=u.length;for(;F>0&&!(A(u[F-1])>0);)F--;return F===u.length?t:u.slice(0,F).join(" ")+u.slice(F).join("")},oD=(t,u,F={})=>{if(F.trim!==!1&&t.trim()==="")return"";let e="",s,i;const D=ED(t);let C=[""];for(const[E,a]of t.split(" ").entries()){F.trim!==!1&&(C[C.length-1]=C[C.length-1].trimStart());let n=A(C[C.length-1]);if(E!==0&&(n>=u&&(F.wordWrap===!1||F.trim===!1)&&(C.push(""),n=0),(n>0||F.trim===!1)&&(C[C.length-1]+=" ",n++)),F.hard&&D[E]>u){const B=u-n,p=1+Math.floor((D[E]-B-1)/u);Math.floor((D[E]-1)/u)u&&n>0&&D[E]>0){if(F.wordWrap===!1&&nu&&F.wordWrap===!1){_(C,a,u);continue}C[C.length-1]+=a}F.trim!==!1&&(C=C.map(E=>nD(E)));const o=[...C.join(` -`)];for(const[E,a]of o.entries()){if(e+=a,v.has(a)){const{groups:B}=new RegExp(`(?:\\${W}(?\\d+)m|\\${y}(?.*)${w})`).exec(o.slice(E).join(""))||{groups:{}};if(B.code!==void 0){const p=Number.parseFloat(B.code);s=p===CD?void 0:p}else B.uri!==void 0&&(i=B.uri.length===0?void 0:B.uri)}const n=iD.codes.get(Number(s));o[E+1]===` -`?(i&&(e+=z("")),s&&n&&(e+=V(n))):a===` -`&&(s&&n&&(e+=V(s)),i&&(e+=z(i)))}return e};function G(t,u,F){return String(t).normalize().replace(/\r\n/g,` +import{cursor as l,erase as b}from"sisteransi";import{stdin as j,stdout as M}from"node:process";import*as g from"node:readline";import O from"node:readline";import{Writable as X}from"node:stream";import v from"picocolors";function DD({onlyFirst:e=!1}={}){const t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(t,e?void 0:"g")}const uD=DD();function P(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(uD,"")}function L(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var W={exports:{}};(function(e){var u={};e.exports=u,u.eastAsianWidth=function(F){var s=F.charCodeAt(0),i=F.length==2?F.charCodeAt(1):0,D=s;return 55296<=s&&s<=56319&&56320<=i&&i<=57343&&(s&=1023,i&=1023,D=s<<10|i,D+=65536),D==12288||65281<=D&&D<=65376||65504<=D&&D<=65510?"F":D==8361||65377<=D&&D<=65470||65474<=D&&D<=65479||65482<=D&&D<=65487||65490<=D&&D<=65495||65498<=D&&D<=65500||65512<=D&&D<=65518?"H":4352<=D&&D<=4447||4515<=D&&D<=4519||4602<=D&&D<=4607||9001<=D&&D<=9002||11904<=D&&D<=11929||11931<=D&&D<=12019||12032<=D&&D<=12245||12272<=D&&D<=12283||12289<=D&&D<=12350||12353<=D&&D<=12438||12441<=D&&D<=12543||12549<=D&&D<=12589||12593<=D&&D<=12686||12688<=D&&D<=12730||12736<=D&&D<=12771||12784<=D&&D<=12830||12832<=D&&D<=12871||12880<=D&&D<=13054||13056<=D&&D<=19903||19968<=D&&D<=42124||42128<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||55216<=D&&D<=55238||55243<=D&&D<=55291||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65106||65108<=D&&D<=65126||65128<=D&&D<=65131||110592<=D&&D<=110593||127488<=D&&D<=127490||127504<=D&&D<=127546||127552<=D&&D<=127560||127568<=D&&D<=127569||131072<=D&&D<=194367||177984<=D&&D<=196605||196608<=D&&D<=262141?"W":32<=D&&D<=126||162<=D&&D<=163||165<=D&&D<=166||D==172||D==175||10214<=D&&D<=10221||10629<=D&&D<=10630?"Na":D==161||D==164||167<=D&&D<=168||D==170||173<=D&&D<=174||176<=D&&D<=180||182<=D&&D<=186||188<=D&&D<=191||D==198||D==208||215<=D&&D<=216||222<=D&&D<=225||D==230||232<=D&&D<=234||236<=D&&D<=237||D==240||242<=D&&D<=243||247<=D&&D<=250||D==252||D==254||D==257||D==273||D==275||D==283||294<=D&&D<=295||D==299||305<=D&&D<=307||D==312||319<=D&&D<=322||D==324||328<=D&&D<=331||D==333||338<=D&&D<=339||358<=D&&D<=359||D==363||D==462||D==464||D==466||D==468||D==470||D==472||D==474||D==476||D==593||D==609||D==708||D==711||713<=D&&D<=715||D==717||D==720||728<=D&&D<=731||D==733||D==735||768<=D&&D<=879||913<=D&&D<=929||931<=D&&D<=937||945<=D&&D<=961||963<=D&&D<=969||D==1025||1040<=D&&D<=1103||D==1105||D==8208||8211<=D&&D<=8214||8216<=D&&D<=8217||8220<=D&&D<=8221||8224<=D&&D<=8226||8228<=D&&D<=8231||D==8240||8242<=D&&D<=8243||D==8245||D==8251||D==8254||D==8308||D==8319||8321<=D&&D<=8324||D==8364||D==8451||D==8453||D==8457||D==8467||D==8470||8481<=D&&D<=8482||D==8486||D==8491||8531<=D&&D<=8532||8539<=D&&D<=8542||8544<=D&&D<=8555||8560<=D&&D<=8569||D==8585||8592<=D&&D<=8601||8632<=D&&D<=8633||D==8658||D==8660||D==8679||D==8704||8706<=D&&D<=8707||8711<=D&&D<=8712||D==8715||D==8719||D==8721||D==8725||D==8730||8733<=D&&D<=8736||D==8739||D==8741||8743<=D&&D<=8748||D==8750||8756<=D&&D<=8759||8764<=D&&D<=8765||D==8776||D==8780||D==8786||8800<=D&&D<=8801||8804<=D&&D<=8807||8810<=D&&D<=8811||8814<=D&&D<=8815||8834<=D&&D<=8835||8838<=D&&D<=8839||D==8853||D==8857||D==8869||D==8895||D==8978||9312<=D&&D<=9449||9451<=D&&D<=9547||9552<=D&&D<=9587||9600<=D&&D<=9615||9618<=D&&D<=9621||9632<=D&&D<=9633||9635<=D&&D<=9641||9650<=D&&D<=9651||9654<=D&&D<=9655||9660<=D&&D<=9661||9664<=D&&D<=9665||9670<=D&&D<=9672||D==9675||9678<=D&&D<=9681||9698<=D&&D<=9701||D==9711||9733<=D&&D<=9734||D==9737||9742<=D&&D<=9743||9748<=D&&D<=9749||D==9756||D==9758||D==9792||D==9794||9824<=D&&D<=9825||9827<=D&&D<=9829||9831<=D&&D<=9834||9836<=D&&D<=9837||D==9839||9886<=D&&D<=9887||9918<=D&&D<=9919||9924<=D&&D<=9933||9935<=D&&D<=9953||D==9955||9960<=D&&D<=9983||D==10045||D==10071||10102<=D&&D<=10111||11093<=D&&D<=11097||12872<=D&&D<=12879||57344<=D&&D<=63743||65024<=D&&D<=65039||D==65533||127232<=D&&D<=127242||127248<=D&&D<=127277||127280<=D&&D<=127337||127344<=D&&D<=127386||917760<=D&&D<=917999||983040<=D&&D<=1048573||1048576<=D&&D<=1114109?"A":"N"},u.characterLength=function(F){var s=this.eastAsianWidth(F);return s=="F"||s=="W"||s=="A"?2:1};function t(F){return F.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}u.length=function(F){for(var s=t(F),i=0,D=0;D=s-(o==2?1:0))if(r+o<=i)D+=a;else break;r+=o}return D}})(W);var tD=W.exports;const eD=L(tD);var FD=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g};const sD=L(FD);function p(e,u={}){if(typeof e!="string"||e.length===0||(u={ambiguousIsNarrow:!0,...u},e=P(e),e.length===0))return 0;e=e.replace(sD()," ");const t=u.ambiguousIsNarrow?1:2;let F=0;for(const s of e){const i=s.codePointAt(0);if(i<=31||i>=127&&i<=159||i>=768&&i<=879)continue;switch(eD.eastAsianWidth(s)){case"F":case"W":F+=2;break;case"A":F+=t;break;default:F+=1}}return F}const w=10,N=(e=0)=>u=>`\x1B[${u+e}m`,I=(e=0)=>u=>`\x1B[${38+e};5;${u}m`,R=(e=0)=>(u,t,F)=>`\x1B[${38+e};2;${u};${t};${F}m`,C={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(C.modifier);const iD=Object.keys(C.color),rD=Object.keys(C.bgColor);[...iD,...rD];function CD(){const e=new Map;for(const[u,t]of Object.entries(C)){for(const[F,s]of Object.entries(t))C[F]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},t[F]=C[F],e.set(s[0],s[1]);Object.defineProperty(C,u,{value:t,enumerable:!1})}return Object.defineProperty(C,"codes",{value:e,enumerable:!1}),C.color.close="\x1B[39m",C.bgColor.close="\x1B[49m",C.color.ansi=N(),C.color.ansi256=I(),C.color.ansi16m=R(),C.bgColor.ansi=N(w),C.bgColor.ansi256=I(w),C.bgColor.ansi16m=R(w),Object.defineProperties(C,{rgbToAnsi256:{value:(u,t,F)=>u===t&&t===F?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(t/255*5)+Math.round(F/255*5),enumerable:!1},hexToRgb:{value:u=>{const t=/[a-f\d]{6}|[a-f\d]{3}/i.exec(u.toString(16));if(!t)return[0,0,0];let[F]=t;F.length===3&&(F=[...F].map(i=>i+i).join(""));const s=Number.parseInt(F,16);return[s>>16&255,s>>8&255,s&255]},enumerable:!1},hexToAnsi256:{value:u=>C.rgbToAnsi256(...C.hexToRgb(u)),enumerable:!1},ansi256ToAnsi:{value:u=>{if(u<8)return 30+u;if(u<16)return 90+(u-8);let t,F,s;if(u>=232)t=((u-232)*10+8)/255,F=t,s=t;else{u-=16;const r=u%36;t=Math.floor(u/36)/5,F=Math.floor(r/6)/5,s=r%6/5}const i=Math.max(t,F,s)*2;if(i===0)return 30;let D=30+(Math.round(s)<<2|Math.round(F)<<1|Math.round(t));return i===2&&(D+=60),D},enumerable:!1},rgbToAnsi:{value:(u,t,F)=>C.ansi256ToAnsi(C.rgbToAnsi256(u,t,F)),enumerable:!1},hexToAnsi:{value:u=>C.ansi256ToAnsi(C.hexToAnsi256(u)),enumerable:!1}}),C}const ED=CD(),d=new Set(["\x1B","\x9B"]),oD=39,y="\x07",V="[",nD="]",G="m",_=`${nD}8;;`,z=e=>`${d.values().next().value}${V}${e}${G}`,K=e=>`${d.values().next().value}${_}${e}${y}`,aD=e=>e.split(" ").map(u=>p(u)),k=(e,u,t)=>{const F=[...u];let s=!1,i=!1,D=p(P(e[e.length-1]));for(const[r,n]of F.entries()){const E=p(n);if(D+E<=t?e[e.length-1]+=n:(e.push(n),D=0),d.has(n)&&(s=!0,i=F.slice(r+1).join("").startsWith(_)),s){i?n===y&&(s=!1,i=!1):n===G&&(s=!1);continue}D+=E,D===t&&r0&&e.length>1&&(e[e.length-2]+=e.pop())},hD=e=>{const u=e.split(" ");let t=u.length;for(;t>0&&!(p(u[t-1])>0);)t--;return t===u.length?e:u.slice(0,t).join(" ")+u.slice(t).join("")},lD=(e,u,t={})=>{if(t.trim!==!1&&e.trim()==="")return"";let F="",s,i;const D=aD(e);let r=[""];for(const[E,a]of e.split(" ").entries()){t.trim!==!1&&(r[r.length-1]=r[r.length-1].trimStart());let o=p(r[r.length-1]);if(E!==0&&(o>=u&&(t.wordWrap===!1||t.trim===!1)&&(r.push(""),o=0),(o>0||t.trim===!1)&&(r[r.length-1]+=" ",o++)),t.hard&&D[E]>u){const c=u-o,f=1+Math.floor((D[E]-c-1)/u);Math.floor((D[E]-1)/u)u&&o>0&&D[E]>0){if(t.wordWrap===!1&&ou&&t.wordWrap===!1){k(r,a,u);continue}r[r.length-1]+=a}t.trim!==!1&&(r=r.map(E=>hD(E)));const n=[...r.join(` +`)];for(const[E,a]of n.entries()){if(F+=a,d.has(a)){const{groups:c}=new RegExp(`(?:\\${V}(?\\d+)m|\\${_}(?.*)${y})`).exec(n.slice(E).join(""))||{groups:{}};if(c.code!==void 0){const f=Number.parseFloat(c.code);s=f===oD?void 0:f}else c.uri!==void 0&&(i=c.uri.length===0?void 0:c.uri)}const o=ED.codes.get(Number(s));n[E+1]===` +`?(i&&(F+=K("")),s&&o&&(F+=z(o))):a===` +`&&(s&&o&&(F+=z(s)),i&&(F+=K(i)))}return F};function Y(e,u,t){return String(e).normalize().replace(/\r\n/g,` `).split(` -`).map(e=>oD(e,u,F)).join(` -`)}const aD=["up","down","left","right","space","enter","cancel"],c={actions:new Set(aD),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]])};function hD(t){for(const u in t){const F=u;if(!Object.hasOwn(t,F))continue;const e=t[F];switch(F){case"aliases":{for(const s in e)Object.hasOwn(e,s)&&(c.aliases.has(s)||c.aliases.set(s,e[s]));break}}}}function k(t,u){if(typeof t=="string")return c.aliases.get(t)===u;for(const F of t)if(F!==void 0&&k(F,u))return!0;return!1}function lD(t,u){if(t===u)return;const F=t.split(` -`),e=u.split(` -`),s=[];for(let i=0;i{const E=String(D);if(k([E,C,o],"cancel")){e&&u.write(l.show),process.exit(0);return}if(!F)return;const a=C==="return"?0:-1,n=C==="return"?-1:0;f.moveCursor(u,a,n,()=>{f.clearLine(u,1,()=>{t.once("keypress",i)})})};return e&&u.write(l.hide),t.once("keypress",i),()=>{t.off("keypress",i),e&&u.write(l.show),t.isTTY&&!xD&&t.setRawMode(!1),s.terminal=!1,s.close()}}var AD=Object.defineProperty,pD=(t,u,F)=>u in t?AD(t,u,{enumerable:!0,configurable:!0,writable:!0,value:F}):t[u]=F,h=(t,u,F)=>(pD(t,typeof u!="symbol"?u+"":u,F),F);class x{constructor(u,F=!0){h(this,"input"),h(this,"output"),h(this,"_abortSignal"),h(this,"rl"),h(this,"opts"),h(this,"_render"),h(this,"_track",!1),h(this,"_prevFrame",""),h(this,"_subscribers",new Map),h(this,"_cursor",0),h(this,"state","initial"),h(this,"error",""),h(this,"value");const{input:e=$,output:s=j,render:i,signal:D,...C}=u;this.opts=C,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=F,this._abortSignal=D,this.input=e,this.output=s}unsubscribe(){this._subscribers.clear()}setSubscriber(u,F){const e=this._subscribers.get(u)??[];e.push(F),this._subscribers.set(u,e)}on(u,F){this.setSubscriber(u,{cb:F})}once(u,F){this.setSubscriber(u,{cb:F,once:!0})}emit(u,...F){const e=this._subscribers.get(u)??[],s=[];for(const i of e)i.cb(...F),i.once&&s.push(()=>e.splice(e.indexOf(i),1));for(const i of s)i()}prompt(){return new Promise((u,F)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),u(S);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}const e=new U(0);e._write=(s,i,D)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),D()},this.input.pipe(e),this.rl=M.createInterface({input:this.input,output:e,tabSize:2,prompt:"",escapeCodeTimeout:50}),M.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),d(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(l.show),this.output.off("resize",this.render),d(this.input,!1),u(this.value)}),this.once("cancel",()=>{this.output.write(l.show),this.output.off("resize",this.render),d(this.input,!1),u(S)})})}onKeypress(u,F){if(this.state==="error"&&(this.state="active"),F?.name&&(!this._track&&c.aliases.has(F.name)&&this.emit("cursor",c.aliases.get(F.name)),c.actions.has(F.name)&&this.emit("cursor",F.name)),u&&(u.toLowerCase()==="y"||u.toLowerCase()==="n")&&this.emit("confirm",u.toLowerCase()==="y"),u===" "&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),u&&this.emit("key",u.toLowerCase()),F?.name==="return"){if(this.opts.validate){const e=this.opts.validate(this.value);e&&(this.error=e instanceof Error?e.message:e,this.state="error",this.rl?.write(this.value))}this.state!=="error"&&(this.state="submit")}k([u,F?.name,F?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(` -`),d(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){const u=G(this._prevFrame,process.stdout.columns,{hard:!0}).split(` -`).length-1;this.output.write(l.move(-999,u*-1))}render(){const u=G(this._render(this)??"",process.stdout.columns,{hard:!0});if(u!==this._prevFrame){if(this.state==="initial")this.output.write(l.hide);else{const F=lD(this._prevFrame,u);if(this.restoreCursor(),F&&F?.length===1){const e=F[0];this.output.write(l.move(0,e)),this.output.write(b.lines(1));const s=u.split(` -`);this.output.write(s[e]),this._prevFrame=u,this.output.write(l.move(0,s.length-e-1));return}if(F&&F?.length>1){const e=F[0];this.output.write(l.move(0,e)),this.output.write(b.down());const s=u.split(` -`).slice(e);this.output.write(s.join(` -`)),this._prevFrame=u;return}this.output.write(b.down())}this.output.write(u),this.state==="initial"&&(this.state="active"),this._prevFrame=u}}}class fD extends x{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(u){super(u,!1),this.value=!!u.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",F=>{this.output.write(l.move(0,-1)),this.value=F,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var gD=Object.defineProperty,vD=(t,u,F)=>u in t?gD(t,u,{enumerable:!0,configurable:!0,writable:!0,value:F}):t[u]=F,K=(t,u,F)=>(vD(t,typeof u!="symbol"?u+"":u,F),F);let dD=class extends x{constructor(u){super(u,!1),K(this,"options"),K(this,"cursor",0);const{options:F}=u;this.options=Object.entries(F).flatMap(([e,s])=>[{value:e,group:!0,label:e},...s.map(i=>({...i,group:e}))]),this.value=[...u.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:e})=>e===u.cursorAt),0),this.on("cursor",e=>{switch(e){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break;case"space":this.toggleValue();break}})}getGroupItems(u){return this.options.filter(F=>F.group===u)}isGroupSelected(u){return this.getGroupItems(u).every(F=>this.value.includes(F.value))}toggleValue(){const u=this.options[this.cursor];if(u.group===!0){const F=u.value,e=this.getGroupItems(F);this.isGroupSelected(F)?this.value=this.value.filter(s=>e.findIndex(i=>i.value===s)===-1):this.value=[...this.value,...e.map(s=>s.value)],this.value=Array.from(new Set(this.value))}else{const F=this.value.includes(u.value);this.value=F?this.value.filter(e=>e!==u.value):[...this.value,u.value]}}};var bD=Object.defineProperty,mD=(t,u,F)=>u in t?bD(t,u,{enumerable:!0,configurable:!0,writable:!0,value:F}):t[u]=F,Y=(t,u,F)=>(mD(t,typeof u!="symbol"?u+"":u,F),F);let wD=class extends x{constructor(u){super(u,!1),Y(this,"options"),Y(this,"cursor",0),this.options=u.options,this.value=[...u.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:F})=>F===u.cursorAt),0),this.on("key",F=>{F==="a"&&this.toggleAll()}),this.on("cursor",F=>{switch(F){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break;case"space":this.toggleValue();break}})}get _value(){return this.options[this.cursor].value}toggleAll(){const u=this.value.length===this.options.length;this.value=u?[]:this.options.map(F=>F.value)}toggleValue(){const u=this.value.includes(this._value);this.value=u?this.value.filter(F=>F!==this._value):[...this.value,this._value]}};var yD=Object.defineProperty,_D=(t,u,F)=>u in t?yD(t,u,{enumerable:!0,configurable:!0,writable:!0,value:F}):t[u]=F,Z=(t,u,F)=>(_D(t,typeof u!="symbol"?u+"":u,F),F);class kD extends x{constructor({mask:u,...F}){super(F),Z(this,"valueWithCursor",""),Z(this,"_mask","\u2022"),this._mask=u??"\u2022",this.on("finalize",()=>{this.valueWithCursor=this.masked}),this.on("value",()=>{if(this.cursor>=this.value.length)this.valueWithCursor=`${this.masked}${g.inverse(g.hidden("_"))}`;else{const e=this.masked.slice(0,this.cursor),s=this.masked.slice(this.cursor);this.valueWithCursor=`${e}${g.inverse(s[0])}${s.slice(1)}`}})}get cursor(){return this._cursor}get masked(){return this.value.replaceAll(/./g,this._mask)}}var SD=Object.defineProperty,$D=(t,u,F)=>u in t?SD(t,u,{enumerable:!0,configurable:!0,writable:!0,value:F}):t[u]=F,q=(t,u,F)=>($D(t,typeof u!="symbol"?u+"":u,F),F);class jD extends x{constructor(u){super(u,!1),q(this,"options"),q(this,"cursor",0),this.options=u.options,this.cursor=this.options.findIndex(({value:F})=>F===u.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on("cursor",F=>{switch(F){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}this.changeValue()})}get _value(){return this.options[this.cursor]}changeValue(){this.value=this._value.value}}var MD=Object.defineProperty,TD=(t,u,F)=>u in t?MD(t,u,{enumerable:!0,configurable:!0,writable:!0,value:F}):t[u]=F,H=(t,u,F)=>(TD(t,typeof u!="symbol"?u+"":u,F),F);class OD extends x{constructor(u){super(u,!1),H(this,"options"),H(this,"cursor",0),this.options=u.options;const F=this.options.map(({value:[e]})=>e?.toLowerCase());this.cursor=Math.max(F.indexOf(u.initialValue),0),this.on("key",e=>{if(!F.includes(e))return;const s=this.options.find(({value:[i]})=>i?.toLowerCase()===e);s&&(this.value=s.value,this.state="submit",this.emit("submit"))})}}class PD extends x{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return`${this.value}\u2588`;const u=this.value.slice(0,this.cursor),[F,...e]=this.value.slice(this.cursor);return`${u}${g.inverse(F)}${e.join("")}`}get cursor(){return this._cursor}constructor(u){super(u),this.on("finalize",()=>{this.value||(this.value=u.defaultValue)})}}export{fD as ConfirmPrompt,dD as GroupMultiSelectPrompt,wD as MultiSelectPrompt,kD as PasswordPrompt,x as Prompt,OD as SelectKeyPrompt,jD as SelectPrompt,PD as TextPrompt,cD as block,BD as isCancel,hD as updateSettings}; +`).map(F=>lD(F,u,t)).join(` +`)}const xD=["up","down","left","right","space","enter","cancel"],B={actions:new Set(xD),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]])};function cD(e){for(const u in e){const t=u;if(!Object.hasOwn(e,t))continue;const F=e[t];switch(t){case"aliases":{for(const s in F)Object.hasOwn(F,s)&&(B.aliases.has(s)||B.aliases.set(s,F[s]));break}}}}function $(e,u){if(typeof e=="string")return B.aliases.get(e)===u;for(const t of e)if(t!==void 0&&$(t,u))return!0;return!1}function BD(e,u){if(e===u)return;const t=e.split(` +`),F=u.split(` +`),s=[];for(let i=0;i{const E=String(D);if($([E,r,n],"cancel")){F&&u.write(l.show),process.exit(0);return}if(!t)return;const a=r==="return"?0:-1,o=r==="return"?-1:0;g.moveCursor(u,a,o,()=>{g.clearLine(u,1,()=>{e.once("keypress",i)})})};return F&&u.write(l.hide),e.once("keypress",i),()=>{e.off("keypress",i),F&&u.write(l.show),e.isTTY&&!AD&&e.setRawMode(!1),s.terminal=!1,s.close()}}var gD=Object.defineProperty,vD=(e,u,t)=>u in e?gD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,h=(e,u,t)=>(vD(e,typeof u!="symbol"?u+"":u,t),t);class x{constructor(u,t=!0){h(this,"input"),h(this,"output"),h(this,"_abortSignal"),h(this,"rl"),h(this,"opts"),h(this,"_render"),h(this,"_track",!1),h(this,"_prevFrame",""),h(this,"_subscribers",new Map),h(this,"_cursor",0),h(this,"state","initial"),h(this,"error",""),h(this,"value");const{input:F=j,output:s=M,render:i,signal:D,...r}=u;this.opts=r,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=t,this._abortSignal=D,this.input=F,this.output=s}unsubscribe(){this._subscribers.clear()}setSubscriber(u,t){const F=this._subscribers.get(u)??[];F.push(t),this._subscribers.set(u,F)}on(u,t){this.setSubscriber(u,{cb:t})}once(u,t){this.setSubscriber(u,{cb:t,once:!0})}emit(u,...t){const F=this._subscribers.get(u)??[],s=[];for(const i of F)i.cb(...t),i.once&&s.push(()=>F.splice(F.indexOf(i),1));for(const i of s)i()}prompt(){return new Promise((u,t)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),u(S);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}const F=new X;F._write=(s,i,D)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),D()},this.input.pipe(F),this.rl=O.createInterface({input:this.input,output:F,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),O.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),m(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(l.show),this.output.off("resize",this.render),m(this.input,!1),u(this.value)}),this.once("cancel",()=>{this.output.write(l.show),this.output.off("resize",this.render),m(this.input,!1),u(S)})})}onKeypress(u,t){if(this.state==="error"&&(this.state="active"),t?.name&&(!this._track&&B.aliases.has(t.name)&&this.emit("cursor",B.aliases.get(t.name)),B.actions.has(t.name)&&this.emit("cursor",t.name)),u&&(u.toLowerCase()==="y"||u.toLowerCase()==="n")&&this.emit("confirm",u.toLowerCase()==="y"),u===" "&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),u&&this.emit("key",u.toLowerCase()),t?.name==="return"){if(!this.value&&this.opts.placeholder&&(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder)),this.opts.validate){const F=this.opts.validate(this.value);F&&(this.error=F instanceof Error?F.message:F,this.state="error",this.rl?.write(this.value))}this.state!=="error"&&(this.state="submit")}$([u,t?.name,t?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(` +`),m(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){const u=Y(this._prevFrame,process.stdout.columns,{hard:!0}).split(` +`).length-1;this.output.write(l.move(-999,u*-1))}render(){const u=Y(this._render(this)??"",process.stdout.columns,{hard:!0});if(u!==this._prevFrame){if(this.state==="initial")this.output.write(l.hide);else{const t=BD(this._prevFrame,u);if(this.restoreCursor(),t&&t?.length===1){const F=t[0];this.output.write(l.move(0,F)),this.output.write(b.lines(1));const s=u.split(` +`);this.output.write(s[F]),this._prevFrame=u,this.output.write(l.move(0,s.length-F-1));return}if(t&&t?.length>1){const F=t[0];this.output.write(l.move(0,F)),this.output.write(b.down());const s=u.split(` +`).slice(F);this.output.write(s.join(` +`)),this._prevFrame=u;return}this.output.write(b.down())}this.output.write(u),this.state==="initial"&&(this.state="active"),this._prevFrame=u}}}class dD extends x{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(u){super(u,!1),this.value=!!u.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",t=>{this.output.write(l.move(0,-1)),this.value=t,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var mD=Object.defineProperty,bD=(e,u,t)=>u in e?mD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,Z=(e,u,t)=>(bD(e,typeof u!="symbol"?u+"":u,t),t),q=(e,u,t)=>{if(!u.has(e))throw TypeError("Cannot "+t)},T=(e,u,t)=>(q(e,u,"read from private field"),t?t.call(e):u.get(e)),wD=(e,u,t)=>{if(u.has(e))throw TypeError("Cannot add the same private member more than once");u instanceof WeakSet?u.add(e):u.set(e,t)},yD=(e,u,t,F)=>(q(e,u,"write to private field"),F?F.call(e,t):u.set(e,t),t),A;let _D=class extends x{constructor(u){super(u,!1),Z(this,"options"),Z(this,"cursor",0),wD(this,A,void 0);const{options:t}=u;yD(this,A,u.selectableGroups!==!1),this.options=Object.entries(t).flatMap(([F,s])=>[{value:F,group:!0,label:F},...s.map(i=>({...i,group:F}))]),this.value=[...u.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:F})=>F===u.cursorAt),T(this,A)?0:1),this.on("cursor",F=>{switch(F){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;const s=this.options[this.cursor]?.group===!0;!T(this,A)&&s&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;const s=this.options[this.cursor]?.group===!0;!T(this,A)&&s&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}getGroupItems(u){return this.options.filter(t=>t.group===u)}isGroupSelected(u){return this.getGroupItems(u).every(t=>this.value.includes(t.value))}toggleValue(){const u=this.options[this.cursor];if(u.group===!0){const t=u.value,F=this.getGroupItems(t);this.isGroupSelected(t)?this.value=this.value.filter(s=>F.findIndex(i=>i.value===s)===-1):this.value=[...this.value,...F.map(s=>s.value)],this.value=Array.from(new Set(this.value))}else{const t=this.value.includes(u.value);this.value=t?this.value.filter(F=>F!==u.value):[...this.value,u.value]}}};A=new WeakMap;var kD=Object.defineProperty,$D=(e,u,t)=>u in e?kD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,H=(e,u,t)=>($D(e,typeof u!="symbol"?u+"":u,t),t);let SD=class extends x{constructor(u){super(u,!1),H(this,"options"),H(this,"cursor",0),this.options=u.options,this.value=[...u.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:t})=>t===u.cursorAt),0),this.on("key",t=>{t==="a"&&this.toggleAll()}),this.on("cursor",t=>{switch(t){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break;case"space":this.toggleValue();break}})}get _value(){return this.options[this.cursor].value}toggleAll(){const u=this.value.length===this.options.length;this.value=u?[]:this.options.map(t=>t.value)}toggleValue(){const u=this.value.includes(this._value);this.value=u?this.value.filter(t=>t!==this._value):[...this.value,this._value]}};var TD=Object.defineProperty,jD=(e,u,t)=>u in e?TD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,U=(e,u,t)=>(jD(e,typeof u!="symbol"?u+"":u,t),t);class MD extends x{constructor({mask:u,...t}){super(t),U(this,"valueWithCursor",""),U(this,"_mask","\u2022"),this._mask=u??"\u2022",this.on("finalize",()=>{this.valueWithCursor=this.masked}),this.on("value",()=>{if(this.cursor>=this.value.length)this.valueWithCursor=`${this.masked}${v.inverse(v.hidden("_"))}`;else{const F=this.masked.slice(0,this.cursor),s=this.masked.slice(this.cursor);this.valueWithCursor=`${F}${v.inverse(s[0])}${s.slice(1)}`}})}get cursor(){return this._cursor}get masked(){return this.value.replaceAll(/./g,this._mask)}}var OD=Object.defineProperty,PD=(e,u,t)=>u in e?OD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,J=(e,u,t)=>(PD(e,typeof u!="symbol"?u+"":u,t),t);class LD extends x{constructor(u){super(u,!1),J(this,"options"),J(this,"cursor",0),this.options=u.options,this.cursor=this.options.findIndex(({value:t})=>t===u.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on("cursor",t=>{switch(t){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}this.changeValue()})}get _value(){return this.options[this.cursor]}changeValue(){this.value=this._value.value}}var WD=Object.defineProperty,ND=(e,u,t)=>u in e?WD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,Q=(e,u,t)=>(ND(e,typeof u!="symbol"?u+"":u,t),t);class ID extends x{constructor(u){super(u,!1),Q(this,"options"),Q(this,"cursor",0),this.options=u.options;const t=this.options.map(({value:[F]})=>F?.toLowerCase());this.cursor=Math.max(t.indexOf(u.initialValue),0),this.on("key",F=>{if(!t.includes(F))return;const s=this.options.find(({value:[i]})=>i?.toLowerCase()===F);s&&(this.value=s.value,this.state="submit",this.emit("submit"))})}}class RD extends x{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return`${this.value}\u2588`;const u=this.value.slice(0,this.cursor),[t,...F]=this.value.slice(this.cursor);return`${u}${v.inverse(t)}${F.join("")}`}get cursor(){return this._cursor}constructor(u){super(u),this.on("finalize",()=>{this.value||(this.value=u.defaultValue)})}}export{dD as ConfirmPrompt,_D as GroupMultiSelectPrompt,SD as MultiSelectPrompt,MD as PasswordPrompt,x as Prompt,ID as SelectKeyPrompt,LD as SelectPrompt,RD as TextPrompt,fD as block,pD as isCancel,cD as updateSettings}; //# sourceMappingURL=index.mjs.map diff --git a/node_modules/@clack/core/dist/index.mjs.map b/node_modules/@clack/core/dist/index.mjs.map index 069d7d3..a8025b3 100644 --- a/node_modules/@clack/core/dist/index.mjs.map +++ b/node_modules/@clack/core/dist/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"index.mjs","sources":["../../../node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js","../../../node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js","../../../node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js","../../../node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js","../../../node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js","../../../node_modules/.pnpm/ansi-styles@6.2.1/node_modules/ansi-styles/index.js","../../../node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js","../src/utils/settings.ts","../src/utils/string.ts","../src/utils/index.ts","../src/prompts/prompt.ts","../src/prompts/confirm.ts","../src/prompts/group-multiselect.ts","../src/prompts/multi-select.ts","../src/prompts/password.ts","../src/prompts/select.ts","../src/prompts/select-key.ts","../src/prompts/text.ts"],"sourcesContent":["export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","var eaw = {};\n\nif ('undefined' == typeof module) {\n window.eastasianwidth = eaw;\n} else {\n module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n var x = character.charCodeAt(0);\n var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n x &= 0x3FF;\n y &= 0x3FF;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if ((0x3000 == codePoint) ||\n (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n return 'F';\n }\n if ((0x20A9 == codePoint) ||\n (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n return 'H';\n }\n if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n (0x2329 <= codePoint && codePoint <= 0x232A) ||\n (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n (0x3001 <= codePoint && codePoint <= 0x303E) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n (0x3105 <= codePoint && codePoint <= 0x312D) ||\n (0x3131 <= codePoint && codePoint <= 0x318E) ||\n (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n return 'W';\n }\n if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n (0x00AC == codePoint) ||\n (0x00AF == codePoint) ||\n (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)) {\n return 'Na';\n }\n if ((0x00A1 == codePoint) ||\n (0x00A4 == codePoint) ||\n (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n (0x00AA == codePoint) ||\n (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n (0x00C6 == codePoint) ||\n (0x00D0 == codePoint) ||\n (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n (0x00E6 == codePoint) ||\n (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n (0x00F0 == codePoint) ||\n (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n (0x00FC == codePoint) ||\n (0x00FE == codePoint) ||\n (0x0101 == codePoint) ||\n (0x0111 == codePoint) ||\n (0x0113 == codePoint) ||\n (0x011B == codePoint) ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n (0x012B == codePoint) ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n (0x0138 == codePoint) ||\n (0x013F <= codePoint && codePoint <= 0x0142) ||\n (0x0144 == codePoint) ||\n (0x0148 <= codePoint && codePoint <= 0x014B) ||\n (0x014D == codePoint) ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n (0x016B == codePoint) ||\n (0x01CE == codePoint) ||\n (0x01D0 == codePoint) ||\n (0x01D2 == codePoint) ||\n (0x01D4 == codePoint) ||\n (0x01D6 == codePoint) ||\n (0x01D8 == codePoint) ||\n (0x01DA == codePoint) ||\n (0x01DC == codePoint) ||\n (0x0251 == codePoint) ||\n (0x0261 == codePoint) ||\n (0x02C4 == codePoint) ||\n (0x02C7 == codePoint) ||\n (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n (0x02CD == codePoint) ||\n (0x02D0 == codePoint) ||\n (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n (0x02DD == codePoint) ||\n (0x02DF == codePoint) ||\n (0x0300 <= codePoint && codePoint <= 0x036F) ||\n (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n (0x0401 == codePoint) ||\n (0x0410 <= codePoint && codePoint <= 0x044F) ||\n (0x0451 == codePoint) ||\n (0x2010 == codePoint) ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201C <= codePoint && codePoint <= 0x201D) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n (0x2030 == codePoint) ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n (0x2035 == codePoint) ||\n (0x203B == codePoint) ||\n (0x203E == codePoint) ||\n (0x2074 == codePoint) ||\n (0x207F == codePoint) ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n (0x20AC == codePoint) ||\n (0x2103 == codePoint) ||\n (0x2105 == codePoint) ||\n (0x2109 == codePoint) ||\n (0x2113 == codePoint) ||\n (0x2116 == codePoint) ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n (0x2126 == codePoint) ||\n (0x212B == codePoint) ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215B <= codePoint && codePoint <= 0x215E) ||\n (0x2160 <= codePoint && codePoint <= 0x216B) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n (0x2189 == codePoint) ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n (0x21D2 == codePoint) ||\n (0x21D4 == codePoint) ||\n (0x21E7 == codePoint) ||\n (0x2200 == codePoint) ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n (0x220B == codePoint) ||\n (0x220F == codePoint) ||\n (0x2211 == codePoint) ||\n (0x2215 == codePoint) ||\n (0x221A == codePoint) ||\n (0x221D <= codePoint && codePoint <= 0x2220) ||\n (0x2223 == codePoint) ||\n (0x2225 == codePoint) ||\n (0x2227 <= codePoint && codePoint <= 0x222C) ||\n (0x222E == codePoint) ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223C <= codePoint && codePoint <= 0x223D) ||\n (0x2248 == codePoint) ||\n (0x224C == codePoint) ||\n (0x2252 == codePoint) ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226A <= codePoint && codePoint <= 0x226B) ||\n (0x226E <= codePoint && codePoint <= 0x226F) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n (0x2295 == codePoint) ||\n (0x2299 == codePoint) ||\n (0x22A5 == codePoint) ||\n (0x22BF == codePoint) ||\n (0x2312 == codePoint) ||\n (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n (0x24EB <= codePoint && codePoint <= 0x254B) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258F) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n (0x25CB == codePoint) ||\n (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n (0x25EF == codePoint) ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n (0x2609 == codePoint) ||\n (0x260E <= codePoint && codePoint <= 0x260F) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n (0x261C == codePoint) ||\n (0x261E == codePoint) ||\n (0x2640 == codePoint) ||\n (0x2642 == codePoint) ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266A) ||\n (0x266C <= codePoint && codePoint <= 0x266D) ||\n (0x266F == codePoint) ||\n (0x269E <= codePoint && codePoint <= 0x269F) ||\n (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n (0x26E3 == codePoint) ||\n (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n (0x273D == codePoint) ||\n (0x2757 == codePoint) ||\n (0x2776 <= codePoint && codePoint <= 0x277F) ||\n (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n (0x3248 <= codePoint && codePoint <= 0x324F) ||\n (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n (0xFFFD == codePoint) ||\n (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n return 'A';\n }\n\n return 'N';\n};\n\neaw.characterLength = function(character) {\n var code = this.eastAsianWidth(character);\n if (code == 'F' || code == 'W' || code == 'A') {\n return 2;\n } else {\n return 1;\n }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n var characters = stringToArray(string);\n var len = 0;\n for (var i = 0; i < characters.length; i++) {\n len = len + this.characterLength(characters[i]);\n }\n return len;\n};\n\neaw.slice = function(text, start, end) {\n textLen = eaw.length(text)\n start = start ? start : 0;\n end = end ? end : 1;\n if (start < 0) {\n start = textLen + start;\n }\n if (end < 0) {\n end = textLen + end;\n }\n var result = '';\n var eawLen = 0;\n var chars = stringToArray(text);\n for (var i = 0; i < chars.length; i++) {\n var char = chars[i];\n var charLen = eaw.length(char);\n if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n if (eawLen + charLen <= end) {\n result += char;\n } else {\n break;\n }\n }\n eawLen += charLen;\n }\n return result;\n};\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n","const actions = ['up', 'down', 'left', 'right', 'space', 'enter', 'cancel'] as const;\nexport type Action = (typeof actions)[number];\n\n/** Global settings for Clack programs, stored in memory */\ninterface InternalClackSettings {\n\tactions: Set;\n\taliases: Map;\n}\n\nexport const settings: InternalClackSettings = {\n\tactions: new Set(actions),\n\taliases: new Map([\n\t\t// vim support\n\t\t['k', 'up'],\n\t\t['j', 'down'],\n\t\t['h', 'left'],\n\t\t['l', 'right'],\n\t\t['\\x03', 'cancel'],\n\t\t// opinionated defaults!\n\t\t['escape', 'cancel'],\n\t]),\n};\n\nexport interface ClackSettings {\n\t/**\n\t * Set custom global aliases for the default actions.\n\t * This will not overwrite existing aliases, it will only add new ones!\n\t *\n\t * @param aliases - An object that maps aliases to actions\n\t * @default { k: 'up', j: 'down', h: 'left', l: 'right', '\\x03': 'cancel', 'escape': 'cancel' }\n\t */\n\taliases: Record;\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\tfor (const _key in updates) {\n\t\tconst key = _key as keyof ClackSettings;\n\t\tif (!Object.hasOwn(updates, key)) continue;\n\t\tconst value = updates[key];\n\n\t\tswitch (key) {\n\t\t\tcase 'aliases': {\n\t\t\t\tfor (const alias in value) {\n\t\t\t\t\tif (!Object.hasOwn(value, alias)) continue;\n\t\t\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\t\t\tsettings.aliases.set(alias, value[alias]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Check if a key is an alias for a default action\n * @param key - The raw key which might match to an action\n * @param action - The action to match\n * @returns boolean\n */\nexport function isActionKey(key: string | Array, action: Action) {\n\tif (typeof key === 'string') {\n\t\treturn settings.aliases.get(key) === action;\n\t}\n\n\tfor (const value of key) {\n\t\tif (value === undefined) continue;\n\t\tif (isActionKey(value, action)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n","export function diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < Math.max(aLines.length, bLines.length); i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn diff;\n}\n","import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings';\n\nexport * from './string';\nexport * from './settings';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport const CANCEL_SYMBOL = Symbol('clack:cancel');\n\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === CANCEL_SYMBOL;\n}\n\nexport function setRawMode(input: Readable, value: boolean) {\n\tconst i = input as typeof stdin;\n\n\tif (i.isTTY) i.setRawMode(value);\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n} = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\tif (input.isTTY) input.setRawMode(true);\n\n\tconst clear = (data: Buffer, { name, sequence }: Key) => {\n\t\tconst str = String(data);\n\t\tif (isActionKey([str, name, sequence], 'cancel')) {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tconst dx = name === 'return' ? 0 : -1;\n\t\tconst dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/natemoo-re/clack/issues/176\n\t\tif (input.isTTY && !isWindows) input.setRawMode(false);\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n","import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable, Writable } from 'node:stream';\nimport { WriteStream } from 'node:tty';\nimport { cursor, erase } from 'sisteransi';\nimport wrap from 'wrap-ansi';\n\nimport { CANCEL_SYMBOL, diffLines, isActionKey, setRawMode, settings } from '../utils';\n\nimport type { ClackEvents, ClackState } from '../types';\nimport type { Action } from '../utils';\n\nexport interface PromptOptions {\n\trender(this: Omit): string | undefined;\n\tplaceholder?: string;\n\tinitialValue?: any;\n\tvalidate?: ((value: any) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit) => string | undefined;\n\tprivate _track = false;\n\tprivate _prevFrame = '';\n\tprivate _subscribers = new Map any; once?: boolean }[]>();\n\tprotected _cursor = 0;\n\n\tpublic state: ClackState = 'initial';\n\tpublic error = '';\n\tpublic value: any;\n\n\tconstructor(options: PromptOptions, trackValue = true) {\n\t\tconst { input = stdin, output = stdout, render, signal, ...opts } = options;\n\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\t\tthis._abortSignal = signal;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\t/**\n\t * Unsubscribe all listeners\n\t */\n\tprotected unsubscribe() {\n\t\tthis._subscribers.clear();\n\t}\n\n\t/**\n\t * Set a subscriber with opts\n\t * @param event - The event name\n\t */\n\tprivate setSubscriber(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents[T]; once?: boolean }\n\t) {\n\t\tconst params = this._subscribers.get(event) ?? [];\n\t\tparams.push(opts);\n\t\tthis._subscribers.set(event, params);\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic on(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb });\n\t}\n\n\t/**\n\t * Subscribe to an event once\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic once(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb, once: true });\n\t}\n\n\t/**\n\t * Emit an event with data\n\t * @param event - The event name\n\t * @param data - The data to pass to the callback\n\t */\n\tpublic emit(event: T, ...data: Parameters) {\n\t\tconst cbs = this._subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\n\tpublic prompt() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (this._abortSignal) {\n\t\t\t\tif (this._abortSignal.aborted) {\n\t\t\t\t\tthis.state = 'cancel';\n\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn resolve(CANCEL_SYMBOL);\n\t\t\t\t}\n\n\t\t\t\tthis._abortSignal.addEventListener(\n\t\t\t\t\t'abort',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.state = 'cancel';\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst sink = new WriteStream(0);\n\t\t\tsink._write = (chunk, encoding, done) => {\n\t\t\t\tif (this._track) {\n\t\t\t\t\tthis.value = this.rl?.line.replace(/\\t/g, '');\n\t\t\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\t\t\tthis.emit('value', this.value);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t};\n\t\t\tthis.input.pipe(sink);\n\n\t\t\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\n\t\t\t\toutput: sink,\n\t\t\t\ttabSize: 2,\n\t\t\t\tprompt: '',\n\t\t\t\tescapeCodeTimeout: 50,\n\t\t\t});\n\t\t\treadline.emitKeypressEvents(this.input, this.rl);\n\t\t\tthis.rl.prompt();\n\t\t\tif (this.opts.initialValue !== undefined && this._track) {\n\t\t\t\tthis.rl.write(this.opts.initialValue);\n\t\t\t}\n\n\t\t\tthis.input.on('keypress', this.onKeypress);\n\t\t\tsetRawMode(this.input, true);\n\t\t\tthis.output.on('resize', this.render);\n\n\t\t\tthis.render();\n\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(CANCEL_SYMBOL);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate onKeypress(char: string, key?: Key) {\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name) {\n\t\t\tif (!this._track && settings.aliases.has(key.name)) {\n\t\t\t\tthis.emit('cursor', settings.aliases.get(key.name));\n\t\t\t}\n\t\t\tif (settings.actions.has(key.name as Action)) {\n\t\t\t\tthis.emit('cursor', key.name as Action);\n\t\t\t}\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\t\tif (char === '\\t' && this.opts.placeholder) {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\t\t}\n\t\tif (char) {\n\t\t\tthis.emit('key', char.toLowerCase());\n\t\t}\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem instanceof Error ? problem.message : problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl?.write(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\n\t\tif (isActionKey([char, key?.name, key?.sequence], 'cancel')) {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl?.close();\n\t\tthis.rl = undefined;\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrap(this._prevFrame, process.stdout.columns, { hard: true }).split('\\n').length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrap(this._render(this) ?? '', process.stdout.columns, { hard: true });\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tthis.restoreCursor();\n\t\t\t// If a single line has changed, only update that line\n\t\t\tif (diff && diff?.length === 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\treturn;\n\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t}\n\t\t\tif (diff && diff?.length > 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.down());\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n","import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface ConfirmOptions extends PromptOptions {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\nexport default class ConfirmPrompt extends Prompt {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = !!opts.initialValue;\n\n\t\tthis.on('value', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface GroupMultiSelectOptions\n\textends PromptOptions> {\n\toptions: Record;\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class GroupMultiSelectPrompt extends Prompt {\n\toptions: (T & { group: string | boolean })[];\n\tcursor = 0;\n\n\tgetGroupItems(group: string): T[] {\n\t\treturn this.options.filter((o) => o.group === group);\n\t}\n\n\tisGroupSelected(group: string) {\n\t\tconst items = this.getGroupItems(group);\n\t\treturn items.every((i) => this.value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (item.group === true) {\n\t\t\tconst group = item.value;\n\t\t\tconst groupedItems = this.getGroupItems(group);\n\t\t\tif (this.isGroupSelected(group)) {\n\t\t\t\tthis.value = this.value.filter(\n\t\t\t\t\t(v: string) => groupedItems.findIndex((i) => i.value === v) === -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.value = [...this.value, ...groupedItems.map((i) => i.value)];\n\t\t\t}\n\t\t\tthis.value = Array.from(new Set(this.value));\n\t\t} else {\n\t\t\tconst selected = this.value.includes(item.value);\n\t\t\tthis.value = selected\n\t\t\t\t? this.value.filter((v: T['value']) => v !== item.value)\n\t\t\t\t: [...this.value, item.value];\n\t\t}\n\t}\n\n\tconstructor(opts: GroupMultiSelectOptions) {\n\t\tsuper(opts, false);\n\t\tconst { options } = opts;\n\t\tthis.options = Object.entries(options).flatMap(([key, option]) => [\n\t\t\t{ value: key, group: true, label: key },\n\t\t\t...option.map((opt) => ({ ...opt, group: key })),\n\t\t]) as any;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface MultiSelectOptions extends PromptOptions> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate toggleAll() {\n\t\tconst allSelected = this.value.length === this.options.length;\n\t\tthis.value = allSelected ? [] : this.options.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value: T['value']) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface PasswordOptions extends PromptOptions {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.value.replaceAll(/./g, this._mask);\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\n\t\tthis.on('finalize', () => {\n\t\t\tthis.valueWithCursor = this.masked;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.masked.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.masked.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectOptions extends PromptOptions> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._value.value;\n\t}\n\n\tconstructor(opts: SelectOptions) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.cursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tif (this.cursor === -1) this.cursor = 0;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectKeyOptions extends PromptOptions> {\n\toptions: T[];\n}\nexport default class SelectKeyPrompt extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tconstructor(opts: SelectKeyOptions) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tconst keys = this.options.map(({ value: [initial] }) => initial?.toLowerCase());\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key) => {\n\t\t\tif (!keys.includes(key)) return;\n\t\t\tconst value = this.options.find(({ value: [initial] }) => initial?.toLowerCase() === key);\n\t\t\tif (value) {\n\t\t\t\tthis.value = value.value;\n\t\t\t\tthis.state = 'submit';\n\t\t\t\tthis.emit('submit');\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\nexport interface TextOptions extends PromptOptions {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt {\n\tget valueWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.value;\n\t\t}\n\t\tif (this.cursor >= this.value.length) {\n\t\t\treturn `${this.value}█`;\n\t\t}\n\t\tconst s1 = this.value.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = this.value.slice(this.cursor);\n\t\treturn `${s1}${color.inverse(s2)}${s3.join('')}`;\n\t}\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper(opts);\n\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t});\n\t}\n}\n"],"names":["ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","eaw","module","character","x","y","codePoint","code","stringToArray","characters","len","i","text","start","end","result","eawLen","chars","char","charLen","emojiRegex","stringWidth","options","ambiguousCharacterWidth","width","eastAsianWidth","ANSI_BACKGROUND_OFFSET","wrapAnsi16","offset","wrapAnsi256","wrapAnsi16m","red","green","blue","styles","foregroundColorNames","backgroundColorNames","assembleStyles","codes","groupName","group","styleName","style","hex","matches","colorString","integer","remainder","value","ansiStyles","ESCAPES","END_CODE","ANSI_ESCAPE_BELL","ANSI_CSI","ANSI_OSC","ANSI_SGR_TERMINATOR","ANSI_ESCAPE_LINK","wrapAnsiCode","wrapAnsiHyperlink","uri","wordLengths","wrapWord","rows","word","columns","isInsideEscape","isInsideLinkEscape","visible","index","characterLength","stringVisibleTrimSpacesRight","words","last","exec","returnValue","escapeCode","escapeUrl","lengths","rowLength","remainingColumns","breaksStartingThisLine","row","pre","groups","wrapAnsi","line","actions","settings","updateSettings","updates","_key","key","alias","isActionKey","action","diffLines","a","b","aLines","bLines","diff","isWindows","CANCEL_SYMBOL","isCancel","setRawMode","input","block","stdin","output","stdout","overwrite","hideCursor","rl","readline","clear","data","name","sequence","str","cursor","dx","dy","v","t","e","s","Prompt","trackValue","__publicField","render","signal","opts","event","params","cb","cbs","cleanup","subscriber","resolve","reject","sink","WriteStream","chunk","encoding","done","problem","lines","wrap","frame","diffLine","erase","newLines","ConfirmPrompt","confirm","n","r","l","c$1","GroupMultiSelectPrompt","option","opt","o","item","groupedItems","selected","allSelected","PasswordPrompt","mask","color","s1","s2","SelectPrompt","SelectKeyPrompt","keys","initial","TextPrompt","s3"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]} \ No newline at end of file +{"version":3,"file":"index.mjs","sources":["../../../node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js","../../../node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js","../../../node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js","../../../node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js","../../../node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js","../../../node_modules/.pnpm/ansi-styles@6.2.1/node_modules/ansi-styles/index.js","../../../node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js","../src/utils/settings.ts","../src/utils/string.ts","../src/utils/index.ts","../src/prompts/prompt.ts","../src/prompts/confirm.ts","../src/prompts/group-multiselect.ts","../src/prompts/multi-select.ts","../src/prompts/password.ts","../src/prompts/select.ts","../src/prompts/select-key.ts","../src/prompts/text.ts"],"sourcesContent":["export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","var eaw = {};\n\nif ('undefined' == typeof module) {\n window.eastasianwidth = eaw;\n} else {\n module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n var x = character.charCodeAt(0);\n var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n x &= 0x3FF;\n y &= 0x3FF;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if ((0x3000 == codePoint) ||\n (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n return 'F';\n }\n if ((0x20A9 == codePoint) ||\n (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n return 'H';\n }\n if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n (0x2329 <= codePoint && codePoint <= 0x232A) ||\n (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n (0x3001 <= codePoint && codePoint <= 0x303E) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n (0x3105 <= codePoint && codePoint <= 0x312D) ||\n (0x3131 <= codePoint && codePoint <= 0x318E) ||\n (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n return 'W';\n }\n if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n (0x00AC == codePoint) ||\n (0x00AF == codePoint) ||\n (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)) {\n return 'Na';\n }\n if ((0x00A1 == codePoint) ||\n (0x00A4 == codePoint) ||\n (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n (0x00AA == codePoint) ||\n (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n (0x00C6 == codePoint) ||\n (0x00D0 == codePoint) ||\n (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n (0x00E6 == codePoint) ||\n (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n (0x00F0 == codePoint) ||\n (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n (0x00FC == codePoint) ||\n (0x00FE == codePoint) ||\n (0x0101 == codePoint) ||\n (0x0111 == codePoint) ||\n (0x0113 == codePoint) ||\n (0x011B == codePoint) ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n (0x012B == codePoint) ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n (0x0138 == codePoint) ||\n (0x013F <= codePoint && codePoint <= 0x0142) ||\n (0x0144 == codePoint) ||\n (0x0148 <= codePoint && codePoint <= 0x014B) ||\n (0x014D == codePoint) ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n (0x016B == codePoint) ||\n (0x01CE == codePoint) ||\n (0x01D0 == codePoint) ||\n (0x01D2 == codePoint) ||\n (0x01D4 == codePoint) ||\n (0x01D6 == codePoint) ||\n (0x01D8 == codePoint) ||\n (0x01DA == codePoint) ||\n (0x01DC == codePoint) ||\n (0x0251 == codePoint) ||\n (0x0261 == codePoint) ||\n (0x02C4 == codePoint) ||\n (0x02C7 == codePoint) ||\n (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n (0x02CD == codePoint) ||\n (0x02D0 == codePoint) ||\n (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n (0x02DD == codePoint) ||\n (0x02DF == codePoint) ||\n (0x0300 <= codePoint && codePoint <= 0x036F) ||\n (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n (0x0401 == codePoint) ||\n (0x0410 <= codePoint && codePoint <= 0x044F) ||\n (0x0451 == codePoint) ||\n (0x2010 == codePoint) ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201C <= codePoint && codePoint <= 0x201D) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n (0x2030 == codePoint) ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n (0x2035 == codePoint) ||\n (0x203B == codePoint) ||\n (0x203E == codePoint) ||\n (0x2074 == codePoint) ||\n (0x207F == codePoint) ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n (0x20AC == codePoint) ||\n (0x2103 == codePoint) ||\n (0x2105 == codePoint) ||\n (0x2109 == codePoint) ||\n (0x2113 == codePoint) ||\n (0x2116 == codePoint) ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n (0x2126 == codePoint) ||\n (0x212B == codePoint) ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215B <= codePoint && codePoint <= 0x215E) ||\n (0x2160 <= codePoint && codePoint <= 0x216B) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n (0x2189 == codePoint) ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n (0x21D2 == codePoint) ||\n (0x21D4 == codePoint) ||\n (0x21E7 == codePoint) ||\n (0x2200 == codePoint) ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n (0x220B == codePoint) ||\n (0x220F == codePoint) ||\n (0x2211 == codePoint) ||\n (0x2215 == codePoint) ||\n (0x221A == codePoint) ||\n (0x221D <= codePoint && codePoint <= 0x2220) ||\n (0x2223 == codePoint) ||\n (0x2225 == codePoint) ||\n (0x2227 <= codePoint && codePoint <= 0x222C) ||\n (0x222E == codePoint) ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223C <= codePoint && codePoint <= 0x223D) ||\n (0x2248 == codePoint) ||\n (0x224C == codePoint) ||\n (0x2252 == codePoint) ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226A <= codePoint && codePoint <= 0x226B) ||\n (0x226E <= codePoint && codePoint <= 0x226F) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n (0x2295 == codePoint) ||\n (0x2299 == codePoint) ||\n (0x22A5 == codePoint) ||\n (0x22BF == codePoint) ||\n (0x2312 == codePoint) ||\n (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n (0x24EB <= codePoint && codePoint <= 0x254B) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258F) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n (0x25CB == codePoint) ||\n (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n (0x25EF == codePoint) ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n (0x2609 == codePoint) ||\n (0x260E <= codePoint && codePoint <= 0x260F) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n (0x261C == codePoint) ||\n (0x261E == codePoint) ||\n (0x2640 == codePoint) ||\n (0x2642 == codePoint) ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266A) ||\n (0x266C <= codePoint && codePoint <= 0x266D) ||\n (0x266F == codePoint) ||\n (0x269E <= codePoint && codePoint <= 0x269F) ||\n (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n (0x26E3 == codePoint) ||\n (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n (0x273D == codePoint) ||\n (0x2757 == codePoint) ||\n (0x2776 <= codePoint && codePoint <= 0x277F) ||\n (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n (0x3248 <= codePoint && codePoint <= 0x324F) ||\n (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n (0xFFFD == codePoint) ||\n (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n return 'A';\n }\n\n return 'N';\n};\n\neaw.characterLength = function(character) {\n var code = this.eastAsianWidth(character);\n if (code == 'F' || code == 'W' || code == 'A') {\n return 2;\n } else {\n return 1;\n }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n var characters = stringToArray(string);\n var len = 0;\n for (var i = 0; i < characters.length; i++) {\n len = len + this.characterLength(characters[i]);\n }\n return len;\n};\n\neaw.slice = function(text, start, end) {\n textLen = eaw.length(text)\n start = start ? start : 0;\n end = end ? end : 1;\n if (start < 0) {\n start = textLen + start;\n }\n if (end < 0) {\n end = textLen + end;\n }\n var result = '';\n var eawLen = 0;\n var chars = stringToArray(text);\n for (var i = 0; i < chars.length; i++) {\n var char = chars[i];\n var charLen = eaw.length(char);\n if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n if (eawLen + charLen <= end) {\n result += char;\n } else {\n break;\n }\n }\n eawLen += charLen;\n }\n return result;\n};\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n","const actions = ['up', 'down', 'left', 'right', 'space', 'enter', 'cancel'] as const;\nexport type Action = (typeof actions)[number];\n\n/** Global settings for Clack programs, stored in memory */\ninterface InternalClackSettings {\n\tactions: Set;\n\taliases: Map;\n}\n\nexport const settings: InternalClackSettings = {\n\tactions: new Set(actions),\n\taliases: new Map([\n\t\t// vim support\n\t\t['k', 'up'],\n\t\t['j', 'down'],\n\t\t['h', 'left'],\n\t\t['l', 'right'],\n\t\t['\\x03', 'cancel'],\n\t\t// opinionated defaults!\n\t\t['escape', 'cancel'],\n\t]),\n};\n\nexport interface ClackSettings {\n\t/**\n\t * Set custom global aliases for the default actions.\n\t * This will not overwrite existing aliases, it will only add new ones!\n\t *\n\t * @param aliases - An object that maps aliases to actions\n\t * @default { k: 'up', j: 'down', h: 'left', l: 'right', '\\x03': 'cancel', 'escape': 'cancel' }\n\t */\n\taliases: Record;\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\tfor (const _key in updates) {\n\t\tconst key = _key as keyof ClackSettings;\n\t\tif (!Object.hasOwn(updates, key)) continue;\n\t\tconst value = updates[key];\n\n\t\tswitch (key) {\n\t\t\tcase 'aliases': {\n\t\t\t\tfor (const alias in value) {\n\t\t\t\t\tif (!Object.hasOwn(value, alias)) continue;\n\t\t\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\t\t\tsettings.aliases.set(alias, value[alias]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Check if a key is an alias for a default action\n * @param key - The raw key which might match to an action\n * @param action - The action to match\n * @returns boolean\n */\nexport function isActionKey(key: string | Array, action: Action) {\n\tif (typeof key === 'string') {\n\t\treturn settings.aliases.get(key) === action;\n\t}\n\n\tfor (const value of key) {\n\t\tif (value === undefined) continue;\n\t\tif (isActionKey(value, action)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n","export function diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < Math.max(aLines.length, bLines.length); i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn diff;\n}\n","import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings';\n\nexport * from './string';\nexport * from './settings';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport const CANCEL_SYMBOL = Symbol('clack:cancel');\n\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === CANCEL_SYMBOL;\n}\n\nexport function setRawMode(input: Readable, value: boolean) {\n\tconst i = input as typeof stdin;\n\n\tif (i.isTTY) i.setRawMode(value);\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n} = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\tif (input.isTTY) input.setRawMode(true);\n\n\tconst clear = (data: Buffer, { name, sequence }: Key) => {\n\t\tconst str = String(data);\n\t\tif (isActionKey([str, name, sequence], 'cancel')) {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tconst dx = name === 'return' ? 0 : -1;\n\t\tconst dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/bombshell-dev/clack/issues/176\n\t\tif (input.isTTY && !isWindows) input.setRawMode(false);\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n","import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { Writable } from 'node:stream';\nimport { cursor, erase } from 'sisteransi';\nimport wrap from 'wrap-ansi';\n\nimport { CANCEL_SYMBOL, diffLines, isActionKey, setRawMode, settings } from '../utils';\n\nimport type { ClackEvents, ClackState } from '../types';\nimport type { Action } from '../utils';\n\nexport interface PromptOptions {\n\trender(this: Omit): string | undefined;\n\tplaceholder?: string;\n\tinitialValue?: any;\n\tvalidate?: ((value: any) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit) => string | undefined;\n\tprivate _track = false;\n\tprivate _prevFrame = '';\n\tprivate _subscribers = new Map any; once?: boolean }[]>();\n\tprotected _cursor = 0;\n\n\tpublic state: ClackState = 'initial';\n\tpublic error = '';\n\tpublic value: any;\n\n\tconstructor(options: PromptOptions, trackValue = true) {\n\t\tconst { input = stdin, output = stdout, render, signal, ...opts } = options;\n\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\t\tthis._abortSignal = signal;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\t/**\n\t * Unsubscribe all listeners\n\t */\n\tprotected unsubscribe() {\n\t\tthis._subscribers.clear();\n\t}\n\n\t/**\n\t * Set a subscriber with opts\n\t * @param event - The event name\n\t */\n\tprivate setSubscriber(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents[T]; once?: boolean }\n\t) {\n\t\tconst params = this._subscribers.get(event) ?? [];\n\t\tparams.push(opts);\n\t\tthis._subscribers.set(event, params);\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic on(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb });\n\t}\n\n\t/**\n\t * Subscribe to an event once\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic once(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb, once: true });\n\t}\n\n\t/**\n\t * Emit an event with data\n\t * @param event - The event name\n\t * @param data - The data to pass to the callback\n\t */\n\tpublic emit(event: T, ...data: Parameters) {\n\t\tconst cbs = this._subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\n\tpublic prompt() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (this._abortSignal) {\n\t\t\t\tif (this._abortSignal.aborted) {\n\t\t\t\t\tthis.state = 'cancel';\n\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn resolve(CANCEL_SYMBOL);\n\t\t\t\t}\n\n\t\t\t\tthis._abortSignal.addEventListener(\n\t\t\t\t\t'abort',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.state = 'cancel';\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst sink = new Writable();\n\t\t\tsink._write = (chunk, encoding, done) => {\n\t\t\t\tif (this._track) {\n\t\t\t\t\tthis.value = this.rl?.line.replace(/\\t/g, '');\n\t\t\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\t\t\tthis.emit('value', this.value);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t};\n\t\t\tthis.input.pipe(sink);\n\n\t\t\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\n\t\t\t\toutput: sink,\n\t\t\t\ttabSize: 2,\n\t\t\t\tprompt: '',\n\t\t\t\tescapeCodeTimeout: 50,\n\t\t\t\tterminal: true,\n\t\t\t});\n\t\t\treadline.emitKeypressEvents(this.input, this.rl);\n\t\t\tthis.rl.prompt();\n\t\t\tif (this.opts.initialValue !== undefined && this._track) {\n\t\t\t\tthis.rl.write(this.opts.initialValue);\n\t\t\t}\n\n\t\t\tthis.input.on('keypress', this.onKeypress);\n\t\t\tsetRawMode(this.input, true);\n\t\t\tthis.output.on('resize', this.render);\n\n\t\t\tthis.render();\n\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(CANCEL_SYMBOL);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate onKeypress(char: string, key?: Key) {\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name) {\n\t\t\tif (!this._track && settings.aliases.has(key.name)) {\n\t\t\t\tthis.emit('cursor', settings.aliases.get(key.name));\n\t\t\t}\n\t\t\tif (settings.actions.has(key.name as Action)) {\n\t\t\t\tthis.emit('cursor', key.name as Action);\n\t\t\t}\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\t\tif (char === '\\t' && this.opts.placeholder) {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\t\t}\n\t\tif (char) {\n\t\t\tthis.emit('key', char.toLowerCase());\n\t\t}\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (!this.value && this.opts.placeholder) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem instanceof Error ? problem.message : problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl?.write(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\n\t\tif (isActionKey([char, key?.name, key?.sequence], 'cancel')) {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl?.close();\n\t\tthis.rl = undefined;\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrap(this._prevFrame, process.stdout.columns, { hard: true }).split('\\n').length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrap(this._render(this) ?? '', process.stdout.columns, { hard: true });\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tthis.restoreCursor();\n\t\t\t// If a single line has changed, only update that line\n\t\t\tif (diff && diff?.length === 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\treturn;\n\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t}\n\t\t\tif (diff && diff?.length > 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.down());\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n","import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface ConfirmOptions extends PromptOptions {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\nexport default class ConfirmPrompt extends Prompt {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = !!opts.initialValue;\n\n\t\tthis.on('value', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface GroupMultiSelectOptions\n\textends PromptOptions> {\n\toptions: Record;\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n\tselectableGroups?: boolean;\n}\nexport default class GroupMultiSelectPrompt extends Prompt {\n\toptions: (T & { group: string | boolean })[];\n\tcursor = 0;\n\t#selectableGroups: boolean;\n\n\tgetGroupItems(group: string): T[] {\n\t\treturn this.options.filter((o) => o.group === group);\n\t}\n\n\tisGroupSelected(group: string) {\n\t\tconst items = this.getGroupItems(group);\n\t\treturn items.every((i) => this.value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (item.group === true) {\n\t\t\tconst group = item.value;\n\t\t\tconst groupedItems = this.getGroupItems(group);\n\t\t\tif (this.isGroupSelected(group)) {\n\t\t\t\tthis.value = this.value.filter(\n\t\t\t\t\t(v: string) => groupedItems.findIndex((i) => i.value === v) === -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.value = [...this.value, ...groupedItems.map((i) => i.value)];\n\t\t\t}\n\t\t\tthis.value = Array.from(new Set(this.value));\n\t\t} else {\n\t\t\tconst selected = this.value.includes(item.value);\n\t\t\tthis.value = selected\n\t\t\t\t? this.value.filter((v: T['value']) => v !== item.value)\n\t\t\t\t: [...this.value, item.value];\n\t\t}\n\t}\n\n\tconstructor(opts: GroupMultiSelectOptions) {\n\t\tsuper(opts, false);\n\t\tconst { options } = opts;\n\t\tthis.#selectableGroups = opts.selectableGroups !== false;\n\t\tthis.options = Object.entries(options).flatMap(([key, option]) => [\n\t\t\t{ value: key, group: true, label: key },\n\t\t\t...option.map((opt) => ({ ...opt, group: key })),\n\t\t]) as any;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\tthis.#selectableGroups ? 0 : 1\n\t\t);\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up': {\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right': {\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface MultiSelectOptions extends PromptOptions> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate toggleAll() {\n\t\tconst allSelected = this.value.length === this.options.length;\n\t\tthis.value = allSelected ? [] : this.options.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value: T['value']) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface PasswordOptions extends PromptOptions {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.value.replaceAll(/./g, this._mask);\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\n\t\tthis.on('finalize', () => {\n\t\t\tthis.valueWithCursor = this.masked;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.masked.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.masked.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectOptions extends PromptOptions> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._value.value;\n\t}\n\n\tconstructor(opts: SelectOptions) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.cursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tif (this.cursor === -1) this.cursor = 0;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectKeyOptions extends PromptOptions> {\n\toptions: T[];\n}\nexport default class SelectKeyPrompt extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tconstructor(opts: SelectKeyOptions) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tconst keys = this.options.map(({ value: [initial] }) => initial?.toLowerCase());\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key) => {\n\t\t\tif (!keys.includes(key)) return;\n\t\t\tconst value = this.options.find(({ value: [initial] }) => initial?.toLowerCase() === key);\n\t\t\tif (value) {\n\t\t\t\tthis.value = value.value;\n\t\t\t\tthis.state = 'submit';\n\t\t\t\tthis.emit('submit');\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\nexport interface TextOptions extends PromptOptions {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt {\n\tget valueWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.value;\n\t\t}\n\t\tif (this.cursor >= this.value.length) {\n\t\t\treturn `${this.value}█`;\n\t\t}\n\t\tconst s1 = this.value.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = this.value.slice(this.cursor);\n\t\treturn `${s1}${color.inverse(s2)}${s3.join('')}`;\n\t}\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper(opts);\n\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t});\n\t}\n}\n"],"names":["ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","eaw","module","character","x","y","codePoint","code","stringToArray","characters","len","i","text","start","end","result","eawLen","chars","char","charLen","emojiRegex","stringWidth","options","ambiguousCharacterWidth","width","eastAsianWidth","ANSI_BACKGROUND_OFFSET","wrapAnsi16","offset","wrapAnsi256","wrapAnsi16m","red","green","blue","styles","foregroundColorNames","backgroundColorNames","assembleStyles","codes","groupName","group","styleName","style","hex","matches","colorString","integer","remainder","value","ansiStyles","ESCAPES","END_CODE","ANSI_ESCAPE_BELL","ANSI_CSI","ANSI_OSC","ANSI_SGR_TERMINATOR","ANSI_ESCAPE_LINK","wrapAnsiCode","wrapAnsiHyperlink","uri","wordLengths","wrapWord","rows","word","columns","isInsideEscape","isInsideLinkEscape","visible","index","characterLength","stringVisibleTrimSpacesRight","words","last","exec","returnValue","escapeCode","escapeUrl","lengths","rowLength","remainingColumns","breaksStartingThisLine","row","pre","groups","wrapAnsi","line","actions","settings","updateSettings","updates","_key","key","alias","isActionKey","action","diffLines","a","b","aLines","bLines","diff","isWindows","CANCEL_SYMBOL","isCancel","setRawMode","input","block","stdin","output","stdout","overwrite","hideCursor","rl","readline","clear","data","name","sequence","str","cursor","dx","dy","v","t","e","s","Prompt","trackValue","__publicField","render","signal","opts","event","params","cb","cbs","cleanup","subscriber","resolve","reject","sink","Writable","chunk","encoding","done","problem","lines","wrap","frame","diffLine","erase","newLines","ConfirmPrompt","confirm","g","n","c","l","h","p","_selectableGroups","__privateAdd","__privateSet","option","opt","__privateGet","currentIsGroup","o","item","groupedItems","selected","allSelected","PasswordPrompt","mask","color","s1","s2","SelectPrompt","SelectKeyPrompt","keys","initial","TextPrompt","s3"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]} \ No newline at end of file diff --git a/node_modules/@clack/core/package.json b/node_modules/@clack/core/package.json index e789042..8e517e5 100644 --- a/node_modules/@clack/core/package.json +++ b/node_modules/@clack/core/package.json @@ -1,6 +1,6 @@ { "name": "@clack/core", - "version": "0.4.1", + "version": "0.4.2", "type": "module", "main": "./dist/index.cjs", "module": "./dist/index.mjs", @@ -15,13 +15,13 @@ "types": "./dist/index.d.ts", "repository": { "type": "git", - "url": "https://github.com/natemoo-re/clack", + "url": "git+https://github.com/bombshell-dev/clack.git", "directory": "packages/core" }, "bugs": { - "url": "https://github.com/natemoo-re/clack/issues" + "url": "https://github.com/bombshell-dev/clack/issues" }, - "homepage": "https://github.com/natemoo-re/clack/tree/main/packages/core#readme", + "homepage": "https://github.com/bombshell-dev/clack/tree/main/packages/core#readme", "files": [ "dist", "CHANGELOG.md" diff --git a/node_modules/@clack/prompts/CHANGELOG.md b/node_modules/@clack/prompts/CHANGELOG.md index 57e0116..debaa07 100644 --- a/node_modules/@clack/prompts/CHANGELOG.md +++ b/node_modules/@clack/prompts/CHANGELOG.md @@ -1,5 +1,16 @@ # @clack/prompts +## 0.10.1 + +### Patch Changes + +- 11a5dc1: Fixes multiselect only shows hints on the first item in the options list. Now correctly shows hints for all selected options with hint property. +- 30aa7ed: Adds a new `selectableGroups` boolean to the group multi-select prompt. Using `selectableGroups: false` will disable the ability to select a top-level group, but still allow every child to be selected individually. +- Updated dependencies [30aa7ed] +- Updated dependencies [5dfce8a] +- Updated dependencies [f574297] + - @clack/core@0.4.2 + ## 0.10.0 ### Minor Changes diff --git a/node_modules/@clack/prompts/README.md b/node_modules/@clack/prompts/README.md index 2bc0d93..2e297ee 100644 --- a/node_modules/@clack/prompts/README.md +++ b/node_modules/@clack/prompts/README.md @@ -2,7 +2,7 @@ Effortlessly build beautiful command-line apps 🪄 [Try the demo](https://stackblitz.com/edit/clack-prompts?file=index.js) -![clack-prompt](https://github.com/natemoo-re/clack/blob/main/.github/assets/clack-demo.gif) +![clack-prompt](https://github.com/bombshell-dev/clack/blob/main/.github/assets/clack-demo.gif) --- @@ -204,4 +204,4 @@ stream.error((function *() { yield 'Error!'; })()); stream.message((function *() { yield 'Hello'; yield ", World" })(), { symbol: color.cyan('~') }); ``` -[clack-log-prompts](https://github.com/natemoo-re/clack/blob/main/.github/assets/clack-logs.png) +![clack-log-prompts](https://github.com/bombshell-dev/clack/blob/main/.github/assets/clack-logs.png) diff --git a/node_modules/@clack/prompts/dist/index.cjs b/node_modules/@clack/prompts/dist/index.cjs index 0d12ccc..3923cd7 100644 --- a/node_modules/@clack/prompts/dist/index.cjs +++ b/node_modules/@clack/prompts/dist/index.cjs @@ -1,87 +1,87 @@ -"use strict";const node_util=require("node:util"),core=require("@clack/core"),process$1=require("node:process"),e=require("picocolors"),sisteransi=require("sisteransi");function _interopDefaultCompat(t){return t&&typeof t=="object"&&"default"in t?t.default:t}const process__default=_interopDefaultCompat(process$1),e__default=_interopDefaultCompat(e);function isUnicodeSupported(){return process__default.platform!=="win32"?process__default.env.TERM!=="linux":!!process__default.env.CI||!!process__default.env.WT_SESSION||!!process__default.env.TERMINUS_SUBLIME||process__default.env.ConEmuTask==="{cmd::Cmder}"||process__default.env.TERM_PROGRAM==="Terminus-Sublime"||process__default.env.TERM_PROGRAM==="vscode"||process__default.env.TERM==="xterm-256color"||process__default.env.TERM==="alacritty"||process__default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}const P=isUnicodeSupported(),u=(t,o)=>P?t:o,ie=u("\u25C6","*"),L=u("\u25A0","x"),G=u("\u25B2","x"),S=u("\u25C7","o"),ae=u("\u250C","T"),a=u("\u2502","|"),d=u("\u2514","\u2014"),_=u("\u25CF",">"),A=u("\u25CB"," "),C=u("\u25FB","[\u2022]"),V=u("\u25FC","[+]"),N=u("\u25FB","[ ]"),oe=u("\u25AA","\u2022"),j=u("\u2500","-"),le=u("\u256E","+"),ce=u("\u251C","+"),ue=u("\u256F","+"),B=u("\u25CF","\u2022"),W=u("\u25C6","*"),H=u("\u25B2","!"),q=u("\u25A0","x"),v=t=>{switch(t){case"initial":case"active":return e__default.cyan(ie);case"cancel":return e__default.red(L);case"error":return e__default.yellow(G);case"submit":return e__default.green(S)}},E=t=>{const{cursor:o,options:s,style:r}=t,i=t.maxItems??Number.POSITIVE_INFINITY,n=Math.max(process.stdout.rows-4,0),c=Math.min(n,Math.max(i,5));let l=0;o>=l+c-3?l=Math.max(Math.min(o-c+3,s.length-c),0):o0,p=c{const x=y===0&&$,M=y===f.length-1&&p;return x||M?e__default.dim("..."):r(w,y+l===o)})},text=t=>new core.TextPrompt({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,render(){const o=`${e__default.gray(a)} -${v(this.state)} ${t.message} -`,s=t.placeholder?e__default.inverse(t.placeholder[0])+e__default.dim(t.placeholder.slice(1)):e__default.inverse(e__default.hidden("_")),r=this.value?this.valueWithCursor:s;switch(this.state){case"error":return`${o.trim()} -${e__default.yellow(a)} ${r} -${e__default.yellow(d)} ${e__default.yellow(this.error)} +"use strict";const node_util=require("node:util"),core=require("@clack/core"),process$1=require("node:process"),e=require("picocolors"),sisteransi=require("sisteransi");function _interopDefaultCompat(t){return t&&typeof t=="object"&&"default"in t?t.default:t}const process__default=_interopDefaultCompat(process$1),e__default=_interopDefaultCompat(e);function isUnicodeSupported(){return process__default.platform!=="win32"?process__default.env.TERM!=="linux":!!process__default.env.CI||!!process__default.env.WT_SESSION||!!process__default.env.TERMINUS_SUBLIME||process__default.env.ConEmuTask==="{cmd::Cmder}"||process__default.env.TERM_PROGRAM==="Terminus-Sublime"||process__default.env.TERM_PROGRAM==="vscode"||process__default.env.TERM==="xterm-256color"||process__default.env.TERM==="alacritty"||process__default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}const P=isUnicodeSupported(),u=(t,o)=>P?t:o,ie=u("\u25C6","*"),G=u("\u25A0","x"),L=u("\u25B2","x"),S=u("\u25C7","o"),ae=u("\u250C","T"),a=u("\u2502","|"),g=u("\u2514","\u2014"),_=u("\u25CF",">"),A=u("\u25CB"," "),C=u("\u25FB","[\u2022]"),V=u("\u25FC","[+]"),N=u("\u25FB","[ ]"),oe=u("\u25AA","\u2022"),j=u("\u2500","-"),le=u("\u256E","+"),ce=u("\u251C","+"),ue=u("\u256F","+"),B=u("\u25CF","\u2022"),W=u("\u25C6","*"),H=u("\u25B2","!"),q=u("\u25A0","x"),b=t=>{switch(t){case"initial":case"active":return e__default.cyan(ie);case"cancel":return e__default.red(G);case"error":return e__default.yellow(L);case"submit":return e__default.green(S)}},E=t=>{const{cursor:o,options:s,style:i}=t,r=t.maxItems??Number.POSITIVE_INFINITY,c=Math.max(process.stdout.rows-4,0),n=Math.min(c,Math.max(r,5));let l=0;o>=l+n-3?l=Math.max(Math.min(o-n+3,s.length-n),0):o0,h=n{const x=y===0&&$,M=y===w.length-1&&h;return x||M?e__default.dim("..."):i(m,y+l===o)})},text=t=>new core.TextPrompt({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,render(){const o=`${e__default.gray(a)} +${b(this.state)} ${t.message} +`,s=t.placeholder?e__default.inverse(t.placeholder[0])+e__default.dim(t.placeholder.slice(1)):e__default.inverse(e__default.hidden("_")),i=this.value?this.valueWithCursor:s;switch(this.state){case"error":return`${o.trim()} +${e__default.yellow(a)} ${i} +${e__default.yellow(g)} ${e__default.yellow(this.error)} `;case"submit":return`${o}${e__default.gray(a)} ${e__default.dim(this.value||t.placeholder)}`;case"cancel":return`${o}${e__default.gray(a)} ${e__default.strikethrough(e__default.dim(this.value??""))}${this.value?.trim()?` -${e__default.gray(a)}`:""}`;default:return`${o}${e__default.cyan(a)} ${r} -${e__default.cyan(d)} +${e__default.gray(a)}`:""}`;default:return`${o}${e__default.cyan(a)} ${i} +${e__default.cyan(g)} `}}}).prompt(),password=t=>new core.PasswordPrompt({validate:t.validate,mask:t.mask??oe,render(){const o=`${e__default.gray(a)} -${v(this.state)} ${t.message} -`,s=this.valueWithCursor,r=this.masked;switch(this.state){case"error":return`${o.trim()} -${e__default.yellow(a)} ${r} -${e__default.yellow(d)} ${e__default.yellow(this.error)} -`;case"submit":return`${o}${e__default.gray(a)} ${e__default.dim(r)}`;case"cancel":return`${o}${e__default.gray(a)} ${e__default.strikethrough(e__default.dim(r??""))}${r?` +${b(this.state)} ${t.message} +`,s=this.valueWithCursor,i=this.masked;switch(this.state){case"error":return`${o.trim()} +${e__default.yellow(a)} ${i} +${e__default.yellow(g)} ${e__default.yellow(this.error)} +`;case"submit":return`${o}${e__default.gray(a)} ${e__default.dim(i)}`;case"cancel":return`${o}${e__default.gray(a)} ${e__default.strikethrough(e__default.dim(i??""))}${i?` ${e__default.gray(a)}`:""}`;default:return`${o}${e__default.cyan(a)} ${s} -${e__default.cyan(d)} -`}}}).prompt(),confirm=t=>{const o=t.active??"Yes",s=t.inactive??"No";return new core.ConfirmPrompt({active:o,inactive:s,initialValue:t.initialValue??!0,render(){const r=`${e__default.gray(a)} -${v(this.state)} ${t.message} -`,i=this.value?o:s;switch(this.state){case"submit":return`${r}${e__default.gray(a)} ${e__default.dim(i)}`;case"cancel":return`${r}${e__default.gray(a)} ${e__default.strikethrough(e__default.dim(i))} -${e__default.gray(a)}`;default:return`${r}${e__default.cyan(a)} ${this.value?`${e__default.green(_)} ${o}`:`${e__default.dim(A)} ${e__default.dim(o)}`} ${e__default.dim("/")} ${this.value?`${e__default.dim(A)} ${e__default.dim(s)}`:`${e__default.green(_)} ${s}`} -${e__default.cyan(d)} -`}}}).prompt()},select=t=>{const o=(s,r)=>{const i=s.label??String(s.value);switch(r){case"selected":return`${e__default.dim(i)}`;case"active":return`${e__default.green(_)} ${i} ${s.hint?e__default.dim(`(${s.hint})`):""}`;case"cancelled":return`${e__default.strikethrough(e__default.dim(i))}`;default:return`${e__default.dim(A)} ${e__default.dim(i)}`}};return new core.SelectPrompt({options:t.options,initialValue:t.initialValue,render(){const s=`${e__default.gray(a)} -${v(this.state)} ${t.message} +${e__default.cyan(g)} +`}}}).prompt(),confirm=t=>{const o=t.active??"Yes",s=t.inactive??"No";return new core.ConfirmPrompt({active:o,inactive:s,initialValue:t.initialValue??!0,render(){const i=`${e__default.gray(a)} +${b(this.state)} ${t.message} +`,r=this.value?o:s;switch(this.state){case"submit":return`${i}${e__default.gray(a)} ${e__default.dim(r)}`;case"cancel":return`${i}${e__default.gray(a)} ${e__default.strikethrough(e__default.dim(r))} +${e__default.gray(a)}`;default:return`${i}${e__default.cyan(a)} ${this.value?`${e__default.green(_)} ${o}`:`${e__default.dim(A)} ${e__default.dim(o)}`} ${e__default.dim("/")} ${this.value?`${e__default.dim(A)} ${e__default.dim(s)}`:`${e__default.green(_)} ${s}`} +${e__default.cyan(g)} +`}}}).prompt()},select=t=>{const o=(s,i)=>{const r=s.label??String(s.value);switch(i){case"selected":return`${e__default.dim(r)}`;case"active":return`${e__default.green(_)} ${r} ${s.hint?e__default.dim(`(${s.hint})`):""}`;case"cancelled":return`${e__default.strikethrough(e__default.dim(r))}`;default:return`${e__default.dim(A)} ${e__default.dim(r)}`}};return new core.SelectPrompt({options:t.options,initialValue:t.initialValue,render(){const s=`${e__default.gray(a)} +${b(this.state)} ${t.message} `;switch(this.state){case"submit":return`${s}${e__default.gray(a)} ${o(this.options[this.cursor],"selected")}`;case"cancel":return`${s}${e__default.gray(a)} ${o(this.options[this.cursor],"cancelled")} -${e__default.gray(a)}`;default:return`${s}${e__default.cyan(a)} ${E({cursor:this.cursor,options:this.options,maxItems:t.maxItems,style:(r,i)=>o(r,i?"active":"inactive")}).join(` +${e__default.gray(a)}`;default:return`${s}${e__default.cyan(a)} ${E({cursor:this.cursor,options:this.options,maxItems:t.maxItems,style:(i,r)=>o(i,r?"active":"inactive")}).join(` ${e__default.cyan(a)} `)} -${e__default.cyan(d)} -`}}}).prompt()},selectKey=t=>{const o=(s,r="inactive")=>{const i=s.label??String(s.value);return r==="selected"?`${e__default.dim(i)}`:r==="cancelled"?`${e__default.strikethrough(e__default.dim(i))}`:r==="active"?`${e__default.bgCyan(e__default.gray(` ${s.value} `))} ${i} ${s.hint?e__default.dim(`(${s.hint})`):""}`:`${e__default.gray(e__default.bgWhite(e__default.inverse(` ${s.value} `)))} ${i} ${s.hint?e__default.dim(`(${s.hint})`):""}`};return new core.SelectKeyPrompt({options:t.options,initialValue:t.initialValue,render(){const s=`${e__default.gray(a)} -${v(this.state)} ${t.message} -`;switch(this.state){case"submit":return`${s}${e__default.gray(a)} ${o(this.options.find(r=>r.value===this.value)??t.options[0],"selected")}`;case"cancel":return`${s}${e__default.gray(a)} ${o(this.options[0],"cancelled")} -${e__default.gray(a)}`;default:return`${s}${e__default.cyan(a)} ${this.options.map((r,i)=>o(r,i===this.cursor?"active":"inactive")).join(` +${e__default.cyan(g)} +`}}}).prompt()},selectKey=t=>{const o=(s,i="inactive")=>{const r=s.label??String(s.value);return i==="selected"?`${e__default.dim(r)}`:i==="cancelled"?`${e__default.strikethrough(e__default.dim(r))}`:i==="active"?`${e__default.bgCyan(e__default.gray(` ${s.value} `))} ${r} ${s.hint?e__default.dim(`(${s.hint})`):""}`:`${e__default.gray(e__default.bgWhite(e__default.inverse(` ${s.value} `)))} ${r} ${s.hint?e__default.dim(`(${s.hint})`):""}`};return new core.SelectKeyPrompt({options:t.options,initialValue:t.initialValue,render(){const s=`${e__default.gray(a)} +${b(this.state)} ${t.message} +`;switch(this.state){case"submit":return`${s}${e__default.gray(a)} ${o(this.options.find(i=>i.value===this.value)??t.options[0],"selected")}`;case"cancel":return`${s}${e__default.gray(a)} ${o(this.options[0],"cancelled")} +${e__default.gray(a)}`;default:return`${s}${e__default.cyan(a)} ${this.options.map((i,r)=>o(i,r===this.cursor?"active":"inactive")).join(` ${e__default.cyan(a)} `)} -${e__default.cyan(d)} -`}}}).prompt()},multiselect=t=>{const o=(s,r)=>{const i=s.label??String(s.value);return r==="active"?`${e__default.cyan(C)} ${i} ${s.hint?e__default.dim(`(${s.hint})`):""}`:r==="selected"?`${e__default.green(V)} ${e__default.dim(i)}`:r==="cancelled"?`${e__default.strikethrough(e__default.dim(i))}`:r==="active-selected"?`${e__default.green(V)} ${i} ${s.hint?e__default.dim(`(${s.hint})`):""}`:r==="submitted"?`${e__default.dim(i)}`:`${e__default.dim(N)} ${e__default.dim(i)}`};return new core.MultiSelectPrompt({options:t.options,initialValues:t.initialValues,required:t.required??!0,cursorAt:t.cursorAt,validate(s){if(this.required&&s.length===0)return`Please select at least one option. +${e__default.cyan(g)} +`}}}).prompt()},multiselect=t=>{const o=(s,i)=>{const r=s.label??String(s.value);return i==="active"?`${e__default.cyan(C)} ${r} ${s.hint?e__default.dim(`(${s.hint})`):""}`:i==="selected"?`${e__default.green(V)} ${e__default.dim(r)} ${s.hint?e__default.dim(`(${s.hint})`):""}`:i==="cancelled"?`${e__default.strikethrough(e__default.dim(r))}`:i==="active-selected"?`${e__default.green(V)} ${r} ${s.hint?e__default.dim(`(${s.hint})`):""}`:i==="submitted"?`${e__default.dim(r)}`:`${e__default.dim(N)} ${e__default.dim(r)}`};return new core.MultiSelectPrompt({options:t.options,initialValues:t.initialValues,required:t.required??!0,cursorAt:t.cursorAt,validate(s){if(this.required&&s.length===0)return`Please select at least one option. ${e__default.reset(e__default.dim(`Press ${e__default.gray(e__default.bgWhite(e__default.inverse(" space ")))} to select, ${e__default.gray(e__default.bgWhite(e__default.inverse(" enter ")))} to submit`))}`},render(){const s=`${e__default.gray(a)} -${v(this.state)} ${t.message} -`,r=(i,n)=>{const c=this.value.includes(i.value);return n&&c?o(i,"active-selected"):c?o(i,"selected"):o(i,n?"active":"inactive")};switch(this.state){case"submit":return`${s}${e__default.gray(a)} ${this.options.filter(({value:i})=>this.value.includes(i)).map(i=>o(i,"submitted")).join(e__default.dim(", "))||e__default.dim("none")}`;case"cancel":{const i=this.options.filter(({value:n})=>this.value.includes(n)).map(n=>o(n,"cancelled")).join(e__default.dim(", "));return`${s}${e__default.gray(a)} ${i.trim()?`${i} -${e__default.gray(a)}`:""}`}case"error":{const i=this.error.split(` -`).map((n,c)=>c===0?`${e__default.yellow(d)} ${e__default.yellow(n)}`:` ${n}`).join(` -`);return`${s+e__default.yellow(a)} ${E({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:r}).join(` -${e__default.yellow(a)} `)} -${i} -`}default:return`${s}${e__default.cyan(a)} ${E({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:r}).join(` -${e__default.cyan(a)} `)} -${e__default.cyan(d)} -`}}}).prompt()},groupMultiselect=t=>{const o=(s,r,i=[])=>{const n=s.label??String(s.value),c=typeof s.group=="string",l=c&&(i[i.indexOf(s)+1]??{group:!0}),$=c&&l.group===!0,p=c?`${$?d:a} `:"";return r==="active"?`${e__default.dim(p)}${e__default.cyan(C)} ${n} ${s.hint?e__default.dim(`(${s.hint})`):""}`:r==="group-active"?`${p}${e__default.cyan(C)} ${e__default.dim(n)}`:r==="group-active-selected"?`${p}${e__default.green(V)} ${e__default.dim(n)}`:r==="selected"?`${e__default.dim(p)}${e__default.green(V)} ${e__default.dim(n)}`:r==="cancelled"?`${e__default.strikethrough(e__default.dim(n))}`:r==="active-selected"?`${e__default.dim(p)}${e__default.green(V)} ${n} ${s.hint?e__default.dim(`(${s.hint})`):""}`:r==="submitted"?`${e__default.dim(n)}`:`${e__default.dim(p)}${e__default.dim(N)} ${e__default.dim(n)}`};return new core.GroupMultiSelectPrompt({options:t.options,initialValues:t.initialValues,required:t.required??!0,cursorAt:t.cursorAt,validate(s){if(this.required&&s.length===0)return`Please select at least one option. -${e__default.reset(e__default.dim(`Press ${e__default.gray(e__default.bgWhite(e__default.inverse(" space ")))} to select, ${e__default.gray(e__default.bgWhite(e__default.inverse(" enter ")))} to submit`))}`},render(){const s=`${e__default.gray(a)} -${v(this.state)} ${t.message} -`;switch(this.state){case"submit":return`${s}${e__default.gray(a)} ${this.options.filter(({value:r})=>this.value.includes(r)).map(r=>o(r,"submitted")).join(e__default.dim(", "))}`;case"cancel":{const r=this.options.filter(({value:i})=>this.value.includes(i)).map(i=>o(i,"cancelled")).join(e__default.dim(", "));return`${s}${e__default.gray(a)} ${r.trim()?`${r} +${b(this.state)} ${t.message} +`,i=(r,c)=>{const n=this.value.includes(r.value);return c&&n?o(r,"active-selected"):n?o(r,"selected"):o(r,c?"active":"inactive")};switch(this.state){case"submit":return`${s}${e__default.gray(a)} ${this.options.filter(({value:r})=>this.value.includes(r)).map(r=>o(r,"submitted")).join(e__default.dim(", "))||e__default.dim("none")}`;case"cancel":{const r=this.options.filter(({value:c})=>this.value.includes(c)).map(c=>o(c,"cancelled")).join(e__default.dim(", "));return`${s}${e__default.gray(a)} ${r.trim()?`${r} ${e__default.gray(a)}`:""}`}case"error":{const r=this.error.split(` -`).map((i,n)=>n===0?`${e__default.yellow(d)} ${e__default.yellow(i)}`:` ${i}`).join(` -`);return`${s}${e__default.yellow(a)} ${this.options.map((i,n,c)=>{const l=this.value.includes(i.value)||i.group===!0&&this.isGroupSelected(`${i.value}`),$=n===this.cursor;return!$&&typeof i.group=="string"&&this.options[this.cursor].value===i.group?o(i,l?"group-active-selected":"group-active",c):$&&l?o(i,"active-selected",c):l?o(i,"selected",c):o(i,$?"active":"inactive",c)}).join(` +`).map((c,n)=>n===0?`${e__default.yellow(g)} ${e__default.yellow(c)}`:` ${c}`).join(` +`);return`${s+e__default.yellow(a)} ${E({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:i}).join(` ${e__default.yellow(a)} `)} ${r} -`}default:return`${s}${e__default.cyan(a)} ${this.options.map((r,i,n)=>{const c=this.value.includes(r.value)||r.group===!0&&this.isGroupSelected(`${r.value}`),l=i===this.cursor;return!l&&typeof r.group=="string"&&this.options[this.cursor].value===r.group?o(r,c?"group-active-selected":"group-active",n):l&&c?o(r,"active-selected",n):c?o(r,"selected",n):o(r,l?"active":"inactive",n)}).join(` +`}default:return`${s}${e__default.cyan(a)} ${E({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:i}).join(` ${e__default.cyan(a)} `)} -${e__default.cyan(d)} +${e__default.cyan(g)} +`}}}).prompt()},groupMultiselect=t=>{const{selectableGroups:o=!0}=t,s=(i,r,c=[])=>{const n=i.label??String(i.value),l=typeof i.group=="string",$=l&&(c[c.indexOf(i)+1]??{group:!0}),h=l&&$.group===!0,m=l?o?`${h?g:a} `:" ":"";if(r==="active")return`${e__default.dim(m)}${e__default.cyan(C)} ${n} ${i.hint?e__default.dim(`(${i.hint})`):""}`;if(r==="group-active")return`${m}${e__default.cyan(C)} ${e__default.dim(n)}`;if(r==="group-active-selected")return`${m}${e__default.green(V)} ${e__default.dim(n)}`;if(r==="selected"){const w=l||o?e__default.green(V):"";return`${e__default.dim(m)}${w} ${e__default.dim(n)} ${i.hint?e__default.dim(`(${i.hint})`):""}`}if(r==="cancelled")return`${e__default.strikethrough(e__default.dim(n))}`;if(r==="active-selected")return`${e__default.dim(m)}${e__default.green(V)} ${n} ${i.hint?e__default.dim(`(${i.hint})`):""}`;if(r==="submitted")return`${e__default.dim(n)}`;const y=l||o?e__default.dim(N):"";return`${e__default.dim(m)}${y} ${e__default.dim(n)}`};return new core.GroupMultiSelectPrompt({options:t.options,initialValues:t.initialValues,required:t.required??!0,cursorAt:t.cursorAt,selectableGroups:o,validate(i){if(this.required&&i.length===0)return`Please select at least one option. +${e__default.reset(e__default.dim(`Press ${e__default.gray(e__default.bgWhite(e__default.inverse(" space ")))} to select, ${e__default.gray(e__default.bgWhite(e__default.inverse(" enter ")))} to submit`))}`},render(){const i=`${e__default.gray(a)} +${b(this.state)} ${t.message} +`;switch(this.state){case"submit":return`${i}${e__default.gray(a)} ${this.options.filter(({value:r})=>this.value.includes(r)).map(r=>s(r,"submitted")).join(e__default.dim(", "))}`;case"cancel":{const r=this.options.filter(({value:c})=>this.value.includes(c)).map(c=>s(c,"cancelled")).join(e__default.dim(", "));return`${i}${e__default.gray(a)} ${r.trim()?`${r} +${e__default.gray(a)}`:""}`}case"error":{const r=this.error.split(` +`).map((c,n)=>n===0?`${e__default.yellow(g)} ${e__default.yellow(c)}`:` ${c}`).join(` +`);return`${i}${e__default.yellow(a)} ${this.options.map((c,n,l)=>{const $=this.value.includes(c.value)||c.group===!0&&this.isGroupSelected(`${c.value}`),h=n===this.cursor;return!h&&typeof c.group=="string"&&this.options[this.cursor].value===c.group?s(c,$?"group-active-selected":"group-active",l):h&&$?s(c,"active-selected",l):$?s(c,"selected",l):s(c,h?"active":"inactive",l)}).join(` +${e__default.yellow(a)} `)} +${r} +`}default:return`${i}${e__default.cyan(a)} ${this.options.map((r,c,n)=>{const l=this.value.includes(r.value)||r.group===!0&&this.isGroupSelected(`${r.value}`),$=c===this.cursor;return!$&&typeof r.group=="string"&&this.options[this.cursor].value===r.group?s(r,l?"group-active-selected":"group-active",n):$&&l?s(r,"active-selected",n):l?s(r,"selected",n):s(r,$?"active":"inactive",n)}).join(` +${e__default.cyan(a)} `)} +${e__default.cyan(g)} `}}}).prompt()},note=(t="",o="")=>{const s=` ${t} `.split(` -`),r=node_util.stripVTControlCharacters(o).length,i=Math.max(s.reduce((c,l)=>{const $=node_util.stripVTControlCharacters(l);return $.length>c?$.length:c},0),r)+2,n=s.map(c=>`${e__default.gray(a)} ${e__default.dim(c)}${" ".repeat(i-node_util.stripVTControlCharacters(c).length)}${e__default.gray(a)}`).join(` +`),i=node_util.stripVTControlCharacters(o).length,r=Math.max(s.reduce((n,l)=>{const $=node_util.stripVTControlCharacters(l);return $.length>n?$.length:n},0),i)+2,c=s.map(n=>`${e__default.gray(a)} ${e__default.dim(n)}${" ".repeat(r-node_util.stripVTControlCharacters(n).length)}${e__default.gray(a)}`).join(` `);process.stdout.write(`${e__default.gray(a)} -${e__default.green(S)} ${e__default.reset(o)} ${e__default.gray(j.repeat(Math.max(i-r-1,1))+le)} -${n} -${e__default.gray(ce+j.repeat(i+2)+ue)} -`)},cancel=(t="")=>{process.stdout.write(`${e__default.gray(d)} ${e__default.red(t)} +${e__default.green(S)} ${e__default.reset(o)} ${e__default.gray(j.repeat(Math.max(r-i-1,1))+le)} +${c} +${e__default.gray(ce+j.repeat(r+2)+ue)} +`)},cancel=(t="")=>{process.stdout.write(`${e__default.gray(g)} ${e__default.red(t)} `)},intro=(t="")=>{process.stdout.write(`${e__default.gray(ae)} ${t} `)},outro=(t="")=>{process.stdout.write(`${e__default.gray(a)} -${e__default.gray(d)} ${t} +${e__default.gray(g)} ${t} -`)},log={message:(t="",{symbol:o=e__default.gray(a)}={})=>{const s=[`${e__default.gray(a)}`];if(t){const[r,...i]=t.split(` -`);s.push(`${o} ${r}`,...i.map(n=>`${e__default.gray(a)} ${n}`))}process.stdout.write(`${s.join(` +`)},log={message:(t="",{symbol:o=e__default.gray(a)}={})=>{const s=[`${e__default.gray(a)}`];if(t){const[i,...r]=t.split(` +`);s.push(`${o} ${i}`,...r.map(c=>`${e__default.gray(a)} ${c}`))}process.stdout.write(`${s.join(` `)} `)},info:t=>{log.message(t,{symbol:e__default.blue(B)})},success:t=>{log.message(t,{symbol:e__default.green(W)})},step:t=>{log.message(t,{symbol:e__default.green(S)})},warn:t=>{log.message(t,{symbol:e__default.yellow(H)})},warning:t=>{log.warn(t)},error:t=>{log.message(t,{symbol:e__default.red(q)})}},D=`${e__default.gray(a)} `,stream={message:async(t,{symbol:o=e__default.gray(a)}={})=>{process.stdout.write(`${e__default.gray(a)} -${o} `);let s=3;for await(let r of t){r=r.replace(/\n/g,` -${D}`),r.includes(` -`)&&(s=3+node_util.stripVTControlCharacters(r.slice(r.lastIndexOf(` -`))).length);const i=node_util.stripVTControlCharacters(r).length;s+istream.message(t,{symbol:e__default.blue(B)}),success:t=>stream.message(t,{symbol:e__default.green(W)}),step:t=>stream.message(t,{symbol:e__default.green(S)}),warn:t=>stream.message(t,{symbol:e__default.yellow(H)}),warning:t=>stream.warn(t),error:t=>stream.message(t,{symbol:e__default.red(q)})},spinner=({indicator:t="dots"}={})=>{const o=P?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],s=P?80:120,r=process.env.CI==="true";let i,n,c=!1,l="",$,p=performance.now();const w=m=>{const h=m>1?"Something went wrong":"Canceled";c&&R(h,m)},y=()=>w(2),f=()=>w(1),x=()=>{process.on("uncaughtExceptionMonitor",y),process.on("unhandledRejection",y),process.on("SIGINT",f),process.on("SIGTERM",f),process.on("exit",w)},M=()=>{process.removeListener("uncaughtExceptionMonitor",y),process.removeListener("unhandledRejection",y),process.removeListener("SIGINT",f),process.removeListener("SIGTERM",f),process.removeListener("exit",w)},T=()=>{if($===void 0)return;r&&process.stdout.write(` -`);const m=$.split(` -`);process.stdout.write(sisteransi.cursor.move(-999,m.length-1)),process.stdout.write(sisteransi.erase.down(m.length))},I=m=>m.replace(/\.+$/,""),k=m=>{const h=(performance.now()-m)/1e3,g=Math.floor(h/60),b=Math.floor(h%60);return g>0?`[${g}m ${b}s]`:`[${b}s]`},O=(m="")=>{c=!0,i=core.block(),l=I(m),p=performance.now(),process.stdout.write(`${e__default.gray(a)} -`);let h=0,g=0;x(),n=setInterval(()=>{if(r&&l===$)return;T(),$=l;const b=e__default.magenta(o[h]);if(r)process.stdout.write(`${b} ${l}...`);else if(t==="timer")process.stdout.write(`${b} ${l} ${k(p)}`);else{const F=".".repeat(Math.floor(g)).slice(0,3);process.stdout.write(`${b} ${l}${F}`)}h=h+1{c=!1,clearInterval(n),T();const g=h===0?e__default.green(S):h===1?e__default.red(L):e__default.red(G);l=I(m??l),t==="timer"?process.stdout.write(`${g} ${l} ${k(p)} -`):process.stdout.write(`${g} ${l} -`),M(),i()};return{start:O,stop:R,message:(m="")=>{l=I(m??l)}}},group=async(t,o)=>{const s={},r=Object.keys(t);for(const i of r){const n=t[i],c=await n({results:s})?.catch(l=>{throw l});if(typeof o?.onCancel=="function"&&core.isCancel(c)){s[i]="canceled",o.onCancel({results:s});continue}s[i]=c}return s},tasks=async t=>{for(const o of t){if(o.enabled===!1)continue;const s=spinner();s.start(o.title);const r=await o.task(s.message);s.stop(r||o.title)}};exports.isCancel=core.isCancel,exports.updateSettings=core.updateSettings,exports.cancel=cancel,exports.confirm=confirm,exports.group=group,exports.groupMultiselect=groupMultiselect,exports.intro=intro,exports.log=log,exports.multiselect=multiselect,exports.note=note,exports.outro=outro,exports.password=password,exports.select=select,exports.selectKey=selectKey,exports.spinner=spinner,exports.stream=stream,exports.tasks=tasks,exports.text=text; +${o} `);let s=3;for await(let i of t){i=i.replace(/\n/g,` +${D}`),i.includes(` +`)&&(s=3+node_util.stripVTControlCharacters(i.slice(i.lastIndexOf(` +`))).length);const r=node_util.stripVTControlCharacters(i).length;s+rstream.message(t,{symbol:e__default.blue(B)}),success:t=>stream.message(t,{symbol:e__default.green(W)}),step:t=>stream.message(t,{symbol:e__default.green(S)}),warn:t=>stream.message(t,{symbol:e__default.yellow(H)}),warning:t=>stream.warn(t),error:t=>stream.message(t,{symbol:e__default.red(q)})},spinner=({indicator:t="dots"}={})=>{const o=P?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],s=P?80:120,i=process.env.CI==="true";let r,c,n=!1,l="",$,h=performance.now();const m=p=>{const d=p>1?"Something went wrong":"Canceled";n&&R(d,p)},y=()=>m(2),w=()=>m(1),x=()=>{process.on("uncaughtExceptionMonitor",y),process.on("unhandledRejection",y),process.on("SIGINT",w),process.on("SIGTERM",w),process.on("exit",m)},M=()=>{process.removeListener("uncaughtExceptionMonitor",y),process.removeListener("unhandledRejection",y),process.removeListener("SIGINT",w),process.removeListener("SIGTERM",w),process.removeListener("exit",m)},T=()=>{if($===void 0)return;i&&process.stdout.write(` +`);const p=$.split(` +`);process.stdout.write(sisteransi.cursor.move(-999,p.length-1)),process.stdout.write(sisteransi.erase.down(p.length))},I=p=>p.replace(/\.+$/,""),k=p=>{const d=(performance.now()-p)/1e3,v=Math.floor(d/60),f=Math.floor(d%60);return v>0?`[${v}m ${f}s]`:`[${f}s]`},O=(p="")=>{n=!0,r=core.block(),l=I(p),h=performance.now(),process.stdout.write(`${e__default.gray(a)} +`);let d=0,v=0;x(),c=setInterval(()=>{if(i&&l===$)return;T(),$=l;const f=e__default.magenta(o[d]);if(i)process.stdout.write(`${f} ${l}...`);else if(t==="timer")process.stdout.write(`${f} ${l} ${k(h)}`);else{const F=".".repeat(Math.floor(v)).slice(0,3);process.stdout.write(`${f} ${l}${F}`)}d=d+1{n=!1,clearInterval(c),T();const v=d===0?e__default.green(S):d===1?e__default.red(G):e__default.red(L);l=I(p??l),t==="timer"?process.stdout.write(`${v} ${l} ${k(h)} +`):process.stdout.write(`${v} ${l} +`),M(),r()};return{start:O,stop:R,message:(p="")=>{l=I(p??l)}}},group=async(t,o)=>{const s={},i=Object.keys(t);for(const r of i){const c=t[r],n=await c({results:s})?.catch(l=>{throw l});if(typeof o?.onCancel=="function"&&core.isCancel(n)){s[r]="canceled",o.onCancel({results:s});continue}s[r]=n}return s},tasks=async t=>{for(const o of t){if(o.enabled===!1)continue;const s=spinner();s.start(o.title);const i=await o.task(s.message);s.stop(i||o.title)}};exports.isCancel=core.isCancel,exports.updateSettings=core.updateSettings,exports.cancel=cancel,exports.confirm=confirm,exports.group=group,exports.groupMultiselect=groupMultiselect,exports.intro=intro,exports.log=log,exports.multiselect=multiselect,exports.note=note,exports.outro=outro,exports.password=password,exports.select=select,exports.selectKey=selectKey,exports.spinner=spinner,exports.stream=stream,exports.tasks=tasks,exports.text=text; //# sourceMappingURL=index.cjs.map diff --git a/node_modules/@clack/prompts/dist/index.cjs.map b/node_modules/@clack/prompts/dist/index.cjs.map index 65a67e2..3514fee 100644 --- a/node_modules/@clack/prompts/dist/index.cjs.map +++ b/node_modules/@clack/prompts/dist/index.cjs.map @@ -1 +1 @@ -{"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js","../src/index.ts"],"sourcesContent":["import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","import { stripVTControlCharacters as strip } from 'node:util';\nimport {\n\tConfirmPrompt,\n\tGroupMultiSelectPrompt,\n\tMultiSelectPrompt,\n\tPasswordPrompt,\n\tSelectKeyPrompt,\n\tSelectPrompt,\n\ttype State,\n\tTextPrompt,\n\tblock,\n\tisCancel,\n} from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport color from 'picocolors';\nimport { cursor, erase } from 'sisteransi';\n\nexport { isCancel } from '@clack/core';\nexport { updateSettings, type ClackSettings } from '@clack/core';\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = s('◆', '*');\nconst S_STEP_CANCEL = s('■', 'x');\nconst S_STEP_ERROR = s('▲', 'x');\nconst S_STEP_SUBMIT = s('◇', 'o');\n\nconst S_BAR_START = s('┌', 'T');\nconst S_BAR = s('│', '|');\nconst S_BAR_END = s('└', '—');\n\nconst S_RADIO_ACTIVE = s('●', '>');\nconst S_RADIO_INACTIVE = s('○', ' ');\nconst S_CHECKBOX_ACTIVE = s('◻', '[•]');\nconst S_CHECKBOX_SELECTED = s('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = s('◻', '[ ]');\nconst S_PASSWORD_MASK = s('▪', '•');\n\nconst S_BAR_H = s('─', '-');\nconst S_CORNER_TOP_RIGHT = s('╮', '+');\nconst S_CONNECT_LEFT = s('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = s('╯', '+');\n\nconst S_INFO = s('●', '•');\nconst S_SUCCESS = s('◆', '*');\nconst S_WARN = s('▲', '!');\nconst S_ERROR = s('■', 'x');\n\nconst symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn color.cyan(S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn color.red(S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn color.yellow(S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn color.green(S_STEP_SUBMIT);\n\t}\n};\n\ninterface LimitOptionsParams {\n\toptions: TOption[];\n\tmaxItems: number | undefined;\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n}\n\nconst limitOptions = (params: LimitOptionsParams): string[] => {\n\tconst { cursor, options, style } = params;\n\n\tconst paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n\tconst outputMaxItems = Math.max(process.stdout.rows - 4, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= slidingWindowLocation + maxItems - 3) {\n\t\tslidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n\t} else if (cursor < slidingWindowLocation + 2) {\n\t\tslidingWindowLocation = Math.max(cursor - 2, 0);\n\t}\n\n\tconst shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n\tconst shouldRenderBottomEllipsis =\n\t\tmaxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n\treturn options\n\t\t.slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n\t\t.map((option, i, arr) => {\n\t\t\tconst isTopLimit = i === 0 && shouldRenderTopEllipsis;\n\t\t\tconst isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n\t\t\treturn isTopLimit || isBottomLimit\n\t\t\t\t? color.dim('...')\n\t\t\t\t: style(option, i + slidingWindowLocation === cursor);\n\t\t});\n};\n\nexport interface TextOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1))\n\t\t\t\t: color.inverse(color.hidden('_'));\n\t\t\tconst value = !this.value ? placeholder : this.valueWithCursor;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${value}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(this.value || opts.placeholder)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(this.value ?? '')\n\t\t\t\t\t)}${this.value?.trim() ? `\\n${color.gray(S_BAR)}` : ''}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface PasswordOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.valueWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${masked}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(masked)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(color.dim(masked ?? ''))}${\n\t\t\t\t\t\tmasked ? `\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface ConfirmOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(value)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(value)\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n\t\t\t\t\t} ${color.dim('/')} ${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n\t\t\t\t\t}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\ntype Primitive = Readonly;\n\nexport type Option = Value extends Primitive\n\t? {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * The optional, user-facing text for this option.\n\t\t\t *\n\t\t\t * By default, the `value` is converted to a string.\n\t\t\t */\n\t\t\tlabel?: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * Required. The user-facing text for this option.\n\t\t\t */\n\t\t\tlabel: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t};\n\nexport interface SelectOptions {\n\tmessage: string;\n\toptions: Option[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nexport const select = (opts: SelectOptions) => {\n\tconst opt = (option: Option, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'selected':\n\t\t\t\treturn `${color.dim(label)}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${color.green(S_RADIO_ACTIVE)} ${label} ${\n\t\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options[this.cursor],\n\t\t\t\t\t\t'cancelled'\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: (item, active) => opt(item, active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport const selectKey = (opts: SelectOptions) => {\n\tconst opt = (\n\t\toption: Option,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${\n\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value) ?? opts.options[0],\n\t\t\t\t\t\t'selected'\n\t\t\t\t\t)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[0], 'cancelled')}\\n${color.gray(\n\t\t\t\t\t\tS_BAR\n\t\t\t\t\t)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive'))\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface MultiSelectOptions {\n\tmessage: string;\n\toptions: Option[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const multiselect = (opts: MultiSelectOptions) => {\n\tconst opt = (\n\t\toption: Option,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'active') {\n\t\t\treturn `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tconst styleOption = (option: Option, active: boolean) => {\n\t\t\t\tconst selected = this.value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(color.dim(', ')) || color.dim('none')\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title + color.yellow(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface GroupMultiSelectOptions {\n\tmessage: string;\n\toptions: Record[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const groupMultiselect = (opts: GroupMultiSelectOptions) => {\n\tconst opt = (\n\t\toption: Option,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: Option[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof (option as any).group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && (next as any).group === true;\n\t\tconst prefix = isItem ? `${isLast ? S_BAR_END : S_BAR} ` : '';\n\n\t\tif (state === 'active') {\n\t\t\treturn `${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'group-active') {\n\t\t\treturn `${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'group-active-selected') {\n\t\t\treturn `${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(prefix)}${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t.join(color.dim(', '))}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${color.yellow(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport const note = (message = '', title = '') => {\n\tconst lines = `\\n${message}\\n`.split('\\n');\n\tconst titleLen = strip(title).length;\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tconst line = strip(ln);\n\t\t\t\treturn line.length > sum ? line.length : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${color.gray(S_BAR)} ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray(\n\t\t\t\t\tS_BAR\n\t\t\t\t)}`\n\t\t)\n\t\t.join('\\n');\n\tprocess.stdout.write(\n\t\t`${color.gray(S_BAR)}\\n${color.green(S_STEP_SUBMIT)} ${color.reset(title)} ${color.gray(\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n\nexport const cancel = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_END)} ${color.red(message)}\\n\\n`);\n};\n\nexport const intro = (title = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_START)} ${title}\\n`);\n};\n\nexport const outro = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${color.gray(S_BAR_END)} ${message}\\n\\n`);\n};\n\nexport type LogMessageOptions = {\n\tsymbol?: string;\n};\nexport const log = {\n\tmessage: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}) => {\n\t\tconst parts = [`${color.gray(S_BAR)}`];\n\t\tif (message) {\n\t\t\tconst [firstLine, ...lines] = message.split('\\n');\n\t\t\tparts.push(`${symbol} ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)} ${ln}`));\n\t\t}\n\t\tprocess.stdout.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string) => {\n\t\tlog.message(message, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string) => {\n\t\tlog.message(message, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string) => {\n\t\tlog.warn(message);\n\t},\n\terror: (message: string) => {\n\t\tlog.message(message, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nconst prefix = `${color.gray(S_BAR)} `;\nexport const stream = {\n\tmessage: async (\n\t\titerable: Iterable | AsyncIterable,\n\t\t{ symbol = color.gray(S_BAR) }: LogMessageOptions = {}\n\t) => {\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${symbol} `);\n\t\tlet lineWidth = 3;\n\t\tfor await (let chunk of iterable) {\n\t\t\tchunk = chunk.replace(/\\n/g, `\\n${prefix}`);\n\t\t\tif (chunk.includes('\\n')) {\n\t\t\t\tlineWidth = 3 + strip(chunk.slice(chunk.lastIndexOf('\\n'))).length;\n\t\t\t}\n\t\t\tconst chunkLen = strip(chunk).length;\n\t\t\tif (lineWidth + chunkLen < process.stdout.columns) {\n\t\t\t\tlineWidth += chunkLen;\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`\\n${prefix}${chunk.trimStart()}`);\n\t\t\t\tlineWidth = 3 + strip(chunk.trimStart()).length;\n\t\t\t}\n\t\t}\n\t\tprocess.stdout.write('\\n');\n\t},\n\tinfo: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.warn(iterable);\n\t},\n\terror: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nexport interface SpinnerOptions {\n\tindicator?: 'dots' | 'timer';\n}\n\nexport const spinner = ({ indicator = 'dots' }: SpinnerOptions = {}) => {\n\tconst frames = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'];\n\tconst delay = unicode ? 80 : 120;\n\tconst isCI = process.env.CI === 'true';\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive = false;\n\tlet _message = '';\n\tlet _prevMessage: string | undefined = undefined;\n\tlet _origin: number = performance.now();\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg = code > 1 ? 'Something went wrong' : 'Canceled';\n\t\tif (isSpinnerActive) stop(msg, code);\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\t};\n\n\tconst clearPrevMessage = () => {\n\t\tif (_prevMessage === undefined) return;\n\t\tif (isCI) process.stdout.write('\\n');\n\t\tconst prevLines = _prevMessage.split('\\n');\n\t\tprocess.stdout.write(cursor.move(-999, prevLines.length - 1));\n\t\tprocess.stdout.write(erase.down(prevLines.length));\n\t};\n\n\tconst parseMessage = (msg: string): string => {\n\t\treturn msg.replace(/\\.+$/, '');\n\t};\n\n\tconst formatTimer = (origin: number): string => {\n\t\tconst duration = (performance.now() - origin) / 1000;\n\t\tconst min = Math.floor(duration / 60);\n\t\tconst secs = Math.floor(duration % 60);\n\t\treturn min > 0 ? `[${min}m ${secs}s]` : `[${secs}s]`;\n\t};\n\n\tconst start = (msg = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block();\n\t\t_message = parseMessage(msg);\n\t\t_origin = performance.now();\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n`);\n\t\tlet frameIndex = 0;\n\t\tlet indicatorTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tif (isCI && _message === _prevMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearPrevMessage();\n\t\t\t_prevMessage = _message;\n\t\t\tconst frame = color.magenta(frames[frameIndex]);\n\n\t\t\tif (isCI) {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}...`);\n\t\t\t} else if (indicator === 'timer') {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message} ${formatTimer(_origin)}`);\n\t\t\t} else {\n\t\t\t\tconst loadingDots = '.'.repeat(Math.floor(indicatorTimer)).slice(0, 3);\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}${loadingDots}`);\n\t\t\t}\n\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\tindicatorTimer = indicatorTimer < frames.length ? indicatorTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst stop = (msg = '', code = 0): void => {\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tclearPrevMessage();\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? color.green(S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t\t? color.red(S_STEP_CANCEL)\n\t\t\t\t\t: color.red(S_STEP_ERROR);\n\t\t_message = parseMessage(msg ?? _message);\n\t\tif (indicator === 'timer') {\n\t\t\tprocess.stdout.write(`${step} ${_message} ${formatTimer(_origin)}\\n`);\n\t\t} else {\n\t\t\tprocess.stdout.write(`${step} ${_message}\\n`);\n\t\t}\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst message = (msg = ''): void => {\n\t\t_message = parseMessage(msg ?? _message);\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t};\n};\n\nexport type PromptGroupAwaitedReturn = {\n\t[P in keyof T]: Exclude, symbol>;\n};\n\nexport interface PromptGroupOptions {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify>> }) => void;\n}\n\ntype Prettify = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroup = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify>>>;\n\t}) => undefined | Promise;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async (\n\tprompts: PromptGroup,\n\topts?: PromptGroupOptions\n): Promise>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise | void | Promise;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[]) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner();\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n"],"names":["process","unicode","isUnicodeSupported","s","c","fallback","S_STEP_ACTIVE","S_STEP_CANCEL","S_STEP_ERROR","S_STEP_SUBMIT","S_BAR_START","S_BAR","S_BAR_END","S_RADIO_ACTIVE","S_RADIO_INACTIVE","S_CHECKBOX_ACTIVE","S_CHECKBOX_SELECTED","S_CHECKBOX_INACTIVE","S_PASSWORD_MASK","S_BAR_H","S_CORNER_TOP_RIGHT","S_CONNECT_LEFT","S_CORNER_BOTTOM_RIGHT","S_INFO","S_SUCCESS","S_WARN","S_ERROR","symbol","state","color","limitOptions","params","cursor","options","style","paramMaxItems","outputMaxItems","maxItems","slidingWindowLocation","shouldRenderTopEllipsis","shouldRenderBottomEllipsis","option","i","arr","isTopLimit","isBottomLimit","opts","TextPrompt","title","placeholder","value","PasswordPrompt","masked","active","inactive","ConfirmPrompt","opt","label","SelectPrompt","item","SelectKeyPrompt","MultiSelectPrompt","selected","styleOption","footer","ln","isItem","next","isLast","prefix","GroupMultiSelectPrompt","message","lines","titleLen","strip","len","sum","line","msg","parts","firstLine","iterable","lineWidth","chunk","chunkLen","indicator","frames","delay","isCI","unblock","loop","isSpinnerActive","_message","_prevMessage","_origin","handleExit","code","stop","errorEventHandler","signalEventHandler","registerHooks","clearHooks","clearPrevMessage","prevLines","erase","parseMessage","formatTimer","origin","duration","min","secs","start","block","frameIndex","indicatorTimer","frame","loadingDots","step","prompts","results","promptNames","name","prompt","result","e","isCancel","tasks","task"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js","../src/index.ts"],"sourcesContent":["import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","import { stripVTControlCharacters as strip } from 'node:util';\nimport {\n\tConfirmPrompt,\n\tGroupMultiSelectPrompt,\n\tMultiSelectPrompt,\n\tPasswordPrompt,\n\tSelectKeyPrompt,\n\tSelectPrompt,\n\ttype State,\n\tTextPrompt,\n\tblock,\n\tisCancel,\n} from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport color from 'picocolors';\nimport { cursor, erase } from 'sisteransi';\n\nexport { isCancel } from '@clack/core';\nexport { updateSettings, type ClackSettings } from '@clack/core';\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = s('◆', '*');\nconst S_STEP_CANCEL = s('■', 'x');\nconst S_STEP_ERROR = s('▲', 'x');\nconst S_STEP_SUBMIT = s('◇', 'o');\n\nconst S_BAR_START = s('┌', 'T');\nconst S_BAR = s('│', '|');\nconst S_BAR_END = s('└', '—');\n\nconst S_RADIO_ACTIVE = s('●', '>');\nconst S_RADIO_INACTIVE = s('○', ' ');\nconst S_CHECKBOX_ACTIVE = s('◻', '[•]');\nconst S_CHECKBOX_SELECTED = s('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = s('◻', '[ ]');\nconst S_PASSWORD_MASK = s('▪', '•');\n\nconst S_BAR_H = s('─', '-');\nconst S_CORNER_TOP_RIGHT = s('╮', '+');\nconst S_CONNECT_LEFT = s('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = s('╯', '+');\n\nconst S_INFO = s('●', '•');\nconst S_SUCCESS = s('◆', '*');\nconst S_WARN = s('▲', '!');\nconst S_ERROR = s('■', 'x');\n\nconst symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn color.cyan(S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn color.red(S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn color.yellow(S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn color.green(S_STEP_SUBMIT);\n\t}\n};\n\ninterface LimitOptionsParams {\n\toptions: TOption[];\n\tmaxItems: number | undefined;\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n}\n\nconst limitOptions = (params: LimitOptionsParams): string[] => {\n\tconst { cursor, options, style } = params;\n\n\tconst paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n\tconst outputMaxItems = Math.max(process.stdout.rows - 4, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= slidingWindowLocation + maxItems - 3) {\n\t\tslidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n\t} else if (cursor < slidingWindowLocation + 2) {\n\t\tslidingWindowLocation = Math.max(cursor - 2, 0);\n\t}\n\n\tconst shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n\tconst shouldRenderBottomEllipsis =\n\t\tmaxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n\treturn options\n\t\t.slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n\t\t.map((option, i, arr) => {\n\t\t\tconst isTopLimit = i === 0 && shouldRenderTopEllipsis;\n\t\t\tconst isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n\t\t\treturn isTopLimit || isBottomLimit\n\t\t\t\t? color.dim('...')\n\t\t\t\t: style(option, i + slidingWindowLocation === cursor);\n\t\t});\n};\n\nexport interface TextOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1))\n\t\t\t\t: color.inverse(color.hidden('_'));\n\t\t\tconst value = !this.value ? placeholder : this.valueWithCursor;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${value}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(this.value || opts.placeholder)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(this.value ?? '')\n\t\t\t\t\t)}${this.value?.trim() ? `\\n${color.gray(S_BAR)}` : ''}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface PasswordOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.valueWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${masked}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(masked)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(color.dim(masked ?? ''))}${\n\t\t\t\t\t\tmasked ? `\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface ConfirmOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(value)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(value)\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n\t\t\t\t\t} ${color.dim('/')} ${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n\t\t\t\t\t}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\ntype Primitive = Readonly;\n\nexport type Option = Value extends Primitive\n\t? {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * The optional, user-facing text for this option.\n\t\t\t *\n\t\t\t * By default, the `value` is converted to a string.\n\t\t\t */\n\t\t\tlabel?: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * Required. The user-facing text for this option.\n\t\t\t */\n\t\t\tlabel: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t};\n\nexport interface SelectOptions {\n\tmessage: string;\n\toptions: Option[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nexport const select = (opts: SelectOptions) => {\n\tconst opt = (option: Option, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'selected':\n\t\t\t\treturn `${color.dim(label)}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${color.green(S_RADIO_ACTIVE)} ${label} ${\n\t\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options[this.cursor],\n\t\t\t\t\t\t'cancelled'\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: (item, active) => opt(item, active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport const selectKey = (opts: SelectOptions) => {\n\tconst opt = (\n\t\toption: Option,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${\n\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value) ?? opts.options[0],\n\t\t\t\t\t\t'selected'\n\t\t\t\t\t)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[0], 'cancelled')}\\n${color.gray(\n\t\t\t\t\t\tS_BAR\n\t\t\t\t\t)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive'))\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface MultiSelectOptions {\n\tmessage: string;\n\toptions: Option[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const multiselect = (opts: MultiSelectOptions) => {\n\tconst opt = (\n\t\toption: Option,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'active') {\n\t\t\treturn `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tconst styleOption = (option: Option, active: boolean) => {\n\t\t\t\tconst selected = this.value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(color.dim(', ')) || color.dim('none')\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title + color.yellow(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface GroupMultiSelectOptions {\n\tmessage: string;\n\toptions: Record[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n\tselectableGroups?: boolean;\n}\nexport const groupMultiselect = (opts: GroupMultiSelectOptions) => {\n\tconst { selectableGroups = true } = opts;\n\tconst opt = (\n\t\toption: Option,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: Option[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof (option as any).group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && (next as any).group === true;\n\t\tconst prefix = isItem ? (selectableGroups ? `${isLast ? S_BAR_END : S_BAR} ` : ' ') : '';\n\n\t\tif (state === 'active') {\n\t\t\treturn `${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'group-active') {\n\t\t\treturn `${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'group-active-selected') {\n\t\t\treturn `${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\tconst selectedCheckbox = isItem || selectableGroups ? color.green(S_CHECKBOX_SELECTED) : '';\n\t\t\treturn `${color.dim(prefix)}${selectedCheckbox} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tconst unselectedCheckbox = isItem || selectableGroups ? color.dim(S_CHECKBOX_INACTIVE) : '';\n\t\treturn `${color.dim(prefix)}${unselectedCheckbox} ${color.dim(label)}`;\n\t};\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tselectableGroups,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t.join(color.dim(', '))}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${color.yellow(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport const note = (message = '', title = '') => {\n\tconst lines = `\\n${message}\\n`.split('\\n');\n\tconst titleLen = strip(title).length;\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tconst line = strip(ln);\n\t\t\t\treturn line.length > sum ? line.length : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${color.gray(S_BAR)} ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray(\n\t\t\t\t\tS_BAR\n\t\t\t\t)}`\n\t\t)\n\t\t.join('\\n');\n\tprocess.stdout.write(\n\t\t`${color.gray(S_BAR)}\\n${color.green(S_STEP_SUBMIT)} ${color.reset(title)} ${color.gray(\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n\nexport const cancel = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_END)} ${color.red(message)}\\n\\n`);\n};\n\nexport const intro = (title = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_START)} ${title}\\n`);\n};\n\nexport const outro = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${color.gray(S_BAR_END)} ${message}\\n\\n`);\n};\n\nexport type LogMessageOptions = {\n\tsymbol?: string;\n};\nexport const log = {\n\tmessage: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}) => {\n\t\tconst parts = [`${color.gray(S_BAR)}`];\n\t\tif (message) {\n\t\t\tconst [firstLine, ...lines] = message.split('\\n');\n\t\t\tparts.push(`${symbol} ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)} ${ln}`));\n\t\t}\n\t\tprocess.stdout.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string) => {\n\t\tlog.message(message, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string) => {\n\t\tlog.message(message, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string) => {\n\t\tlog.warn(message);\n\t},\n\terror: (message: string) => {\n\t\tlog.message(message, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nconst prefix = `${color.gray(S_BAR)} `;\nexport const stream = {\n\tmessage: async (\n\t\titerable: Iterable | AsyncIterable,\n\t\t{ symbol = color.gray(S_BAR) }: LogMessageOptions = {}\n\t) => {\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${symbol} `);\n\t\tlet lineWidth = 3;\n\t\tfor await (let chunk of iterable) {\n\t\t\tchunk = chunk.replace(/\\n/g, `\\n${prefix}`);\n\t\t\tif (chunk.includes('\\n')) {\n\t\t\t\tlineWidth = 3 + strip(chunk.slice(chunk.lastIndexOf('\\n'))).length;\n\t\t\t}\n\t\t\tconst chunkLen = strip(chunk).length;\n\t\t\tif (lineWidth + chunkLen < process.stdout.columns) {\n\t\t\t\tlineWidth += chunkLen;\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`\\n${prefix}${chunk.trimStart()}`);\n\t\t\t\tlineWidth = 3 + strip(chunk.trimStart()).length;\n\t\t\t}\n\t\t}\n\t\tprocess.stdout.write('\\n');\n\t},\n\tinfo: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.warn(iterable);\n\t},\n\terror: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nexport interface SpinnerOptions {\n\tindicator?: 'dots' | 'timer';\n}\n\nexport const spinner = ({ indicator = 'dots' }: SpinnerOptions = {}) => {\n\tconst frames = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'];\n\tconst delay = unicode ? 80 : 120;\n\tconst isCI = process.env.CI === 'true';\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive = false;\n\tlet _message = '';\n\tlet _prevMessage: string | undefined = undefined;\n\tlet _origin: number = performance.now();\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg = code > 1 ? 'Something went wrong' : 'Canceled';\n\t\tif (isSpinnerActive) stop(msg, code);\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\t};\n\n\tconst clearPrevMessage = () => {\n\t\tif (_prevMessage === undefined) return;\n\t\tif (isCI) process.stdout.write('\\n');\n\t\tconst prevLines = _prevMessage.split('\\n');\n\t\tprocess.stdout.write(cursor.move(-999, prevLines.length - 1));\n\t\tprocess.stdout.write(erase.down(prevLines.length));\n\t};\n\n\tconst parseMessage = (msg: string): string => {\n\t\treturn msg.replace(/\\.+$/, '');\n\t};\n\n\tconst formatTimer = (origin: number): string => {\n\t\tconst duration = (performance.now() - origin) / 1000;\n\t\tconst min = Math.floor(duration / 60);\n\t\tconst secs = Math.floor(duration % 60);\n\t\treturn min > 0 ? `[${min}m ${secs}s]` : `[${secs}s]`;\n\t};\n\n\tconst start = (msg = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block();\n\t\t_message = parseMessage(msg);\n\t\t_origin = performance.now();\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n`);\n\t\tlet frameIndex = 0;\n\t\tlet indicatorTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tif (isCI && _message === _prevMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearPrevMessage();\n\t\t\t_prevMessage = _message;\n\t\t\tconst frame = color.magenta(frames[frameIndex]);\n\n\t\t\tif (isCI) {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}...`);\n\t\t\t} else if (indicator === 'timer') {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message} ${formatTimer(_origin)}`);\n\t\t\t} else {\n\t\t\t\tconst loadingDots = '.'.repeat(Math.floor(indicatorTimer)).slice(0, 3);\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}${loadingDots}`);\n\t\t\t}\n\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\tindicatorTimer = indicatorTimer < frames.length ? indicatorTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst stop = (msg = '', code = 0): void => {\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tclearPrevMessage();\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? color.green(S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t\t? color.red(S_STEP_CANCEL)\n\t\t\t\t\t: color.red(S_STEP_ERROR);\n\t\t_message = parseMessage(msg ?? _message);\n\t\tif (indicator === 'timer') {\n\t\t\tprocess.stdout.write(`${step} ${_message} ${formatTimer(_origin)}\\n`);\n\t\t} else {\n\t\t\tprocess.stdout.write(`${step} ${_message}\\n`);\n\t\t}\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst message = (msg = ''): void => {\n\t\t_message = parseMessage(msg ?? _message);\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t};\n};\n\nexport type PromptGroupAwaitedReturn = {\n\t[P in keyof T]: Exclude, symbol>;\n};\n\nexport interface PromptGroupOptions {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify>> }) => void;\n}\n\ntype Prettify = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroup = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify>>>;\n\t}) => undefined | Promise;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async (\n\tprompts: PromptGroup,\n\topts?: PromptGroupOptions\n): Promise>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise | void | Promise;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[]) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner();\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n"],"names":["process","unicode","isUnicodeSupported","s","c","fallback","S_STEP_ACTIVE","S_STEP_CANCEL","S_STEP_ERROR","S_STEP_SUBMIT","S_BAR_START","S_BAR","S_BAR_END","S_RADIO_ACTIVE","S_RADIO_INACTIVE","S_CHECKBOX_ACTIVE","S_CHECKBOX_SELECTED","S_CHECKBOX_INACTIVE","S_PASSWORD_MASK","S_BAR_H","S_CORNER_TOP_RIGHT","S_CONNECT_LEFT","S_CORNER_BOTTOM_RIGHT","S_INFO","S_SUCCESS","S_WARN","S_ERROR","symbol","state","color","limitOptions","params","cursor","options","style","paramMaxItems","outputMaxItems","maxItems","slidingWindowLocation","shouldRenderTopEllipsis","shouldRenderBottomEllipsis","option","i","arr","isTopLimit","isBottomLimit","opts","TextPrompt","title","placeholder","value","PasswordPrompt","masked","active","inactive","ConfirmPrompt","opt","label","SelectPrompt","item","SelectKeyPrompt","MultiSelectPrompt","selected","styleOption","footer","ln","selectableGroups","isItem","next","isLast","prefix","selectedCheckbox","unselectedCheckbox","GroupMultiSelectPrompt","message","lines","titleLen","strip","len","sum","line","msg","parts","firstLine","iterable","lineWidth","chunk","chunkLen","indicator","frames","delay","isCI","unblock","loop","isSpinnerActive","_message","_prevMessage","_origin","handleExit","code","stop","errorEventHandler","signalEventHandler","registerHooks","clearHooks","clearPrevMessage","prevLines","erase","parseMessage","formatTimer","origin","duration","min","secs","start","block","frameIndex","indicatorTimer","frame","loadingDots","step","prompts","results","promptNames","name","prompt","result","e","isCancel","tasks","task"],"mappings":"+VAEe,SAAS,oBAAqB,CAC5C,OAAIA,iBAAQ,WAAa,QACjBA,iBAAQ,IAAI,OAAS,QAGtB,EAAQA,iBAAQ,IAAI,IACvB,EAAQA,iBAAQ,IAAI,YACpB,EAAQA,iBAAQ,IAAI,kBACpBA,iBAAQ,IAAI,aAAe,gBAC3BA,iBAAQ,IAAI,eAAiB,oBAC7BA,iBAAQ,IAAI,eAAiB,UAC7BA,iBAAQ,IAAI,OAAS,kBACrBA,iBAAQ,IAAI,OAAS,aACrBA,iBAAQ,IAAI,oBAAsB,oBACvC,CCIA,MAAMC,EAAUC,qBACVC,EAAI,CAACC,EAAWC,IAAsBJ,EAAUG,EAAIC,EACpDC,GAAgBH,EAAE,SAAK,GAAG,EAC1BI,EAAgBJ,EAAE,SAAK,GAAG,EAC1BK,EAAeL,EAAE,SAAK,GAAG,EACzBM,EAAgBN,EAAE,SAAK,GAAG,EAE1BO,GAAcP,EAAE,SAAK,GAAG,EACxBQ,EAAQR,EAAE,SAAK,GAAG,EAClBS,EAAYT,EAAE,SAAK,QAAG,EAEtBU,EAAiBV,EAAE,SAAK,GAAG,EAC3BW,EAAmBX,EAAE,SAAK,GAAG,EAC7BY,EAAoBZ,EAAE,SAAK,UAAK,EAChCa,EAAsBb,EAAE,SAAK,KAAK,EAClCc,EAAsBd,EAAE,SAAK,KAAK,EAClCe,GAAkBf,EAAE,SAAK,QAAG,EAE5BgB,EAAUhB,EAAE,SAAK,GAAG,EACpBiB,GAAqBjB,EAAE,SAAK,GAAG,EAC/BkB,GAAiBlB,EAAE,SAAK,GAAG,EAC3BmB,GAAwBnB,EAAE,SAAK,GAAG,EAElCoB,EAASpB,EAAE,SAAK,QAAG,EACnBqB,EAAYrB,EAAE,SAAK,GAAG,EACtBsB,EAAStB,EAAE,SAAK,GAAG,EACnBuB,EAAUvB,EAAE,SAAK,GAAG,EAEpBwB,EAAUC,GAAiB,CAChC,OAAQA,EACP,CAAA,IAAK,UACL,IAAK,SACJ,OAAOC,WAAM,KAAKvB,EAAa,EAChC,IAAK,SACJ,OAAOuB,WAAM,IAAItB,CAAa,EAC/B,IAAK,QACJ,OAAOsB,WAAM,OAAOrB,CAAY,EACjC,IAAK,SACJ,OAAOqB,WAAM,MAAMpB,CAAa,CAClC,CACD,EASMqB,EAAyBC,GAAkD,CAChF,KAAM,CAAE,OAAAC,EAAQ,QAAAC,EAAS,MAAAC,CAAM,EAAIH,EAE7BI,EAAgBJ,EAAO,UAAY,OAAO,kBAC1CK,EAAiB,KAAK,IAAI,QAAQ,OAAO,KAAO,EAAG,CAAC,EAEpDC,EAAW,KAAK,IAAID,EAAgB,KAAK,IAAID,EAAe,CAAC,CAAC,EACpE,IAAIG,EAAwB,EAExBN,GAAUM,EAAwBD,EAAW,EAChDC,EAAwB,KAAK,IAAI,KAAK,IAAIN,EAASK,EAAW,EAAGJ,EAAQ,OAASI,CAAQ,EAAG,CAAC,EACpFL,EAASM,EAAwB,IAC3CA,EAAwB,KAAK,IAAIN,EAAS,EAAG,CAAC,GAG/C,MAAMO,EAA0BF,EAAWJ,EAAQ,QAAUK,EAAwB,EAC/EE,EACLH,EAAWJ,EAAQ,QAAUK,EAAwBD,EAAWJ,EAAQ,OAEzE,OAAOA,EACL,MAAMK,EAAuBA,EAAwBD,CAAQ,EAC7D,IAAI,CAACI,EAAQC,EAAGC,IAAQ,CACxB,MAAMC,EAAaF,IAAM,GAAKH,EACxBM,EAAgBH,IAAMC,EAAI,OAAS,GAAKH,EAC9C,OAAOI,GAAcC,EAClBhB,WAAM,IAAI,KAAK,EACfK,EAAMO,EAAQC,EAAIJ,IAA0BN,CAAM,CACtD,CAAC,CACH,EASa,KAAQc,GACb,IAAIC,KAAW,WAAA,CACrB,SAAUD,EAAK,SACf,YAAaA,EAAK,YAClB,aAAcA,EAAK,aACnB,aAAcA,EAAK,aACnB,QAAS,CACR,MAAME,EAAQ,GAAGnB,WAAM,KAAKlB,CAAK,CAAC;AAAA,EAAKgB,EAAO,KAAK,KAAK,CAAC,KAAKmB,EAAK,OAAO;AAAA,EACpEG,EAAcH,EAAK,YACtBjB,WAAM,QAAQiB,EAAK,YAAY,CAAC,CAAC,EAAIjB,WAAM,IAAIiB,EAAK,YAAY,MAAM,CAAC,CAAC,EACxEjB,WAAM,QAAQA,WAAM,OAAO,GAAG,CAAC,EAC5BqB,EAAS,KAAK,MAAsB,KAAK,gBAAnBD,EAE5B,OAAQ,KAAK,OACZ,IAAK,QACJ,MAAO,GAAGD,EAAM,MAAM;AAAA,EAAKnB,WAAM,OAAOlB,CAAK,CAAC,KAAKuC,CAAK;AAAA,EAAKrB,WAAM,OAClEjB,CACD,CAAC,KAAKiB,WAAM,OAAO,KAAK,KAAK,CAAC;AAAA,EAC/B,IAAK,SACJ,MAAO,GAAGmB,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAKkB,WAAM,IAAI,KAAK,OAASiB,EAAK,WAAW,CAAC,GAClF,IAAK,SACJ,MAAO,GAAGE,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAKkB,WAAM,cAC7CA,WAAM,IAAI,KAAK,OAAS,EAAE,CAC3B,CAAC,GAAG,KAAK,OAAO,OAAS;AAAA,EAAKA,WAAM,KAAKlB,CAAK,CAAC,GAAK,EAAE,GACvD,QACC,MAAO,GAAGqC,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAKuC,CAAK;AAAA,EAAKrB,WAAM,KAAKjB,CAAS,CAAC;AAAA,CACzE,CACD,CACD,CAAC,EAAE,OAAA,EAQS,SAAYkC,GACjB,IAAIK,oBAAe,CACzB,SAAUL,EAAK,SACf,KAAMA,EAAK,MAAQ5B,GACnB,QAAS,CACR,MAAM8B,EAAQ,GAAGnB,WAAM,KAAKlB,CAAK,CAAC;AAAA,EAAKgB,EAAO,KAAK,KAAK,CAAC,KAAKmB,EAAK,OAAO;AAAA,EACpEI,EAAQ,KAAK,gBACbE,EAAS,KAAK,OAEpB,OAAQ,KAAK,MAAO,CACnB,IAAK,QACJ,MAAO,GAAGJ,EAAM,MAAM;AAAA,EAAKnB,WAAM,OAAOlB,CAAK,CAAC,KAAKyC,CAAM;AAAA,EAAKvB,WAAM,OACnEjB,CACD,CAAC,KAAKiB,WAAM,OAAO,KAAK,KAAK,CAAC;AAAA,EAC/B,IAAK,SACJ,MAAO,GAAGmB,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAKkB,WAAM,IAAIuB,CAAM,CAAC,GAC1D,IAAK,SACJ,MAAO,GAAGJ,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAKkB,WAAM,cAAcA,WAAM,IAAIuB,GAAU,EAAE,CAAC,CAAC,GACnFA,EAAS;AAAA,EAAKvB,WAAM,KAAKlB,CAAK,CAAC,GAAK,EACrC,GACD,QACC,MAAO,GAAGqC,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAKuC,CAAK;AAAA,EAAKrB,WAAM,KAAKjB,CAAS,CAAC;AAAA,CACzE,CACD,CACD,CAAC,EAAE,SASS,QAAWkC,GAAyB,CAChD,MAAMO,EAASP,EAAK,QAAU,MACxBQ,EAAWR,EAAK,UAAY,KAClC,OAAO,IAAIS,KAAAA,cAAc,CACxB,OAAAF,EACA,SAAAC,EACA,aAAcR,EAAK,cAAgB,GACnC,QAAS,CACR,MAAME,EAAQ,GAAGnB,WAAM,KAAKlB,CAAK,CAAC;AAAA,EAAKgB,EAAO,KAAK,KAAK,CAAC,KAAKmB,EAAK,OAAO;AAAA,EACpEI,EAAQ,KAAK,MAAQG,EAASC,EAEpC,OAAQ,KAAK,MACZ,CAAA,IAAK,SACJ,MAAO,GAAGN,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAKkB,WAAM,IAAIqB,CAAK,CAAC,GACzD,IAAK,SACJ,MAAO,GAAGF,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAKkB,WAAM,cAC7CA,WAAM,IAAIqB,CAAK,CAChB,CAAC;AAAA,EAAKrB,WAAM,KAAKlB,CAAK,CAAC,GACxB,QACC,MAAO,GAAGqC,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAClC,KAAK,MACF,GAAGkB,WAAM,MAAMhB,CAAc,CAAC,IAAIwC,CAAM,GACxC,GAAGxB,WAAM,IAAIf,CAAgB,CAAC,IAAIe,WAAM,IAAIwB,CAAM,CAAC,EACvD,IAAIxB,WAAM,IAAI,GAAG,CAAC,IAChB,KAAK,MAEH,GAAGA,WAAM,IAAIf,CAAgB,CAAC,IAAIe,WAAM,IAAIyB,CAAQ,CAAC,GADrD,GAAGzB,WAAM,MAAMhB,CAAc,CAAC,IAAIyC,CAAQ,EAE9C;AAAA,EAAKzB,WAAM,KAAKjB,CAAS,CAAC;AAAA,CAE5B,CACD,CACD,CAAC,EAAE,QACJ,EAiDa,OAAiBkC,GAA+B,CAC5D,MAAMU,EAAM,CAACf,EAAuBb,IAA4D,CAC/F,MAAM6B,EAAQhB,EAAO,OAAS,OAAOA,EAAO,KAAK,EACjD,OAAQb,GACP,IAAK,WACJ,MAAO,GAAGC,WAAM,IAAI4B,CAAK,CAAC,GAC3B,IAAK,SACJ,MAAO,GAAG5B,WAAM,MAAMhB,CAAc,CAAC,IAAI4C,CAAK,IAC7ChB,EAAO,KAAOZ,WAAM,IAAI,IAAIY,EAAO,IAAI,GAAG,EAAI,EAC/C,GACD,IAAK,YACJ,MAAO,GAAGZ,WAAM,cAAcA,WAAM,IAAI4B,CAAK,CAAC,CAAC,GAChD,QACC,MAAO,GAAG5B,WAAM,IAAIf,CAAgB,CAAC,IAAIe,WAAM,IAAI4B,CAAK,CAAC,EAC3D,CACD,EAEA,OAAO,IAAIC,kBAAa,CACvB,QAASZ,EAAK,QACd,aAAcA,EAAK,aACnB,QAAS,CACR,MAAME,EAAQ,GAAGnB,WAAM,KAAKlB,CAAK,CAAC;AAAA,EAAKgB,EAAO,KAAK,KAAK,CAAC,KAAKmB,EAAK,OAAO;AAAA,EAE1E,OAAQ,KAAK,MACZ,CAAA,IAAK,SACJ,MAAO,GAAGE,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAK6C,EAAI,KAAK,QAAQ,KAAK,MAAM,EAAG,UAAU,CAAC,GACnF,IAAK,SACJ,MAAO,GAAGR,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAK6C,EACvC,KAAK,QAAQ,KAAK,MAAM,EACxB,WACD,CAAC;AAAA,EAAK3B,WAAM,KAAKlB,CAAK,CAAC,GACxB,QACC,MAAO,GAAGqC,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAKmB,EAAa,CACpD,OAAQ,KAAK,OACb,QAAS,KAAK,QACd,SAAUgB,EAAK,SACf,MAAO,CAACa,EAAMN,IAAWG,EAAIG,EAAMN,EAAS,SAAW,UAAU,CAClE,CAAC,EAAE,KAAK;AAAA,EAAKxB,WAAM,KAAKlB,CAAK,CAAC,IAAI,CAAC;AAAA,EAAKkB,WAAM,KAAKjB,CAAS,CAAC;AAAA,CAE/D,CACD,CACD,CAAC,EAAE,OAAA,CACJ,EAEa,UAAmCkC,GAA+B,CAC9E,MAAMU,EAAM,CACXf,EACAb,EAA0D,aACtD,CACJ,MAAM6B,EAAQhB,EAAO,OAAS,OAAOA,EAAO,KAAK,EACjD,OAAIb,IAAU,WACN,GAAGC,WAAM,IAAI4B,CAAK,CAAC,GAEvB7B,IAAU,YACN,GAAGC,WAAM,cAAcA,WAAM,IAAI4B,CAAK,CAAC,CAAC,GAE5C7B,IAAU,SACN,GAAGC,WAAM,OAAOA,WAAM,KAAK,IAAIY,EAAO,KAAK,GAAG,CAAC,CAAC,IAAIgB,CAAK,IAC/DhB,EAAO,KAAOZ,WAAM,IAAI,IAAIY,EAAO,IAAI,GAAG,EAAI,EAC/C,GAEM,GAAGZ,WAAM,KAAKA,WAAM,QAAQA,WAAM,QAAQ,IAAIY,EAAO,KAAK,GAAG,CAAC,CAAC,CAAC,IAAIgB,CAAK,IAC/EhB,EAAO,KAAOZ,WAAM,IAAI,IAAIY,EAAO,IAAI,GAAG,EAAI,EAC/C,EACD,EAEA,OAAO,IAAImB,KAAAA,gBAAgB,CAC1B,QAASd,EAAK,QACd,aAAcA,EAAK,aACnB,QAAS,CACR,MAAME,EAAQ,GAAGnB,WAAM,KAAKlB,CAAK,CAAC;AAAA,EAAKgB,EAAO,KAAK,KAAK,CAAC,KAAKmB,EAAK,OAAO;AAAA,EAE1E,OAAQ,KAAK,MAAO,CACnB,IAAK,SACJ,MAAO,GAAGE,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAK6C,EACvC,KAAK,QAAQ,KAAMA,GAAQA,EAAI,QAAU,KAAK,KAAK,GAAKV,EAAK,QAAQ,CAAC,EACtE,UACD,CAAC,GACF,IAAK,SACJ,MAAO,GAAGE,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAK6C,EAAI,KAAK,QAAQ,CAAC,EAAG,WAAW,CAAC;AAAA,EAAK3B,WAAM,KACnFlB,CACD,CAAC,GACF,QACC,MAAO,GAAGqC,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAK,KAAK,QAC3C,IAAI,CAAC8B,EAAQC,IAAMc,EAAIf,EAAQC,IAAM,KAAK,OAAS,SAAW,UAAU,CAAC,EACzE,KAAK;AAAA,EAAKb,WAAM,KAAKlB,CAAK,CAAC,IAAI,CAAC;AAAA,EAAKkB,WAAM,KAAKjB,CAAS,CAAC;AAAA,CAE9D,CACD,CACD,CAAC,EAAE,OACJ,CAAA,EAUa,YAAsBkC,GAAoC,CACtE,MAAMU,EAAM,CACXf,EACAb,IACI,CACJ,MAAM6B,EAAQhB,EAAO,OAAS,OAAOA,EAAO,KAAK,EACjD,OAAIb,IAAU,SACN,GAAGC,WAAM,KAAKd,CAAiB,CAAC,IAAI0C,CAAK,IAC/ChB,EAAO,KAAOZ,WAAM,IAAI,IAAIY,EAAO,IAAI,GAAG,EAAI,EAC/C,GAEGb,IAAU,WACN,GAAGC,WAAM,MAAMb,CAAmB,CAAC,IAAIa,WAAM,IAAI4B,CAAK,CAAC,IAC7DhB,EAAO,KAAOZ,WAAM,IAAI,IAAIY,EAAO,IAAI,GAAG,EAAI,EAC/C,GAEGb,IAAU,YACN,GAAGC,WAAM,cAAcA,WAAM,IAAI4B,CAAK,CAAC,CAAC,GAE5C7B,IAAU,kBACN,GAAGC,WAAM,MAAMb,CAAmB,CAAC,IAAIyC,CAAK,IAClDhB,EAAO,KAAOZ,WAAM,IAAI,IAAIY,EAAO,IAAI,GAAG,EAAI,EAC/C,GAEGb,IAAU,YACN,GAAGC,WAAM,IAAI4B,CAAK,CAAC,GAEpB,GAAG5B,WAAM,IAAIZ,CAAmB,CAAC,IAAIY,WAAM,IAAI4B,CAAK,CAAC,EAC7D,EAEA,OAAO,IAAII,KAAkB,kBAAA,CAC5B,QAASf,EAAK,QACd,cAAeA,EAAK,cACpB,SAAUA,EAAK,UAAY,GAC3B,SAAUA,EAAK,SACf,SAASgB,EAAmB,CAC3B,GAAI,KAAK,UAAYA,EAAS,SAAW,EACxC,MAAO;AAAA,EAAuCjC,WAAM,MACnDA,WAAM,IACL,SAASA,WAAM,KAAKA,WAAM,QAAQA,WAAM,QAAQ,SAAS,CAAC,CAAC,CAAC,eAAeA,WAAM,KAChFA,WAAM,QAAQA,WAAM,QAAQ,SAAS,CAAC,CACvC,CAAC,YACF,CACD,CAAC,EACH,EACA,QAAS,CACR,MAAMmB,EAAQ,GAAGnB,WAAM,KAAKlB,CAAK,CAAC;AAAA,EAAKgB,EAAO,KAAK,KAAK,CAAC,KAAKmB,EAAK,OAAO;AAAA,EAEpEiB,EAAc,CAACtB,EAAuBY,IAAoB,CAC/D,MAAMS,EAAW,KAAK,MAAM,SAASrB,EAAO,KAAK,EACjD,OAAIY,GAAUS,EACNN,EAAIf,EAAQ,iBAAiB,EAEjCqB,EACIN,EAAIf,EAAQ,UAAU,EAEvBe,EAAIf,EAAQY,EAAS,SAAW,UAAU,CAClD,EAEA,OAAQ,KAAK,MACZ,CAAA,IAAK,SACJ,MAAO,GAAGL,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAClC,KAAK,QACH,OAAO,CAAC,CAAE,MAAAuC,CAAM,IAAM,KAAK,MAAM,SAASA,CAAK,CAAC,EAChD,IAAKT,GAAWe,EAAIf,EAAQ,WAAW,CAAC,EACxC,KAAKZ,WAAM,IAAI,IAAI,CAAC,GAAKA,WAAM,IAAI,MAAM,CAC5C,GAED,IAAK,SAAU,CACd,MAAM4B,EAAQ,KAAK,QACjB,OAAO,CAAC,CAAE,MAAAP,CAAM,IAAM,KAAK,MAAM,SAASA,CAAK,CAAC,EAChD,IAAKT,GAAWe,EAAIf,EAAQ,WAAW,CAAC,EACxC,KAAKZ,WAAM,IAAI,IAAI,CAAC,EACtB,MAAO,GAAGmB,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAClC8C,EAAM,OAAS,GAAGA,CAAK;AAAA,EAAK5B,WAAM,KAAKlB,CAAK,CAAC,GAAK,EACnD,EACD,CACA,IAAK,QAAS,CACb,MAAMqD,EAAS,KAAK,MAClB,MAAM;AAAA,CAAI,EACV,IAAI,CAACC,EAAIvB,IACTA,IAAM,EAAI,GAAGb,WAAM,OAAOjB,CAAS,CAAC,KAAKiB,WAAM,OAAOoC,CAAE,CAAC,GAAK,MAAMA,CAAE,EACvE,EACC,KAAK;AAAA,CAAI,EACX,MAAO,GAAGjB,EAAQnB,WAAM,OAAOlB,CAAK,CAAC,KAAKmB,EAAa,CACtD,QAAS,KAAK,QACd,OAAQ,KAAK,OACb,SAAUgB,EAAK,SACf,MAAOiB,CACR,CAAC,EAAE,KAAK;AAAA,EAAKlC,WAAM,OAAOlB,CAAK,CAAC,IAAI,CAAC;AAAA,EAAKqD,CAAM;AAAA,CACjD,CACA,QACC,MAAO,GAAGhB,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAKmB,EAAa,CACpD,QAAS,KAAK,QACd,OAAQ,KAAK,OACb,SAAUgB,EAAK,SACf,MAAOiB,CACR,CAAC,EAAE,KAAK;AAAA,EAAKlC,WAAM,KAAKlB,CAAK,CAAC,IAAI,CAAC;AAAA,EAAKkB,WAAM,KAAKjB,CAAS,CAAC;AAAA,CAE/D,CACD,CACD,CAAC,EAAE,OAAO,CACX,EAUa,iBAA2BkC,GAAyC,CAChF,KAAM,CAAE,iBAAAoB,EAAmB,EAAK,EAAIpB,EAC9BU,EAAM,CACXf,EACAb,EASAK,EAA2B,CACvB,IAAA,CACJ,MAAMwB,EAAQhB,EAAO,OAAS,OAAOA,EAAO,KAAK,EAC3C0B,EAAS,OAAQ1B,EAAe,OAAU,SAC1C2B,EAAOD,IAAWlC,EAAQA,EAAQ,QAAQQ,CAAM,EAAI,CAAC,GAAK,CAAE,MAAO,EAAK,GACxE4B,EAASF,GAAWC,EAAa,QAAU,GAC3CE,EAASH,EAAUD,EAAmB,GAAGG,EAASzD,EAAYD,CAAK,IAAM,KAAQ,GAEvF,GAAIiB,IAAU,SACb,MAAO,GAAGC,WAAM,IAAIyC,CAAM,CAAC,GAAGzC,WAAM,KAAKd,CAAiB,CAAC,IAAI0C,CAAK,IACnEhB,EAAO,KAAOZ,WAAM,IAAI,IAAIY,EAAO,IAAI,GAAG,EAAI,EAC/C,GAED,GAAIb,IAAU,eACb,MAAO,GAAG0C,CAAM,GAAGzC,WAAM,KAAKd,CAAiB,CAAC,IAAIc,WAAM,IAAI4B,CAAK,CAAC,GAErE,GAAI7B,IAAU,wBACb,MAAO,GAAG0C,CAAM,GAAGzC,WAAM,MAAMb,CAAmB,CAAC,IAAIa,WAAM,IAAI4B,CAAK,CAAC,GAExE,GAAI7B,IAAU,WAAY,CACzB,MAAM2C,EAAmBJ,GAAUD,EAAmBrC,WAAM,MAAMb,CAAmB,EAAI,GACzF,MAAO,GAAGa,WAAM,IAAIyC,CAAM,CAAC,GAAGC,CAAgB,IAAI1C,WAAM,IAAI4B,CAAK,CAAC,IACjEhB,EAAO,KAAOZ,WAAM,IAAI,IAAIY,EAAO,IAAI,GAAG,EAAI,EAC/C,EACD,CACA,GAAIb,IAAU,YACb,MAAO,GAAGC,WAAM,cAAcA,WAAM,IAAI4B,CAAK,CAAC,CAAC,GAEhD,GAAI7B,IAAU,kBACb,MAAO,GAAGC,WAAM,IAAIyC,CAAM,CAAC,GAAGzC,WAAM,MAAMb,CAAmB,CAAC,IAAIyC,CAAK,IACtEhB,EAAO,KAAOZ,WAAM,IAAI,IAAIY,EAAO,IAAI,GAAG,EAAI,EAC/C,GAED,GAAIb,IAAU,YACb,MAAO,GAAGC,WAAM,IAAI4B,CAAK,CAAC,GAE3B,MAAMe,EAAqBL,GAAUD,EAAmBrC,WAAM,IAAIZ,CAAmB,EAAI,GACzF,MAAO,GAAGY,WAAM,IAAIyC,CAAM,CAAC,GAAGE,CAAkB,IAAI3C,WAAM,IAAI4B,CAAK,CAAC,EACrE,EAEA,OAAO,IAAIgB,KAAAA,uBAAuB,CACjC,QAAS3B,EAAK,QACd,cAAeA,EAAK,cACpB,SAAUA,EAAK,UAAY,GAC3B,SAAUA,EAAK,SACf,iBAAAoB,EACA,SAASJ,EAAmB,CAC3B,GAAI,KAAK,UAAYA,EAAS,SAAW,EACxC,MAAO;AAAA,EAAuCjC,WAAM,MACnDA,WAAM,IACL,SAASA,WAAM,KAAKA,WAAM,QAAQA,WAAM,QAAQ,SAAS,CAAC,CAAC,CAAC,eAAeA,WAAM,KAChFA,WAAM,QAAQA,WAAM,QAAQ,SAAS,CAAC,CACvC,CAAC,YACF,CACD,CAAC,EACH,EACA,QAAS,CACR,MAAMmB,EAAQ,GAAGnB,WAAM,KAAKlB,CAAK,CAAC;AAAA,EAAKgB,EAAO,KAAK,KAAK,CAAC,KAAKmB,EAAK,OAAO;AAAA,EAE1E,OAAQ,KAAK,MACZ,CAAA,IAAK,SACJ,MAAO,GAAGE,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAK,KAAK,QAC3C,OAAO,CAAC,CAAE,MAAAuC,CAAM,IAAM,KAAK,MAAM,SAASA,CAAK,CAAC,EAChD,IAAKT,GAAWe,EAAIf,EAAQ,WAAW,CAAC,EACxC,KAAKZ,WAAM,IAAI,IAAI,CAAC,CAAC,GAExB,IAAK,SAAU,CACd,MAAM4B,EAAQ,KAAK,QACjB,OAAO,CAAC,CAAE,MAAAP,CAAM,IAAM,KAAK,MAAM,SAASA,CAAK,CAAC,EAChD,IAAKT,GAAWe,EAAIf,EAAQ,WAAW,CAAC,EACxC,KAAKZ,WAAM,IAAI,IAAI,CAAC,EACtB,MAAO,GAAGmB,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAClC8C,EAAM,KAAK,EAAI,GAAGA,CAAK;AAAA,EAAK5B,WAAM,KAAKlB,CAAK,CAAC,GAAK,EACnD,EACD,CACA,IAAK,QAAS,CACb,MAAMqD,EAAS,KAAK,MAClB,MAAM;AAAA,CAAI,EACV,IAAI,CAACC,EAAIvB,IACTA,IAAM,EAAI,GAAGb,WAAM,OAAOjB,CAAS,CAAC,KAAKiB,WAAM,OAAOoC,CAAE,CAAC,GAAK,MAAMA,CAAE,EACvE,EACC,KAAK;AAAA,CAAI,EACX,MAAO,GAAGjB,CAAK,GAAGnB,WAAM,OAAOlB,CAAK,CAAC,KAAK,KAAK,QAC7C,IAAI,CAAC8B,EAAQC,EAAGT,IAAY,CAC5B,MAAM6B,EACL,KAAK,MAAM,SAASrB,EAAO,KAAK,GAC/BA,EAAO,QAAU,IAAQ,KAAK,gBAAgB,GAAGA,EAAO,KAAK,EAAE,EAC3DY,EAASX,IAAM,KAAK,OAK1B,MAHC,CAACW,GACD,OAAOZ,EAAO,OAAU,UACxB,KAAK,QAAQ,KAAK,MAAM,EAAE,QAAUA,EAAO,MAEpCe,EAAIf,EAAQqB,EAAW,wBAA0B,eAAgB7B,CAAO,EAE5EoB,GAAUS,EACNN,EAAIf,EAAQ,kBAAmBR,CAAO,EAE1C6B,EACIN,EAAIf,EAAQ,WAAYR,CAAO,EAEhCuB,EAAIf,EAAQY,EAAS,SAAW,WAAYpB,CAAO,CAC3D,CAAC,EACA,KAAK;AAAA,EAAKJ,WAAM,OAAOlB,CAAK,CAAC,IAAI,CAAC;AAAA,EAAKqD,CAAM;AAAA,CAChD,CACA,QACC,MAAO,GAAGhB,CAAK,GAAGnB,WAAM,KAAKlB,CAAK,CAAC,KAAK,KAAK,QAC3C,IAAI,CAAC8B,EAAQC,EAAGT,IAAY,CAC5B,MAAM6B,EACL,KAAK,MAAM,SAASrB,EAAO,KAAK,GAC/BA,EAAO,QAAU,IAAQ,KAAK,gBAAgB,GAAGA,EAAO,KAAK,EAAE,EAC3DY,EAASX,IAAM,KAAK,OAK1B,MAHC,CAACW,GACD,OAAOZ,EAAO,OAAU,UACxB,KAAK,QAAQ,KAAK,MAAM,EAAE,QAAUA,EAAO,MAEpCe,EAAIf,EAAQqB,EAAW,wBAA0B,eAAgB7B,CAAO,EAE5EoB,GAAUS,EACNN,EAAIf,EAAQ,kBAAmBR,CAAO,EAE1C6B,EACIN,EAAIf,EAAQ,WAAYR,CAAO,EAEhCuB,EAAIf,EAAQY,EAAS,SAAW,WAAYpB,CAAO,CAC3D,CAAC,EACA,KAAK;AAAA,EAAKJ,WAAM,KAAKlB,CAAK,CAAC,IAAI,CAAC;AAAA,EAAKkB,WAAM,KAAKjB,CAAS,CAAC;AAAA,CAE9D,CACD,CACD,CAAC,EAAE,OACJ,CAAA,EAEa,KAAO,CAAC8D,EAAU,GAAI1B,EAAQ,KAAO,CACjD,MAAM2B,EAAQ;AAAA,EAAKD,CAAO;AAAA,EAAK,MAAM;AAAA,CAAI,EACnCE,EAAWC,UAAAA,yBAAM7B,CAAK,EAAE,OACxB8B,EACL,KAAK,IACJH,EAAM,OAAO,CAACI,EAAKd,IAAO,CACzB,MAAMe,EAAOH,UAAAA,yBAAMZ,CAAE,EACrB,OAAOe,EAAK,OAASD,EAAMC,EAAK,OAASD,CAC1C,EAAG,CAAC,EACJH,CACD,EAAI,EACCK,EAAMN,EACV,IACCV,GACA,GAAGpC,WAAM,KAAKlB,CAAK,CAAC,KAAKkB,WAAM,IAAIoC,CAAE,CAAC,GAAG,IAAI,OAAOa,EAAMD,UAAAA,yBAAMZ,CAAE,EAAE,MAAM,CAAC,GAAGpC,WAAM,KACnFlB,CACD,CAAC,EACH,EACC,KAAK;AAAA,CAAI,EACX,QAAQ,OAAO,MACd,GAAGkB,WAAM,KAAKlB,CAAK,CAAC;AAAA,EAAKkB,WAAM,MAAMpB,CAAa,CAAC,KAAKoB,WAAM,MAAMmB,CAAK,CAAC,IAAInB,WAAM,KACnFV,EAAQ,OAAO,KAAK,IAAI2D,EAAMF,EAAW,EAAG,CAAC,CAAC,EAAIxD,EACnD,CAAC;AAAA,EAAK6D,CAAG;AAAA,EAAKpD,WAAM,KAAKR,GAAiBF,EAAQ,OAAO2D,EAAM,CAAC,EAAIxD,EAAqB,CAAC;AAAA,CAC3F,CACD,EAEa,OAAS,CAACoD,EAAU,KAAO,CACvC,QAAQ,OAAO,MAAM,GAAG7C,WAAM,KAAKjB,CAAS,CAAC,KAAKiB,WAAM,IAAI6C,CAAO,CAAC;AAAA;AAAA,CAAM,CAC3E,EAEa,MAAQ,CAAC1B,EAAQ,KAAO,CACpC,QAAQ,OAAO,MAAM,GAAGnB,WAAM,KAAKnB,EAAW,CAAC,KAAKsC,CAAK;AAAA,CAAI,CAC9D,EAEa,MAAQ,CAAC0B,EAAU,KAAO,CACtC,QAAQ,OAAO,MAAM,GAAG7C,WAAM,KAAKlB,CAAK,CAAC;AAAA,EAAKkB,WAAM,KAAKjB,CAAS,CAAC,KAAK8D,CAAO;AAAA;AAAA,CAAM,CACtF,EAKa,IAAM,CAClB,QAAS,CAACA,EAAU,GAAI,CAAE,OAAA/C,EAASE,WAAM,KAAKlB,CAAK,CAAE,EAAuB,CAAO,IAAA,CAClF,MAAMuE,EAAQ,CAAC,GAAGrD,WAAM,KAAKlB,CAAK,CAAC,EAAE,EACrC,GAAI+D,EAAS,CACZ,KAAM,CAACS,EAAW,GAAGR,CAAK,EAAID,EAAQ,MAAM;AAAA,CAAI,EAChDQ,EAAM,KAAK,GAAGvD,CAAM,KAAKwD,CAAS,GAAI,GAAGR,EAAM,IAAKV,GAAO,GAAGpC,WAAM,KAAKlB,CAAK,CAAC,KAAKsD,CAAE,EAAE,CAAC,CAC1F,CACA,QAAQ,OAAO,MAAM,GAAGiB,EAAM,KAAK;AAAA,CAAI,CAAC;AAAA,CAAI,CAC7C,EACA,KAAOR,GAAoB,CAC1B,IAAI,QAAQA,EAAS,CAAE,OAAQ7C,WAAM,KAAKN,CAAM,CAAE,CAAC,CACpD,EACA,QAAUmD,GAAoB,CAC7B,IAAI,QAAQA,EAAS,CAAE,OAAQ7C,WAAM,MAAML,CAAS,CAAE,CAAC,CACxD,EACA,KAAOkD,GAAoB,CAC1B,IAAI,QAAQA,EAAS,CAAE,OAAQ7C,WAAM,MAAMpB,CAAa,CAAE,CAAC,CAC5D,EACA,KAAOiE,GAAoB,CAC1B,IAAI,QAAQA,EAAS,CAAE,OAAQ7C,WAAM,OAAOJ,CAAM,CAAE,CAAC,CACtD,EAEA,QAAUiD,GAAoB,CAC7B,IAAI,KAAKA,CAAO,CACjB,EACA,MAAQA,GAAoB,CAC3B,IAAI,QAAQA,EAAS,CAAE,OAAQ7C,WAAM,IAAIH,CAAO,CAAE,CAAC,CACpD,CACD,EAEM4C,EAAS,GAAGzC,WAAM,KAAKlB,CAAK,CAAC,KACtB,OAAS,CACrB,QAAS,MACRyE,EACA,CAAE,OAAAzD,EAASE,WAAM,KAAKlB,CAAK,CAAE,EAAuB,KAChD,CACJ,QAAQ,OAAO,MAAM,GAAGkB,WAAM,KAAKlB,CAAK,CAAC;AAAA,EAAKgB,CAAM,IAAI,EACxD,IAAI0D,EAAY,EAChB,cAAeC,KAASF,EAAU,CACjCE,EAAQA,EAAM,QAAQ,MAAO;AAAA,EAAKhB,CAAM,EAAE,EACtCgB,EAAM,SAAS;AAAA,CAAI,IACtBD,EAAY,EAAIR,mCAAMS,EAAM,MAAMA,EAAM,YAAY;AAAA,CAAI,CAAC,CAAC,EAAE,QAE7D,MAAMC,EAAWV,mCAAMS,CAAK,EAAE,OAC1BD,EAAYE,EAAW,QAAQ,OAAO,SACzCF,GAAaE,EACb,QAAQ,OAAO,MAAMD,CAAK,IAE1B,QAAQ,OAAO,MAAM;AAAA,EAAKhB,CAAM,GAAGgB,EAAM,WAAW,EAAE,EACtDD,EAAY,EAAIR,UAAAA,yBAAMS,EAAM,UAAW,CAAA,EAAE,OAE3C,CACA,QAAQ,OAAO,MAAM;AAAA,CAAI,CAC1B,EACA,KAAOF,GACC,OAAO,QAAQA,EAAU,CAAE,OAAQvD,WAAM,KAAKN,CAAM,CAAE,CAAC,EAE/D,QAAU6D,GACF,OAAO,QAAQA,EAAU,CAAE,OAAQvD,WAAM,MAAML,CAAS,CAAE,CAAC,EAEnE,KAAO4D,GACC,OAAO,QAAQA,EAAU,CAAE,OAAQvD,WAAM,MAAMpB,CAAa,CAAE,CAAC,EAEvE,KAAO2E,GACC,OAAO,QAAQA,EAAU,CAAE,OAAQvD,WAAM,OAAOJ,CAAM,CAAE,CAAC,EAGjE,QAAU2D,GACF,OAAO,KAAKA,CAAQ,EAE5B,MAAQA,GACA,OAAO,QAAQA,EAAU,CAAE,OAAQvD,WAAM,IAAIH,CAAO,CAAE,CAAC,CAEhE,EAMa,QAAU,CAAC,CAAE,UAAA8D,EAAY,MAAO,EAAoB,CAAO,IAAA,CACvE,MAAMC,EAASxF,EAAU,CAAC,SAAK,SAAK,SAAK,QAAG,EAAI,CAAC,SAAK,IAAK,IAAK,GAAG,EAC7DyF,EAAQzF,EAAU,GAAK,IACvB0F,EAAO,QAAQ,IAAI,KAAO,OAEhC,IAAIC,EACAC,EACAC,EAAkB,GAClBC,EAAW,GACXC,EACAC,EAAkB,YAAY,MAElC,MAAMC,EAAcC,GAAiB,CACpC,MAAMlB,EAAMkB,EAAO,EAAI,uBAAyB,WAC5CL,GAAiBM,EAAKnB,EAAKkB,CAAI,CACpC,EAEME,EAAoB,IAAMH,EAAW,CAAC,EACtCI,EAAqB,IAAMJ,EAAW,CAAC,EAEvCK,EAAgB,IAAM,CAE3B,QAAQ,GAAG,2BAA4BF,CAAiB,EAExD,QAAQ,GAAG,qBAAsBA,CAAiB,EAElD,QAAQ,GAAG,SAAUC,CAAkB,EACvC,QAAQ,GAAG,UAAWA,CAAkB,EACxC,QAAQ,GAAG,OAAQJ,CAAU,CAC9B,EAEMM,EAAa,IAAM,CACxB,QAAQ,eAAe,2BAA4BH,CAAiB,EACpE,QAAQ,eAAe,qBAAsBA,CAAiB,EAC9D,QAAQ,eAAe,SAAUC,CAAkB,EACnD,QAAQ,eAAe,UAAWA,CAAkB,EACpD,QAAQ,eAAe,OAAQJ,CAAU,CAC1C,EAEMO,EAAmB,IAAM,CAC9B,GAAIT,IAAiB,OAAW,OAC5BL,GAAM,QAAQ,OAAO,MAAM;AAAA,CAAI,EACnC,MAAMe,EAAYV,EAAa,MAAM;AAAA,CAAI,EACzC,QAAQ,OAAO,MAAMhE,WAAO,OAAA,KAAK,KAAM0E,EAAU,OAAS,CAAC,CAAC,EAC5D,QAAQ,OAAO,MAAMC,iBAAM,KAAKD,EAAU,MAAM,CAAC,CAClD,EAEME,EAAgB3B,GACdA,EAAI,QAAQ,OAAQ,EAAE,EAGxB4B,EAAeC,GAA2B,CAC/C,MAAMC,GAAY,YAAY,MAAQD,GAAU,IAC1CE,EAAM,KAAK,MAAMD,EAAW,EAAE,EAC9BE,EAAO,KAAK,MAAMF,EAAW,EAAE,EACrC,OAAOC,EAAM,EAAI,IAAIA,CAAG,KAAKC,CAAI,KAAO,IAAIA,CAAI,IACjD,EAEMC,EAAQ,CAACjC,EAAM,KAAa,CACjCa,EAAkB,GAClBF,EAAUuB,KAAAA,MAAAA,EACVpB,EAAWa,EAAa3B,CAAG,EAC3BgB,EAAU,YAAY,IAAI,EAC1B,QAAQ,OAAO,MAAM,GAAGpE,WAAM,KAAKlB,CAAK,CAAC;AAAA,CAAI,EAC7C,IAAIyG,EAAa,EACbC,EAAiB,EACrBd,IACAV,EAAO,YAAY,IAAM,CACxB,GAAIF,GAAQI,IAAaC,EACxB,OAEDS,IACAT,EAAeD,EACf,MAAMuB,EAAQzF,WAAM,QAAQ4D,EAAO2B,CAAU,CAAC,EAE9C,GAAIzB,EACH,QAAQ,OAAO,MAAM,GAAG2B,CAAK,KAAKvB,CAAQ,KAAK,UACrCP,IAAc,QACxB,QAAQ,OAAO,MAAM,GAAG8B,CAAK,KAAKvB,CAAQ,IAAIc,EAAYZ,CAAO,CAAC,EAAE,MAC9D,CACN,MAAMsB,EAAc,IAAI,OAAO,KAAK,MAAMF,CAAc,CAAC,EAAE,MAAM,EAAG,CAAC,EACrE,QAAQ,OAAO,MAAM,GAAGC,CAAK,KAAKvB,CAAQ,GAAGwB,CAAW,EAAE,CAC3D,CAEAH,EAAaA,EAAa,EAAI3B,EAAO,OAAS2B,EAAa,EAAI,EAC/DC,EAAiBA,EAAiB5B,EAAO,OAAS4B,EAAiB,KAAQ,CAC5E,EAAG3B,CAAK,CACT,EAEMU,EAAO,CAACnB,EAAM,GAAIkB,EAAO,IAAY,CAC1CL,EAAkB,GAClB,cAAcD,CAAI,EAClBY,EAAiB,EACjB,MAAMe,EACLrB,IAAS,EACNtE,WAAM,MAAMpB,CAAa,EACzB0F,IAAS,EACRtE,WAAM,IAAItB,CAAa,EACvBsB,WAAM,IAAIrB,CAAY,EAC3BuF,EAAWa,EAAa3B,GAAOc,CAAQ,EACnCP,IAAc,QACjB,QAAQ,OAAO,MAAM,GAAGgC,CAAI,KAAKzB,CAAQ,IAAIc,EAAYZ,CAAO,CAAC;AAAA,CAAI,EAErE,QAAQ,OAAO,MAAM,GAAGuB,CAAI,KAAKzB,CAAQ;AAAA,CAAI,EAE9CS,EAAAA,EACAZ,EAAAA,CACD,EAMA,MAAO,CACN,MAAAsB,EACA,KAAAd,EACA,QAPe,CAACnB,EAAM,KAAa,CACnCc,EAAWa,EAAa3B,GAAOc,CAAQ,CACxC,CAMA,CACD,EA4Ba,MAAQ,MACpB0B,EACA3E,IACoD,CACpD,MAAM4E,EAAU,CACVC,EAAAA,EAAc,OAAO,KAAKF,CAAO,EAEvC,UAAWG,KAAQD,EAAa,CAC/B,MAAME,EAASJ,EAAQG,CAAe,EAChCE,EAAS,MAAMD,EAAO,CAAE,QAAAH,CAAQ,CAAC,GAAG,MAAOK,GAAM,CACtD,MAAMA,CACP,CAAC,EAKD,GAAI,OAAOjF,GAAM,UAAa,YAAckF,KAAAA,SAASF,CAAM,EAAG,CAC7DJ,EAAQE,CAAI,EAAI,WAChB9E,EAAK,SAAS,CAAE,QAAA4E,CAAQ,CAAC,EACzB,QACD,CAEAA,EAAQE,CAAI,EAAIE,CACjB,CAEA,OAAOJ,CACR,EAqBa,MAAQ,MAAOO,GAAkB,CAC7C,UAAWC,KAAQD,EAAO,CACzB,GAAIC,EAAK,UAAY,GAAO,SAE5B,MAAM/H,EAAI,UACVA,EAAE,MAAM+H,EAAK,KAAK,EAClB,MAAMJ,EAAS,MAAMI,EAAK,KAAK/H,EAAE,OAAO,EACxCA,EAAE,KAAK2H,GAAUI,EAAK,KAAK,CAC5B,CACD","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/node_modules/@clack/prompts/dist/index.d.cts b/node_modules/@clack/prompts/dist/index.d.cts index 3a1efba..b31a9ed 100644 --- a/node_modules/@clack/prompts/dist/index.d.cts +++ b/node_modules/@clack/prompts/dist/index.d.cts @@ -80,6 +80,7 @@ interface GroupMultiSelectOptions { initialValues?: Value[]; required?: boolean; cursorAt?: Value; + selectableGroups?: boolean; } declare const groupMultiselect: (opts: GroupMultiSelectOptions) => Promise; declare const note: (message?: string, title?: string) => void; diff --git a/node_modules/@clack/prompts/dist/index.d.mts b/node_modules/@clack/prompts/dist/index.d.mts index 3a1efba..b31a9ed 100644 --- a/node_modules/@clack/prompts/dist/index.d.mts +++ b/node_modules/@clack/prompts/dist/index.d.mts @@ -80,6 +80,7 @@ interface GroupMultiSelectOptions { initialValues?: Value[]; required?: boolean; cursorAt?: Value; + selectableGroups?: boolean; } declare const groupMultiselect: (opts: GroupMultiSelectOptions) => Promise; declare const note: (message?: string, title?: string) => void; diff --git a/node_modules/@clack/prompts/dist/index.d.ts b/node_modules/@clack/prompts/dist/index.d.ts index 3a1efba..b31a9ed 100644 --- a/node_modules/@clack/prompts/dist/index.d.ts +++ b/node_modules/@clack/prompts/dist/index.d.ts @@ -80,6 +80,7 @@ interface GroupMultiSelectOptions { initialValues?: Value[]; required?: boolean; cursorAt?: Value; + selectableGroups?: boolean; } declare const groupMultiselect: (opts: GroupMultiSelectOptions) => Promise; declare const note: (message?: string, title?: string) => void; diff --git a/node_modules/@clack/prompts/dist/index.mjs b/node_modules/@clack/prompts/dist/index.mjs index 688171b..b55d77f 100644 --- a/node_modules/@clack/prompts/dist/index.mjs +++ b/node_modules/@clack/prompts/dist/index.mjs @@ -1,87 +1,87 @@ -import{stripVTControlCharacters as S}from"node:util";import{TextPrompt as Q,PasswordPrompt as X,ConfirmPrompt as Z,SelectPrompt as ee,SelectKeyPrompt as te,MultiSelectPrompt as se,GroupMultiSelectPrompt as re,isCancel as ie,block as ne}from"@clack/core";export{isCancel,updateSettings}from"@clack/core";import g from"node:process";import e from"picocolors";import{cursor as oe,erase as ae}from"sisteransi";function ce(){return g.platform!=="win32"?g.env.TERM!=="linux":!!g.env.CI||!!g.env.WT_SESSION||!!g.env.TERMINUS_SUBLIME||g.env.ConEmuTask==="{cmd::Cmder}"||g.env.TERM_PROGRAM==="Terminus-Sublime"||g.env.TERM_PROGRAM==="vscode"||g.env.TERM==="xterm-256color"||g.env.TERM==="alacritty"||g.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}const V=ce(),u=(t,n)=>V?t:n,le=u("\u25C6","*"),L=u("\u25A0","x"),W=u("\u25B2","x"),C=u("\u25C7","o"),ue=u("\u250C","T"),o=u("\u2502","|"),d=u("\u2514","\u2014"),k=u("\u25CF",">"),P=u("\u25CB"," "),A=u("\u25FB","[\u2022]"),T=u("\u25FC","[+]"),F=u("\u25FB","[ ]"),$e=u("\u25AA","\u2022"),_=u("\u2500","-"),me=u("\u256E","+"),de=u("\u251C","+"),pe=u("\u256F","+"),q=u("\u25CF","\u2022"),D=u("\u25C6","*"),U=u("\u25B2","!"),K=u("\u25A0","x"),w=t=>{switch(t){case"initial":case"active":return e.cyan(le);case"cancel":return e.red(L);case"error":return e.yellow(W);case"submit":return e.green(C)}},B=t=>{const{cursor:n,options:s,style:r}=t,i=t.maxItems??Number.POSITIVE_INFINITY,a=Math.max(process.stdout.rows-4,0),c=Math.min(a,Math.max(i,5));let l=0;n>=l+c-3?l=Math.max(Math.min(n-c+3,s.length-c),0):n0,p=c{const j=v===0&&$,E=v===x.length-1&&p;return j||E?e.dim("..."):r(M,v+l===n)})},he=t=>new Q({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,render(){const n=`${e.gray(o)} -${w(this.state)} ${t.message} -`,s=t.placeholder?e.inverse(t.placeholder[0])+e.dim(t.placeholder.slice(1)):e.inverse(e.hidden("_")),r=this.value?this.valueWithCursor:s;switch(this.state){case"error":return`${n.trim()} -${e.yellow(o)} ${r} +import{stripVTControlCharacters as S}from"node:util";import{TextPrompt as Q,PasswordPrompt as X,ConfirmPrompt as Z,SelectPrompt as ee,SelectKeyPrompt as te,MultiSelectPrompt as re,GroupMultiSelectPrompt as se,isCancel as ie,block as ne}from"@clack/core";export{isCancel,updateSettings}from"@clack/core";import y from"node:process";import e from"picocolors";import{cursor as oe,erase as ae}from"sisteransi";function ce(){return y.platform!=="win32"?y.env.TERM!=="linux":!!y.env.CI||!!y.env.WT_SESSION||!!y.env.TERMINUS_SUBLIME||y.env.ConEmuTask==="{cmd::Cmder}"||y.env.TERM_PROGRAM==="Terminus-Sublime"||y.env.TERM_PROGRAM==="vscode"||y.env.TERM==="xterm-256color"||y.env.TERM==="alacritty"||y.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}const V=ce(),u=(t,n)=>V?t:n,le=u("\u25C6","*"),L=u("\u25A0","x"),W=u("\u25B2","x"),C=u("\u25C7","o"),ue=u("\u250C","T"),o=u("\u2502","|"),d=u("\u2514","\u2014"),k=u("\u25CF",">"),P=u("\u25CB"," "),A=u("\u25FB","[\u2022]"),T=u("\u25FC","[+]"),F=u("\u25FB","[ ]"),$e=u("\u25AA","\u2022"),_=u("\u2500","-"),me=u("\u256E","+"),de=u("\u251C","+"),pe=u("\u256F","+"),q=u("\u25CF","\u2022"),D=u("\u25C6","*"),U=u("\u25B2","!"),K=u("\u25A0","x"),b=t=>{switch(t){case"initial":case"active":return e.cyan(le);case"cancel":return e.red(L);case"error":return e.yellow(W);case"submit":return e.green(C)}},G=t=>{const{cursor:n,options:r,style:i}=t,s=t.maxItems??Number.POSITIVE_INFINITY,c=Math.max(process.stdout.rows-4,0),a=Math.min(c,Math.max(s,5));let l=0;n>=l+a-3?l=Math.max(Math.min(n-a+3,r.length-a),0):n0,g=a{const j=v===0&&$,E=v===f.length-1&&g;return j||E?e.dim("..."):i(p,v+l===n)})},he=t=>new Q({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,render(){const n=`${e.gray(o)} +${b(this.state)} ${t.message} +`,r=t.placeholder?e.inverse(t.placeholder[0])+e.dim(t.placeholder.slice(1)):e.inverse(e.hidden("_")),i=this.value?this.valueWithCursor:r;switch(this.state){case"error":return`${n.trim()} +${e.yellow(o)} ${i} ${e.yellow(d)} ${e.yellow(this.error)} `;case"submit":return`${n}${e.gray(o)} ${e.dim(this.value||t.placeholder)}`;case"cancel":return`${n}${e.gray(o)} ${e.strikethrough(e.dim(this.value??""))}${this.value?.trim()?` -${e.gray(o)}`:""}`;default:return`${n}${e.cyan(o)} ${r} +${e.gray(o)}`:""}`;default:return`${n}${e.cyan(o)} ${i} ${e.cyan(d)} `}}}).prompt(),ge=t=>new X({validate:t.validate,mask:t.mask??$e,render(){const n=`${e.gray(o)} -${w(this.state)} ${t.message} -`,s=this.valueWithCursor,r=this.masked;switch(this.state){case"error":return`${n.trim()} -${e.yellow(o)} ${r} +${b(this.state)} ${t.message} +`,r=this.valueWithCursor,i=this.masked;switch(this.state){case"error":return`${n.trim()} +${e.yellow(o)} ${i} ${e.yellow(d)} ${e.yellow(this.error)} -`;case"submit":return`${n}${e.gray(o)} ${e.dim(r)}`;case"cancel":return`${n}${e.gray(o)} ${e.strikethrough(e.dim(r??""))}${r?` -${e.gray(o)}`:""}`;default:return`${n}${e.cyan(o)} ${s} +`;case"submit":return`${n}${e.gray(o)} ${e.dim(i)}`;case"cancel":return`${n}${e.gray(o)} ${e.strikethrough(e.dim(i??""))}${i?` +${e.gray(o)}`:""}`;default:return`${n}${e.cyan(o)} ${r} ${e.cyan(d)} -`}}}).prompt(),ye=t=>{const n=t.active??"Yes",s=t.inactive??"No";return new Z({active:n,inactive:s,initialValue:t.initialValue??!0,render(){const r=`${e.gray(o)} -${w(this.state)} ${t.message} -`,i=this.value?n:s;switch(this.state){case"submit":return`${r}${e.gray(o)} ${e.dim(i)}`;case"cancel":return`${r}${e.gray(o)} ${e.strikethrough(e.dim(i))} -${e.gray(o)}`;default:return`${r}${e.cyan(o)} ${this.value?`${e.green(k)} ${n}`:`${e.dim(P)} ${e.dim(n)}`} ${e.dim("/")} ${this.value?`${e.dim(P)} ${e.dim(s)}`:`${e.green(k)} ${s}`} +`}}}).prompt(),ye=t=>{const n=t.active??"Yes",r=t.inactive??"No";return new Z({active:n,inactive:r,initialValue:t.initialValue??!0,render(){const i=`${e.gray(o)} +${b(this.state)} ${t.message} +`,s=this.value?n:r;switch(this.state){case"submit":return`${i}${e.gray(o)} ${e.dim(s)}`;case"cancel":return`${i}${e.gray(o)} ${e.strikethrough(e.dim(s))} +${e.gray(o)}`;default:return`${i}${e.cyan(o)} ${this.value?`${e.green(k)} ${n}`:`${e.dim(P)} ${e.dim(n)}`} ${e.dim("/")} ${this.value?`${e.dim(P)} ${e.dim(r)}`:`${e.green(k)} ${r}`} ${e.cyan(d)} -`}}}).prompt()},ve=t=>{const n=(s,r)=>{const i=s.label??String(s.value);switch(r){case"selected":return`${e.dim(i)}`;case"active":return`${e.green(k)} ${i} ${s.hint?e.dim(`(${s.hint})`):""}`;case"cancelled":return`${e.strikethrough(e.dim(i))}`;default:return`${e.dim(P)} ${e.dim(i)}`}};return new ee({options:t.options,initialValue:t.initialValue,render(){const s=`${e.gray(o)} -${w(this.state)} ${t.message} -`;switch(this.state){case"submit":return`${s}${e.gray(o)} ${n(this.options[this.cursor],"selected")}`;case"cancel":return`${s}${e.gray(o)} ${n(this.options[this.cursor],"cancelled")} -${e.gray(o)}`;default:return`${s}${e.cyan(o)} ${B({cursor:this.cursor,options:this.options,maxItems:t.maxItems,style:(r,i)=>n(r,i?"active":"inactive")}).join(` +`}}}).prompt()},ve=t=>{const n=(r,i)=>{const s=r.label??String(r.value);switch(i){case"selected":return`${e.dim(s)}`;case"active":return`${e.green(k)} ${s} ${r.hint?e.dim(`(${r.hint})`):""}`;case"cancelled":return`${e.strikethrough(e.dim(s))}`;default:return`${e.dim(P)} ${e.dim(s)}`}};return new ee({options:t.options,initialValue:t.initialValue,render(){const r=`${e.gray(o)} +${b(this.state)} ${t.message} +`;switch(this.state){case"submit":return`${r}${e.gray(o)} ${n(this.options[this.cursor],"selected")}`;case"cancel":return`${r}${e.gray(o)} ${n(this.options[this.cursor],"cancelled")} +${e.gray(o)}`;default:return`${r}${e.cyan(o)} ${G({cursor:this.cursor,options:this.options,maxItems:t.maxItems,style:(i,s)=>n(i,s?"active":"inactive")}).join(` ${e.cyan(o)} `)} ${e.cyan(d)} -`}}}).prompt()},we=t=>{const n=(s,r="inactive")=>{const i=s.label??String(s.value);return r==="selected"?`${e.dim(i)}`:r==="cancelled"?`${e.strikethrough(e.dim(i))}`:r==="active"?`${e.bgCyan(e.gray(` ${s.value} `))} ${i} ${s.hint?e.dim(`(${s.hint})`):""}`:`${e.gray(e.bgWhite(e.inverse(` ${s.value} `)))} ${i} ${s.hint?e.dim(`(${s.hint})`):""}`};return new te({options:t.options,initialValue:t.initialValue,render(){const s=`${e.gray(o)} -${w(this.state)} ${t.message} -`;switch(this.state){case"submit":return`${s}${e.gray(o)} ${n(this.options.find(r=>r.value===this.value)??t.options[0],"selected")}`;case"cancel":return`${s}${e.gray(o)} ${n(this.options[0],"cancelled")} -${e.gray(o)}`;default:return`${s}${e.cyan(o)} ${this.options.map((r,i)=>n(r,i===this.cursor?"active":"inactive")).join(` +`}}}).prompt()},we=t=>{const n=(r,i="inactive")=>{const s=r.label??String(r.value);return i==="selected"?`${e.dim(s)}`:i==="cancelled"?`${e.strikethrough(e.dim(s))}`:i==="active"?`${e.bgCyan(e.gray(` ${r.value} `))} ${s} ${r.hint?e.dim(`(${r.hint})`):""}`:`${e.gray(e.bgWhite(e.inverse(` ${r.value} `)))} ${s} ${r.hint?e.dim(`(${r.hint})`):""}`};return new te({options:t.options,initialValue:t.initialValue,render(){const r=`${e.gray(o)} +${b(this.state)} ${t.message} +`;switch(this.state){case"submit":return`${r}${e.gray(o)} ${n(this.options.find(i=>i.value===this.value)??t.options[0],"selected")}`;case"cancel":return`${r}${e.gray(o)} ${n(this.options[0],"cancelled")} +${e.gray(o)}`;default:return`${r}${e.cyan(o)} ${this.options.map((i,s)=>n(i,s===this.cursor?"active":"inactive")).join(` ${e.cyan(o)} `)} ${e.cyan(d)} -`}}}).prompt()},fe=t=>{const n=(s,r)=>{const i=s.label??String(s.value);return r==="active"?`${e.cyan(A)} ${i} ${s.hint?e.dim(`(${s.hint})`):""}`:r==="selected"?`${e.green(T)} ${e.dim(i)}`:r==="cancelled"?`${e.strikethrough(e.dim(i))}`:r==="active-selected"?`${e.green(T)} ${i} ${s.hint?e.dim(`(${s.hint})`):""}`:r==="submitted"?`${e.dim(i)}`:`${e.dim(F)} ${e.dim(i)}`};return new se({options:t.options,initialValues:t.initialValues,required:t.required??!0,cursorAt:t.cursorAt,validate(s){if(this.required&&s.length===0)return`Please select at least one option. -${e.reset(e.dim(`Press ${e.gray(e.bgWhite(e.inverse(" space ")))} to select, ${e.gray(e.bgWhite(e.inverse(" enter ")))} to submit`))}`},render(){const s=`${e.gray(o)} -${w(this.state)} ${t.message} -`,r=(i,a)=>{const c=this.value.includes(i.value);return a&&c?n(i,"active-selected"):c?n(i,"selected"):n(i,a?"active":"inactive")};switch(this.state){case"submit":return`${s}${e.gray(o)} ${this.options.filter(({value:i})=>this.value.includes(i)).map(i=>n(i,"submitted")).join(e.dim(", "))||e.dim("none")}`;case"cancel":{const i=this.options.filter(({value:a})=>this.value.includes(a)).map(a=>n(a,"cancelled")).join(e.dim(", "));return`${s}${e.gray(o)} ${i.trim()?`${i} -${e.gray(o)}`:""}`}case"error":{const i=this.error.split(` -`).map((a,c)=>c===0?`${e.yellow(d)} ${e.yellow(a)}`:` ${a}`).join(` -`);return`${s+e.yellow(o)} ${B({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:r}).join(` +`}}}).prompt()},fe=t=>{const n=(r,i)=>{const s=r.label??String(r.value);return i==="active"?`${e.cyan(A)} ${s} ${r.hint?e.dim(`(${r.hint})`):""}`:i==="selected"?`${e.green(T)} ${e.dim(s)} ${r.hint?e.dim(`(${r.hint})`):""}`:i==="cancelled"?`${e.strikethrough(e.dim(s))}`:i==="active-selected"?`${e.green(T)} ${s} ${r.hint?e.dim(`(${r.hint})`):""}`:i==="submitted"?`${e.dim(s)}`:`${e.dim(F)} ${e.dim(s)}`};return new re({options:t.options,initialValues:t.initialValues,required:t.required??!0,cursorAt:t.cursorAt,validate(r){if(this.required&&r.length===0)return`Please select at least one option. +${e.reset(e.dim(`Press ${e.gray(e.bgWhite(e.inverse(" space ")))} to select, ${e.gray(e.bgWhite(e.inverse(" enter ")))} to submit`))}`},render(){const r=`${e.gray(o)} +${b(this.state)} ${t.message} +`,i=(s,c)=>{const a=this.value.includes(s.value);return c&&a?n(s,"active-selected"):a?n(s,"selected"):n(s,c?"active":"inactive")};switch(this.state){case"submit":return`${r}${e.gray(o)} ${this.options.filter(({value:s})=>this.value.includes(s)).map(s=>n(s,"submitted")).join(e.dim(", "))||e.dim("none")}`;case"cancel":{const s=this.options.filter(({value:c})=>this.value.includes(c)).map(c=>n(c,"cancelled")).join(e.dim(", "));return`${r}${e.gray(o)} ${s.trim()?`${s} +${e.gray(o)}`:""}`}case"error":{const s=this.error.split(` +`).map((c,a)=>a===0?`${e.yellow(d)} ${e.yellow(c)}`:` ${c}`).join(` +`);return`${r+e.yellow(o)} ${G({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:i}).join(` ${e.yellow(o)} `)} -${i} -`}default:return`${s}${e.cyan(o)} ${B({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:r}).join(` +${s} +`}default:return`${r}${e.cyan(o)} ${G({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:i}).join(` ${e.cyan(o)} `)} ${e.cyan(d)} -`}}}).prompt()},be=t=>{const n=(s,r,i=[])=>{const a=s.label??String(s.value),c=typeof s.group=="string",l=c&&(i[i.indexOf(s)+1]??{group:!0}),$=c&&l.group===!0,p=c?`${$?d:o} `:"";return r==="active"?`${e.dim(p)}${e.cyan(A)} ${a} ${s.hint?e.dim(`(${s.hint})`):""}`:r==="group-active"?`${p}${e.cyan(A)} ${e.dim(a)}`:r==="group-active-selected"?`${p}${e.green(T)} ${e.dim(a)}`:r==="selected"?`${e.dim(p)}${e.green(T)} ${e.dim(a)}`:r==="cancelled"?`${e.strikethrough(e.dim(a))}`:r==="active-selected"?`${e.dim(p)}${e.green(T)} ${a} ${s.hint?e.dim(`(${s.hint})`):""}`:r==="submitted"?`${e.dim(a)}`:`${e.dim(p)}${e.dim(F)} ${e.dim(a)}`};return new re({options:t.options,initialValues:t.initialValues,required:t.required??!0,cursorAt:t.cursorAt,validate(s){if(this.required&&s.length===0)return`Please select at least one option. -${e.reset(e.dim(`Press ${e.gray(e.bgWhite(e.inverse(" space ")))} to select, ${e.gray(e.bgWhite(e.inverse(" enter ")))} to submit`))}`},render(){const s=`${e.gray(o)} -${w(this.state)} ${t.message} -`;switch(this.state){case"submit":return`${s}${e.gray(o)} ${this.options.filter(({value:r})=>this.value.includes(r)).map(r=>n(r,"submitted")).join(e.dim(", "))}`;case"cancel":{const r=this.options.filter(({value:i})=>this.value.includes(i)).map(i=>n(i,"cancelled")).join(e.dim(", "));return`${s}${e.gray(o)} ${r.trim()?`${r} -${e.gray(o)}`:""}`}case"error":{const r=this.error.split(` -`).map((i,a)=>a===0?`${e.yellow(d)} ${e.yellow(i)}`:` ${i}`).join(` -`);return`${s}${e.yellow(o)} ${this.options.map((i,a,c)=>{const l=this.value.includes(i.value)||i.group===!0&&this.isGroupSelected(`${i.value}`),$=a===this.cursor;return!$&&typeof i.group=="string"&&this.options[this.cursor].value===i.group?n(i,l?"group-active-selected":"group-active",c):$&&l?n(i,"active-selected",c):l?n(i,"selected",c):n(i,$?"active":"inactive",c)}).join(` +`}}}).prompt()},be=t=>{const{selectableGroups:n=!0}=t,r=(i,s,c=[])=>{const a=i.label??String(i.value),l=typeof i.group=="string",$=l&&(c[c.indexOf(i)+1]??{group:!0}),g=l&&$.group===!0,p=l?n?`${g?d:o} `:" ":"";if(s==="active")return`${e.dim(p)}${e.cyan(A)} ${a} ${i.hint?e.dim(`(${i.hint})`):""}`;if(s==="group-active")return`${p}${e.cyan(A)} ${e.dim(a)}`;if(s==="group-active-selected")return`${p}${e.green(T)} ${e.dim(a)}`;if(s==="selected"){const f=l||n?e.green(T):"";return`${e.dim(p)}${f} ${e.dim(a)} ${i.hint?e.dim(`(${i.hint})`):""}`}if(s==="cancelled")return`${e.strikethrough(e.dim(a))}`;if(s==="active-selected")return`${e.dim(p)}${e.green(T)} ${a} ${i.hint?e.dim(`(${i.hint})`):""}`;if(s==="submitted")return`${e.dim(a)}`;const v=l||n?e.dim(F):"";return`${e.dim(p)}${v} ${e.dim(a)}`};return new se({options:t.options,initialValues:t.initialValues,required:t.required??!0,cursorAt:t.cursorAt,selectableGroups:n,validate(i){if(this.required&&i.length===0)return`Please select at least one option. +${e.reset(e.dim(`Press ${e.gray(e.bgWhite(e.inverse(" space ")))} to select, ${e.gray(e.bgWhite(e.inverse(" enter ")))} to submit`))}`},render(){const i=`${e.gray(o)} +${b(this.state)} ${t.message} +`;switch(this.state){case"submit":return`${i}${e.gray(o)} ${this.options.filter(({value:s})=>this.value.includes(s)).map(s=>r(s,"submitted")).join(e.dim(", "))}`;case"cancel":{const s=this.options.filter(({value:c})=>this.value.includes(c)).map(c=>r(c,"cancelled")).join(e.dim(", "));return`${i}${e.gray(o)} ${s.trim()?`${s} +${e.gray(o)}`:""}`}case"error":{const s=this.error.split(` +`).map((c,a)=>a===0?`${e.yellow(d)} ${e.yellow(c)}`:` ${c}`).join(` +`);return`${i}${e.yellow(o)} ${this.options.map((c,a,l)=>{const $=this.value.includes(c.value)||c.group===!0&&this.isGroupSelected(`${c.value}`),g=a===this.cursor;return!g&&typeof c.group=="string"&&this.options[this.cursor].value===c.group?r(c,$?"group-active-selected":"group-active",l):g&&$?r(c,"active-selected",l):$?r(c,"selected",l):r(c,g?"active":"inactive",l)}).join(` ${e.yellow(o)} `)} -${r} -`}default:return`${s}${e.cyan(o)} ${this.options.map((r,i,a)=>{const c=this.value.includes(r.value)||r.group===!0&&this.isGroupSelected(`${r.value}`),l=i===this.cursor;return!l&&typeof r.group=="string"&&this.options[this.cursor].value===r.group?n(r,c?"group-active-selected":"group-active",a):l&&c?n(r,"active-selected",a):c?n(r,"selected",a):n(r,l?"active":"inactive",a)}).join(` +${s} +`}default:return`${i}${e.cyan(o)} ${this.options.map((s,c,a)=>{const l=this.value.includes(s.value)||s.group===!0&&this.isGroupSelected(`${s.value}`),$=c===this.cursor;return!$&&typeof s.group=="string"&&this.options[this.cursor].value===s.group?r(s,l?"group-active-selected":"group-active",a):$&&l?r(s,"active-selected",a):l?r(s,"selected",a):r(s,$?"active":"inactive",a)}).join(` ${e.cyan(o)} `)} ${e.cyan(d)} -`}}}).prompt()},Me=(t="",n="")=>{const s=` +`}}}).prompt()},Me=(t="",n="")=>{const r=` ${t} `.split(` -`),r=S(n).length,i=Math.max(s.reduce((c,l)=>{const $=S(l);return $.length>c?$.length:c},0),r)+2,a=s.map(c=>`${e.gray(o)} ${e.dim(c)}${" ".repeat(i-S(c).length)}${e.gray(o)}`).join(` +`),i=S(n).length,s=Math.max(r.reduce((a,l)=>{const $=S(l);return $.length>a?$.length:a},0),i)+2,c=r.map(a=>`${e.gray(o)} ${e.dim(a)}${" ".repeat(s-S(a).length)}${e.gray(o)}`).join(` `);process.stdout.write(`${e.gray(o)} -${e.green(C)} ${e.reset(n)} ${e.gray(_.repeat(Math.max(i-r-1,1))+me)} -${a} -${e.gray(de+_.repeat(i+2)+pe)} +${e.green(C)} ${e.reset(n)} ${e.gray(_.repeat(Math.max(s-i-1,1))+me)} +${c} +${e.gray(de+_.repeat(s+2)+pe)} `)},xe=(t="")=>{process.stdout.write(`${e.gray(d)} ${e.red(t)} `)},Ie=(t="")=>{process.stdout.write(`${e.gray(ue)} ${t} `)},Se=(t="")=>{process.stdout.write(`${e.gray(o)} ${e.gray(d)} ${t} -`)},f={message:(t="",{symbol:n=e.gray(o)}={})=>{const s=[`${e.gray(o)}`];if(t){const[r,...i]=t.split(` -`);s.push(`${n} ${r}`,...i.map(a=>`${e.gray(o)} ${a}`))}process.stdout.write(`${s.join(` +`)},M={message:(t="",{symbol:n=e.gray(o)}={})=>{const r=[`${e.gray(o)}`];if(t){const[i,...s]=t.split(` +`);r.push(`${n} ${i}`,...s.map(c=>`${e.gray(o)} ${c}`))}process.stdout.write(`${r.join(` `)} -`)},info:t=>{f.message(t,{symbol:e.blue(q)})},success:t=>{f.message(t,{symbol:e.green(D)})},step:t=>{f.message(t,{symbol:e.green(C)})},warn:t=>{f.message(t,{symbol:e.yellow(U)})},warning:t=>{f.warn(t)},error:t=>{f.message(t,{symbol:e.red(K)})}},J=`${e.gray(o)} `,b={message:async(t,{symbol:n=e.gray(o)}={})=>{process.stdout.write(`${e.gray(o)} -${n} `);let s=3;for await(let r of t){r=r.replace(/\n/g,` -${J}`),r.includes(` -`)&&(s=3+S(r.slice(r.lastIndexOf(` -`))).length);const i=S(r).length;s+ib.message(t,{symbol:e.blue(q)}),success:t=>b.message(t,{symbol:e.green(D)}),step:t=>b.message(t,{symbol:e.green(C)}),warn:t=>b.message(t,{symbol:e.yellow(U)}),warning:t=>b.warn(t),error:t=>b.message(t,{symbol:e.red(K)})},Y=({indicator:t="dots"}={})=>{const n=V?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],s=V?80:120,r=process.env.CI==="true";let i,a,c=!1,l="",$,p=performance.now();const M=m=>{const h=m>1?"Something went wrong":"Canceled";c&&N(h,m)},v=()=>M(2),x=()=>M(1),j=()=>{process.on("uncaughtExceptionMonitor",v),process.on("unhandledRejection",v),process.on("SIGINT",x),process.on("SIGTERM",x),process.on("exit",M)},E=()=>{process.removeListener("uncaughtExceptionMonitor",v),process.removeListener("unhandledRejection",v),process.removeListener("SIGINT",x),process.removeListener("SIGTERM",x),process.removeListener("exit",M)},O=()=>{if($===void 0)return;r&&process.stdout.write(` +`)},info:t=>{M.message(t,{symbol:e.blue(q)})},success:t=>{M.message(t,{symbol:e.green(D)})},step:t=>{M.message(t,{symbol:e.green(C)})},warn:t=>{M.message(t,{symbol:e.yellow(U)})},warning:t=>{M.warn(t)},error:t=>{M.message(t,{symbol:e.red(K)})}},J=`${e.gray(o)} `,x={message:async(t,{symbol:n=e.gray(o)}={})=>{process.stdout.write(`${e.gray(o)} +${n} `);let r=3;for await(let i of t){i=i.replace(/\n/g,` +${J}`),i.includes(` +`)&&(r=3+S(i.slice(i.lastIndexOf(` +`))).length);const s=S(i).length;r+sx.message(t,{symbol:e.blue(q)}),success:t=>x.message(t,{symbol:e.green(D)}),step:t=>x.message(t,{symbol:e.green(C)}),warn:t=>x.message(t,{symbol:e.yellow(U)}),warning:t=>x.warn(t),error:t=>x.message(t,{symbol:e.red(K)})},Y=({indicator:t="dots"}={})=>{const n=V?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],r=V?80:120,i=process.env.CI==="true";let s,c,a=!1,l="",$,g=performance.now();const p=m=>{const h=m>1?"Something went wrong":"Canceled";a&&N(h,m)},v=()=>p(2),f=()=>p(1),j=()=>{process.on("uncaughtExceptionMonitor",v),process.on("unhandledRejection",v),process.on("SIGINT",f),process.on("SIGTERM",f),process.on("exit",p)},E=()=>{process.removeListener("uncaughtExceptionMonitor",v),process.removeListener("unhandledRejection",v),process.removeListener("SIGINT",f),process.removeListener("SIGTERM",f),process.removeListener("exit",p)},B=()=>{if($===void 0)return;i&&process.stdout.write(` `);const m=$.split(` -`);process.stdout.write(oe.move(-999,m.length-1)),process.stdout.write(ae.down(m.length))},R=m=>m.replace(/\.+$/,""),G=m=>{const h=(performance.now()-m)/1e3,y=Math.floor(h/60),I=Math.floor(h%60);return y>0?`[${y}m ${I}s]`:`[${I}s]`},H=(m="")=>{c=!0,i=ne(),l=R(m),p=performance.now(),process.stdout.write(`${e.gray(o)} -`);let h=0,y=0;j(),a=setInterval(()=>{if(r&&l===$)return;O(),$=l;const I=e.magenta(n[h]);if(r)process.stdout.write(`${I} ${l}...`);else if(t==="timer")process.stdout.write(`${I} ${l} ${G(p)}`);else{const z=".".repeat(Math.floor(y)).slice(0,3);process.stdout.write(`${I} ${l}${z}`)}h=h+1{c=!1,clearInterval(a),O();const y=h===0?e.green(C):h===1?e.red(L):e.red(W);l=R(m??l),t==="timer"?process.stdout.write(`${y} ${l} ${G(p)} -`):process.stdout.write(`${y} ${l} -`),E(),i()};return{start:H,stop:N,message:(m="")=>{l=R(m??l)}}},Ce=async(t,n)=>{const s={},r=Object.keys(t);for(const i of r){const a=t[i],c=await a({results:s})?.catch(l=>{throw l});if(typeof n?.onCancel=="function"&&ie(c)){s[i]="canceled",n.onCancel({results:s});continue}s[i]=c}return s},Te=async t=>{for(const n of t){if(n.enabled===!1)continue;const s=Y();s.start(n.title);const r=await n.task(s.message);s.stop(r||n.title)}};export{xe as cancel,ye as confirm,Ce as group,be as groupMultiselect,Ie as intro,f as log,fe as multiselect,Me as note,Se as outro,ge as password,ve as select,we as selectKey,Y as spinner,b as stream,Te as tasks,he as text}; +`);process.stdout.write(oe.move(-999,m.length-1)),process.stdout.write(ae.down(m.length))},R=m=>m.replace(/\.+$/,""),O=m=>{const h=(performance.now()-m)/1e3,w=Math.floor(h/60),I=Math.floor(h%60);return w>0?`[${w}m ${I}s]`:`[${I}s]`},H=(m="")=>{a=!0,s=ne(),l=R(m),g=performance.now(),process.stdout.write(`${e.gray(o)} +`);let h=0,w=0;j(),c=setInterval(()=>{if(i&&l===$)return;B(),$=l;const I=e.magenta(n[h]);if(i)process.stdout.write(`${I} ${l}...`);else if(t==="timer")process.stdout.write(`${I} ${l} ${O(g)}`);else{const z=".".repeat(Math.floor(w)).slice(0,3);process.stdout.write(`${I} ${l}${z}`)}h=h+1{a=!1,clearInterval(c),B();const w=h===0?e.green(C):h===1?e.red(L):e.red(W);l=R(m??l),t==="timer"?process.stdout.write(`${w} ${l} ${O(g)} +`):process.stdout.write(`${w} ${l} +`),E(),s()};return{start:H,stop:N,message:(m="")=>{l=R(m??l)}}},Ce=async(t,n)=>{const r={},i=Object.keys(t);for(const s of i){const c=t[s],a=await c({results:r})?.catch(l=>{throw l});if(typeof n?.onCancel=="function"&&ie(a)){r[s]="canceled",n.onCancel({results:r});continue}r[s]=a}return r},Te=async t=>{for(const n of t){if(n.enabled===!1)continue;const r=Y();r.start(n.title);const i=await n.task(r.message);r.stop(i||n.title)}};export{xe as cancel,ye as confirm,Ce as group,be as groupMultiselect,Ie as intro,M as log,fe as multiselect,Me as note,Se as outro,ge as password,ve as select,we as selectKey,Y as spinner,x as stream,Te as tasks,he as text}; //# sourceMappingURL=index.mjs.map diff --git a/node_modules/@clack/prompts/dist/index.mjs.map b/node_modules/@clack/prompts/dist/index.mjs.map index 42a061e..1e01931 100644 --- a/node_modules/@clack/prompts/dist/index.mjs.map +++ b/node_modules/@clack/prompts/dist/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"index.mjs","sources":["../../../node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js","../src/index.ts"],"sourcesContent":["import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","import { stripVTControlCharacters as strip } from 'node:util';\nimport {\n\tConfirmPrompt,\n\tGroupMultiSelectPrompt,\n\tMultiSelectPrompt,\n\tPasswordPrompt,\n\tSelectKeyPrompt,\n\tSelectPrompt,\n\ttype State,\n\tTextPrompt,\n\tblock,\n\tisCancel,\n} from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport color from 'picocolors';\nimport { cursor, erase } from 'sisteransi';\n\nexport { isCancel } from '@clack/core';\nexport { updateSettings, type ClackSettings } from '@clack/core';\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = s('◆', '*');\nconst S_STEP_CANCEL = s('■', 'x');\nconst S_STEP_ERROR = s('▲', 'x');\nconst S_STEP_SUBMIT = s('◇', 'o');\n\nconst S_BAR_START = s('┌', 'T');\nconst S_BAR = s('│', '|');\nconst S_BAR_END = s('└', '—');\n\nconst S_RADIO_ACTIVE = s('●', '>');\nconst S_RADIO_INACTIVE = s('○', ' ');\nconst S_CHECKBOX_ACTIVE = s('◻', '[•]');\nconst S_CHECKBOX_SELECTED = s('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = s('◻', '[ ]');\nconst S_PASSWORD_MASK = s('▪', '•');\n\nconst S_BAR_H = s('─', '-');\nconst S_CORNER_TOP_RIGHT = s('╮', '+');\nconst S_CONNECT_LEFT = s('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = s('╯', '+');\n\nconst S_INFO = s('●', '•');\nconst S_SUCCESS = s('◆', '*');\nconst S_WARN = s('▲', '!');\nconst S_ERROR = s('■', 'x');\n\nconst symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn color.cyan(S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn color.red(S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn color.yellow(S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn color.green(S_STEP_SUBMIT);\n\t}\n};\n\ninterface LimitOptionsParams {\n\toptions: TOption[];\n\tmaxItems: number | undefined;\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n}\n\nconst limitOptions = (params: LimitOptionsParams): string[] => {\n\tconst { cursor, options, style } = params;\n\n\tconst paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n\tconst outputMaxItems = Math.max(process.stdout.rows - 4, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= slidingWindowLocation + maxItems - 3) {\n\t\tslidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n\t} else if (cursor < slidingWindowLocation + 2) {\n\t\tslidingWindowLocation = Math.max(cursor - 2, 0);\n\t}\n\n\tconst shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n\tconst shouldRenderBottomEllipsis =\n\t\tmaxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n\treturn options\n\t\t.slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n\t\t.map((option, i, arr) => {\n\t\t\tconst isTopLimit = i === 0 && shouldRenderTopEllipsis;\n\t\t\tconst isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n\t\t\treturn isTopLimit || isBottomLimit\n\t\t\t\t? color.dim('...')\n\t\t\t\t: style(option, i + slidingWindowLocation === cursor);\n\t\t});\n};\n\nexport interface TextOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1))\n\t\t\t\t: color.inverse(color.hidden('_'));\n\t\t\tconst value = !this.value ? placeholder : this.valueWithCursor;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${value}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(this.value || opts.placeholder)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(this.value ?? '')\n\t\t\t\t\t)}${this.value?.trim() ? `\\n${color.gray(S_BAR)}` : ''}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface PasswordOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.valueWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${masked}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(masked)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(color.dim(masked ?? ''))}${\n\t\t\t\t\t\tmasked ? `\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface ConfirmOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(value)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(value)\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n\t\t\t\t\t} ${color.dim('/')} ${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n\t\t\t\t\t}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\ntype Primitive = Readonly;\n\nexport type Option = Value extends Primitive\n\t? {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * The optional, user-facing text for this option.\n\t\t\t *\n\t\t\t * By default, the `value` is converted to a string.\n\t\t\t */\n\t\t\tlabel?: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * Required. The user-facing text for this option.\n\t\t\t */\n\t\t\tlabel: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t};\n\nexport interface SelectOptions {\n\tmessage: string;\n\toptions: Option[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nexport const select = (opts: SelectOptions) => {\n\tconst opt = (option: Option, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'selected':\n\t\t\t\treturn `${color.dim(label)}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${color.green(S_RADIO_ACTIVE)} ${label} ${\n\t\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options[this.cursor],\n\t\t\t\t\t\t'cancelled'\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: (item, active) => opt(item, active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport const selectKey = (opts: SelectOptions) => {\n\tconst opt = (\n\t\toption: Option,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${\n\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value) ?? opts.options[0],\n\t\t\t\t\t\t'selected'\n\t\t\t\t\t)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[0], 'cancelled')}\\n${color.gray(\n\t\t\t\t\t\tS_BAR\n\t\t\t\t\t)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive'))\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface MultiSelectOptions {\n\tmessage: string;\n\toptions: Option[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const multiselect = (opts: MultiSelectOptions) => {\n\tconst opt = (\n\t\toption: Option,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'active') {\n\t\t\treturn `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tconst styleOption = (option: Option, active: boolean) => {\n\t\t\t\tconst selected = this.value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(color.dim(', ')) || color.dim('none')\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title + color.yellow(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface GroupMultiSelectOptions {\n\tmessage: string;\n\toptions: Record[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const groupMultiselect = (opts: GroupMultiSelectOptions) => {\n\tconst opt = (\n\t\toption: Option,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: Option[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof (option as any).group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && (next as any).group === true;\n\t\tconst prefix = isItem ? `${isLast ? S_BAR_END : S_BAR} ` : '';\n\n\t\tif (state === 'active') {\n\t\t\treturn `${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'group-active') {\n\t\t\treturn `${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'group-active-selected') {\n\t\t\treturn `${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(prefix)}${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t.join(color.dim(', '))}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${color.yellow(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport const note = (message = '', title = '') => {\n\tconst lines = `\\n${message}\\n`.split('\\n');\n\tconst titleLen = strip(title).length;\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tconst line = strip(ln);\n\t\t\t\treturn line.length > sum ? line.length : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${color.gray(S_BAR)} ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray(\n\t\t\t\t\tS_BAR\n\t\t\t\t)}`\n\t\t)\n\t\t.join('\\n');\n\tprocess.stdout.write(\n\t\t`${color.gray(S_BAR)}\\n${color.green(S_STEP_SUBMIT)} ${color.reset(title)} ${color.gray(\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n\nexport const cancel = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_END)} ${color.red(message)}\\n\\n`);\n};\n\nexport const intro = (title = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_START)} ${title}\\n`);\n};\n\nexport const outro = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${color.gray(S_BAR_END)} ${message}\\n\\n`);\n};\n\nexport type LogMessageOptions = {\n\tsymbol?: string;\n};\nexport const log = {\n\tmessage: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}) => {\n\t\tconst parts = [`${color.gray(S_BAR)}`];\n\t\tif (message) {\n\t\t\tconst [firstLine, ...lines] = message.split('\\n');\n\t\t\tparts.push(`${symbol} ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)} ${ln}`));\n\t\t}\n\t\tprocess.stdout.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string) => {\n\t\tlog.message(message, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string) => {\n\t\tlog.message(message, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string) => {\n\t\tlog.warn(message);\n\t},\n\terror: (message: string) => {\n\t\tlog.message(message, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nconst prefix = `${color.gray(S_BAR)} `;\nexport const stream = {\n\tmessage: async (\n\t\titerable: Iterable | AsyncIterable,\n\t\t{ symbol = color.gray(S_BAR) }: LogMessageOptions = {}\n\t) => {\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${symbol} `);\n\t\tlet lineWidth = 3;\n\t\tfor await (let chunk of iterable) {\n\t\t\tchunk = chunk.replace(/\\n/g, `\\n${prefix}`);\n\t\t\tif (chunk.includes('\\n')) {\n\t\t\t\tlineWidth = 3 + strip(chunk.slice(chunk.lastIndexOf('\\n'))).length;\n\t\t\t}\n\t\t\tconst chunkLen = strip(chunk).length;\n\t\t\tif (lineWidth + chunkLen < process.stdout.columns) {\n\t\t\t\tlineWidth += chunkLen;\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`\\n${prefix}${chunk.trimStart()}`);\n\t\t\t\tlineWidth = 3 + strip(chunk.trimStart()).length;\n\t\t\t}\n\t\t}\n\t\tprocess.stdout.write('\\n');\n\t},\n\tinfo: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.warn(iterable);\n\t},\n\terror: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nexport interface SpinnerOptions {\n\tindicator?: 'dots' | 'timer';\n}\n\nexport const spinner = ({ indicator = 'dots' }: SpinnerOptions = {}) => {\n\tconst frames = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'];\n\tconst delay = unicode ? 80 : 120;\n\tconst isCI = process.env.CI === 'true';\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive = false;\n\tlet _message = '';\n\tlet _prevMessage: string | undefined = undefined;\n\tlet _origin: number = performance.now();\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg = code > 1 ? 'Something went wrong' : 'Canceled';\n\t\tif (isSpinnerActive) stop(msg, code);\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\t};\n\n\tconst clearPrevMessage = () => {\n\t\tif (_prevMessage === undefined) return;\n\t\tif (isCI) process.stdout.write('\\n');\n\t\tconst prevLines = _prevMessage.split('\\n');\n\t\tprocess.stdout.write(cursor.move(-999, prevLines.length - 1));\n\t\tprocess.stdout.write(erase.down(prevLines.length));\n\t};\n\n\tconst parseMessage = (msg: string): string => {\n\t\treturn msg.replace(/\\.+$/, '');\n\t};\n\n\tconst formatTimer = (origin: number): string => {\n\t\tconst duration = (performance.now() - origin) / 1000;\n\t\tconst min = Math.floor(duration / 60);\n\t\tconst secs = Math.floor(duration % 60);\n\t\treturn min > 0 ? `[${min}m ${secs}s]` : `[${secs}s]`;\n\t};\n\n\tconst start = (msg = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block();\n\t\t_message = parseMessage(msg);\n\t\t_origin = performance.now();\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n`);\n\t\tlet frameIndex = 0;\n\t\tlet indicatorTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tif (isCI && _message === _prevMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearPrevMessage();\n\t\t\t_prevMessage = _message;\n\t\t\tconst frame = color.magenta(frames[frameIndex]);\n\n\t\t\tif (isCI) {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}...`);\n\t\t\t} else if (indicator === 'timer') {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message} ${formatTimer(_origin)}`);\n\t\t\t} else {\n\t\t\t\tconst loadingDots = '.'.repeat(Math.floor(indicatorTimer)).slice(0, 3);\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}${loadingDots}`);\n\t\t\t}\n\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\tindicatorTimer = indicatorTimer < frames.length ? indicatorTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst stop = (msg = '', code = 0): void => {\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tclearPrevMessage();\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? color.green(S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t\t? color.red(S_STEP_CANCEL)\n\t\t\t\t\t: color.red(S_STEP_ERROR);\n\t\t_message = parseMessage(msg ?? _message);\n\t\tif (indicator === 'timer') {\n\t\t\tprocess.stdout.write(`${step} ${_message} ${formatTimer(_origin)}\\n`);\n\t\t} else {\n\t\t\tprocess.stdout.write(`${step} ${_message}\\n`);\n\t\t}\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst message = (msg = ''): void => {\n\t\t_message = parseMessage(msg ?? _message);\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t};\n};\n\nexport type PromptGroupAwaitedReturn = {\n\t[P in keyof T]: Exclude, symbol>;\n};\n\nexport interface PromptGroupOptions {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify>> }) => void;\n}\n\ntype Prettify = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroup = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify>>>;\n\t}) => undefined | Promise;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async (\n\tprompts: PromptGroup,\n\topts?: PromptGroupOptions\n): Promise>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise | void | Promise;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[]) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner();\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n"],"names":["isUnicodeSupported","process","unicode","s","c","fallback","S_STEP_ACTIVE","S_STEP_CANCEL","S_STEP_ERROR","S_STEP_SUBMIT","S_BAR_START","S_BAR","S_BAR_END","S_RADIO_ACTIVE","S_RADIO_INACTIVE","S_CHECKBOX_ACTIVE","S_CHECKBOX_SELECTED","S_CHECKBOX_INACTIVE","S_PASSWORD_MASK","S_BAR_H","S_CORNER_TOP_RIGHT","S_CONNECT_LEFT","S_CORNER_BOTTOM_RIGHT","S_INFO","S_SUCCESS","S_WARN","S_ERROR","symbol","state","color","limitOptions","params","cursor","options","style","paramMaxItems","outputMaxItems","maxItems","slidingWindowLocation","shouldRenderTopEllipsis","shouldRenderBottomEllipsis","option","i","arr","isTopLimit","isBottomLimit","text","opts","TextPrompt","title","placeholder","value","password","PasswordPrompt","masked","confirm","active","inactive","ConfirmPrompt","select","opt","label","SelectPrompt","item","selectKey","SelectKeyPrompt","multiselect","MultiSelectPrompt","selected","styleOption","footer","ln","groupMultiselect","isItem","next","isLast","prefix","GroupMultiSelectPrompt","note","message","lines","titleLen","strip","len","sum","line","msg","cancel","intro","outro","log","parts","firstLine","stream","iterable","lineWidth","chunk","chunkLen","spinner","indicator","frames","delay","isCI","unblock","loop","isSpinnerActive","_message","_prevMessage","_origin","handleExit","code","stop","errorEventHandler","signalEventHandler","registerHooks","clearHooks","clearPrevMessage","prevLines","erase","parseMessage","formatTimer","origin","duration","min","secs","start","block","frameIndex","indicatorTimer","frame","loadingDots","step","group","prompts","results","promptNames","name","prompt","result","e","isCancel","tasks","task"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"index.mjs","sources":["../../../node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js","../src/index.ts"],"sourcesContent":["import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","import { stripVTControlCharacters as strip } from 'node:util';\nimport {\n\tConfirmPrompt,\n\tGroupMultiSelectPrompt,\n\tMultiSelectPrompt,\n\tPasswordPrompt,\n\tSelectKeyPrompt,\n\tSelectPrompt,\n\ttype State,\n\tTextPrompt,\n\tblock,\n\tisCancel,\n} from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport color from 'picocolors';\nimport { cursor, erase } from 'sisteransi';\n\nexport { isCancel } from '@clack/core';\nexport { updateSettings, type ClackSettings } from '@clack/core';\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = s('◆', '*');\nconst S_STEP_CANCEL = s('■', 'x');\nconst S_STEP_ERROR = s('▲', 'x');\nconst S_STEP_SUBMIT = s('◇', 'o');\n\nconst S_BAR_START = s('┌', 'T');\nconst S_BAR = s('│', '|');\nconst S_BAR_END = s('└', '—');\n\nconst S_RADIO_ACTIVE = s('●', '>');\nconst S_RADIO_INACTIVE = s('○', ' ');\nconst S_CHECKBOX_ACTIVE = s('◻', '[•]');\nconst S_CHECKBOX_SELECTED = s('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = s('◻', '[ ]');\nconst S_PASSWORD_MASK = s('▪', '•');\n\nconst S_BAR_H = s('─', '-');\nconst S_CORNER_TOP_RIGHT = s('╮', '+');\nconst S_CONNECT_LEFT = s('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = s('╯', '+');\n\nconst S_INFO = s('●', '•');\nconst S_SUCCESS = s('◆', '*');\nconst S_WARN = s('▲', '!');\nconst S_ERROR = s('■', 'x');\n\nconst symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn color.cyan(S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn color.red(S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn color.yellow(S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn color.green(S_STEP_SUBMIT);\n\t}\n};\n\ninterface LimitOptionsParams {\n\toptions: TOption[];\n\tmaxItems: number | undefined;\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n}\n\nconst limitOptions = (params: LimitOptionsParams): string[] => {\n\tconst { cursor, options, style } = params;\n\n\tconst paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n\tconst outputMaxItems = Math.max(process.stdout.rows - 4, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= slidingWindowLocation + maxItems - 3) {\n\t\tslidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n\t} else if (cursor < slidingWindowLocation + 2) {\n\t\tslidingWindowLocation = Math.max(cursor - 2, 0);\n\t}\n\n\tconst shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n\tconst shouldRenderBottomEllipsis =\n\t\tmaxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n\treturn options\n\t\t.slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n\t\t.map((option, i, arr) => {\n\t\t\tconst isTopLimit = i === 0 && shouldRenderTopEllipsis;\n\t\t\tconst isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n\t\t\treturn isTopLimit || isBottomLimit\n\t\t\t\t? color.dim('...')\n\t\t\t\t: style(option, i + slidingWindowLocation === cursor);\n\t\t});\n};\n\nexport interface TextOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1))\n\t\t\t\t: color.inverse(color.hidden('_'));\n\t\t\tconst value = !this.value ? placeholder : this.valueWithCursor;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${value}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(this.value || opts.placeholder)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(this.value ?? '')\n\t\t\t\t\t)}${this.value?.trim() ? `\\n${color.gray(S_BAR)}` : ''}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface PasswordOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.valueWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${masked}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(masked)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(color.dim(masked ?? ''))}${\n\t\t\t\t\t\tmasked ? `\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface ConfirmOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(value)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(value)\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n\t\t\t\t\t} ${color.dim('/')} ${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n\t\t\t\t\t}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\ntype Primitive = Readonly;\n\nexport type Option = Value extends Primitive\n\t? {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * The optional, user-facing text for this option.\n\t\t\t *\n\t\t\t * By default, the `value` is converted to a string.\n\t\t\t */\n\t\t\tlabel?: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * Required. The user-facing text for this option.\n\t\t\t */\n\t\t\tlabel: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t};\n\nexport interface SelectOptions {\n\tmessage: string;\n\toptions: Option[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nexport const select = (opts: SelectOptions) => {\n\tconst opt = (option: Option, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'selected':\n\t\t\t\treturn `${color.dim(label)}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${color.green(S_RADIO_ACTIVE)} ${label} ${\n\t\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options[this.cursor],\n\t\t\t\t\t\t'cancelled'\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: (item, active) => opt(item, active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport const selectKey = (opts: SelectOptions) => {\n\tconst opt = (\n\t\toption: Option,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${\n\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value) ?? opts.options[0],\n\t\t\t\t\t\t'selected'\n\t\t\t\t\t)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[0], 'cancelled')}\\n${color.gray(\n\t\t\t\t\t\tS_BAR\n\t\t\t\t\t)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive'))\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface MultiSelectOptions {\n\tmessage: string;\n\toptions: Option[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const multiselect = (opts: MultiSelectOptions) => {\n\tconst opt = (\n\t\toption: Option,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'active') {\n\t\t\treturn `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tconst styleOption = (option: Option, active: boolean) => {\n\t\t\t\tconst selected = this.value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(color.dim(', ')) || color.dim('none')\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title + color.yellow(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport interface GroupMultiSelectOptions {\n\tmessage: string;\n\toptions: Record[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n\tselectableGroups?: boolean;\n}\nexport const groupMultiselect = (opts: GroupMultiSelectOptions) => {\n\tconst { selectableGroups = true } = opts;\n\tconst opt = (\n\t\toption: Option,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: Option[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof (option as any).group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && (next as any).group === true;\n\t\tconst prefix = isItem ? (selectableGroups ? `${isLast ? S_BAR_END : S_BAR} ` : ' ') : '';\n\n\t\tif (state === 'active') {\n\t\t\treturn `${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'group-active') {\n\t\t\treturn `${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'group-active-selected') {\n\t\t\treturn `${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\tconst selectedCheckbox = isItem || selectableGroups ? color.green(S_CHECKBOX_SELECTED) : '';\n\t\t\treturn `${color.dim(prefix)}${selectedCheckbox} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tconst unselectedCheckbox = isItem || selectableGroups ? color.dim(S_CHECKBOX_INACTIVE) : '';\n\t\treturn `${color.dim(prefix)}${unselectedCheckbox} ${color.dim(label)}`;\n\t};\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tselectableGroups,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t.join(color.dim(', '))}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${color.yellow(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise;\n};\n\nexport const note = (message = '', title = '') => {\n\tconst lines = `\\n${message}\\n`.split('\\n');\n\tconst titleLen = strip(title).length;\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tconst line = strip(ln);\n\t\t\t\treturn line.length > sum ? line.length : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${color.gray(S_BAR)} ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray(\n\t\t\t\t\tS_BAR\n\t\t\t\t)}`\n\t\t)\n\t\t.join('\\n');\n\tprocess.stdout.write(\n\t\t`${color.gray(S_BAR)}\\n${color.green(S_STEP_SUBMIT)} ${color.reset(title)} ${color.gray(\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n\nexport const cancel = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_END)} ${color.red(message)}\\n\\n`);\n};\n\nexport const intro = (title = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_START)} ${title}\\n`);\n};\n\nexport const outro = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${color.gray(S_BAR_END)} ${message}\\n\\n`);\n};\n\nexport type LogMessageOptions = {\n\tsymbol?: string;\n};\nexport const log = {\n\tmessage: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}) => {\n\t\tconst parts = [`${color.gray(S_BAR)}`];\n\t\tif (message) {\n\t\t\tconst [firstLine, ...lines] = message.split('\\n');\n\t\t\tparts.push(`${symbol} ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)} ${ln}`));\n\t\t}\n\t\tprocess.stdout.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string) => {\n\t\tlog.message(message, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string) => {\n\t\tlog.message(message, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string) => {\n\t\tlog.warn(message);\n\t},\n\terror: (message: string) => {\n\t\tlog.message(message, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nconst prefix = `${color.gray(S_BAR)} `;\nexport const stream = {\n\tmessage: async (\n\t\titerable: Iterable | AsyncIterable,\n\t\t{ symbol = color.gray(S_BAR) }: LogMessageOptions = {}\n\t) => {\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${symbol} `);\n\t\tlet lineWidth = 3;\n\t\tfor await (let chunk of iterable) {\n\t\t\tchunk = chunk.replace(/\\n/g, `\\n${prefix}`);\n\t\t\tif (chunk.includes('\\n')) {\n\t\t\t\tlineWidth = 3 + strip(chunk.slice(chunk.lastIndexOf('\\n'))).length;\n\t\t\t}\n\t\t\tconst chunkLen = strip(chunk).length;\n\t\t\tif (lineWidth + chunkLen < process.stdout.columns) {\n\t\t\t\tlineWidth += chunkLen;\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`\\n${prefix}${chunk.trimStart()}`);\n\t\t\t\tlineWidth = 3 + strip(chunk.trimStart()).length;\n\t\t\t}\n\t\t}\n\t\tprocess.stdout.write('\\n');\n\t},\n\tinfo: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.warn(iterable);\n\t},\n\terror: (iterable: Iterable | AsyncIterable) => {\n\t\treturn stream.message(iterable, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nexport interface SpinnerOptions {\n\tindicator?: 'dots' | 'timer';\n}\n\nexport const spinner = ({ indicator = 'dots' }: SpinnerOptions = {}) => {\n\tconst frames = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'];\n\tconst delay = unicode ? 80 : 120;\n\tconst isCI = process.env.CI === 'true';\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive = false;\n\tlet _message = '';\n\tlet _prevMessage: string | undefined = undefined;\n\tlet _origin: number = performance.now();\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg = code > 1 ? 'Something went wrong' : 'Canceled';\n\t\tif (isSpinnerActive) stop(msg, code);\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\t};\n\n\tconst clearPrevMessage = () => {\n\t\tif (_prevMessage === undefined) return;\n\t\tif (isCI) process.stdout.write('\\n');\n\t\tconst prevLines = _prevMessage.split('\\n');\n\t\tprocess.stdout.write(cursor.move(-999, prevLines.length - 1));\n\t\tprocess.stdout.write(erase.down(prevLines.length));\n\t};\n\n\tconst parseMessage = (msg: string): string => {\n\t\treturn msg.replace(/\\.+$/, '');\n\t};\n\n\tconst formatTimer = (origin: number): string => {\n\t\tconst duration = (performance.now() - origin) / 1000;\n\t\tconst min = Math.floor(duration / 60);\n\t\tconst secs = Math.floor(duration % 60);\n\t\treturn min > 0 ? `[${min}m ${secs}s]` : `[${secs}s]`;\n\t};\n\n\tconst start = (msg = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block();\n\t\t_message = parseMessage(msg);\n\t\t_origin = performance.now();\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n`);\n\t\tlet frameIndex = 0;\n\t\tlet indicatorTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tif (isCI && _message === _prevMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearPrevMessage();\n\t\t\t_prevMessage = _message;\n\t\t\tconst frame = color.magenta(frames[frameIndex]);\n\n\t\t\tif (isCI) {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}...`);\n\t\t\t} else if (indicator === 'timer') {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message} ${formatTimer(_origin)}`);\n\t\t\t} else {\n\t\t\t\tconst loadingDots = '.'.repeat(Math.floor(indicatorTimer)).slice(0, 3);\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}${loadingDots}`);\n\t\t\t}\n\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\tindicatorTimer = indicatorTimer < frames.length ? indicatorTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst stop = (msg = '', code = 0): void => {\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tclearPrevMessage();\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? color.green(S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t\t? color.red(S_STEP_CANCEL)\n\t\t\t\t\t: color.red(S_STEP_ERROR);\n\t\t_message = parseMessage(msg ?? _message);\n\t\tif (indicator === 'timer') {\n\t\t\tprocess.stdout.write(`${step} ${_message} ${formatTimer(_origin)}\\n`);\n\t\t} else {\n\t\t\tprocess.stdout.write(`${step} ${_message}\\n`);\n\t\t}\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst message = (msg = ''): void => {\n\t\t_message = parseMessage(msg ?? _message);\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t};\n};\n\nexport type PromptGroupAwaitedReturn = {\n\t[P in keyof T]: Exclude, symbol>;\n};\n\nexport interface PromptGroupOptions {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify>> }) => void;\n}\n\ntype Prettify = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroup = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify>>>;\n\t}) => undefined | Promise;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async (\n\tprompts: PromptGroup,\n\topts?: PromptGroupOptions\n): Promise>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise | void | Promise;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[]) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner();\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n"],"names":["isUnicodeSupported","process","unicode","s","c","fallback","S_STEP_ACTIVE","S_STEP_CANCEL","S_STEP_ERROR","S_STEP_SUBMIT","S_BAR_START","S_BAR","S_BAR_END","S_RADIO_ACTIVE","S_RADIO_INACTIVE","S_CHECKBOX_ACTIVE","S_CHECKBOX_SELECTED","S_CHECKBOX_INACTIVE","S_PASSWORD_MASK","S_BAR_H","S_CORNER_TOP_RIGHT","S_CONNECT_LEFT","S_CORNER_BOTTOM_RIGHT","S_INFO","S_SUCCESS","S_WARN","S_ERROR","symbol","state","color","limitOptions","params","cursor","options","style","paramMaxItems","outputMaxItems","maxItems","slidingWindowLocation","shouldRenderTopEllipsis","shouldRenderBottomEllipsis","option","i","arr","isTopLimit","isBottomLimit","text","opts","TextPrompt","title","placeholder","value","password","PasswordPrompt","masked","confirm","active","inactive","ConfirmPrompt","select","opt","label","SelectPrompt","item","selectKey","SelectKeyPrompt","multiselect","MultiSelectPrompt","selected","styleOption","footer","ln","groupMultiselect","selectableGroups","isItem","next","isLast","prefix","selectedCheckbox","unselectedCheckbox","GroupMultiSelectPrompt","note","message","lines","titleLen","strip","len","sum","line","msg","cancel","intro","outro","log","parts","firstLine","stream","iterable","lineWidth","chunk","chunkLen","spinner","indicator","frames","delay","isCI","unblock","loop","isSpinnerActive","_message","_prevMessage","_origin","handleExit","code","stop","errorEventHandler","signalEventHandler","registerHooks","clearHooks","clearPrevMessage","prevLines","erase","parseMessage","formatTimer","origin","duration","min","secs","start","block","frameIndex","indicatorTimer","frame","loadingDots","step","group","prompts","results","promptNames","name","prompt","result","e","isCancel","tasks","task"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/node_modules/@clack/prompts/package.json b/node_modules/@clack/prompts/package.json index 470a10a..ce682e1 100644 --- a/node_modules/@clack/prompts/package.json +++ b/node_modules/@clack/prompts/package.json @@ -1,6 +1,6 @@ { "name": "@clack/prompts", - "version": "0.10.0", + "version": "0.10.1", "type": "module", "main": "./dist/index.cjs", "module": "./dist/index.mjs", @@ -15,13 +15,13 @@ "types": "./dist/index.d.ts", "repository": { "type": "git", - "url": "https://github.com/natemoo-re/clack", + "url": "git+https://github.com/bombshell-dev/clack.git", "directory": "packages/prompts" }, "bugs": { - "url": "https://github.com/natemoo-re/clack/issues" + "url": "https://github.com/bombshell-dev/clack/issues" }, - "homepage": "https://github.com/natemoo-re/clack/tree/main/packages/prompts#readme", + "homepage": "https://github.com/bombshell-dev/clack/tree/main/packages/prompts#readme", "files": [ "dist", "CHANGELOG.md" @@ -50,7 +50,7 @@ "dependencies": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5", - "@clack/core": "0.4.1" + "@clack/core": "0.4.2" }, "devDependencies": { "is-unicode-supported": "^1.3.0" diff --git a/node_modules/@discordjs/builders/dist/index.d.mts b/node_modules/@discordjs/builders/dist/index.d.mts index ac28cd2..428a46b 100644 --- a/node_modules/@discordjs/builders/dist/index.d.mts +++ b/node_modules/@discordjs/builders/dist/index.d.mts @@ -1,5 +1,5 @@ import * as _sapphire_shapeshift from '@sapphire/shapeshift'; -import { APIEmbedField, APIEmbedAuthor, APIEmbedFooter, APIEmbedImage, APIEmbed, APISelectMenuOption, APIMessageComponentEmoji, ButtonStyle, ChannelType, APIActionRowComponent, APIActionRowComponentTypes, APIBaseComponent, ComponentType, APIButtonComponent, Snowflake, APISelectMenuComponent, APIChannelSelectComponent, APIMentionableSelectComponent, APISelectMenuDefaultValue, SelectMenuDefaultValueType, APIRoleSelectComponent, APIStringSelectComponent, APIUserSelectComponent, APITextInputComponent, TextInputStyle, APIMessageActionRowComponent, APIModalActionRowComponent, APIModalComponent, APIMessageComponent, APIModalInteractionResponseCallbackData, LocalizationMap, LocaleString, InteractionContextType, Permissions, ApplicationIntegrationType, RESTPostAPIChatInputApplicationCommandsJSONBody, ApplicationCommandOptionType, APIApplicationCommandBasicOption, APIApplicationCommandAttachmentOption, APIApplicationCommandBooleanOption, APIApplicationCommandChannelOption, APIApplicationCommandOptionChoice, APIApplicationCommandIntegerOption, APIApplicationCommandMentionableOption, APIApplicationCommandNumberOption, APIApplicationCommandRoleOption, APIApplicationCommandStringOption, APIApplicationCommandUserOption, APIApplicationCommandSubcommandGroupOption, APIApplicationCommandSubcommandOption, APIApplicationCommandOption, Locale, ApplicationCommandType, RESTPostAPIContextMenuApplicationCommandsJSONBody } from 'discord-api-types/v10'; +import { APIEmbedField, APIEmbedAuthor, APIEmbedFooter, APIEmbedImage, APIEmbed, APISelectMenuOption, APIMessageComponentEmoji, ButtonStyle, ChannelType, APIActionRowComponent, APIComponentInActionRow, APIMessageComponent, APIBaseComponent, ComponentType, APIButtonComponent, Snowflake, APISelectMenuComponent, APIChannelSelectComponent, APIMentionableSelectComponent, APISelectMenuDefaultValue, SelectMenuDefaultValueType, APIRoleSelectComponent, APIStringSelectComponent, APIUserSelectComponent, APITextInputComponent, TextInputStyle, APIComponentInMessageActionRow, APIComponentInModalActionRow, APIFileComponent, APISeparatorComponent, SeparatorSpacingSize, APITextDisplayComponent, APIContainerComponent, APIMediaGalleryComponent, APISectionComponent, APIComponentInContainer, APIMediaGalleryItem, APIThumbnailComponent, APIModalComponent, APIModalInteractionResponseCallbackData, LocalizationMap, LocaleString, InteractionContextType, Permissions, ApplicationIntegrationType, RESTPostAPIChatInputApplicationCommandsJSONBody, ApplicationCommandOptionType, APIApplicationCommandBasicOption, APIApplicationCommandAttachmentOption, APIApplicationCommandBooleanOption, APIApplicationCommandChannelOption, APIApplicationCommandOptionChoice, APIApplicationCommandIntegerOption, APIApplicationCommandMentionableOption, APIApplicationCommandNumberOption, APIApplicationCommandRoleOption, APIApplicationCommandStringOption, APIApplicationCommandUserOption, APIApplicationCommandSubcommandGroupOption, APIApplicationCommandSubcommandOption, APIApplicationCommandOption, Locale, ApplicationCommandType, RESTPostAPIContextMenuApplicationCommandsJSONBody } from 'discord-api-types/v10'; export * from '@discordjs/formatters'; import { JSONEncodable, Equatable } from '@discordjs/util'; @@ -40,7 +40,7 @@ declare const embedAuthorPredicate: _sapphire_shapeshift.ObjectValidator<{ }>>; declare const RGBPredicate: _sapphire_shapeshift.NumberValidator; declare const colorPredicate: _sapphire_shapeshift.UnionValidator; -declare const descriptionPredicate: _sapphire_shapeshift.UnionValidator; +declare const descriptionPredicate$1: _sapphire_shapeshift.UnionValidator; declare const footerTextPredicate: _sapphire_shapeshift.UnionValidator; declare const embedFooterPredicate: _sapphire_shapeshift.ObjectValidator<{ text: string | null; @@ -52,26 +52,25 @@ declare const embedFooterPredicate: _sapphire_shapeshift.ObjectValidator<{ declare const timestampPredicate: _sapphire_shapeshift.UnionValidator; declare const titlePredicate: _sapphire_shapeshift.UnionValidator; -declare const Assertions$5_RGBPredicate: typeof RGBPredicate; -declare const Assertions$5_authorNamePredicate: typeof authorNamePredicate; -declare const Assertions$5_colorPredicate: typeof colorPredicate; -declare const Assertions$5_descriptionPredicate: typeof descriptionPredicate; -declare const Assertions$5_embedAuthorPredicate: typeof embedAuthorPredicate; -declare const Assertions$5_embedFieldPredicate: typeof embedFieldPredicate; -declare const Assertions$5_embedFieldsArrayPredicate: typeof embedFieldsArrayPredicate; -declare const Assertions$5_embedFooterPredicate: typeof embedFooterPredicate; -declare const Assertions$5_fieldInlinePredicate: typeof fieldInlinePredicate; -declare const Assertions$5_fieldLengthPredicate: typeof fieldLengthPredicate; -declare const Assertions$5_fieldNamePredicate: typeof fieldNamePredicate; -declare const Assertions$5_fieldValuePredicate: typeof fieldValuePredicate; -declare const Assertions$5_footerTextPredicate: typeof footerTextPredicate; -declare const Assertions$5_imageURLPredicate: typeof imageURLPredicate; -declare const Assertions$5_timestampPredicate: typeof timestampPredicate; -declare const Assertions$5_titlePredicate: typeof titlePredicate; -declare const Assertions$5_urlPredicate: typeof urlPredicate; -declare const Assertions$5_validateFieldLength: typeof validateFieldLength; -declare namespace Assertions$5 { - export { Assertions$5_RGBPredicate as RGBPredicate, Assertions$5_authorNamePredicate as authorNamePredicate, Assertions$5_colorPredicate as colorPredicate, Assertions$5_descriptionPredicate as descriptionPredicate, Assertions$5_embedAuthorPredicate as embedAuthorPredicate, Assertions$5_embedFieldPredicate as embedFieldPredicate, Assertions$5_embedFieldsArrayPredicate as embedFieldsArrayPredicate, Assertions$5_embedFooterPredicate as embedFooterPredicate, Assertions$5_fieldInlinePredicate as fieldInlinePredicate, Assertions$5_fieldLengthPredicate as fieldLengthPredicate, Assertions$5_fieldNamePredicate as fieldNamePredicate, Assertions$5_fieldValuePredicate as fieldValuePredicate, Assertions$5_footerTextPredicate as footerTextPredicate, Assertions$5_imageURLPredicate as imageURLPredicate, Assertions$5_timestampPredicate as timestampPredicate, Assertions$5_titlePredicate as titlePredicate, Assertions$5_urlPredicate as urlPredicate, Assertions$5_validateFieldLength as validateFieldLength }; +declare const Assertions$6_RGBPredicate: typeof RGBPredicate; +declare const Assertions$6_authorNamePredicate: typeof authorNamePredicate; +declare const Assertions$6_colorPredicate: typeof colorPredicate; +declare const Assertions$6_embedAuthorPredicate: typeof embedAuthorPredicate; +declare const Assertions$6_embedFieldPredicate: typeof embedFieldPredicate; +declare const Assertions$6_embedFieldsArrayPredicate: typeof embedFieldsArrayPredicate; +declare const Assertions$6_embedFooterPredicate: typeof embedFooterPredicate; +declare const Assertions$6_fieldInlinePredicate: typeof fieldInlinePredicate; +declare const Assertions$6_fieldLengthPredicate: typeof fieldLengthPredicate; +declare const Assertions$6_fieldNamePredicate: typeof fieldNamePredicate; +declare const Assertions$6_fieldValuePredicate: typeof fieldValuePredicate; +declare const Assertions$6_footerTextPredicate: typeof footerTextPredicate; +declare const Assertions$6_imageURLPredicate: typeof imageURLPredicate; +declare const Assertions$6_timestampPredicate: typeof timestampPredicate; +declare const Assertions$6_titlePredicate: typeof titlePredicate; +declare const Assertions$6_urlPredicate: typeof urlPredicate; +declare const Assertions$6_validateFieldLength: typeof validateFieldLength; +declare namespace Assertions$6 { + export { Assertions$6_RGBPredicate as RGBPredicate, Assertions$6_authorNamePredicate as authorNamePredicate, Assertions$6_colorPredicate as colorPredicate, descriptionPredicate$1 as descriptionPredicate, Assertions$6_embedAuthorPredicate as embedAuthorPredicate, Assertions$6_embedFieldPredicate as embedFieldPredicate, Assertions$6_embedFieldsArrayPredicate as embedFieldsArrayPredicate, Assertions$6_embedFooterPredicate as embedFooterPredicate, Assertions$6_fieldInlinePredicate as fieldInlinePredicate, Assertions$6_fieldLengthPredicate as fieldLengthPredicate, Assertions$6_fieldNamePredicate as fieldNamePredicate, Assertions$6_fieldValuePredicate as fieldValuePredicate, Assertions$6_footerTextPredicate as footerTextPredicate, Assertions$6_imageURLPredicate as imageURLPredicate, Assertions$6_timestampPredicate as timestampPredicate, Assertions$6_titlePredicate as titlePredicate, Assertions$6_urlPredicate as urlPredicate, Assertions$6_validateFieldLength as validateFieldLength }; } /** @@ -346,6 +345,7 @@ declare class StringSelectMenuOptionBuilder implements JSONEncodable; declare const customIdValidator: _sapphire_shapeshift.StringValidator; declare const emojiValidator: _sapphire_shapeshift.ObjectValidator<{ name?: string | undefined; @@ -393,31 +393,32 @@ declare const channelTypesValidator: _sapphire_shapeshift.ArrayValidator; declare function validateRequiredButtonParameters(style?: ButtonStyle, label?: string, emoji?: APIMessageComponentEmoji, customId?: string, skuId?: string, url?: string): void; -declare const Assertions$4_buttonLabelValidator: typeof buttonLabelValidator; -declare const Assertions$4_buttonStyleValidator: typeof buttonStyleValidator; -declare const Assertions$4_channelTypesValidator: typeof channelTypesValidator; -declare const Assertions$4_customIdValidator: typeof customIdValidator; -declare const Assertions$4_defaultValidator: typeof defaultValidator; -declare const Assertions$4_disabledValidator: typeof disabledValidator; -declare const Assertions$4_emojiValidator: typeof emojiValidator; -declare const Assertions$4_jsonOptionValidator: typeof jsonOptionValidator; -declare const Assertions$4_labelValueDescriptionValidator: typeof labelValueDescriptionValidator; -declare const Assertions$4_minMaxValidator: typeof minMaxValidator; -declare const Assertions$4_optionValidator: typeof optionValidator; -declare const Assertions$4_optionsLengthValidator: typeof optionsLengthValidator; -declare const Assertions$4_optionsValidator: typeof optionsValidator; -declare const Assertions$4_urlValidator: typeof urlValidator; -declare const Assertions$4_validateRequiredButtonParameters: typeof validateRequiredButtonParameters; -declare const Assertions$4_validateRequiredSelectMenuOptionParameters: typeof validateRequiredSelectMenuOptionParameters; -declare const Assertions$4_validateRequiredSelectMenuParameters: typeof validateRequiredSelectMenuParameters; -declare namespace Assertions$4 { - export { Assertions$4_buttonLabelValidator as buttonLabelValidator, Assertions$4_buttonStyleValidator as buttonStyleValidator, Assertions$4_channelTypesValidator as channelTypesValidator, Assertions$4_customIdValidator as customIdValidator, Assertions$4_defaultValidator as defaultValidator, Assertions$4_disabledValidator as disabledValidator, Assertions$4_emojiValidator as emojiValidator, Assertions$4_jsonOptionValidator as jsonOptionValidator, Assertions$4_labelValueDescriptionValidator as labelValueDescriptionValidator, Assertions$4_minMaxValidator as minMaxValidator, Assertions$4_optionValidator as optionValidator, Assertions$4_optionsLengthValidator as optionsLengthValidator, Assertions$4_optionsValidator as optionsValidator, placeholderValidator$1 as placeholderValidator, Assertions$4_urlValidator as urlValidator, Assertions$4_validateRequiredButtonParameters as validateRequiredButtonParameters, Assertions$4_validateRequiredSelectMenuOptionParameters as validateRequiredSelectMenuOptionParameters, Assertions$4_validateRequiredSelectMenuParameters as validateRequiredSelectMenuParameters }; +declare const Assertions$5_buttonLabelValidator: typeof buttonLabelValidator; +declare const Assertions$5_buttonStyleValidator: typeof buttonStyleValidator; +declare const Assertions$5_channelTypesValidator: typeof channelTypesValidator; +declare const Assertions$5_customIdValidator: typeof customIdValidator; +declare const Assertions$5_defaultValidator: typeof defaultValidator; +declare const Assertions$5_disabledValidator: typeof disabledValidator; +declare const Assertions$5_emojiValidator: typeof emojiValidator; +declare const Assertions$5_idValidator: typeof idValidator; +declare const Assertions$5_jsonOptionValidator: typeof jsonOptionValidator; +declare const Assertions$5_labelValueDescriptionValidator: typeof labelValueDescriptionValidator; +declare const Assertions$5_minMaxValidator: typeof minMaxValidator; +declare const Assertions$5_optionValidator: typeof optionValidator; +declare const Assertions$5_optionsLengthValidator: typeof optionsLengthValidator; +declare const Assertions$5_optionsValidator: typeof optionsValidator; +declare const Assertions$5_urlValidator: typeof urlValidator; +declare const Assertions$5_validateRequiredButtonParameters: typeof validateRequiredButtonParameters; +declare const Assertions$5_validateRequiredSelectMenuOptionParameters: typeof validateRequiredSelectMenuOptionParameters; +declare const Assertions$5_validateRequiredSelectMenuParameters: typeof validateRequiredSelectMenuParameters; +declare namespace Assertions$5 { + export { Assertions$5_buttonLabelValidator as buttonLabelValidator, Assertions$5_buttonStyleValidator as buttonStyleValidator, Assertions$5_channelTypesValidator as channelTypesValidator, Assertions$5_customIdValidator as customIdValidator, Assertions$5_defaultValidator as defaultValidator, Assertions$5_disabledValidator as disabledValidator, Assertions$5_emojiValidator as emojiValidator, Assertions$5_idValidator as idValidator, Assertions$5_jsonOptionValidator as jsonOptionValidator, Assertions$5_labelValueDescriptionValidator as labelValueDescriptionValidator, Assertions$5_minMaxValidator as minMaxValidator, Assertions$5_optionValidator as optionValidator, Assertions$5_optionsLengthValidator as optionsLengthValidator, Assertions$5_optionsValidator as optionsValidator, placeholderValidator$1 as placeholderValidator, Assertions$5_urlValidator as urlValidator, Assertions$5_validateRequiredButtonParameters as validateRequiredButtonParameters, Assertions$5_validateRequiredSelectMenuOptionParameters as validateRequiredSelectMenuOptionParameters, Assertions$5_validateRequiredSelectMenuParameters as validateRequiredSelectMenuParameters }; } /** * Any action row component data represented as an object. */ -type AnyAPIActionRowComponent = APIActionRowComponent | APIActionRowComponentTypes; +type AnyAPIActionRowComponent = APIActionRowComponent | APIComponentInActionRow | APIMessageComponent; /** * The base component builder that contains common symbols for all sorts of components. * @@ -442,6 +443,16 @@ declare abstract class ComponentBuilder); + /** + * Sets the id (not the custom id) for this component. + * + * @param id - The id for this component + */ + setId(id: number): this; + /** + * Clears the id of this component, defaulting to a default incremented id. + */ + clearId(): this; } /** @@ -940,10 +951,6 @@ declare class TextInputBuilder extends ComponentBuilder i equals(other: APITextInputComponent | JSONEncodable): boolean; } -/** - * The builders that may be used for messages. - */ -type MessageComponentBuilder = ActionRowBuilder | MessageActionRowComponentBuilder; /** * The builders that may be used for modals. */ @@ -965,7 +972,7 @@ type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalActionRowComp * * @typeParam ComponentType - The types of components this action row holds */ -declare class ActionRowBuilder extends ComponentBuilder> { +declare class ActionRowBuilder extends ComponentBuilder> { /** * The components within this action row. */ @@ -1004,7 +1011,7 @@ declare class ActionRowBuilder extend * .addComponents(button2, button3); * ``` */ - constructor({ components, ...data }?: Partial>); + constructor({ components, ...data }?: Partial>); /** * Adds components to this action row. * @@ -1023,6 +1030,504 @@ declare class ActionRowBuilder extend toJSON(): APIActionRowComponent>; } +declare class FileBuilder extends ComponentBuilder { + /** + * Creates a new file from API data. + * + * @param data - The API data to create this file with + * @example + * Creating a file from an API data object: + * ```ts + * const file = new FileBuilder({ + * spoiler: true, + * file: { + * url: 'attachment://file.png', + * }, + * }); + * ``` + * @example + * Creating a file using setters and API data: + * ```ts + * const file = new FileBuilder({ + * file: { + * url: 'attachment://image.jpg', + * }, + * }) + * .setSpoiler(false); + * ``` + */ + constructor(data?: Partial); + /** + * Sets the spoiler status of this file. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler?: boolean): this; + /** + * Sets the media URL of this file. + * + * @param url - The URL to use + */ + setURL(url: string): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APIFileComponent; +} + +declare class SeparatorBuilder extends ComponentBuilder { + /** + * Creates a new separator from API data. + * + * @param data - The API data to create this separator with + * @example + * Creating a separator from an API data object: + * ```ts + * const separator = new SeparatorBuilder({ + * spacing: SeparatorSpacingSize.Small, + * divider: true, + * }); + * ``` + * @example + * Creating a separator using setters and API data: + * ```ts + * const separator = new SeparatorBuilder({ + * spacing: SeparatorSpacingSize.Large, + * }) + * .setDivider(false); + * ``` + */ + constructor(data?: Partial); + /** + * Sets whether this separator should show a divider line. + * + * @param divider - Whether to show a divider line + */ + setDivider(divider?: boolean): this; + /** + * Sets the spacing of this separator. + * + * @param spacing - The spacing to use + */ + setSpacing(spacing: SeparatorSpacingSize): this; + /** + * Clears the spacing of this separator. + */ + clearSpacing(): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APISeparatorComponent; +} + +declare class TextDisplayBuilder extends ComponentBuilder { + /** + * Creates a new text display from API data. + * + * @param data - The API data to create this text display with + * @example + * Creating a text display from an API data object: + * ```ts + * const textDisplay = new TextDisplayBuilder({ + * content: 'some text', + * }); + * ``` + * @example + * Creating a text display using setters and API data: + * ```ts + * const textDisplay = new TextDisplayBuilder({ + * content: 'old text', + * }) + * .setContent('new text'); + * ``` + */ + constructor(data?: Partial); + /** + * Sets the text of this text display. + * + * @param content - The text to use + */ + setContent(content: string): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APITextDisplayComponent; +} + +/** + * The builders that may be used within a container. + */ +type ContainerComponentBuilder = ActionRowBuilder | FileBuilder | MediaGalleryBuilder | SectionBuilder | SeparatorBuilder | TextDisplayBuilder; +/** + * A builder that creates API-compatible JSON data for a container. + */ +declare class ContainerBuilder extends ComponentBuilder { + /** + * The components within this container. + */ + readonly components: ContainerComponentBuilder[]; + /** + * Creates a new container from API data. + * + * @param data - The API data to create this container with + * @example + * Creating a container from an API data object: + * ```ts + * const container = new ContainerBuilder({ + * components: [ + * { + * content: "Some text here", + * type: ComponentType.TextDisplay, + * }, + * ], + * }); + * ``` + * @example + * Creating a container using setters and API data: + * ```ts + * const container = new ContainerBuilder({ + * components: [ + * { + * content: "# Heading", + * type: ComponentType.TextDisplay, + * }, + * ], + * }) + * .addComponents(separator, section); + * ``` + */ + constructor({ components, ...data }?: Partial); + /** + * Sets the accent color of this container. + * + * @param color - The color to use + */ + setAccentColor(color?: RGBTuple | number): this; + /** + * Clears the accent color of this container. + */ + clearAccentColor(): this; + /** + * Adds action row components to this container. + * + * @param components - The action row components to add + */ + addActionRowComponents(...components: RestOrArray | APIActionRowComponent | ((builder: ActionRowBuilder) => ActionRowBuilder)>): this; + /** + * Adds file components to this container. + * + * @param components - The file components to add + */ + addFileComponents(...components: RestOrArray FileBuilder)>): this; + /** + * Adds media gallery components to this container. + * + * @param components - The media gallery components to add + */ + addMediaGalleryComponents(...components: RestOrArray MediaGalleryBuilder)>): this; + /** + * Adds section components to this container. + * + * @param components - The section components to add + */ + addSectionComponents(...components: RestOrArray SectionBuilder)>): this; + /** + * Adds separator components to this container. + * + * @param components - The separator components to add + */ + addSeparatorComponents(...components: RestOrArray SeparatorBuilder)>): this; + /** + * Adds text display components to this container. + * + * @param components - The text display components to add + */ + addTextDisplayComponents(...components: RestOrArray TextDisplayBuilder)>): this; + /** + * Removes, replaces, or inserts components for this container. + * + * @param index - The index to start removing, replacing or inserting components + * @param deleteCount - The amount of components to remove + * @param components - The components to set + */ + spliceComponents(index: number, deleteCount: number, ...components: RestOrArray): this; + /** + * Sets the spoiler status of this container. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler?: boolean): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APIContainerComponent; +} + +declare class MediaGalleryItemBuilder implements JSONEncodable { + /** + * The API data associated with this media gallery item. + */ + readonly data: Partial; + /** + * Creates a new media gallery item from API data. + * + * @param data - The API data to create this media gallery item with + * @example + * Creating a media gallery item from an API data object: + * ```ts + * const item = new MediaGalleryItemBuilder({ + * description: "Some text here", + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/2.png', + * }, + * }); + * ``` + * @example + * Creating a media gallery item using setters and API data: + * ```ts + * const item = new MediaGalleryItemBuilder({ + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/5.png', + * }, + * }) + * .setDescription("alt text"); + * ``` + */ + constructor(data?: Partial); + /** + * Sets the description of this media gallery item. + * + * @param description - The description to use + */ + setDescription(description: string): this; + /** + * Clears the description of this media gallery item. + */ + clearDescription(): this; + /** + * Sets the spoiler status of this media gallery item. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler?: boolean): this; + /** + * Sets the media URL of this media gallery item. + * + * @param url - The URL to use + */ + setURL(url: string): this; + /** + * Serializes this builder to API-compatible JSON data. + * + * @remarks + * This method runs validations on the data before serializing it. + * As such, it may throw an error if the data is invalid. + */ + toJSON(): APIMediaGalleryItem; +} + +/** + * A builder that creates API-compatible JSON data for a container. + */ +declare class MediaGalleryBuilder extends ComponentBuilder { + /** + * The components within this container. + */ + readonly items: MediaGalleryItemBuilder[]; + /** + * Creates a new media gallery from API data. + * + * @param data - The API data to create this media gallery with + * @example + * Creating a media gallery from an API data object: + * ```ts + * const mediaGallery = new MediaGalleryBuilder({ + * items: [ + * { + * description: "Some text here", + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/2.png', + * }, + * }, + * ], + * }); + * ``` + * @example + * Creating a media gallery using setters and API data: + * ```ts + * const mediaGallery = new MediaGalleryBuilder({ + * items: [ + * { + * description: "alt text", + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/5.png', + * }, + * }, + * ], + * }) + * .addItems(item2, item3); + * ``` + */ + constructor({ items, ...data }?: Partial); + /** + * Adds items to this media gallery. + * + * @param items - The items to add + */ + addItems(...items: RestOrArray MediaGalleryItemBuilder)>): this; + /** + * Removes, replaces, or inserts media gallery items for this media gallery. + * + * @param index - The index to start removing, replacing or inserting items + * @param deleteCount - The amount of items to remove + * @param items - The items to insert + */ + spliceItems(index: number, deleteCount: number, ...items: RestOrArray MediaGalleryItemBuilder)>): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APIMediaGalleryComponent; +} + +/** + * A builder that creates API-compatible JSON data for a section. + */ +declare class SectionBuilder extends ComponentBuilder { + /** + * The components within this section. + */ + readonly components: ComponentBuilder[]; + /** + * The accessory of this section. + */ + readonly accessory?: ButtonBuilder | ThumbnailBuilder; + /** + * Creates a new section from API data. + * + * @param data - The API data to create this section with + * @example + * Creating a section from an API data object: + * ```ts + * const section = new SectionBuilder({ + * components: [ + * { + * content: "Some text here", + * type: ComponentType.TextDisplay, + * }, + * ], + * accessory: { + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/3.png', + * }, + * } + * }); + * ``` + * @example + * Creating a section using setters and API data: + * ```ts + * const section = new SectionBuilder({ + * components: [ + * { + * content: "# Heading", + * type: ComponentType.TextDisplay, + * }, + * ], + * }) + * .setPrimaryButtonAccessory(button); + * ``` + */ + constructor({ components, accessory, ...data }?: Partial); + /** + * Sets the accessory of this section to a button. + * + * @param accessory - The accessory to use + */ + setButtonAccessory(accessory: APIButtonComponent | ButtonBuilder | ((builder: ButtonBuilder) => ButtonBuilder)): this; + /** + * Sets the accessory of this section to a thumbnail. + * + * @param accessory - The accessory to use + */ + setThumbnailAccessory(accessory: APIThumbnailComponent | ThumbnailBuilder | ((builder: ThumbnailBuilder) => ThumbnailBuilder)): this; + /** + * Adds text display components to this section. + * + * @param components - The text display components to add + */ + addTextDisplayComponents(...components: RestOrArray TextDisplayBuilder)>): this; + /** + * Removes, replaces, or inserts text display components for this section. + * + * @param index - The index to start removing, replacing or inserting text display components + * @param deleteCount - The amount of text display components to remove + * @param components - The text display components to insert + */ + spliceTextDisplayComponents(index: number, deleteCount: number, ...components: RestOrArray TextDisplayBuilder)>): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APISectionComponent; +} + +declare class ThumbnailBuilder extends ComponentBuilder { + /** + * Creates a new thumbnail from API data. + * + * @param data - The API data to create this thumbnail with + * @example + * Creating a thumbnail from an API data object: + * ```ts + * const thumbnail = new ThumbnailBuilder({ + * description: 'some text', + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/4.png', + * }, + * }); + * ``` + * @example + * Creating a thumbnail using setters and API data: + * ```ts + * const thumbnail = new ThumbnailBuilder({ + * media: { + * url: 'attachment://image.png', + * }, + * }) + * .setDescription('alt text'); + * ``` + */ + constructor(data?: Partial); + /** + * Sets the description of this thumbnail. + * + * @param description - The description to use + */ + setDescription(description: string): this; + /** + * Clears the description of this thumbnail. + */ + clearDescription(): this; + /** + * Sets the spoiler status of this thumbnail. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler?: boolean): this; + /** + * Sets the media URL of this thumbnail. + * + * @param url - The URL to use + */ + setURL(url: string): this; + /** + * {@inheritdoc ComponentBuilder.toJSON} + */ + toJSON(): APIThumbnailComponent; +} + +/** + * The builders that may be used for messages. + */ +type MessageComponentBuilder = ActionRowBuilder | ContainerBuilder | FileBuilder | MediaGalleryBuilder | MessageActionRowComponentBuilder | SectionBuilder | SeparatorBuilder | TextDisplayBuilder | ThumbnailBuilder; /** * Components here are mapped to their respective builder. */ @@ -1059,6 +1564,34 @@ interface MappedComponentTypes { * The channel select component type is associated with a {@link ChannelSelectMenuBuilder}. */ [ComponentType.ChannelSelect]: ChannelSelectMenuBuilder; + /** + * The file component type is associated with a {@link FileBuilder}. + */ + [ComponentType.File]: FileBuilder; + /** + * The separator component type is associated with a {@link SeparatorBuilder}. + */ + [ComponentType.Separator]: SeparatorBuilder; + /** + * The container component type is associated with a {@link ContainerBuilder}. + */ + [ComponentType.Container]: ContainerBuilder; + /** + * The text display component type is associated with a {@link TextDisplayBuilder}. + */ + [ComponentType.TextDisplay]: TextDisplayBuilder; + /** + * The thumbnail component type is associated with a {@link ThumbnailBuilder}. + */ + [ComponentType.Thumbnail]: ThumbnailBuilder; + /** + * The section component type is associated with a {@link SectionBuilder}. + */ + [ComponentType.Section]: SectionBuilder; + /** + * The media gallery component type is associated with a {@link MediaGalleryBuilder}. + */ + [ComponentType.MediaGallery]: MediaGalleryBuilder; } /** * Factory for creating components from API data. @@ -1076,6 +1609,7 @@ declare function createComponentBuilder(data: ComponentBuilder): ComponentBuilder; +declare function resolveBuilder, Builder extends JSONEncodable>(builder: Builder | ComponentType | ((builder: Builder) => Builder), Constructor: new (data?: ComponentType) => Builder): Builder; declare const textInputStyleValidator: _sapphire_shapeshift.NativeEnumValidator; declare const minLengthValidator: _sapphire_shapeshift.NumberValidator; @@ -1086,15 +1620,15 @@ declare const placeholderValidator: _sapphire_shapeshift.StringValidator declare const labelValidator: _sapphire_shapeshift.StringValidator; declare function validateRequiredParameters$3(customId?: string, style?: TextInputStyle, label?: string): void; -declare const Assertions$3_labelValidator: typeof labelValidator; -declare const Assertions$3_maxLengthValidator: typeof maxLengthValidator; -declare const Assertions$3_minLengthValidator: typeof minLengthValidator; -declare const Assertions$3_placeholderValidator: typeof placeholderValidator; -declare const Assertions$3_requiredValidator: typeof requiredValidator; -declare const Assertions$3_textInputStyleValidator: typeof textInputStyleValidator; -declare const Assertions$3_valueValidator: typeof valueValidator; -declare namespace Assertions$3 { - export { Assertions$3_labelValidator as labelValidator, Assertions$3_maxLengthValidator as maxLengthValidator, Assertions$3_minLengthValidator as minLengthValidator, Assertions$3_placeholderValidator as placeholderValidator, Assertions$3_requiredValidator as requiredValidator, Assertions$3_textInputStyleValidator as textInputStyleValidator, validateRequiredParameters$3 as validateRequiredParameters, Assertions$3_valueValidator as valueValidator }; +declare const Assertions$4_labelValidator: typeof labelValidator; +declare const Assertions$4_maxLengthValidator: typeof maxLengthValidator; +declare const Assertions$4_minLengthValidator: typeof minLengthValidator; +declare const Assertions$4_placeholderValidator: typeof placeholderValidator; +declare const Assertions$4_requiredValidator: typeof requiredValidator; +declare const Assertions$4_textInputStyleValidator: typeof textInputStyleValidator; +declare const Assertions$4_valueValidator: typeof valueValidator; +declare namespace Assertions$4 { + export { Assertions$4_labelValidator as labelValidator, Assertions$4_maxLengthValidator as maxLengthValidator, Assertions$4_minLengthValidator as minLengthValidator, Assertions$4_placeholderValidator as placeholderValidator, Assertions$4_requiredValidator as requiredValidator, Assertions$4_textInputStyleValidator as textInputStyleValidator, validateRequiredParameters$3 as validateRequiredParameters, Assertions$4_valueValidator as valueValidator }; } /** @@ -1132,7 +1666,7 @@ declare class ModalBuilder implements JSONEncodable | APIActionRowComponent>): this; + addComponents(...components: RestOrArray | APIActionRowComponent>): this; /** * Sets components for this modal. * @@ -1149,10 +1683,44 @@ declare const titleValidator: _sapphire_shapeshift.StringValidator; declare const componentsValidator: _sapphire_shapeshift.ArrayValidator<[ActionRowBuilder, ...ActionRowBuilder[]], ActionRowBuilder>; declare function validateRequiredParameters$2(customId?: string, title?: string, components?: ActionRowBuilder[]): void; -declare const Assertions$2_componentsValidator: typeof componentsValidator; -declare const Assertions$2_titleValidator: typeof titleValidator; +declare const Assertions$3_componentsValidator: typeof componentsValidator; +declare const Assertions$3_titleValidator: typeof titleValidator; +declare namespace Assertions$3 { + export { Assertions$3_componentsValidator as componentsValidator, Assertions$3_titleValidator as titleValidator, validateRequiredParameters$2 as validateRequiredParameters }; +} + +declare const unfurledMediaItemPredicate: _sapphire_shapeshift.ObjectValidator<{ + url: string; +}, _sapphire_shapeshift.UndefinedToOptional<{ + url: string; +}>>; +declare const descriptionPredicate: _sapphire_shapeshift.StringValidator; +declare const filePredicate: _sapphire_shapeshift.ObjectValidator<{ + url: string; +}, _sapphire_shapeshift.UndefinedToOptional<{ + url: string; +}>>; +declare const spoilerPredicate: _sapphire_shapeshift.BooleanValidator; +declare const dividerPredicate: _sapphire_shapeshift.BooleanValidator; +declare const spacingPredicate: _sapphire_shapeshift.NativeEnumValidator; +declare const textDisplayContentPredicate: _sapphire_shapeshift.StringValidator; +declare const accessoryPredicate: _sapphire_shapeshift.UnionValidator; +declare const containerColorPredicate: _sapphire_shapeshift.UnionValidator; +declare function assertReturnOfBuilder$1(input: unknown, ExpectedInstanceOf: new () => ReturnType): asserts input is ReturnType; +declare function validateComponentArray(input: unknown, min: number, max: number, ExpectedInstanceOf?: new () => ReturnType): asserts input is ReturnType[]; + +declare const Assertions$2_accessoryPredicate: typeof accessoryPredicate; +declare const Assertions$2_containerColorPredicate: typeof containerColorPredicate; +declare const Assertions$2_descriptionPredicate: typeof descriptionPredicate; +declare const Assertions$2_dividerPredicate: typeof dividerPredicate; +declare const Assertions$2_filePredicate: typeof filePredicate; +declare const Assertions$2_spacingPredicate: typeof spacingPredicate; +declare const Assertions$2_spoilerPredicate: typeof spoilerPredicate; +declare const Assertions$2_textDisplayContentPredicate: typeof textDisplayContentPredicate; +declare const Assertions$2_unfurledMediaItemPredicate: typeof unfurledMediaItemPredicate; +declare const Assertions$2_validateComponentArray: typeof validateComponentArray; declare namespace Assertions$2 { - export { Assertions$2_componentsValidator as componentsValidator, Assertions$2_titleValidator as titleValidator, validateRequiredParameters$2 as validateRequiredParameters }; + export { Assertions$2_accessoryPredicate as accessoryPredicate, assertReturnOfBuilder$1 as assertReturnOfBuilder, Assertions$2_containerColorPredicate as containerColorPredicate, Assertions$2_descriptionPredicate as descriptionPredicate, Assertions$2_dividerPredicate as dividerPredicate, Assertions$2_filePredicate as filePredicate, Assertions$2_spacingPredicate as spacingPredicate, Assertions$2_spoilerPredicate as spoilerPredicate, Assertions$2_textDisplayContentPredicate as textDisplayContentPredicate, Assertions$2_unfurledMediaItemPredicate as unfurledMediaItemPredicate, Assertions$2_validateComponentArray as validateComponentArray }; } /** @@ -2040,4 +2608,4 @@ declare function isValidationEnabled(): boolean; */ declare const version: string; -export { ActionRowBuilder, type AnyAPIActionRowComponent, type AnyComponentBuilder, ApplicationCommandNumericOptionMinMaxValueMixin, type ApplicationCommandOptionAllowedChannelTypes, ApplicationCommandOptionBase, ApplicationCommandOptionChannelTypesMixin, ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin, BaseSelectMenuBuilder, ButtonBuilder, ChannelSelectMenuBuilder, Assertions$4 as ComponentAssertions, ComponentBuilder, Assertions as ContextMenuCommandAssertions, ContextMenuCommandBuilder, type ContextMenuCommandType, Assertions$5 as EmbedAssertions, type EmbedAuthorData, type EmbedAuthorOptions, EmbedBuilder, type EmbedFooterData, type EmbedFooterOptions, type EmbedImageData, type IconData, type MappedComponentTypes, MentionableSelectMenuBuilder, type MessageActionRowComponentBuilder, type MessageComponentBuilder, type ModalActionRowComponentBuilder, Assertions$2 as ModalAssertions, ModalBuilder, type ModalComponentBuilder, type RGBTuple, type RestOrArray, RoleSelectMenuBuilder, StringSelectMenuBuilder as SelectMenuBuilder, StringSelectMenuOptionBuilder as SelectMenuOptionBuilder, SharedNameAndDescription, SharedSlashCommand, SharedSlashCommandOptions, SharedSlashCommandSubcommands, Assertions$1 as SlashCommandAssertions, SlashCommandAttachmentOption, SlashCommandBooleanOption, SlashCommandBuilder, SlashCommandChannelOption, SlashCommandIntegerOption, SlashCommandMentionableOption, SlashCommandNumberOption, type SlashCommandOptionsOnlyBuilder, SlashCommandRoleOption, SlashCommandStringOption, SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder, type SlashCommandSubcommandsOnlyBuilder, SlashCommandUserOption, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, Assertions$3 as TextInputAssertions, TextInputBuilder, type ToAPIApplicationCommandOptions, UserSelectMenuBuilder, createComponentBuilder, disableValidators, embedLength, enableValidators, isValidationEnabled, normalizeArray, version }; +export { ActionRowBuilder, type AnyAPIActionRowComponent, type AnyComponentBuilder, ApplicationCommandNumericOptionMinMaxValueMixin, type ApplicationCommandOptionAllowedChannelTypes, ApplicationCommandOptionBase, ApplicationCommandOptionChannelTypesMixin, ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin, BaseSelectMenuBuilder, ButtonBuilder, ChannelSelectMenuBuilder, Assertions$5 as ComponentAssertions, ComponentBuilder, Assertions$2 as ComponentsV2Assertions, ContainerBuilder, type ContainerComponentBuilder, Assertions as ContextMenuCommandAssertions, ContextMenuCommandBuilder, type ContextMenuCommandType, Assertions$6 as EmbedAssertions, type EmbedAuthorData, type EmbedAuthorOptions, EmbedBuilder, type EmbedFooterData, type EmbedFooterOptions, type EmbedImageData, FileBuilder, type IconData, type MappedComponentTypes, MediaGalleryBuilder, MediaGalleryItemBuilder, MentionableSelectMenuBuilder, type MessageActionRowComponentBuilder, type MessageComponentBuilder, type ModalActionRowComponentBuilder, Assertions$3 as ModalAssertions, ModalBuilder, type ModalComponentBuilder, type RGBTuple, type RestOrArray, RoleSelectMenuBuilder, SectionBuilder, StringSelectMenuBuilder as SelectMenuBuilder, StringSelectMenuOptionBuilder as SelectMenuOptionBuilder, SeparatorBuilder, SharedNameAndDescription, SharedSlashCommand, SharedSlashCommandOptions, SharedSlashCommandSubcommands, Assertions$1 as SlashCommandAssertions, SlashCommandAttachmentOption, SlashCommandBooleanOption, SlashCommandBuilder, SlashCommandChannelOption, SlashCommandIntegerOption, SlashCommandMentionableOption, SlashCommandNumberOption, type SlashCommandOptionsOnlyBuilder, SlashCommandRoleOption, SlashCommandStringOption, SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder, type SlashCommandSubcommandsOnlyBuilder, SlashCommandUserOption, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, TextDisplayBuilder, Assertions$4 as TextInputAssertions, TextInputBuilder, ThumbnailBuilder, type ToAPIApplicationCommandOptions, UserSelectMenuBuilder, createComponentBuilder, disableValidators, embedLength, enableValidators, isValidationEnabled, normalizeArray, resolveBuilder, version }; diff --git a/node_modules/@discordjs/builders/dist/index.d.ts b/node_modules/@discordjs/builders/dist/index.d.ts index ac28cd2..428a46b 100644 --- a/node_modules/@discordjs/builders/dist/index.d.ts +++ b/node_modules/@discordjs/builders/dist/index.d.ts @@ -1,5 +1,5 @@ import * as _sapphire_shapeshift from '@sapphire/shapeshift'; -import { APIEmbedField, APIEmbedAuthor, APIEmbedFooter, APIEmbedImage, APIEmbed, APISelectMenuOption, APIMessageComponentEmoji, ButtonStyle, ChannelType, APIActionRowComponent, APIActionRowComponentTypes, APIBaseComponent, ComponentType, APIButtonComponent, Snowflake, APISelectMenuComponent, APIChannelSelectComponent, APIMentionableSelectComponent, APISelectMenuDefaultValue, SelectMenuDefaultValueType, APIRoleSelectComponent, APIStringSelectComponent, APIUserSelectComponent, APITextInputComponent, TextInputStyle, APIMessageActionRowComponent, APIModalActionRowComponent, APIModalComponent, APIMessageComponent, APIModalInteractionResponseCallbackData, LocalizationMap, LocaleString, InteractionContextType, Permissions, ApplicationIntegrationType, RESTPostAPIChatInputApplicationCommandsJSONBody, ApplicationCommandOptionType, APIApplicationCommandBasicOption, APIApplicationCommandAttachmentOption, APIApplicationCommandBooleanOption, APIApplicationCommandChannelOption, APIApplicationCommandOptionChoice, APIApplicationCommandIntegerOption, APIApplicationCommandMentionableOption, APIApplicationCommandNumberOption, APIApplicationCommandRoleOption, APIApplicationCommandStringOption, APIApplicationCommandUserOption, APIApplicationCommandSubcommandGroupOption, APIApplicationCommandSubcommandOption, APIApplicationCommandOption, Locale, ApplicationCommandType, RESTPostAPIContextMenuApplicationCommandsJSONBody } from 'discord-api-types/v10'; +import { APIEmbedField, APIEmbedAuthor, APIEmbedFooter, APIEmbedImage, APIEmbed, APISelectMenuOption, APIMessageComponentEmoji, ButtonStyle, ChannelType, APIActionRowComponent, APIComponentInActionRow, APIMessageComponent, APIBaseComponent, ComponentType, APIButtonComponent, Snowflake, APISelectMenuComponent, APIChannelSelectComponent, APIMentionableSelectComponent, APISelectMenuDefaultValue, SelectMenuDefaultValueType, APIRoleSelectComponent, APIStringSelectComponent, APIUserSelectComponent, APITextInputComponent, TextInputStyle, APIComponentInMessageActionRow, APIComponentInModalActionRow, APIFileComponent, APISeparatorComponent, SeparatorSpacingSize, APITextDisplayComponent, APIContainerComponent, APIMediaGalleryComponent, APISectionComponent, APIComponentInContainer, APIMediaGalleryItem, APIThumbnailComponent, APIModalComponent, APIModalInteractionResponseCallbackData, LocalizationMap, LocaleString, InteractionContextType, Permissions, ApplicationIntegrationType, RESTPostAPIChatInputApplicationCommandsJSONBody, ApplicationCommandOptionType, APIApplicationCommandBasicOption, APIApplicationCommandAttachmentOption, APIApplicationCommandBooleanOption, APIApplicationCommandChannelOption, APIApplicationCommandOptionChoice, APIApplicationCommandIntegerOption, APIApplicationCommandMentionableOption, APIApplicationCommandNumberOption, APIApplicationCommandRoleOption, APIApplicationCommandStringOption, APIApplicationCommandUserOption, APIApplicationCommandSubcommandGroupOption, APIApplicationCommandSubcommandOption, APIApplicationCommandOption, Locale, ApplicationCommandType, RESTPostAPIContextMenuApplicationCommandsJSONBody } from 'discord-api-types/v10'; export * from '@discordjs/formatters'; import { JSONEncodable, Equatable } from '@discordjs/util'; @@ -40,7 +40,7 @@ declare const embedAuthorPredicate: _sapphire_shapeshift.ObjectValidator<{ }>>; declare const RGBPredicate: _sapphire_shapeshift.NumberValidator; declare const colorPredicate: _sapphire_shapeshift.UnionValidator; -declare const descriptionPredicate: _sapphire_shapeshift.UnionValidator; +declare const descriptionPredicate$1: _sapphire_shapeshift.UnionValidator; declare const footerTextPredicate: _sapphire_shapeshift.UnionValidator; declare const embedFooterPredicate: _sapphire_shapeshift.ObjectValidator<{ text: string | null; @@ -52,26 +52,25 @@ declare const embedFooterPredicate: _sapphire_shapeshift.ObjectValidator<{ declare const timestampPredicate: _sapphire_shapeshift.UnionValidator; declare const titlePredicate: _sapphire_shapeshift.UnionValidator; -declare const Assertions$5_RGBPredicate: typeof RGBPredicate; -declare const Assertions$5_authorNamePredicate: typeof authorNamePredicate; -declare const Assertions$5_colorPredicate: typeof colorPredicate; -declare const Assertions$5_descriptionPredicate: typeof descriptionPredicate; -declare const Assertions$5_embedAuthorPredicate: typeof embedAuthorPredicate; -declare const Assertions$5_embedFieldPredicate: typeof embedFieldPredicate; -declare const Assertions$5_embedFieldsArrayPredicate: typeof embedFieldsArrayPredicate; -declare const Assertions$5_embedFooterPredicate: typeof embedFooterPredicate; -declare const Assertions$5_fieldInlinePredicate: typeof fieldInlinePredicate; -declare const Assertions$5_fieldLengthPredicate: typeof fieldLengthPredicate; -declare const Assertions$5_fieldNamePredicate: typeof fieldNamePredicate; -declare const Assertions$5_fieldValuePredicate: typeof fieldValuePredicate; -declare const Assertions$5_footerTextPredicate: typeof footerTextPredicate; -declare const Assertions$5_imageURLPredicate: typeof imageURLPredicate; -declare const Assertions$5_timestampPredicate: typeof timestampPredicate; -declare const Assertions$5_titlePredicate: typeof titlePredicate; -declare const Assertions$5_urlPredicate: typeof urlPredicate; -declare const Assertions$5_validateFieldLength: typeof validateFieldLength; -declare namespace Assertions$5 { - export { Assertions$5_RGBPredicate as RGBPredicate, Assertions$5_authorNamePredicate as authorNamePredicate, Assertions$5_colorPredicate as colorPredicate, Assertions$5_descriptionPredicate as descriptionPredicate, Assertions$5_embedAuthorPredicate as embedAuthorPredicate, Assertions$5_embedFieldPredicate as embedFieldPredicate, Assertions$5_embedFieldsArrayPredicate as embedFieldsArrayPredicate, Assertions$5_embedFooterPredicate as embedFooterPredicate, Assertions$5_fieldInlinePredicate as fieldInlinePredicate, Assertions$5_fieldLengthPredicate as fieldLengthPredicate, Assertions$5_fieldNamePredicate as fieldNamePredicate, Assertions$5_fieldValuePredicate as fieldValuePredicate, Assertions$5_footerTextPredicate as footerTextPredicate, Assertions$5_imageURLPredicate as imageURLPredicate, Assertions$5_timestampPredicate as timestampPredicate, Assertions$5_titlePredicate as titlePredicate, Assertions$5_urlPredicate as urlPredicate, Assertions$5_validateFieldLength as validateFieldLength }; +declare const Assertions$6_RGBPredicate: typeof RGBPredicate; +declare const Assertions$6_authorNamePredicate: typeof authorNamePredicate; +declare const Assertions$6_colorPredicate: typeof colorPredicate; +declare const Assertions$6_embedAuthorPredicate: typeof embedAuthorPredicate; +declare const Assertions$6_embedFieldPredicate: typeof embedFieldPredicate; +declare const Assertions$6_embedFieldsArrayPredicate: typeof embedFieldsArrayPredicate; +declare const Assertions$6_embedFooterPredicate: typeof embedFooterPredicate; +declare const Assertions$6_fieldInlinePredicate: typeof fieldInlinePredicate; +declare const Assertions$6_fieldLengthPredicate: typeof fieldLengthPredicate; +declare const Assertions$6_fieldNamePredicate: typeof fieldNamePredicate; +declare const Assertions$6_fieldValuePredicate: typeof fieldValuePredicate; +declare const Assertions$6_footerTextPredicate: typeof footerTextPredicate; +declare const Assertions$6_imageURLPredicate: typeof imageURLPredicate; +declare const Assertions$6_timestampPredicate: typeof timestampPredicate; +declare const Assertions$6_titlePredicate: typeof titlePredicate; +declare const Assertions$6_urlPredicate: typeof urlPredicate; +declare const Assertions$6_validateFieldLength: typeof validateFieldLength; +declare namespace Assertions$6 { + export { Assertions$6_RGBPredicate as RGBPredicate, Assertions$6_authorNamePredicate as authorNamePredicate, Assertions$6_colorPredicate as colorPredicate, descriptionPredicate$1 as descriptionPredicate, Assertions$6_embedAuthorPredicate as embedAuthorPredicate, Assertions$6_embedFieldPredicate as embedFieldPredicate, Assertions$6_embedFieldsArrayPredicate as embedFieldsArrayPredicate, Assertions$6_embedFooterPredicate as embedFooterPredicate, Assertions$6_fieldInlinePredicate as fieldInlinePredicate, Assertions$6_fieldLengthPredicate as fieldLengthPredicate, Assertions$6_fieldNamePredicate as fieldNamePredicate, Assertions$6_fieldValuePredicate as fieldValuePredicate, Assertions$6_footerTextPredicate as footerTextPredicate, Assertions$6_imageURLPredicate as imageURLPredicate, Assertions$6_timestampPredicate as timestampPredicate, Assertions$6_titlePredicate as titlePredicate, Assertions$6_urlPredicate as urlPredicate, Assertions$6_validateFieldLength as validateFieldLength }; } /** @@ -346,6 +345,7 @@ declare class StringSelectMenuOptionBuilder implements JSONEncodable; declare const customIdValidator: _sapphire_shapeshift.StringValidator; declare const emojiValidator: _sapphire_shapeshift.ObjectValidator<{ name?: string | undefined; @@ -393,31 +393,32 @@ declare const channelTypesValidator: _sapphire_shapeshift.ArrayValidator; declare function validateRequiredButtonParameters(style?: ButtonStyle, label?: string, emoji?: APIMessageComponentEmoji, customId?: string, skuId?: string, url?: string): void; -declare const Assertions$4_buttonLabelValidator: typeof buttonLabelValidator; -declare const Assertions$4_buttonStyleValidator: typeof buttonStyleValidator; -declare const Assertions$4_channelTypesValidator: typeof channelTypesValidator; -declare const Assertions$4_customIdValidator: typeof customIdValidator; -declare const Assertions$4_defaultValidator: typeof defaultValidator; -declare const Assertions$4_disabledValidator: typeof disabledValidator; -declare const Assertions$4_emojiValidator: typeof emojiValidator; -declare const Assertions$4_jsonOptionValidator: typeof jsonOptionValidator; -declare const Assertions$4_labelValueDescriptionValidator: typeof labelValueDescriptionValidator; -declare const Assertions$4_minMaxValidator: typeof minMaxValidator; -declare const Assertions$4_optionValidator: typeof optionValidator; -declare const Assertions$4_optionsLengthValidator: typeof optionsLengthValidator; -declare const Assertions$4_optionsValidator: typeof optionsValidator; -declare const Assertions$4_urlValidator: typeof urlValidator; -declare const Assertions$4_validateRequiredButtonParameters: typeof validateRequiredButtonParameters; -declare const Assertions$4_validateRequiredSelectMenuOptionParameters: typeof validateRequiredSelectMenuOptionParameters; -declare const Assertions$4_validateRequiredSelectMenuParameters: typeof validateRequiredSelectMenuParameters; -declare namespace Assertions$4 { - export { Assertions$4_buttonLabelValidator as buttonLabelValidator, Assertions$4_buttonStyleValidator as buttonStyleValidator, Assertions$4_channelTypesValidator as channelTypesValidator, Assertions$4_customIdValidator as customIdValidator, Assertions$4_defaultValidator as defaultValidator, Assertions$4_disabledValidator as disabledValidator, Assertions$4_emojiValidator as emojiValidator, Assertions$4_jsonOptionValidator as jsonOptionValidator, Assertions$4_labelValueDescriptionValidator as labelValueDescriptionValidator, Assertions$4_minMaxValidator as minMaxValidator, Assertions$4_optionValidator as optionValidator, Assertions$4_optionsLengthValidator as optionsLengthValidator, Assertions$4_optionsValidator as optionsValidator, placeholderValidator$1 as placeholderValidator, Assertions$4_urlValidator as urlValidator, Assertions$4_validateRequiredButtonParameters as validateRequiredButtonParameters, Assertions$4_validateRequiredSelectMenuOptionParameters as validateRequiredSelectMenuOptionParameters, Assertions$4_validateRequiredSelectMenuParameters as validateRequiredSelectMenuParameters }; +declare const Assertions$5_buttonLabelValidator: typeof buttonLabelValidator; +declare const Assertions$5_buttonStyleValidator: typeof buttonStyleValidator; +declare const Assertions$5_channelTypesValidator: typeof channelTypesValidator; +declare const Assertions$5_customIdValidator: typeof customIdValidator; +declare const Assertions$5_defaultValidator: typeof defaultValidator; +declare const Assertions$5_disabledValidator: typeof disabledValidator; +declare const Assertions$5_emojiValidator: typeof emojiValidator; +declare const Assertions$5_idValidator: typeof idValidator; +declare const Assertions$5_jsonOptionValidator: typeof jsonOptionValidator; +declare const Assertions$5_labelValueDescriptionValidator: typeof labelValueDescriptionValidator; +declare const Assertions$5_minMaxValidator: typeof minMaxValidator; +declare const Assertions$5_optionValidator: typeof optionValidator; +declare const Assertions$5_optionsLengthValidator: typeof optionsLengthValidator; +declare const Assertions$5_optionsValidator: typeof optionsValidator; +declare const Assertions$5_urlValidator: typeof urlValidator; +declare const Assertions$5_validateRequiredButtonParameters: typeof validateRequiredButtonParameters; +declare const Assertions$5_validateRequiredSelectMenuOptionParameters: typeof validateRequiredSelectMenuOptionParameters; +declare const Assertions$5_validateRequiredSelectMenuParameters: typeof validateRequiredSelectMenuParameters; +declare namespace Assertions$5 { + export { Assertions$5_buttonLabelValidator as buttonLabelValidator, Assertions$5_buttonStyleValidator as buttonStyleValidator, Assertions$5_channelTypesValidator as channelTypesValidator, Assertions$5_customIdValidator as customIdValidator, Assertions$5_defaultValidator as defaultValidator, Assertions$5_disabledValidator as disabledValidator, Assertions$5_emojiValidator as emojiValidator, Assertions$5_idValidator as idValidator, Assertions$5_jsonOptionValidator as jsonOptionValidator, Assertions$5_labelValueDescriptionValidator as labelValueDescriptionValidator, Assertions$5_minMaxValidator as minMaxValidator, Assertions$5_optionValidator as optionValidator, Assertions$5_optionsLengthValidator as optionsLengthValidator, Assertions$5_optionsValidator as optionsValidator, placeholderValidator$1 as placeholderValidator, Assertions$5_urlValidator as urlValidator, Assertions$5_validateRequiredButtonParameters as validateRequiredButtonParameters, Assertions$5_validateRequiredSelectMenuOptionParameters as validateRequiredSelectMenuOptionParameters, Assertions$5_validateRequiredSelectMenuParameters as validateRequiredSelectMenuParameters }; } /** * Any action row component data represented as an object. */ -type AnyAPIActionRowComponent = APIActionRowComponent | APIActionRowComponentTypes; +type AnyAPIActionRowComponent = APIActionRowComponent | APIComponentInActionRow | APIMessageComponent; /** * The base component builder that contains common symbols for all sorts of components. * @@ -442,6 +443,16 @@ declare abstract class ComponentBuilder); + /** + * Sets the id (not the custom id) for this component. + * + * @param id - The id for this component + */ + setId(id: number): this; + /** + * Clears the id of this component, defaulting to a default incremented id. + */ + clearId(): this; } /** @@ -940,10 +951,6 @@ declare class TextInputBuilder extends ComponentBuilder i equals(other: APITextInputComponent | JSONEncodable): boolean; } -/** - * The builders that may be used for messages. - */ -type MessageComponentBuilder = ActionRowBuilder | MessageActionRowComponentBuilder; /** * The builders that may be used for modals. */ @@ -965,7 +972,7 @@ type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalActionRowComp * * @typeParam ComponentType - The types of components this action row holds */ -declare class ActionRowBuilder extends ComponentBuilder> { +declare class ActionRowBuilder extends ComponentBuilder> { /** * The components within this action row. */ @@ -1004,7 +1011,7 @@ declare class ActionRowBuilder extend * .addComponents(button2, button3); * ``` */ - constructor({ components, ...data }?: Partial>); + constructor({ components, ...data }?: Partial>); /** * Adds components to this action row. * @@ -1023,6 +1030,504 @@ declare class ActionRowBuilder extend toJSON(): APIActionRowComponent>; } +declare class FileBuilder extends ComponentBuilder { + /** + * Creates a new file from API data. + * + * @param data - The API data to create this file with + * @example + * Creating a file from an API data object: + * ```ts + * const file = new FileBuilder({ + * spoiler: true, + * file: { + * url: 'attachment://file.png', + * }, + * }); + * ``` + * @example + * Creating a file using setters and API data: + * ```ts + * const file = new FileBuilder({ + * file: { + * url: 'attachment://image.jpg', + * }, + * }) + * .setSpoiler(false); + * ``` + */ + constructor(data?: Partial); + /** + * Sets the spoiler status of this file. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler?: boolean): this; + /** + * Sets the media URL of this file. + * + * @param url - The URL to use + */ + setURL(url: string): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APIFileComponent; +} + +declare class SeparatorBuilder extends ComponentBuilder { + /** + * Creates a new separator from API data. + * + * @param data - The API data to create this separator with + * @example + * Creating a separator from an API data object: + * ```ts + * const separator = new SeparatorBuilder({ + * spacing: SeparatorSpacingSize.Small, + * divider: true, + * }); + * ``` + * @example + * Creating a separator using setters and API data: + * ```ts + * const separator = new SeparatorBuilder({ + * spacing: SeparatorSpacingSize.Large, + * }) + * .setDivider(false); + * ``` + */ + constructor(data?: Partial); + /** + * Sets whether this separator should show a divider line. + * + * @param divider - Whether to show a divider line + */ + setDivider(divider?: boolean): this; + /** + * Sets the spacing of this separator. + * + * @param spacing - The spacing to use + */ + setSpacing(spacing: SeparatorSpacingSize): this; + /** + * Clears the spacing of this separator. + */ + clearSpacing(): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APISeparatorComponent; +} + +declare class TextDisplayBuilder extends ComponentBuilder { + /** + * Creates a new text display from API data. + * + * @param data - The API data to create this text display with + * @example + * Creating a text display from an API data object: + * ```ts + * const textDisplay = new TextDisplayBuilder({ + * content: 'some text', + * }); + * ``` + * @example + * Creating a text display using setters and API data: + * ```ts + * const textDisplay = new TextDisplayBuilder({ + * content: 'old text', + * }) + * .setContent('new text'); + * ``` + */ + constructor(data?: Partial); + /** + * Sets the text of this text display. + * + * @param content - The text to use + */ + setContent(content: string): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APITextDisplayComponent; +} + +/** + * The builders that may be used within a container. + */ +type ContainerComponentBuilder = ActionRowBuilder | FileBuilder | MediaGalleryBuilder | SectionBuilder | SeparatorBuilder | TextDisplayBuilder; +/** + * A builder that creates API-compatible JSON data for a container. + */ +declare class ContainerBuilder extends ComponentBuilder { + /** + * The components within this container. + */ + readonly components: ContainerComponentBuilder[]; + /** + * Creates a new container from API data. + * + * @param data - The API data to create this container with + * @example + * Creating a container from an API data object: + * ```ts + * const container = new ContainerBuilder({ + * components: [ + * { + * content: "Some text here", + * type: ComponentType.TextDisplay, + * }, + * ], + * }); + * ``` + * @example + * Creating a container using setters and API data: + * ```ts + * const container = new ContainerBuilder({ + * components: [ + * { + * content: "# Heading", + * type: ComponentType.TextDisplay, + * }, + * ], + * }) + * .addComponents(separator, section); + * ``` + */ + constructor({ components, ...data }?: Partial); + /** + * Sets the accent color of this container. + * + * @param color - The color to use + */ + setAccentColor(color?: RGBTuple | number): this; + /** + * Clears the accent color of this container. + */ + clearAccentColor(): this; + /** + * Adds action row components to this container. + * + * @param components - The action row components to add + */ + addActionRowComponents(...components: RestOrArray | APIActionRowComponent | ((builder: ActionRowBuilder) => ActionRowBuilder)>): this; + /** + * Adds file components to this container. + * + * @param components - The file components to add + */ + addFileComponents(...components: RestOrArray FileBuilder)>): this; + /** + * Adds media gallery components to this container. + * + * @param components - The media gallery components to add + */ + addMediaGalleryComponents(...components: RestOrArray MediaGalleryBuilder)>): this; + /** + * Adds section components to this container. + * + * @param components - The section components to add + */ + addSectionComponents(...components: RestOrArray SectionBuilder)>): this; + /** + * Adds separator components to this container. + * + * @param components - The separator components to add + */ + addSeparatorComponents(...components: RestOrArray SeparatorBuilder)>): this; + /** + * Adds text display components to this container. + * + * @param components - The text display components to add + */ + addTextDisplayComponents(...components: RestOrArray TextDisplayBuilder)>): this; + /** + * Removes, replaces, or inserts components for this container. + * + * @param index - The index to start removing, replacing or inserting components + * @param deleteCount - The amount of components to remove + * @param components - The components to set + */ + spliceComponents(index: number, deleteCount: number, ...components: RestOrArray): this; + /** + * Sets the spoiler status of this container. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler?: boolean): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APIContainerComponent; +} + +declare class MediaGalleryItemBuilder implements JSONEncodable { + /** + * The API data associated with this media gallery item. + */ + readonly data: Partial; + /** + * Creates a new media gallery item from API data. + * + * @param data - The API data to create this media gallery item with + * @example + * Creating a media gallery item from an API data object: + * ```ts + * const item = new MediaGalleryItemBuilder({ + * description: "Some text here", + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/2.png', + * }, + * }); + * ``` + * @example + * Creating a media gallery item using setters and API data: + * ```ts + * const item = new MediaGalleryItemBuilder({ + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/5.png', + * }, + * }) + * .setDescription("alt text"); + * ``` + */ + constructor(data?: Partial); + /** + * Sets the description of this media gallery item. + * + * @param description - The description to use + */ + setDescription(description: string): this; + /** + * Clears the description of this media gallery item. + */ + clearDescription(): this; + /** + * Sets the spoiler status of this media gallery item. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler?: boolean): this; + /** + * Sets the media URL of this media gallery item. + * + * @param url - The URL to use + */ + setURL(url: string): this; + /** + * Serializes this builder to API-compatible JSON data. + * + * @remarks + * This method runs validations on the data before serializing it. + * As such, it may throw an error if the data is invalid. + */ + toJSON(): APIMediaGalleryItem; +} + +/** + * A builder that creates API-compatible JSON data for a container. + */ +declare class MediaGalleryBuilder extends ComponentBuilder { + /** + * The components within this container. + */ + readonly items: MediaGalleryItemBuilder[]; + /** + * Creates a new media gallery from API data. + * + * @param data - The API data to create this media gallery with + * @example + * Creating a media gallery from an API data object: + * ```ts + * const mediaGallery = new MediaGalleryBuilder({ + * items: [ + * { + * description: "Some text here", + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/2.png', + * }, + * }, + * ], + * }); + * ``` + * @example + * Creating a media gallery using setters and API data: + * ```ts + * const mediaGallery = new MediaGalleryBuilder({ + * items: [ + * { + * description: "alt text", + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/5.png', + * }, + * }, + * ], + * }) + * .addItems(item2, item3); + * ``` + */ + constructor({ items, ...data }?: Partial); + /** + * Adds items to this media gallery. + * + * @param items - The items to add + */ + addItems(...items: RestOrArray MediaGalleryItemBuilder)>): this; + /** + * Removes, replaces, or inserts media gallery items for this media gallery. + * + * @param index - The index to start removing, replacing or inserting items + * @param deleteCount - The amount of items to remove + * @param items - The items to insert + */ + spliceItems(index: number, deleteCount: number, ...items: RestOrArray MediaGalleryItemBuilder)>): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APIMediaGalleryComponent; +} + +/** + * A builder that creates API-compatible JSON data for a section. + */ +declare class SectionBuilder extends ComponentBuilder { + /** + * The components within this section. + */ + readonly components: ComponentBuilder[]; + /** + * The accessory of this section. + */ + readonly accessory?: ButtonBuilder | ThumbnailBuilder; + /** + * Creates a new section from API data. + * + * @param data - The API data to create this section with + * @example + * Creating a section from an API data object: + * ```ts + * const section = new SectionBuilder({ + * components: [ + * { + * content: "Some text here", + * type: ComponentType.TextDisplay, + * }, + * ], + * accessory: { + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/3.png', + * }, + * } + * }); + * ``` + * @example + * Creating a section using setters and API data: + * ```ts + * const section = new SectionBuilder({ + * components: [ + * { + * content: "# Heading", + * type: ComponentType.TextDisplay, + * }, + * ], + * }) + * .setPrimaryButtonAccessory(button); + * ``` + */ + constructor({ components, accessory, ...data }?: Partial); + /** + * Sets the accessory of this section to a button. + * + * @param accessory - The accessory to use + */ + setButtonAccessory(accessory: APIButtonComponent | ButtonBuilder | ((builder: ButtonBuilder) => ButtonBuilder)): this; + /** + * Sets the accessory of this section to a thumbnail. + * + * @param accessory - The accessory to use + */ + setThumbnailAccessory(accessory: APIThumbnailComponent | ThumbnailBuilder | ((builder: ThumbnailBuilder) => ThumbnailBuilder)): this; + /** + * Adds text display components to this section. + * + * @param components - The text display components to add + */ + addTextDisplayComponents(...components: RestOrArray TextDisplayBuilder)>): this; + /** + * Removes, replaces, or inserts text display components for this section. + * + * @param index - The index to start removing, replacing or inserting text display components + * @param deleteCount - The amount of text display components to remove + * @param components - The text display components to insert + */ + spliceTextDisplayComponents(index: number, deleteCount: number, ...components: RestOrArray TextDisplayBuilder)>): this; + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON(): APISectionComponent; +} + +declare class ThumbnailBuilder extends ComponentBuilder { + /** + * Creates a new thumbnail from API data. + * + * @param data - The API data to create this thumbnail with + * @example + * Creating a thumbnail from an API data object: + * ```ts + * const thumbnail = new ThumbnailBuilder({ + * description: 'some text', + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/4.png', + * }, + * }); + * ``` + * @example + * Creating a thumbnail using setters and API data: + * ```ts + * const thumbnail = new ThumbnailBuilder({ + * media: { + * url: 'attachment://image.png', + * }, + * }) + * .setDescription('alt text'); + * ``` + */ + constructor(data?: Partial); + /** + * Sets the description of this thumbnail. + * + * @param description - The description to use + */ + setDescription(description: string): this; + /** + * Clears the description of this thumbnail. + */ + clearDescription(): this; + /** + * Sets the spoiler status of this thumbnail. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler?: boolean): this; + /** + * Sets the media URL of this thumbnail. + * + * @param url - The URL to use + */ + setURL(url: string): this; + /** + * {@inheritdoc ComponentBuilder.toJSON} + */ + toJSON(): APIThumbnailComponent; +} + +/** + * The builders that may be used for messages. + */ +type MessageComponentBuilder = ActionRowBuilder | ContainerBuilder | FileBuilder | MediaGalleryBuilder | MessageActionRowComponentBuilder | SectionBuilder | SeparatorBuilder | TextDisplayBuilder | ThumbnailBuilder; /** * Components here are mapped to their respective builder. */ @@ -1059,6 +1564,34 @@ interface MappedComponentTypes { * The channel select component type is associated with a {@link ChannelSelectMenuBuilder}. */ [ComponentType.ChannelSelect]: ChannelSelectMenuBuilder; + /** + * The file component type is associated with a {@link FileBuilder}. + */ + [ComponentType.File]: FileBuilder; + /** + * The separator component type is associated with a {@link SeparatorBuilder}. + */ + [ComponentType.Separator]: SeparatorBuilder; + /** + * The container component type is associated with a {@link ContainerBuilder}. + */ + [ComponentType.Container]: ContainerBuilder; + /** + * The text display component type is associated with a {@link TextDisplayBuilder}. + */ + [ComponentType.TextDisplay]: TextDisplayBuilder; + /** + * The thumbnail component type is associated with a {@link ThumbnailBuilder}. + */ + [ComponentType.Thumbnail]: ThumbnailBuilder; + /** + * The section component type is associated with a {@link SectionBuilder}. + */ + [ComponentType.Section]: SectionBuilder; + /** + * The media gallery component type is associated with a {@link MediaGalleryBuilder}. + */ + [ComponentType.MediaGallery]: MediaGalleryBuilder; } /** * Factory for creating components from API data. @@ -1076,6 +1609,7 @@ declare function createComponentBuilder(data: ComponentBuilder): ComponentBuilder; +declare function resolveBuilder, Builder extends JSONEncodable>(builder: Builder | ComponentType | ((builder: Builder) => Builder), Constructor: new (data?: ComponentType) => Builder): Builder; declare const textInputStyleValidator: _sapphire_shapeshift.NativeEnumValidator; declare const minLengthValidator: _sapphire_shapeshift.NumberValidator; @@ -1086,15 +1620,15 @@ declare const placeholderValidator: _sapphire_shapeshift.StringValidator declare const labelValidator: _sapphire_shapeshift.StringValidator; declare function validateRequiredParameters$3(customId?: string, style?: TextInputStyle, label?: string): void; -declare const Assertions$3_labelValidator: typeof labelValidator; -declare const Assertions$3_maxLengthValidator: typeof maxLengthValidator; -declare const Assertions$3_minLengthValidator: typeof minLengthValidator; -declare const Assertions$3_placeholderValidator: typeof placeholderValidator; -declare const Assertions$3_requiredValidator: typeof requiredValidator; -declare const Assertions$3_textInputStyleValidator: typeof textInputStyleValidator; -declare const Assertions$3_valueValidator: typeof valueValidator; -declare namespace Assertions$3 { - export { Assertions$3_labelValidator as labelValidator, Assertions$3_maxLengthValidator as maxLengthValidator, Assertions$3_minLengthValidator as minLengthValidator, Assertions$3_placeholderValidator as placeholderValidator, Assertions$3_requiredValidator as requiredValidator, Assertions$3_textInputStyleValidator as textInputStyleValidator, validateRequiredParameters$3 as validateRequiredParameters, Assertions$3_valueValidator as valueValidator }; +declare const Assertions$4_labelValidator: typeof labelValidator; +declare const Assertions$4_maxLengthValidator: typeof maxLengthValidator; +declare const Assertions$4_minLengthValidator: typeof minLengthValidator; +declare const Assertions$4_placeholderValidator: typeof placeholderValidator; +declare const Assertions$4_requiredValidator: typeof requiredValidator; +declare const Assertions$4_textInputStyleValidator: typeof textInputStyleValidator; +declare const Assertions$4_valueValidator: typeof valueValidator; +declare namespace Assertions$4 { + export { Assertions$4_labelValidator as labelValidator, Assertions$4_maxLengthValidator as maxLengthValidator, Assertions$4_minLengthValidator as minLengthValidator, Assertions$4_placeholderValidator as placeholderValidator, Assertions$4_requiredValidator as requiredValidator, Assertions$4_textInputStyleValidator as textInputStyleValidator, validateRequiredParameters$3 as validateRequiredParameters, Assertions$4_valueValidator as valueValidator }; } /** @@ -1132,7 +1666,7 @@ declare class ModalBuilder implements JSONEncodable | APIActionRowComponent>): this; + addComponents(...components: RestOrArray | APIActionRowComponent>): this; /** * Sets components for this modal. * @@ -1149,10 +1683,44 @@ declare const titleValidator: _sapphire_shapeshift.StringValidator; declare const componentsValidator: _sapphire_shapeshift.ArrayValidator<[ActionRowBuilder, ...ActionRowBuilder[]], ActionRowBuilder>; declare function validateRequiredParameters$2(customId?: string, title?: string, components?: ActionRowBuilder[]): void; -declare const Assertions$2_componentsValidator: typeof componentsValidator; -declare const Assertions$2_titleValidator: typeof titleValidator; +declare const Assertions$3_componentsValidator: typeof componentsValidator; +declare const Assertions$3_titleValidator: typeof titleValidator; +declare namespace Assertions$3 { + export { Assertions$3_componentsValidator as componentsValidator, Assertions$3_titleValidator as titleValidator, validateRequiredParameters$2 as validateRequiredParameters }; +} + +declare const unfurledMediaItemPredicate: _sapphire_shapeshift.ObjectValidator<{ + url: string; +}, _sapphire_shapeshift.UndefinedToOptional<{ + url: string; +}>>; +declare const descriptionPredicate: _sapphire_shapeshift.StringValidator; +declare const filePredicate: _sapphire_shapeshift.ObjectValidator<{ + url: string; +}, _sapphire_shapeshift.UndefinedToOptional<{ + url: string; +}>>; +declare const spoilerPredicate: _sapphire_shapeshift.BooleanValidator; +declare const dividerPredicate: _sapphire_shapeshift.BooleanValidator; +declare const spacingPredicate: _sapphire_shapeshift.NativeEnumValidator; +declare const textDisplayContentPredicate: _sapphire_shapeshift.StringValidator; +declare const accessoryPredicate: _sapphire_shapeshift.UnionValidator; +declare const containerColorPredicate: _sapphire_shapeshift.UnionValidator; +declare function assertReturnOfBuilder$1(input: unknown, ExpectedInstanceOf: new () => ReturnType): asserts input is ReturnType; +declare function validateComponentArray(input: unknown, min: number, max: number, ExpectedInstanceOf?: new () => ReturnType): asserts input is ReturnType[]; + +declare const Assertions$2_accessoryPredicate: typeof accessoryPredicate; +declare const Assertions$2_containerColorPredicate: typeof containerColorPredicate; +declare const Assertions$2_descriptionPredicate: typeof descriptionPredicate; +declare const Assertions$2_dividerPredicate: typeof dividerPredicate; +declare const Assertions$2_filePredicate: typeof filePredicate; +declare const Assertions$2_spacingPredicate: typeof spacingPredicate; +declare const Assertions$2_spoilerPredicate: typeof spoilerPredicate; +declare const Assertions$2_textDisplayContentPredicate: typeof textDisplayContentPredicate; +declare const Assertions$2_unfurledMediaItemPredicate: typeof unfurledMediaItemPredicate; +declare const Assertions$2_validateComponentArray: typeof validateComponentArray; declare namespace Assertions$2 { - export { Assertions$2_componentsValidator as componentsValidator, Assertions$2_titleValidator as titleValidator, validateRequiredParameters$2 as validateRequiredParameters }; + export { Assertions$2_accessoryPredicate as accessoryPredicate, assertReturnOfBuilder$1 as assertReturnOfBuilder, Assertions$2_containerColorPredicate as containerColorPredicate, Assertions$2_descriptionPredicate as descriptionPredicate, Assertions$2_dividerPredicate as dividerPredicate, Assertions$2_filePredicate as filePredicate, Assertions$2_spacingPredicate as spacingPredicate, Assertions$2_spoilerPredicate as spoilerPredicate, Assertions$2_textDisplayContentPredicate as textDisplayContentPredicate, Assertions$2_unfurledMediaItemPredicate as unfurledMediaItemPredicate, Assertions$2_validateComponentArray as validateComponentArray }; } /** @@ -2040,4 +2608,4 @@ declare function isValidationEnabled(): boolean; */ declare const version: string; -export { ActionRowBuilder, type AnyAPIActionRowComponent, type AnyComponentBuilder, ApplicationCommandNumericOptionMinMaxValueMixin, type ApplicationCommandOptionAllowedChannelTypes, ApplicationCommandOptionBase, ApplicationCommandOptionChannelTypesMixin, ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin, BaseSelectMenuBuilder, ButtonBuilder, ChannelSelectMenuBuilder, Assertions$4 as ComponentAssertions, ComponentBuilder, Assertions as ContextMenuCommandAssertions, ContextMenuCommandBuilder, type ContextMenuCommandType, Assertions$5 as EmbedAssertions, type EmbedAuthorData, type EmbedAuthorOptions, EmbedBuilder, type EmbedFooterData, type EmbedFooterOptions, type EmbedImageData, type IconData, type MappedComponentTypes, MentionableSelectMenuBuilder, type MessageActionRowComponentBuilder, type MessageComponentBuilder, type ModalActionRowComponentBuilder, Assertions$2 as ModalAssertions, ModalBuilder, type ModalComponentBuilder, type RGBTuple, type RestOrArray, RoleSelectMenuBuilder, StringSelectMenuBuilder as SelectMenuBuilder, StringSelectMenuOptionBuilder as SelectMenuOptionBuilder, SharedNameAndDescription, SharedSlashCommand, SharedSlashCommandOptions, SharedSlashCommandSubcommands, Assertions$1 as SlashCommandAssertions, SlashCommandAttachmentOption, SlashCommandBooleanOption, SlashCommandBuilder, SlashCommandChannelOption, SlashCommandIntegerOption, SlashCommandMentionableOption, SlashCommandNumberOption, type SlashCommandOptionsOnlyBuilder, SlashCommandRoleOption, SlashCommandStringOption, SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder, type SlashCommandSubcommandsOnlyBuilder, SlashCommandUserOption, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, Assertions$3 as TextInputAssertions, TextInputBuilder, type ToAPIApplicationCommandOptions, UserSelectMenuBuilder, createComponentBuilder, disableValidators, embedLength, enableValidators, isValidationEnabled, normalizeArray, version }; +export { ActionRowBuilder, type AnyAPIActionRowComponent, type AnyComponentBuilder, ApplicationCommandNumericOptionMinMaxValueMixin, type ApplicationCommandOptionAllowedChannelTypes, ApplicationCommandOptionBase, ApplicationCommandOptionChannelTypesMixin, ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin, BaseSelectMenuBuilder, ButtonBuilder, ChannelSelectMenuBuilder, Assertions$5 as ComponentAssertions, ComponentBuilder, Assertions$2 as ComponentsV2Assertions, ContainerBuilder, type ContainerComponentBuilder, Assertions as ContextMenuCommandAssertions, ContextMenuCommandBuilder, type ContextMenuCommandType, Assertions$6 as EmbedAssertions, type EmbedAuthorData, type EmbedAuthorOptions, EmbedBuilder, type EmbedFooterData, type EmbedFooterOptions, type EmbedImageData, FileBuilder, type IconData, type MappedComponentTypes, MediaGalleryBuilder, MediaGalleryItemBuilder, MentionableSelectMenuBuilder, type MessageActionRowComponentBuilder, type MessageComponentBuilder, type ModalActionRowComponentBuilder, Assertions$3 as ModalAssertions, ModalBuilder, type ModalComponentBuilder, type RGBTuple, type RestOrArray, RoleSelectMenuBuilder, SectionBuilder, StringSelectMenuBuilder as SelectMenuBuilder, StringSelectMenuOptionBuilder as SelectMenuOptionBuilder, SeparatorBuilder, SharedNameAndDescription, SharedSlashCommand, SharedSlashCommandOptions, SharedSlashCommandSubcommands, Assertions$1 as SlashCommandAssertions, SlashCommandAttachmentOption, SlashCommandBooleanOption, SlashCommandBuilder, SlashCommandChannelOption, SlashCommandIntegerOption, SlashCommandMentionableOption, SlashCommandNumberOption, type SlashCommandOptionsOnlyBuilder, SlashCommandRoleOption, SlashCommandStringOption, SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder, type SlashCommandSubcommandsOnlyBuilder, SlashCommandUserOption, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, TextDisplayBuilder, Assertions$4 as TextInputAssertions, TextInputBuilder, ThumbnailBuilder, type ToAPIApplicationCommandOptions, UserSelectMenuBuilder, createComponentBuilder, disableValidators, embedLength, enableValidators, isValidationEnabled, normalizeArray, resolveBuilder, version }; diff --git a/node_modules/@discordjs/builders/dist/index.js b/node_modules/@discordjs/builders/dist/index.js index e229e15..cf59449 100644 --- a/node_modules/@discordjs/builders/dist/index.js +++ b/node_modules/@discordjs/builders/dist/index.js @@ -51,21 +51,28 @@ __export(src_exports, { ChannelSelectMenuBuilder: () => ChannelSelectMenuBuilder, ComponentAssertions: () => Assertions_exports2, ComponentBuilder: () => ComponentBuilder, - ContextMenuCommandAssertions: () => Assertions_exports6, + ComponentsV2Assertions: () => Assertions_exports4, + ContainerBuilder: () => ContainerBuilder, + ContextMenuCommandAssertions: () => Assertions_exports7, ContextMenuCommandBuilder: () => ContextMenuCommandBuilder, EmbedAssertions: () => Assertions_exports, EmbedBuilder: () => EmbedBuilder, + FileBuilder: () => FileBuilder, + MediaGalleryBuilder: () => MediaGalleryBuilder, + MediaGalleryItemBuilder: () => MediaGalleryItemBuilder, MentionableSelectMenuBuilder: () => MentionableSelectMenuBuilder, - ModalAssertions: () => Assertions_exports4, + ModalAssertions: () => Assertions_exports5, ModalBuilder: () => ModalBuilder, RoleSelectMenuBuilder: () => RoleSelectMenuBuilder, + SectionBuilder: () => SectionBuilder, SelectMenuBuilder: () => StringSelectMenuBuilder, SelectMenuOptionBuilder: () => StringSelectMenuOptionBuilder, + SeparatorBuilder: () => SeparatorBuilder, SharedNameAndDescription: () => SharedNameAndDescription, SharedSlashCommand: () => SharedSlashCommand, SharedSlashCommandOptions: () => SharedSlashCommandOptions, SharedSlashCommandSubcommands: () => SharedSlashCommandSubcommands, - SlashCommandAssertions: () => Assertions_exports5, + SlashCommandAssertions: () => Assertions_exports6, SlashCommandAttachmentOption: () => SlashCommandAttachmentOption, SlashCommandBooleanOption: () => SlashCommandBooleanOption, SlashCommandBuilder: () => SlashCommandBuilder, @@ -80,8 +87,10 @@ __export(src_exports, { SlashCommandUserOption: () => SlashCommandUserOption, StringSelectMenuBuilder: () => StringSelectMenuBuilder, StringSelectMenuOptionBuilder: () => StringSelectMenuOptionBuilder, + TextDisplayBuilder: () => TextDisplayBuilder, TextInputAssertions: () => Assertions_exports3, TextInputBuilder: () => TextInputBuilder, + ThumbnailBuilder: () => ThumbnailBuilder, UserSelectMenuBuilder: () => UserSelectMenuBuilder, createComponentBuilder: () => createComponentBuilder, disableValidators: () => disableValidators, @@ -89,6 +98,7 @@ __export(src_exports, { enableValidators: () => enableValidators, isValidationEnabled: () => isValidationEnabled, normalizeArray: () => normalizeArray, + resolveBuilder: () => resolveBuilder, version: () => version }); module.exports = __toCommonJS(src_exports); @@ -405,6 +415,7 @@ __export(Assertions_exports2, { defaultValidator: () => defaultValidator, disabledValidator: () => disabledValidator, emojiValidator: () => emojiValidator, + idValidator: () => idValidator, jsonOptionValidator: () => jsonOptionValidator, labelValueDescriptionValidator: () => labelValueDescriptionValidator, minMaxValidator: () => minMaxValidator, @@ -507,6 +518,7 @@ var StringSelectMenuOptionBuilder = class { }; // src/components/Assertions.ts +var idValidator = import_shapeshift2.s.number().safeInt().greaterThanOrEqual(1).lessThan(4294967296).setValidationEnabled(isValidationEnabled); var customIdValidator = import_shapeshift2.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); var emojiValidator = import_shapeshift2.s.object({ id: import_shapeshift2.s.string(), @@ -574,7 +586,7 @@ function validateRequiredButtonParameters(style, label, emoji, customId, skuId, __name(validateRequiredButtonParameters, "validateRequiredButtonParameters"); // src/components/ActionRow.ts -var import_v1011 = require("discord-api-types/v10"); +var import_v1019 = require("discord-api-types/v10"); // src/components/Component.ts var ComponentBuilder = class { @@ -593,10 +605,26 @@ var ComponentBuilder = class { constructor(data) { this.data = data; } + /** + * Sets the id (not the custom id) for this component. + * + * @param id - The id for this component + */ + setId(id) { + this.data.id = idValidator.parse(id); + return this; + } + /** + * Clears the id of this component, defaulting to a default incremented id. + */ + clearId() { + this.data.id = void 0; + return this; + } }; // src/components/Components.ts -var import_v1010 = require("discord-api-types/v10"); +var import_v1018 = require("discord-api-types/v10"); // src/components/button/Button.ts var import_v102 = require("discord-api-types/v10"); @@ -1377,33 +1405,827 @@ var TextInputBuilder = class extends ComponentBuilder { } }; +// src/components/v2/Container.ts +var import_v1015 = require("discord-api-types/v10"); + +// src/components/v2/Assertions.ts +var Assertions_exports4 = {}; +__export(Assertions_exports4, { + accessoryPredicate: () => accessoryPredicate, + assertReturnOfBuilder: () => assertReturnOfBuilder, + containerColorPredicate: () => containerColorPredicate, + descriptionPredicate: () => descriptionPredicate2, + dividerPredicate: () => dividerPredicate, + filePredicate: () => filePredicate, + spacingPredicate: () => spacingPredicate, + spoilerPredicate: () => spoilerPredicate, + textDisplayContentPredicate: () => textDisplayContentPredicate, + unfurledMediaItemPredicate: () => unfurledMediaItemPredicate, + validateComponentArray: () => validateComponentArray +}); +var import_shapeshift4 = require("@sapphire/shapeshift"); +var import_v1011 = require("discord-api-types/v10"); + +// src/components/v2/Thumbnail.ts +var import_v1010 = require("discord-api-types/v10"); +var ThumbnailBuilder = class extends ComponentBuilder { + static { + __name(this, "ThumbnailBuilder"); + } + /** + * Creates a new thumbnail from API data. + * + * @param data - The API data to create this thumbnail with + * @example + * Creating a thumbnail from an API data object: + * ```ts + * const thumbnail = new ThumbnailBuilder({ + * description: 'some text', + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/4.png', + * }, + * }); + * ``` + * @example + * Creating a thumbnail using setters and API data: + * ```ts + * const thumbnail = new ThumbnailBuilder({ + * media: { + * url: 'attachment://image.png', + * }, + * }) + * .setDescription('alt text'); + * ``` + */ + constructor(data = {}) { + super({ + type: import_v1010.ComponentType.Thumbnail, + ...data, + media: data.media ? { url: data.media.url } : void 0 + }); + } + /** + * Sets the description of this thumbnail. + * + * @param description - The description to use + */ + setDescription(description) { + this.data.description = descriptionPredicate2.parse(description); + return this; + } + /** + * Clears the description of this thumbnail. + */ + clearDescription() { + this.data.description = void 0; + return this; + } + /** + * Sets the spoiler status of this thumbnail. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler = true) { + this.data.spoiler = spoilerPredicate.parse(spoiler); + return this; + } + /** + * Sets the media URL of this thumbnail. + * + * @param url - The URL to use + */ + setURL(url) { + this.data.media = unfurledMediaItemPredicate.parse({ url }); + return this; + } + /** + * {@inheritdoc ComponentBuilder.toJSON} + */ + toJSON() { + unfurledMediaItemPredicate.parse(this.data.media); + return { ...this.data }; + } +}; + +// src/components/v2/Assertions.ts +var unfurledMediaItemPredicate = import_shapeshift4.s.object({ + url: import_shapeshift4.s.string().url( + { allowedProtocols: ["http:", "https:", "attachment:"] }, + { message: "Invalid protocol for media URL. Must be http:, https:, or attachment:" } + ) +}).setValidationEnabled(isValidationEnabled); +var descriptionPredicate2 = import_shapeshift4.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(1024).setValidationEnabled(isValidationEnabled); +var filePredicate = import_shapeshift4.s.object({ + url: import_shapeshift4.s.string().url({ allowedProtocols: ["attachment:"] }, { message: "Invalid protocol for file URL. Must be attachment:" }) +}).setValidationEnabled(isValidationEnabled); +var spoilerPredicate = import_shapeshift4.s.boolean(); +var dividerPredicate = import_shapeshift4.s.boolean(); +var spacingPredicate = import_shapeshift4.s.nativeEnum(import_v1011.SeparatorSpacingSize); +var textDisplayContentPredicate = import_shapeshift4.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); +var accessoryPredicate = import_shapeshift4.s.instance(ButtonBuilder).or(import_shapeshift4.s.instance(ThumbnailBuilder)).setValidationEnabled(isValidationEnabled); +var containerColorPredicate = colorPredicate.nullish(); +function assertReturnOfBuilder(input, ExpectedInstanceOf) { + import_shapeshift4.s.instance(ExpectedInstanceOf).setValidationEnabled(isValidationEnabled).parse(input); +} +__name(assertReturnOfBuilder, "assertReturnOfBuilder"); +function validateComponentArray(input, min, max, ExpectedInstanceOf) { + (ExpectedInstanceOf ? import_shapeshift4.s.instance(ExpectedInstanceOf) : import_shapeshift4.s.instance(ComponentBuilder)).array().lengthGreaterThanOrEqual(min).lengthLessThanOrEqual(max).setValidationEnabled(isValidationEnabled).parse(input); +} +__name(validateComponentArray, "validateComponentArray"); + +// src/components/v2/File.ts +var import_v1012 = require("discord-api-types/v10"); +var FileBuilder = class extends ComponentBuilder { + static { + __name(this, "FileBuilder"); + } + /** + * Creates a new file from API data. + * + * @param data - The API data to create this file with + * @example + * Creating a file from an API data object: + * ```ts + * const file = new FileBuilder({ + * spoiler: true, + * file: { + * url: 'attachment://file.png', + * }, + * }); + * ``` + * @example + * Creating a file using setters and API data: + * ```ts + * const file = new FileBuilder({ + * file: { + * url: 'attachment://image.jpg', + * }, + * }) + * .setSpoiler(false); + * ``` + */ + constructor(data = {}) { + super({ type: import_v1012.ComponentType.File, ...data, file: data.file ? { url: data.file.url } : void 0 }); + } + /** + * Sets the spoiler status of this file. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler = true) { + this.data.spoiler = spoilerPredicate.parse(spoiler); + return this; + } + /** + * Sets the media URL of this file. + * + * @param url - The URL to use + */ + setURL(url) { + this.data.file = filePredicate.parse({ url }); + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + filePredicate.parse(this.data.file); + return { ...this.data, file: { ...this.data.file } }; + } +}; + +// src/components/v2/Separator.ts +var import_v1013 = require("discord-api-types/v10"); +var SeparatorBuilder = class extends ComponentBuilder { + static { + __name(this, "SeparatorBuilder"); + } + /** + * Creates a new separator from API data. + * + * @param data - The API data to create this separator with + * @example + * Creating a separator from an API data object: + * ```ts + * const separator = new SeparatorBuilder({ + * spacing: SeparatorSpacingSize.Small, + * divider: true, + * }); + * ``` + * @example + * Creating a separator using setters and API data: + * ```ts + * const separator = new SeparatorBuilder({ + * spacing: SeparatorSpacingSize.Large, + * }) + * .setDivider(false); + * ``` + */ + constructor(data = {}) { + super({ + type: import_v1013.ComponentType.Separator, + ...data + }); + } + /** + * Sets whether this separator should show a divider line. + * + * @param divider - Whether to show a divider line + */ + setDivider(divider = true) { + this.data.divider = dividerPredicate.parse(divider); + return this; + } + /** + * Sets the spacing of this separator. + * + * @param spacing - The spacing to use + */ + setSpacing(spacing) { + this.data.spacing = spacingPredicate.parse(spacing); + return this; + } + /** + * Clears the spacing of this separator. + */ + clearSpacing() { + this.data.spacing = void 0; + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + return { ...this.data }; + } +}; + +// src/components/v2/TextDisplay.ts +var import_v1014 = require("discord-api-types/v10"); +var TextDisplayBuilder = class extends ComponentBuilder { + static { + __name(this, "TextDisplayBuilder"); + } + /** + * Creates a new text display from API data. + * + * @param data - The API data to create this text display with + * @example + * Creating a text display from an API data object: + * ```ts + * const textDisplay = new TextDisplayBuilder({ + * content: 'some text', + * }); + * ``` + * @example + * Creating a text display using setters and API data: + * ```ts + * const textDisplay = new TextDisplayBuilder({ + * content: 'old text', + * }) + * .setContent('new text'); + * ``` + */ + constructor(data = {}) { + super({ + type: import_v1014.ComponentType.TextDisplay, + ...data + }); + } + /** + * Sets the text of this text display. + * + * @param content - The text to use + */ + setContent(content) { + this.data.content = textDisplayContentPredicate.parse(content); + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + textDisplayContentPredicate.parse(this.data.content); + return { ...this.data }; + } +}; + +// src/components/v2/Container.ts +var ContainerBuilder = class extends ComponentBuilder { + static { + __name(this, "ContainerBuilder"); + } + /** + * The components within this container. + */ + components; + /** + * Creates a new container from API data. + * + * @param data - The API data to create this container with + * @example + * Creating a container from an API data object: + * ```ts + * const container = new ContainerBuilder({ + * components: [ + * { + * content: "Some text here", + * type: ComponentType.TextDisplay, + * }, + * ], + * }); + * ``` + * @example + * Creating a container using setters and API data: + * ```ts + * const container = new ContainerBuilder({ + * components: [ + * { + * content: "# Heading", + * type: ComponentType.TextDisplay, + * }, + * ], + * }) + * .addComponents(separator, section); + * ``` + */ + constructor({ components, ...data } = {}) { + super({ type: import_v1015.ComponentType.Container, ...data }); + this.components = components?.map((component) => createComponentBuilder(component)) ?? []; + } + /** + * Sets the accent color of this container. + * + * @param color - The color to use + */ + setAccentColor(color) { + containerColorPredicate.parse(color); + if (Array.isArray(color)) { + const [red, green, blue] = color; + this.data.accent_color = (red << 16) + (green << 8) + blue; + return this; + } + this.data.accent_color = color; + return this; + } + /** + * Clears the accent color of this container. + */ + clearAccentColor() { + this.data.accent_color = void 0; + return this; + } + /** + * Adds action row components to this container. + * + * @param components - The action row components to add + */ + addActionRowComponents(...components) { + this.components.push( + ...normalizeArray(components).map((component) => resolveBuilder(component, ActionRowBuilder)) + ); + return this; + } + /** + * Adds file components to this container. + * + * @param components - The file components to add + */ + addFileComponents(...components) { + this.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, FileBuilder))); + return this; + } + /** + * Adds media gallery components to this container. + * + * @param components - The media gallery components to add + */ + addMediaGalleryComponents(...components) { + this.components.push( + ...normalizeArray(components).map((component) => resolveBuilder(component, MediaGalleryBuilder)) + ); + return this; + } + /** + * Adds section components to this container. + * + * @param components - The section components to add + */ + addSectionComponents(...components) { + this.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SectionBuilder))); + return this; + } + /** + * Adds separator components to this container. + * + * @param components - The separator components to add + */ + addSeparatorComponents(...components) { + this.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SeparatorBuilder))); + return this; + } + /** + * Adds text display components to this container. + * + * @param components - The text display components to add + */ + addTextDisplayComponents(...components) { + this.components.push( + ...normalizeArray(components).map((component) => resolveBuilder(component, TextDisplayBuilder)) + ); + return this; + } + /** + * Removes, replaces, or inserts components for this container. + * + * @param index - The index to start removing, replacing or inserting components + * @param deleteCount - The amount of components to remove + * @param components - The components to set + */ + spliceComponents(index, deleteCount, ...components) { + this.components.splice( + index, + deleteCount, + ...normalizeArray(components).map( + (component) => component instanceof ComponentBuilder ? component : createComponentBuilder(component) + ) + ); + return this; + } + /** + * Sets the spoiler status of this container. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler = true) { + this.data.spoiler = spoilerPredicate.parse(spoiler); + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + return { + ...this.data, + components: this.components.map((component) => component.toJSON()) + }; + } +}; + +// src/components/v2/MediaGallery.ts +var import_v1016 = require("discord-api-types/v10"); + +// src/components/v2/MediaGalleryItem.ts +var MediaGalleryItemBuilder = class { + static { + __name(this, "MediaGalleryItemBuilder"); + } + /** + * The API data associated with this media gallery item. + */ + data; + /** + * Creates a new media gallery item from API data. + * + * @param data - The API data to create this media gallery item with + * @example + * Creating a media gallery item from an API data object: + * ```ts + * const item = new MediaGalleryItemBuilder({ + * description: "Some text here", + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/2.png', + * }, + * }); + * ``` + * @example + * Creating a media gallery item using setters and API data: + * ```ts + * const item = new MediaGalleryItemBuilder({ + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/5.png', + * }, + * }) + * .setDescription("alt text"); + * ``` + */ + constructor(data = {}) { + this.data = data; + } + /** + * Sets the description of this media gallery item. + * + * @param description - The description to use + */ + setDescription(description) { + this.data.description = descriptionPredicate2.parse(description); + return this; + } + /** + * Clears the description of this media gallery item. + */ + clearDescription() { + this.data.description = void 0; + return this; + } + /** + * Sets the spoiler status of this media gallery item. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler = true) { + this.data.spoiler = spoilerPredicate.parse(spoiler); + return this; + } + /** + * Sets the media URL of this media gallery item. + * + * @param url - The URL to use + */ + setURL(url) { + this.data.media = unfurledMediaItemPredicate.parse({ url }); + return this; + } + /** + * Serializes this builder to API-compatible JSON data. + * + * @remarks + * This method runs validations on the data before serializing it. + * As such, it may throw an error if the data is invalid. + */ + toJSON() { + unfurledMediaItemPredicate.parse(this.data.media); + return { ...this.data }; + } +}; + +// src/components/v2/MediaGallery.ts +var MediaGalleryBuilder = class extends ComponentBuilder { + static { + __name(this, "MediaGalleryBuilder"); + } + /** + * The components within this container. + */ + items; + /** + * Creates a new media gallery from API data. + * + * @param data - The API data to create this media gallery with + * @example + * Creating a media gallery from an API data object: + * ```ts + * const mediaGallery = new MediaGalleryBuilder({ + * items: [ + * { + * description: "Some text here", + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/2.png', + * }, + * }, + * ], + * }); + * ``` + * @example + * Creating a media gallery using setters and API data: + * ```ts + * const mediaGallery = new MediaGalleryBuilder({ + * items: [ + * { + * description: "alt text", + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/5.png', + * }, + * }, + * ], + * }) + * .addItems(item2, item3); + * ``` + */ + constructor({ items, ...data } = {}) { + super({ type: import_v1016.ComponentType.MediaGallery, ...data }); + this.items = items?.map((item) => new MediaGalleryItemBuilder(item)) ?? []; + } + /** + * Adds items to this media gallery. + * + * @param items - The items to add + */ + addItems(...items) { + this.items.push( + ...normalizeArray(items).map((input) => { + const result = resolveBuilder(input, MediaGalleryItemBuilder); + assertReturnOfBuilder(result, MediaGalleryItemBuilder); + return result; + }) + ); + return this; + } + /** + * Removes, replaces, or inserts media gallery items for this media gallery. + * + * @param index - The index to start removing, replacing or inserting items + * @param deleteCount - The amount of items to remove + * @param items - The items to insert + */ + spliceItems(index, deleteCount, ...items) { + this.items.splice( + index, + deleteCount, + ...normalizeArray(items).map((input) => { + const result = resolveBuilder(input, MediaGalleryItemBuilder); + assertReturnOfBuilder(result, MediaGalleryItemBuilder); + return result; + }) + ); + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + validateComponentArray(this.items, 1, 10, MediaGalleryItemBuilder); + return { + ...this.data, + items: this.items.map((item) => item.toJSON()) + }; + } +}; + +// src/components/v2/Section.ts +var import_v1017 = require("discord-api-types/v10"); +var SectionBuilder = class extends ComponentBuilder { + static { + __name(this, "SectionBuilder"); + } + /** + * The components within this section. + */ + components; + /** + * The accessory of this section. + */ + accessory; + /** + * Creates a new section from API data. + * + * @param data - The API data to create this section with + * @example + * Creating a section from an API data object: + * ```ts + * const section = new SectionBuilder({ + * components: [ + * { + * content: "Some text here", + * type: ComponentType.TextDisplay, + * }, + * ], + * accessory: { + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/3.png', + * }, + * } + * }); + * ``` + * @example + * Creating a section using setters and API data: + * ```ts + * const section = new SectionBuilder({ + * components: [ + * { + * content: "# Heading", + * type: ComponentType.TextDisplay, + * }, + * ], + * }) + * .setPrimaryButtonAccessory(button); + * ``` + */ + constructor({ components, accessory, ...data } = {}) { + super({ type: import_v1017.ComponentType.Section, ...data }); + this.components = components?.map((component) => createComponentBuilder(component)) ?? []; + this.accessory = accessory ? createComponentBuilder(accessory) : void 0; + } + /** + * Sets the accessory of this section to a button. + * + * @param accessory - The accessory to use + */ + setButtonAccessory(accessory) { + Reflect.set(this, "accessory", accessoryPredicate.parse(resolveBuilder(accessory, ButtonBuilder))); + return this; + } + /** + * Sets the accessory of this section to a thumbnail. + * + * @param accessory - The accessory to use + */ + setThumbnailAccessory(accessory) { + Reflect.set(this, "accessory", accessoryPredicate.parse(resolveBuilder(accessory, ThumbnailBuilder))); + return this; + } + /** + * Adds text display components to this section. + * + * @param components - The text display components to add + */ + addTextDisplayComponents(...components) { + this.components.push( + ...normalizeArray(components).map((input) => { + const result = resolveBuilder(input, TextDisplayBuilder); + assertReturnOfBuilder(result, TextDisplayBuilder); + return result; + }) + ); + return this; + } + /** + * Removes, replaces, or inserts text display components for this section. + * + * @param index - The index to start removing, replacing or inserting text display components + * @param deleteCount - The amount of text display components to remove + * @param components - The text display components to insert + */ + spliceTextDisplayComponents(index, deleteCount, ...components) { + this.components.splice( + index, + deleteCount, + ...normalizeArray(components).map((input) => { + const result = resolveBuilder(input, TextDisplayBuilder); + assertReturnOfBuilder(result, TextDisplayBuilder); + return result; + }) + ); + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + validateComponentArray(this.components, 1, 3, TextDisplayBuilder); + return { + ...this.data, + components: this.components.map((component) => component.toJSON()), + accessory: accessoryPredicate.parse(this.accessory).toJSON() + }; + } +}; + // src/components/Components.ts function createComponentBuilder(data) { if (data instanceof ComponentBuilder) { return data; } switch (data.type) { - case import_v1010.ComponentType.ActionRow: + case import_v1018.ComponentType.ActionRow: return new ActionRowBuilder(data); - case import_v1010.ComponentType.Button: + case import_v1018.ComponentType.Button: return new ButtonBuilder(data); - case import_v1010.ComponentType.StringSelect: + case import_v1018.ComponentType.StringSelect: return new StringSelectMenuBuilder(data); - case import_v1010.ComponentType.TextInput: + case import_v1018.ComponentType.TextInput: return new TextInputBuilder(data); - case import_v1010.ComponentType.UserSelect: + case import_v1018.ComponentType.UserSelect: return new UserSelectMenuBuilder(data); - case import_v1010.ComponentType.RoleSelect: + case import_v1018.ComponentType.RoleSelect: return new RoleSelectMenuBuilder(data); - case import_v1010.ComponentType.MentionableSelect: + case import_v1018.ComponentType.MentionableSelect: return new MentionableSelectMenuBuilder(data); - case import_v1010.ComponentType.ChannelSelect: + case import_v1018.ComponentType.ChannelSelect: return new ChannelSelectMenuBuilder(data); + case import_v1018.ComponentType.File: + return new FileBuilder(data); + case import_v1018.ComponentType.Container: + return new ContainerBuilder(data); + case import_v1018.ComponentType.Section: + return new SectionBuilder(data); + case import_v1018.ComponentType.Separator: + return new SeparatorBuilder(data); + case import_v1018.ComponentType.TextDisplay: + return new TextDisplayBuilder(data); + case import_v1018.ComponentType.Thumbnail: + return new ThumbnailBuilder(data); + case import_v1018.ComponentType.MediaGallery: + return new MediaGalleryBuilder(data); default: throw new Error(`Cannot properly serialize component type: ${data.type}`); } } __name(createComponentBuilder, "createComponentBuilder"); +function isBuilder(builder, Constructor) { + return builder instanceof Constructor; +} +__name(isBuilder, "isBuilder"); +function resolveBuilder(builder, Constructor) { + if (isBuilder(builder, Constructor)) { + return builder; + } + if (typeof builder === "function") { + return builder(new Constructor()); + } + return new Constructor(builder); +} +__name(resolveBuilder, "resolveBuilder"); // src/components/ActionRow.ts var ActionRowBuilder = class extends ComponentBuilder { @@ -1449,7 +2271,7 @@ var ActionRowBuilder = class extends ComponentBuilder { * ``` */ constructor({ components, ...data } = {}) { - super({ type: import_v1011.ComponentType.ActionRow, ...data }); + super({ type: import_v1019.ComponentType.ActionRow, ...data }); this.components = components?.map((component) => createComponentBuilder(component)) ?? []; } /** @@ -1482,15 +2304,15 @@ var ActionRowBuilder = class extends ComponentBuilder { }; // src/interactions/modals/Assertions.ts -var Assertions_exports4 = {}; -__export(Assertions_exports4, { +var Assertions_exports5 = {}; +__export(Assertions_exports5, { componentsValidator: () => componentsValidator, titleValidator: () => titleValidator, validateRequiredParameters: () => validateRequiredParameters2 }); -var import_shapeshift4 = require("@sapphire/shapeshift"); -var titleValidator = import_shapeshift4.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45).setValidationEnabled(isValidationEnabled); -var componentsValidator = import_shapeshift4.s.instance(ActionRowBuilder).array().lengthGreaterThanOrEqual(1).setValidationEnabled(isValidationEnabled); +var import_shapeshift5 = require("@sapphire/shapeshift"); +var titleValidator = import_shapeshift5.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45).setValidationEnabled(isValidationEnabled); +var componentsValidator = import_shapeshift5.s.instance(ActionRowBuilder).array().lengthGreaterThanOrEqual(1).setValidationEnabled(isValidationEnabled); function validateRequiredParameters2(customId, title, components) { customIdValidator.parse(customId); titleValidator.parse(title); @@ -1573,9 +2395,9 @@ var ModalBuilder = class { }; // src/interactions/slashCommands/Assertions.ts -var Assertions_exports5 = {}; -__export(Assertions_exports5, { - assertReturnOfBuilder: () => assertReturnOfBuilder, +var Assertions_exports6 = {}; +__export(Assertions_exports6, { + assertReturnOfBuilder: () => assertReturnOfBuilder2, contextsPredicate: () => contextsPredicate, integrationTypesPredicate: () => integrationTypesPredicate, localizationMapPredicate: () => localizationMapPredicate, @@ -1592,20 +2414,20 @@ __export(Assertions_exports5, { validateRequired: () => validateRequired, validateRequiredParameters: () => validateRequiredParameters3 }); -var import_shapeshift5 = require("@sapphire/shapeshift"); -var import_v1012 = require("discord-api-types/v10"); -var namePredicate = import_shapeshift5.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/^[\p{Ll}\p{Lm}\p{Lo}\p{N}\p{sc=Devanagari}\p{sc=Thai}_-]+$/u).setValidationEnabled(isValidationEnabled); +var import_shapeshift6 = require("@sapphire/shapeshift"); +var import_v1020 = require("discord-api-types/v10"); +var namePredicate = import_shapeshift6.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/^[\p{Ll}\p{Lm}\p{Lo}\p{N}\p{sc=Devanagari}\p{sc=Thai}_-]+$/u).setValidationEnabled(isValidationEnabled); function validateName(name) { namePredicate.parse(name); } __name(validateName, "validateName"); -var descriptionPredicate2 = import_shapeshift5.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); -var localePredicate = import_shapeshift5.s.nativeEnum(import_v1012.Locale); +var descriptionPredicate3 = import_shapeshift6.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); +var localePredicate = import_shapeshift6.s.nativeEnum(import_v1020.Locale); function validateDescription(description) { - descriptionPredicate2.parse(description); + descriptionPredicate3.parse(description); } __name(validateDescription, "validateDescription"); -var maxArrayLengthPredicate = import_shapeshift5.s.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled); +var maxArrayLengthPredicate = import_shapeshift6.s.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled); function validateLocale(locale) { return localePredicate.parse(locale); } @@ -1620,7 +2442,7 @@ function validateRequiredParameters3(name, description, options) { validateMaxOptionsLength(options); } __name(validateRequiredParameters3, "validateRequiredParameters"); -var booleanPredicate = import_shapeshift5.s.boolean(); +var booleanPredicate = import_shapeshift6.s.boolean(); function validateDefaultPermission(value) { booleanPredicate.parse(value); } @@ -1629,29 +2451,29 @@ function validateRequired(required) { booleanPredicate.parse(required); } __name(validateRequired, "validateRequired"); -var choicesLengthPredicate = import_shapeshift5.s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled); +var choicesLengthPredicate = import_shapeshift6.s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled); function validateChoicesLength(amountAdding, choices) { choicesLengthPredicate.parse((choices?.length ?? 0) + amountAdding); } __name(validateChoicesLength, "validateChoicesLength"); -function assertReturnOfBuilder(input, ExpectedInstanceOf) { - import_shapeshift5.s.instance(ExpectedInstanceOf).parse(input); +function assertReturnOfBuilder2(input, ExpectedInstanceOf) { + import_shapeshift6.s.instance(ExpectedInstanceOf).parse(input); } -__name(assertReturnOfBuilder, "assertReturnOfBuilder"); -var localizationMapPredicate = import_shapeshift5.s.object(Object.fromEntries(Object.values(import_v1012.Locale).map((locale) => [locale, import_shapeshift5.s.string().nullish()]))).strict().nullish().setValidationEnabled(isValidationEnabled); +__name(assertReturnOfBuilder2, "assertReturnOfBuilder"); +var localizationMapPredicate = import_shapeshift6.s.object(Object.fromEntries(Object.values(import_v1020.Locale).map((locale) => [locale, import_shapeshift6.s.string().nullish()]))).strict().nullish().setValidationEnabled(isValidationEnabled); function validateLocalizationMap(value) { localizationMapPredicate.parse(value); } __name(validateLocalizationMap, "validateLocalizationMap"); -var dmPermissionPredicate = import_shapeshift5.s.boolean().nullish(); +var dmPermissionPredicate = import_shapeshift6.s.boolean().nullish(); function validateDMPermission(value) { dmPermissionPredicate.parse(value); } __name(validateDMPermission, "validateDMPermission"); -var memberPermissionPredicate = import_shapeshift5.s.union([ - import_shapeshift5.s.bigint().transform((value) => value.toString()), - import_shapeshift5.s.number().safeInt().transform((value) => value.toString()), - import_shapeshift5.s.string().regex(/^\d+$/) +var memberPermissionPredicate = import_shapeshift6.s.union([ + import_shapeshift6.s.bigint().transform((value) => value.toString()), + import_shapeshift6.s.number().safeInt().transform((value) => value.toString()), + import_shapeshift6.s.string().regex(/^\d+$/) ]).nullish(); function validateDefaultMemberPermissions(permissions) { return memberPermissionPredicate.parse(permissions); @@ -1661,11 +2483,11 @@ function validateNSFW(value) { booleanPredicate.parse(value); } __name(validateNSFW, "validateNSFW"); -var contextsPredicate = import_shapeshift5.s.array( - import_shapeshift5.s.nativeEnum(import_v1012.InteractionContextType).setValidationEnabled(isValidationEnabled) +var contextsPredicate = import_shapeshift6.s.array( + import_shapeshift6.s.nativeEnum(import_v1020.InteractionContextType).setValidationEnabled(isValidationEnabled) ); -var integrationTypesPredicate = import_shapeshift5.s.array( - import_shapeshift5.s.nativeEnum(import_v1012.ApplicationIntegrationType).setValidationEnabled(isValidationEnabled) +var integrationTypesPredicate = import_shapeshift6.s.array( + import_shapeshift6.s.nativeEnum(import_v1020.ApplicationIntegrationType).setValidationEnabled(isValidationEnabled) ); // src/interactions/slashCommands/SlashCommandBuilder.ts @@ -1785,7 +2607,7 @@ var SharedNameAndDescription = class { }; // src/interactions/slashCommands/mixins/SharedSlashCommand.ts -var import_v1013 = require("discord-api-types/v10"); +var import_v1021 = require("discord-api-types/v10"); var SharedSlashCommand = class { static { __name(this, "SharedSlashCommand"); @@ -1890,14 +2712,14 @@ var SharedSlashCommand = class { validateLocalizationMap(this.description_localizations); return { ...this, - type: import_v1013.ApplicationCommandType.ChatInput, + type: import_v1021.ApplicationCommandType.ChatInput, options: this.options.map((option) => option.toJSON()) }; } }; // src/interactions/slashCommands/options/attachment.ts -var import_v1014 = require("discord-api-types/v10"); +var import_v1022 = require("discord-api-types/v10"); // src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts var ApplicationCommandOptionBase = class extends SharedNameAndDescription { @@ -1939,7 +2761,7 @@ var SlashCommandAttachmentOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1014.ApplicationCommandOptionType.Attachment; + type = import_v1022.ApplicationCommandOptionType.Attachment; /** * {@inheritDoc ApplicationCommandOptionBase.toJSON} */ @@ -1950,7 +2772,7 @@ var SlashCommandAttachmentOption = class extends ApplicationCommandOptionBase { }; // src/interactions/slashCommands/options/boolean.ts -var import_v1015 = require("discord-api-types/v10"); +var import_v1023 = require("discord-api-types/v10"); var SlashCommandBooleanOption = class extends ApplicationCommandOptionBase { static { __name(this, "SlashCommandBooleanOption"); @@ -1958,7 +2780,7 @@ var SlashCommandBooleanOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1015.ApplicationCommandOptionType.Boolean; + type = import_v1023.ApplicationCommandOptionType.Boolean; /** * {@inheritDoc ApplicationCommandOptionBase.toJSON} */ @@ -1969,25 +2791,25 @@ var SlashCommandBooleanOption = class extends ApplicationCommandOptionBase { }; // src/interactions/slashCommands/options/channel.ts -var import_v1017 = require("discord-api-types/v10"); +var import_v1025 = require("discord-api-types/v10"); var import_ts_mixer = require("ts-mixer"); // src/interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.ts -var import_shapeshift6 = require("@sapphire/shapeshift"); -var import_v1016 = require("discord-api-types/v10"); +var import_shapeshift7 = require("@sapphire/shapeshift"); +var import_v1024 = require("discord-api-types/v10"); var allowedChannelTypes = [ - import_v1016.ChannelType.GuildText, - import_v1016.ChannelType.GuildVoice, - import_v1016.ChannelType.GuildCategory, - import_v1016.ChannelType.GuildAnnouncement, - import_v1016.ChannelType.AnnouncementThread, - import_v1016.ChannelType.PublicThread, - import_v1016.ChannelType.PrivateThread, - import_v1016.ChannelType.GuildStageVoice, - import_v1016.ChannelType.GuildForum, - import_v1016.ChannelType.GuildMedia + import_v1024.ChannelType.GuildText, + import_v1024.ChannelType.GuildVoice, + import_v1024.ChannelType.GuildCategory, + import_v1024.ChannelType.GuildAnnouncement, + import_v1024.ChannelType.AnnouncementThread, + import_v1024.ChannelType.PublicThread, + import_v1024.ChannelType.PrivateThread, + import_v1024.ChannelType.GuildStageVoice, + import_v1024.ChannelType.GuildForum, + import_v1024.ChannelType.GuildMedia ]; -var channelTypesPredicate = import_shapeshift6.s.array(import_shapeshift6.s.union(allowedChannelTypes.map((type) => import_shapeshift6.s.literal(type)))); +var channelTypesPredicate = import_shapeshift7.s.array(import_shapeshift7.s.union(allowedChannelTypes.map((type) => import_shapeshift7.s.literal(type)))); var ApplicationCommandOptionChannelTypesMixin = class { static { __name(this, "ApplicationCommandOptionChannelTypesMixin"); @@ -2015,7 +2837,7 @@ var SlashCommandChannelOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1017.ApplicationCommandOptionType.Channel; + type = import_v1025.ApplicationCommandOptionType.Channel; /** * {@inheritDoc ApplicationCommandOptionBase.toJSON} */ @@ -2030,8 +2852,8 @@ SlashCommandChannelOption = __decorateClass([ ], SlashCommandChannelOption); // src/interactions/slashCommands/options/integer.ts -var import_shapeshift9 = require("@sapphire/shapeshift"); -var import_v1019 = require("discord-api-types/v10"); +var import_shapeshift10 = require("@sapphire/shapeshift"); +var import_v1027 = require("discord-api-types/v10"); var import_ts_mixer2 = require("ts-mixer"); // src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts @@ -2050,8 +2872,8 @@ var ApplicationCommandNumericOptionMinMaxValueMixin = class { }; // src/interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts -var import_shapeshift7 = require("@sapphire/shapeshift"); -var booleanPredicate2 = import_shapeshift7.s.boolean(); +var import_shapeshift8 = require("@sapphire/shapeshift"); +var booleanPredicate2 = import_shapeshift8.s.boolean(); var ApplicationCommandOptionWithAutocompleteMixin = class { static { __name(this, "ApplicationCommandOptionWithAutocompleteMixin"); @@ -2082,14 +2904,14 @@ var ApplicationCommandOptionWithAutocompleteMixin = class { }; // src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.ts -var import_shapeshift8 = require("@sapphire/shapeshift"); -var import_v1018 = require("discord-api-types/v10"); -var stringPredicate = import_shapeshift8.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100); -var numberPredicate = import_shapeshift8.s.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY); -var choicesPredicate = import_shapeshift8.s.object({ +var import_shapeshift9 = require("@sapphire/shapeshift"); +var import_v1026 = require("discord-api-types/v10"); +var stringPredicate = import_shapeshift9.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100); +var numberPredicate = import_shapeshift9.s.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY); +var choicesPredicate = import_shapeshift9.s.object({ name: stringPredicate, name_localizations: localizationMapPredicate, - value: import_shapeshift8.s.union([stringPredicate, numberPredicate]) + value: import_shapeshift9.s.union([stringPredicate, numberPredicate]) }).array(); var ApplicationCommandOptionWithChoicesMixin = class { static { @@ -2121,7 +2943,7 @@ var ApplicationCommandOptionWithChoicesMixin = class { } validateChoicesLength(normalizedChoices.length, this.choices); for (const { name, name_localizations, value } of normalizedChoices) { - if (this.type === import_v1018.ApplicationCommandOptionType.String) { + if (this.type === import_v1026.ApplicationCommandOptionType.String) { stringPredicate.parse(value); } else { numberPredicate.parse(value); @@ -2148,12 +2970,12 @@ var ApplicationCommandOptionWithChoicesMixin = class { }; // src/interactions/slashCommands/options/integer.ts -var numberValidator = import_shapeshift9.s.number().int(); +var numberValidator = import_shapeshift10.s.number().int(); var SlashCommandIntegerOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1019.ApplicationCommandOptionType.Integer; + type = import_v1027.ApplicationCommandOptionType.Integer; /** * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue} */ @@ -2191,7 +3013,7 @@ SlashCommandIntegerOption = __decorateClass([ ], SlashCommandIntegerOption); // src/interactions/slashCommands/options/mentionable.ts -var import_v1020 = require("discord-api-types/v10"); +var import_v1028 = require("discord-api-types/v10"); var SlashCommandMentionableOption = class extends ApplicationCommandOptionBase { static { __name(this, "SlashCommandMentionableOption"); @@ -2199,7 +3021,7 @@ var SlashCommandMentionableOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1020.ApplicationCommandOptionType.Mentionable; + type = import_v1028.ApplicationCommandOptionType.Mentionable; /** * {@inheritDoc ApplicationCommandOptionBase.toJSON} */ @@ -2210,15 +3032,15 @@ var SlashCommandMentionableOption = class extends ApplicationCommandOptionBase { }; // src/interactions/slashCommands/options/number.ts -var import_shapeshift10 = require("@sapphire/shapeshift"); -var import_v1021 = require("discord-api-types/v10"); +var import_shapeshift11 = require("@sapphire/shapeshift"); +var import_v1029 = require("discord-api-types/v10"); var import_ts_mixer3 = require("ts-mixer"); -var numberValidator2 = import_shapeshift10.s.number(); +var numberValidator2 = import_shapeshift11.s.number(); var SlashCommandNumberOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1021.ApplicationCommandOptionType.Number; + type = import_v1029.ApplicationCommandOptionType.Number; /** * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue} */ @@ -2256,7 +3078,7 @@ SlashCommandNumberOption = __decorateClass([ ], SlashCommandNumberOption); // src/interactions/slashCommands/options/role.ts -var import_v1022 = require("discord-api-types/v10"); +var import_v1030 = require("discord-api-types/v10"); var SlashCommandRoleOption = class extends ApplicationCommandOptionBase { static { __name(this, "SlashCommandRoleOption"); @@ -2264,7 +3086,7 @@ var SlashCommandRoleOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1022.ApplicationCommandOptionType.Role; + type = import_v1030.ApplicationCommandOptionType.Role; /** * {@inheritDoc ApplicationCommandOptionBase.toJSON} */ @@ -2275,16 +3097,16 @@ var SlashCommandRoleOption = class extends ApplicationCommandOptionBase { }; // src/interactions/slashCommands/options/string.ts -var import_shapeshift11 = require("@sapphire/shapeshift"); -var import_v1023 = require("discord-api-types/v10"); +var import_shapeshift12 = require("@sapphire/shapeshift"); +var import_v1031 = require("discord-api-types/v10"); var import_ts_mixer4 = require("ts-mixer"); -var minLengthValidator2 = import_shapeshift11.s.number().greaterThanOrEqual(0).lessThanOrEqual(6e3); -var maxLengthValidator2 = import_shapeshift11.s.number().greaterThanOrEqual(1).lessThanOrEqual(6e3); +var minLengthValidator2 = import_shapeshift12.s.number().greaterThanOrEqual(0).lessThanOrEqual(6e3); +var maxLengthValidator2 = import_shapeshift12.s.number().greaterThanOrEqual(1).lessThanOrEqual(6e3); var SlashCommandStringOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1023.ApplicationCommandOptionType.String; + type = import_v1031.ApplicationCommandOptionType.String; /** * The maximum length of this option. */ @@ -2330,7 +3152,7 @@ SlashCommandStringOption = __decorateClass([ ], SlashCommandStringOption); // src/interactions/slashCommands/options/user.ts -var import_v1024 = require("discord-api-types/v10"); +var import_v1032 = require("discord-api-types/v10"); var SlashCommandUserOption = class extends ApplicationCommandOptionBase { static { __name(this, "SlashCommandUserOption"); @@ -2338,7 +3160,7 @@ var SlashCommandUserOption = class extends ApplicationCommandOptionBase { /** * The type of this option. */ - type = import_v1024.ApplicationCommandOptionType.User; + type = import_v1032.ApplicationCommandOptionType.User; /** * {@inheritDoc ApplicationCommandOptionBase.toJSON} */ @@ -2437,14 +3259,14 @@ var SharedSlashCommandOptions = class { const { options } = this; validateMaxOptionsLength(options); const result = typeof input === "function" ? input(new Instance()) : input; - assertReturnOfBuilder(result, Instance); + assertReturnOfBuilder2(result, Instance); options.push(result); return this; } }; // src/interactions/slashCommands/SlashCommandSubcommands.ts -var import_v1025 = require("discord-api-types/v10"); +var import_v1033 = require("discord-api-types/v10"); var import_ts_mixer5 = require("ts-mixer"); var SlashCommandSubcommandGroupBuilder = class { /** @@ -2468,7 +3290,7 @@ var SlashCommandSubcommandGroupBuilder = class { const { options } = this; validateMaxOptionsLength(options); const result = typeof input === "function" ? input(new SlashCommandSubcommandBuilder()) : input; - assertReturnOfBuilder(result, SlashCommandSubcommandBuilder); + assertReturnOfBuilder2(result, SlashCommandSubcommandBuilder); options.push(result); return this; } @@ -2482,7 +3304,7 @@ var SlashCommandSubcommandGroupBuilder = class { toJSON() { validateRequiredParameters3(this.name, this.description, this.options); return { - type: import_v1025.ApplicationCommandOptionType.SubcommandGroup, + type: import_v1033.ApplicationCommandOptionType.SubcommandGroup, name: this.name, name_localizations: this.name_localizations, description: this.description, @@ -2518,7 +3340,7 @@ var SlashCommandSubcommandBuilder = class { toJSON() { validateRequiredParameters3(this.name, this.description, this.options); return { - type: import_v1025.ApplicationCommandOptionType.Subcommand, + type: import_v1033.ApplicationCommandOptionType.Subcommand, name: this.name, name_localizations: this.name_localizations, description: this.description, @@ -2547,7 +3369,7 @@ var SharedSlashCommandSubcommands = class { const { options } = this; validateMaxOptionsLength(options); const result = typeof input === "function" ? input(new SlashCommandSubcommandGroupBuilder()) : input; - assertReturnOfBuilder(result, SlashCommandSubcommandGroupBuilder); + assertReturnOfBuilder2(result, SlashCommandSubcommandGroupBuilder); options.push(result); return this; } @@ -2560,7 +3382,7 @@ var SharedSlashCommandSubcommands = class { const { options } = this; validateMaxOptionsLength(options); const result = typeof input === "function" ? input(new SlashCommandSubcommandBuilder()) : input; - assertReturnOfBuilder(result, SlashCommandSubcommandBuilder); + assertReturnOfBuilder2(result, SlashCommandSubcommandBuilder); options.push(result); return this; } @@ -2626,8 +3448,8 @@ SlashCommandBuilder = __decorateClass([ ], SlashCommandBuilder); // src/interactions/contextMenuCommands/Assertions.ts -var Assertions_exports6 = {}; -__export(Assertions_exports6, { +var Assertions_exports7 = {}; +__export(Assertions_exports7, { contextsPredicate: () => contextsPredicate2, integrationTypesPredicate: () => integrationTypesPredicate2, validateDMPermission: () => validateDMPermission2, @@ -2637,11 +3459,11 @@ __export(Assertions_exports6, { validateRequiredParameters: () => validateRequiredParameters4, validateType: () => validateType }); -var import_shapeshift12 = require("@sapphire/shapeshift"); -var import_v1026 = require("discord-api-types/v10"); -var namePredicate2 = import_shapeshift12.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/^( *[\p{P}\p{L}\p{N}\p{sc=Devanagari}\p{sc=Thai}]+ *)+$/u).setValidationEnabled(isValidationEnabled); -var typePredicate = import_shapeshift12.s.union([import_shapeshift12.s.literal(import_v1026.ApplicationCommandType.User), import_shapeshift12.s.literal(import_v1026.ApplicationCommandType.Message)]).setValidationEnabled(isValidationEnabled); -var booleanPredicate3 = import_shapeshift12.s.boolean(); +var import_shapeshift13 = require("@sapphire/shapeshift"); +var import_v1034 = require("discord-api-types/v10"); +var namePredicate2 = import_shapeshift13.s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/^( *[\p{P}\p{L}\p{N}\p{sc=Devanagari}\p{sc=Thai}]+ *)+$/u).setValidationEnabled(isValidationEnabled); +var typePredicate = import_shapeshift13.s.union([import_shapeshift13.s.literal(import_v1034.ApplicationCommandType.User), import_shapeshift13.s.literal(import_v1034.ApplicationCommandType.Message)]).setValidationEnabled(isValidationEnabled); +var booleanPredicate3 = import_shapeshift13.s.boolean(); function validateDefaultPermission2(value) { booleanPredicate3.parse(value); } @@ -2659,25 +3481,25 @@ function validateRequiredParameters4(name, type) { validateType(type); } __name(validateRequiredParameters4, "validateRequiredParameters"); -var dmPermissionPredicate2 = import_shapeshift12.s.boolean().nullish(); +var dmPermissionPredicate2 = import_shapeshift13.s.boolean().nullish(); function validateDMPermission2(value) { dmPermissionPredicate2.parse(value); } __name(validateDMPermission2, "validateDMPermission"); -var memberPermissionPredicate2 = import_shapeshift12.s.union([ - import_shapeshift12.s.bigint().transform((value) => value.toString()), - import_shapeshift12.s.number().safeInt().transform((value) => value.toString()), - import_shapeshift12.s.string().regex(/^\d+$/) +var memberPermissionPredicate2 = import_shapeshift13.s.union([ + import_shapeshift13.s.bigint().transform((value) => value.toString()), + import_shapeshift13.s.number().safeInt().transform((value) => value.toString()), + import_shapeshift13.s.string().regex(/^\d+$/) ]).nullish(); function validateDefaultMemberPermissions2(permissions) { return memberPermissionPredicate2.parse(permissions); } __name(validateDefaultMemberPermissions2, "validateDefaultMemberPermissions"); -var contextsPredicate2 = import_shapeshift12.s.array( - import_shapeshift12.s.nativeEnum(import_v1026.InteractionContextType).setValidationEnabled(isValidationEnabled) +var contextsPredicate2 = import_shapeshift13.s.array( + import_shapeshift13.s.nativeEnum(import_v1034.InteractionContextType).setValidationEnabled(isValidationEnabled) ); -var integrationTypesPredicate2 = import_shapeshift12.s.array( - import_shapeshift12.s.nativeEnum(import_v1026.ApplicationIntegrationType).setValidationEnabled(isValidationEnabled) +var integrationTypesPredicate2 = import_shapeshift13.s.array( + import_shapeshift13.s.nativeEnum(import_v1034.ApplicationIntegrationType).setValidationEnabled(isValidationEnabled) ); // src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts @@ -2858,7 +3680,7 @@ function embedLength(data) { __name(embedLength, "embedLength"); // src/index.ts -var version = "1.10.1"; +var version = "1.11.2"; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { ActionRowBuilder, @@ -2872,16 +3694,23 @@ var version = "1.10.1"; ChannelSelectMenuBuilder, ComponentAssertions, ComponentBuilder, + ComponentsV2Assertions, + ContainerBuilder, ContextMenuCommandAssertions, ContextMenuCommandBuilder, EmbedAssertions, EmbedBuilder, + FileBuilder, + MediaGalleryBuilder, + MediaGalleryItemBuilder, MentionableSelectMenuBuilder, ModalAssertions, ModalBuilder, RoleSelectMenuBuilder, + SectionBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, + SeparatorBuilder, SharedNameAndDescription, SharedSlashCommand, SharedSlashCommandOptions, @@ -2901,8 +3730,10 @@ var version = "1.10.1"; SlashCommandUserOption, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, + TextDisplayBuilder, TextInputAssertions, TextInputBuilder, + ThumbnailBuilder, UserSelectMenuBuilder, createComponentBuilder, disableValidators, @@ -2910,6 +3741,7 @@ var version = "1.10.1"; enableValidators, isValidationEnabled, normalizeArray, + resolveBuilder, version, ...require("@discordjs/formatters") }); diff --git a/node_modules/@discordjs/builders/dist/index.js.map b/node_modules/@discordjs/builders/dist/index.js.map index 93c6468..ac003c5 100644 --- a/node_modules/@discordjs/builders/dist/index.js.map +++ b/node_modules/@discordjs/builders/dist/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/index.ts","../src/messages/embed/Assertions.ts","../src/util/validation.ts","../src/util/normalizeArray.ts","../src/messages/embed/Embed.ts","../src/components/Assertions.ts","../src/components/selectMenu/StringSelectMenuOption.ts","../src/components/ActionRow.ts","../src/components/Component.ts","../src/components/Components.ts","../src/components/button/Button.ts","../src/components/selectMenu/ChannelSelectMenu.ts","../src/components/selectMenu/BaseSelectMenu.ts","../src/components/selectMenu/MentionableSelectMenu.ts","../src/components/selectMenu/RoleSelectMenu.ts","../src/components/selectMenu/StringSelectMenu.ts","../src/components/selectMenu/UserSelectMenu.ts","../src/components/textInput/TextInput.ts","../src/components/textInput/Assertions.ts","../src/interactions/modals/Assertions.ts","../src/interactions/modals/Modal.ts","../src/interactions/slashCommands/Assertions.ts","../src/interactions/slashCommands/SlashCommandBuilder.ts","../src/interactions/slashCommands/mixins/NameAndDescription.ts","../src/interactions/slashCommands/mixins/SharedSlashCommand.ts","../src/interactions/slashCommands/options/attachment.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts","../src/interactions/slashCommands/options/boolean.ts","../src/interactions/slashCommands/options/channel.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.ts","../src/interactions/slashCommands/options/integer.ts","../src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.ts","../src/interactions/slashCommands/options/mentionable.ts","../src/interactions/slashCommands/options/number.ts","../src/interactions/slashCommands/options/role.ts","../src/interactions/slashCommands/options/string.ts","../src/interactions/slashCommands/options/user.ts","../src/interactions/slashCommands/mixins/SharedSlashCommandOptions.ts","../src/interactions/slashCommands/SlashCommandSubcommands.ts","../src/interactions/slashCommands/mixins/SharedSubcommands.ts","../src/interactions/contextMenuCommands/Assertions.ts","../src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts","../src/util/componentUtil.ts"],"sourcesContent":["export * as EmbedAssertions from './messages/embed/Assertions.js';\nexport * from './messages/embed/Embed.js';\n// TODO: Consider removing this dep in the next major version\nexport * from '@discordjs/formatters';\n\nexport * as ComponentAssertions from './components/Assertions.js';\nexport * from './components/ActionRow.js';\nexport * from './components/button/Button.js';\nexport * from './components/Component.js';\nexport * from './components/Components.js';\nexport * from './components/textInput/TextInput.js';\nexport * as TextInputAssertions from './components/textInput/Assertions.js';\nexport * from './interactions/modals/Modal.js';\nexport * as ModalAssertions from './interactions/modals/Assertions.js';\n\nexport * from './components/selectMenu/BaseSelectMenu.js';\nexport * from './components/selectMenu/ChannelSelectMenu.js';\nexport * from './components/selectMenu/MentionableSelectMenu.js';\nexport * from './components/selectMenu/RoleSelectMenu.js';\nexport * from './components/selectMenu/StringSelectMenu.js';\n// TODO: Remove those aliases in v2\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuBuilder} instead.\n\t */\n\tStringSelectMenuBuilder as SelectMenuBuilder,\n} from './components/selectMenu/StringSelectMenu.js';\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuOptionBuilder} instead.\n\t */\n\tStringSelectMenuOptionBuilder as SelectMenuOptionBuilder,\n} from './components/selectMenu/StringSelectMenuOption.js';\nexport * from './components/selectMenu/StringSelectMenuOption.js';\nexport * from './components/selectMenu/UserSelectMenu.js';\n\nexport * as SlashCommandAssertions from './interactions/slashCommands/Assertions.js';\nexport * from './interactions/slashCommands/SlashCommandBuilder.js';\nexport * from './interactions/slashCommands/SlashCommandSubcommands.js';\nexport * from './interactions/slashCommands/options/boolean.js';\nexport * from './interactions/slashCommands/options/channel.js';\nexport * from './interactions/slashCommands/options/integer.js';\nexport * from './interactions/slashCommands/options/mentionable.js';\nexport * from './interactions/slashCommands/options/number.js';\nexport * from './interactions/slashCommands/options/role.js';\nexport * from './interactions/slashCommands/options/attachment.js';\nexport * from './interactions/slashCommands/options/string.js';\nexport * from './interactions/slashCommands/options/user.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionBase.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.js';\nexport * from './interactions/slashCommands/mixins/NameAndDescription.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommandOptions.js';\nexport * from './interactions/slashCommands/mixins/SharedSubcommands.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommand.js';\n\nexport * as ContextMenuCommandAssertions from './interactions/contextMenuCommands/Assertions.js';\nexport * from './interactions/contextMenuCommands/ContextMenuCommandBuilder.js';\n\nexport * from './util/componentUtil.js';\nexport * from './util/normalizeArray.js';\nexport * from './util/validation.js';\n\n/**\n * The {@link https://github.com/discordjs/discord.js/blob/main/packages/builders#readme | @discordjs/builders} version\n * that you are currently using.\n *\n * @privateRemarks This needs to explicitly be `string` so it is not typed as a \"const string\" that gets injected by esbuild.\n */\nexport const version = '1.10.1' as string;\n","import { s } from '@sapphire/shapeshift';\nimport type { APIEmbedField } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const fieldNamePredicate = s.string().lengthLessThanOrEqual(256).setValidationEnabled(isValidationEnabled);\n\nexport const fieldValuePredicate = s.string().lengthLessThanOrEqual(1_024).setValidationEnabled(isValidationEnabled);\n\nexport const fieldInlinePredicate = s.boolean().optional();\n\nexport const embedFieldPredicate = s\n\t.object({\n\t\tname: fieldNamePredicate,\n\t\tvalue: fieldValuePredicate,\n\t\tinline: fieldInlinePredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFieldsArrayPredicate = embedFieldPredicate.array().setValidationEnabled(isValidationEnabled);\n\nexport const fieldLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateFieldLength(amountAdding: number, fields?: APIEmbedField[]): void {\n\tfieldLengthPredicate.parse((fields?.length ?? 0) + amountAdding);\n}\n\nexport const authorNamePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const imageURLPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'attachment:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const urlPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedAuthorPredicate = s\n\t.object({\n\t\tname: authorNamePredicate,\n\t\ticonURL: imageURLPredicate,\n\t\turl: urlPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const RGBPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(255)\n\t.setValidationEnabled(isValidationEnabled);\nexport const colorPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(0xffffff)\n\t.or(s.tuple([RGBPredicate, RGBPredicate, RGBPredicate]))\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(4_096)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const footerTextPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(2_048)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFooterPredicate = s\n\t.object({\n\t\ttext: footerTextPredicate,\n\t\ticonURL: imageURLPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const timestampPredicate = s.union([s.number(), s.date()]).nullable().setValidationEnabled(isValidationEnabled);\n\nexport const titlePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n","let validate = true;\n\n/**\n * Enables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function enableValidators() {\n\treturn (validate = true);\n}\n\n/**\n * Disables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function disableValidators() {\n\treturn (validate = false);\n}\n\n/**\n * Checks whether validation is occurring.\n */\nexport function isValidationEnabled() {\n\treturn validate;\n}\n","/**\n * Normalizes data that is a rest parameter or an array into an array with a depth of 1.\n *\n * @typeParam ItemType - The data that must satisfy {@link RestOrArray}.\n * @param arr - The (possibly variadic) data to normalize\n */\nexport function normalizeArray(arr: RestOrArray): ItemType[] {\n\tif (Array.isArray(arr[0])) return [...arr[0]];\n\treturn arr as ItemType[];\n}\n\n/**\n * Represents data that may be an array or came from a rest parameter.\n *\n * @remarks\n * This type is used throughout builders to ensure both an array and variadic arguments\n * may be used. It is normalized with {@link normalizeArray}.\n */\nexport type RestOrArray = Type[] | [Type[]];\n","import type { APIEmbed, APIEmbedAuthor, APIEmbedField, APIEmbedFooter, APIEmbedImage } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport {\n\tcolorPredicate,\n\tdescriptionPredicate,\n\tembedAuthorPredicate,\n\tembedFieldsArrayPredicate,\n\tembedFooterPredicate,\n\timageURLPredicate,\n\ttimestampPredicate,\n\ttitlePredicate,\n\turlPredicate,\n\tvalidateFieldLength,\n} from './Assertions.js';\n\n/**\n * A tuple satisfying the RGB color model.\n *\n * @see {@link https://developer.mozilla.org/docs/Glossary/RGB}\n */\nexport type RGBTuple = [red: number, green: number, blue: number];\n\n/**\n * The base icon data typically used in payloads.\n */\nexport interface IconData {\n\t/**\n\t * The URL of the icon.\n\t */\n\ticonURL?: string;\n\t/**\n\t * The proxy URL of the icon.\n\t */\n\tproxyIconURL?: string;\n}\n\n/**\n * Represents the author data of an embed.\n */\nexport interface EmbedAuthorData extends IconData, Omit {}\n\n/**\n * Represents the author options of an embed.\n */\nexport interface EmbedAuthorOptions extends Omit {}\n\n/**\n * Represents the footer data of an embed.\n */\nexport interface EmbedFooterData extends IconData, Omit {}\n\n/**\n * Represents the footer options of an embed.\n */\nexport interface EmbedFooterOptions extends Omit {}\n\n/**\n * Represents the image data of an embed.\n */\nexport interface EmbedImageData extends Omit {\n\t/**\n\t * The proxy URL for the image.\n\t */\n\tproxyURL?: string;\n}\n\n/**\n * A builder that creates API-compatible JSON data for embeds.\n */\nexport class EmbedBuilder {\n\t/**\n\t * The API data associated with this embed.\n\t */\n\tpublic readonly data: APIEmbed;\n\n\t/**\n\t * Creates a new embed from API data.\n\t *\n\t * @param data - The API data to create this embed with\n\t */\n\tpublic constructor(data: APIEmbed = {}) {\n\t\tthis.data = { ...data };\n\t\tif (data.timestamp) this.data.timestamp = new Date(data.timestamp).toISOString();\n\t}\n\n\t/**\n\t * Appends fields to the embed.\n\t *\n\t * @remarks\n\t * This method accepts either an array of fields or a variable number of field parameters.\n\t * The maximum amount of fields that can be added is 25.\n\t * @example\n\t * Using an array:\n\t * ```ts\n\t * const fields: APIEmbedField[] = ...;\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(fields);\n\t * ```\n\t * @example\n\t * Using rest parameters (variadic):\n\t * ```ts\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(\n\t * \t\t{ name: 'Field 1', value: 'Value 1' },\n\t * \t\t{ name: 'Field 2', value: 'Value 2' },\n\t * \t);\n\t * ```\n\t * @param fields - The fields to add\n\t */\n\tpublic addFields(...fields: RestOrArray): this {\n\t\tconst normalizedFields = normalizeArray(fields);\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(normalizedFields.length, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(normalizedFields);\n\n\t\tif (this.data.fields) this.data.fields.push(...normalizedFields);\n\t\telse this.data.fields = normalizedFields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts fields for this embed.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}.\n\t * The maximum amount of fields that can be added is 25.\n\t *\n\t * It's useful for modifying and adjusting order of the already-existing fields of an embed.\n\t * @example\n\t * Remove the first field:\n\t * ```ts\n\t * embed.spliceFields(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n fields:\n\t * ```ts\n\t * const n = 4;\n\t * embed.spliceFields(0, n);\n\t * ```\n\t * @example\n\t * Remove the last field:\n\t * ```ts\n\t * embed.spliceFields(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of fields to remove\n\t * @param fields - The replacing field objects\n\t */\n\tpublic spliceFields(index: number, deleteCount: number, ...fields: APIEmbedField[]): this {\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(fields.length - deleteCount, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(fields);\n\t\tif (this.data.fields) this.data.fields.splice(index, deleteCount, ...fields);\n\t\telse this.data.fields = fields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the fields for this embed.\n\t *\n\t * @remarks\n\t * This method is an alias for {@link EmbedBuilder.spliceFields}. More specifically,\n\t * it splices the entire array of fields, replacing them with the provided fields.\n\t *\n\t * You can set a maximum of 25 fields.\n\t * @param fields - The fields to set\n\t */\n\tpublic setFields(...fields: RestOrArray): this {\n\t\tthis.spliceFields(0, this.data.fields?.length ?? 0, ...normalizeArray(fields));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the author of this embed.\n\t *\n\t * @param options - The options to use\n\t */\n\n\tpublic setAuthor(options: EmbedAuthorOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.author = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedAuthorPredicate.parse(options);\n\n\t\tthis.data.author = { name: options.name, url: options.url, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the color of this embed.\n\t *\n\t * @param color - The color to use\n\t */\n\tpublic setColor(color: RGBTuple | number | null): this {\n\t\t// Data assertions\n\t\tcolorPredicate.parse(color);\n\n\t\tif (Array.isArray(color)) {\n\t\t\tconst [red, green, blue] = color;\n\t\t\tthis.data.color = (red << 16) + (green << 8) + blue;\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.data.color = color ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this embed.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string | null): this {\n\t\t// Data assertions\n\t\tdescriptionPredicate.parse(description);\n\n\t\tthis.data.description = description ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the footer of this embed.\n\t *\n\t * @param options - The footer to use\n\t */\n\tpublic setFooter(options: EmbedFooterOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.footer = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedFooterPredicate.parse(options);\n\n\t\tthis.data.footer = { text: options.text, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the image of this embed.\n\t *\n\t * @param url - The image URL to use\n\t */\n\tpublic setImage(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.image = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the thumbnail of this embed.\n\t *\n\t * @param url - The thumbnail URL to use\n\t */\n\tpublic setThumbnail(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.thumbnail = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the timestamp of this embed.\n\t *\n\t * @param timestamp - The timestamp or date to use\n\t */\n\tpublic setTimestamp(timestamp: Date | number | null = Date.now()): this {\n\t\t// Data assertions\n\t\ttimestampPredicate.parse(timestamp);\n\n\t\tthis.data.timestamp = timestamp ? new Date(timestamp).toISOString() : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the title for this embed.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string | null): this {\n\t\t// Data assertions\n\t\ttitlePredicate.parse(title);\n\n\t\tthis.data.title = title ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL of this embed.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string | null): this {\n\t\t// Data assertions\n\t\turlPredicate.parse(url);\n\n\t\tthis.data.url = url ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIEmbed {\n\t\treturn { ...this.data };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ButtonStyle, ChannelType, type APIMessageComponentEmoji } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../util/validation.js';\nimport { StringSelectMenuOptionBuilder } from './selectMenu/StringSelectMenuOption.js';\n\nexport const customIdValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const emojiValidator = s\n\t.object({\n\t\tid: s.string(),\n\t\tname: s.string(),\n\t\tanimated: s.boolean(),\n\t})\n\t.partial()\n\t.strict()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const disabledValidator = s.boolean();\n\nexport const buttonLabelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(80)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const buttonStyleValidator = s.nativeEnum(ButtonStyle);\n\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(150).setValidationEnabled(isValidationEnabled);\nexport const minMaxValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const labelValueDescriptionValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const jsonOptionValidator = s\n\t.object({\n\t\tlabel: labelValueDescriptionValidator,\n\t\tvalue: labelValueDescriptionValidator,\n\t\tdescription: labelValueDescriptionValidator.optional(),\n\t\temoji: emojiValidator.optional(),\n\t\tdefault: s.boolean().optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const optionValidator = s.instance(StringSelectMenuOptionBuilder).setValidationEnabled(isValidationEnabled);\n\nexport const optionsValidator = optionValidator\n\t.array()\n\t.lengthGreaterThanOrEqual(0)\n\t.setValidationEnabled(isValidationEnabled);\nexport const optionsLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredSelectMenuParameters(options: StringSelectMenuOptionBuilder[], customId?: string) {\n\tcustomIdValidator.parse(customId);\n\toptionsValidator.parse(options);\n}\n\nexport const defaultValidator = s.boolean();\n\nexport function validateRequiredSelectMenuOptionParameters(label?: string, value?: string) {\n\tlabelValueDescriptionValidator.parse(label);\n\tlabelValueDescriptionValidator.parse(value);\n}\n\nexport const channelTypesValidator = s.nativeEnum(ChannelType).array().setValidationEnabled(isValidationEnabled);\n\nexport const urlValidator = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'discord:'],\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredButtonParameters(\n\tstyle?: ButtonStyle,\n\tlabel?: string,\n\temoji?: APIMessageComponentEmoji,\n\tcustomId?: string,\n\tskuId?: string,\n\turl?: string,\n) {\n\tif (style === ButtonStyle.Premium) {\n\t\tif (!skuId) {\n\t\t\tthrow new RangeError('Premium buttons must have an SKU id.');\n\t\t}\n\n\t\tif (customId || label || url || emoji) {\n\t\t\tthrow new RangeError('Premium buttons cannot have a custom id, label, URL, or emoji.');\n\t\t}\n\t} else {\n\t\tif (skuId) {\n\t\t\tthrow new RangeError('Non-premium buttons must not have an SKU id.');\n\t\t}\n\n\t\tif (url && customId) {\n\t\t\tthrow new RangeError('URL and custom id are mutually exclusive.');\n\t\t}\n\n\t\tif (!label && !emoji) {\n\t\t\tthrow new RangeError('Non-premium buttons must have a label and/or an emoji.');\n\t\t}\n\n\t\tif (style === ButtonStyle.Link) {\n\t\t\tif (!url) {\n\t\t\t\tthrow new RangeError('Link buttons must have a URL.');\n\t\t\t}\n\t\t} else if (url) {\n\t\t\tthrow new RangeError('Non-premium and non-link buttons cannot have a URL.');\n\t\t}\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type { APIMessageComponentEmoji, APISelectMenuOption } from 'discord-api-types/v10';\nimport {\n\tdefaultValidator,\n\temojiValidator,\n\tlabelValueDescriptionValidator,\n\tvalidateRequiredSelectMenuOptionParameters,\n} from '../Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menu options.\n */\nexport class StringSelectMenuOptionBuilder implements JSONEncodable {\n\t/**\n\t * Creates a new string select menu option from API data.\n\t *\n\t * @param data - The API data to create this string select menu option with\n\t * @example\n\t * Creating a string select menu option from an API data object:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tlabel: 'catchy label',\n\t * \tvalue: '1',\n\t * });\n\t * ```\n\t * @example\n\t * Creating a string select menu option using setters and API data:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tdefault: true,\n\t * \tvalue: '1',\n\t * })\n\t * \t.setLabel('woah');\n\t * ```\n\t */\n\tpublic constructor(public data: Partial = {}) {}\n\n\t/**\n\t * Sets the label for this option.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValueDescriptionValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this option.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = labelValueDescriptionValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description for this option.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = labelValueDescriptionValidator.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this option is selected by default.\n\t *\n\t * @param isDefault - Whether this option is selected by default\n\t */\n\tpublic setDefault(isDefault = true) {\n\t\tthis.data.default = defaultValidator.parse(isDefault);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display for this option.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\tthis.data.emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic toJSON(): APISelectMenuOption {\n\t\tvalidateRequiredSelectMenuOptionParameters(this.data.label, this.data.value);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APISelectMenuOption;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport {\n\ttype APIActionRowComponent,\n\tComponentType,\n\ttype APIMessageActionRowComponent,\n\ttype APIModalActionRowComponent,\n\ttype APIActionRowComponentTypes,\n} from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../util/normalizeArray.js';\nimport { ComponentBuilder } from './Component.js';\nimport { createComponentBuilder } from './Components.js';\nimport type { ButtonBuilder } from './button/Button.js';\nimport type { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport type { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport type { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport type { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport type { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport type { TextInputBuilder } from './textInput/TextInput.js';\n\n/**\n * The builders that may be used for messages.\n */\nexport type MessageComponentBuilder =\n\t| ActionRowBuilder\n\t| MessageActionRowComponentBuilder;\n\n/**\n * The builders that may be used for modals.\n */\nexport type ModalComponentBuilder = ActionRowBuilder | ModalActionRowComponentBuilder;\n\n/**\n * The builders that may be used within an action row for messages.\n */\nexport type MessageActionRowComponentBuilder =\n\t| ButtonBuilder\n\t| ChannelSelectMenuBuilder\n\t| MentionableSelectMenuBuilder\n\t| RoleSelectMenuBuilder\n\t| StringSelectMenuBuilder\n\t| UserSelectMenuBuilder;\n\n/**\n * The builders that may be used within an action row for modals.\n */\nexport type ModalActionRowComponentBuilder = TextInputBuilder;\n\n/**\n * Any builder.\n */\nexport type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalActionRowComponentBuilder;\n\n/**\n * A builder that creates API-compatible JSON data for action rows.\n *\n * @typeParam ComponentType - The types of components this action row holds\n */\nexport class ActionRowBuilder extends ComponentBuilder<\n\tAPIActionRowComponent\n> {\n\t/**\n\t * The components within this action row.\n\t */\n\tpublic readonly components: ComponentType[];\n\n\t/**\n\t * Creates a new action row from API data.\n\t *\n\t * @param data - The API data to create this action row with\n\t * @example\n\t * Creating an action row from an API data object:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Type something\",\n\t * \t\t\tstyle: TextInputStyle.Short,\n\t * \t\t\ttype: ComponentType.TextInput,\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating an action row using setters and API data:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Click me\",\n\t * \t\t\tstyle: ButtonStyle.Primary,\n\t * \t\t\ttype: ComponentType.Button,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addComponents(button2, button3);\n\t * ```\n\t */\n\tpublic constructor({ components, ...data }: Partial> = {}) {\n\t\tsuper({ type: ComponentType.ActionRow, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ComponentType[];\n\t}\n\n\t/**\n\t * Adds components to this action row.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addComponents(...components: RestOrArray) {\n\t\tthis.components.push(...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this action row.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setComponents(...components: RestOrArray) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIActionRowComponent> {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIActionRowComponent>;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPIActionRowComponent,\n\tAPIActionRowComponentTypes,\n\tAPIBaseComponent,\n\tComponentType,\n} from 'discord-api-types/v10';\n\n/**\n * Any action row component data represented as an object.\n */\nexport type AnyAPIActionRowComponent = APIActionRowComponent | APIActionRowComponentTypes;\n\n/**\n * The base component builder that contains common symbols for all sorts of components.\n *\n * @typeParam DataType - The type of internal API data that is stored within the component\n */\nexport abstract class ComponentBuilder<\n\tDataType extends Partial> = APIBaseComponent,\n> implements JSONEncodable\n{\n\t/**\n\t * The API data associated with this component.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): AnyAPIActionRowComponent;\n\n\t/**\n\t * Constructs a new kind of component.\n\t *\n\t * @param data - The data to construct a component out of\n\t */\n\tpublic constructor(data: Partial) {\n\t\tthis.data = data;\n\t}\n}\n","import { ComponentType, type APIMessageComponent, type APIModalComponent } from 'discord-api-types/v10';\nimport {\n\tActionRowBuilder,\n\ttype AnyComponentBuilder,\n\ttype MessageComponentBuilder,\n\ttype ModalComponentBuilder,\n} from './ActionRow.js';\nimport { ComponentBuilder } from './Component.js';\nimport { ButtonBuilder } from './button/Button.js';\nimport { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport { TextInputBuilder } from './textInput/TextInput.js';\n\n/**\n * Components here are mapped to their respective builder.\n */\nexport interface MappedComponentTypes {\n\t/**\n\t * The action row component type is associated with an {@link ActionRowBuilder}.\n\t */\n\t[ComponentType.ActionRow]: ActionRowBuilder;\n\t/**\n\t * The button component type is associated with a {@link ButtonBuilder}.\n\t */\n\t[ComponentType.Button]: ButtonBuilder;\n\t/**\n\t * The string select component type is associated with a {@link StringSelectMenuBuilder}.\n\t */\n\t[ComponentType.StringSelect]: StringSelectMenuBuilder;\n\t/**\n\t * The text input component type is associated with a {@link TextInputBuilder}.\n\t */\n\t[ComponentType.TextInput]: TextInputBuilder;\n\t/**\n\t * The user select component type is associated with a {@link UserSelectMenuBuilder}.\n\t */\n\t[ComponentType.UserSelect]: UserSelectMenuBuilder;\n\t/**\n\t * The role select component type is associated with a {@link RoleSelectMenuBuilder}.\n\t */\n\t[ComponentType.RoleSelect]: RoleSelectMenuBuilder;\n\t/**\n\t * The mentionable select component type is associated with a {@link MentionableSelectMenuBuilder}.\n\t */\n\t[ComponentType.MentionableSelect]: MentionableSelectMenuBuilder;\n\t/**\n\t * The channel select component type is associated with a {@link ChannelSelectMenuBuilder}.\n\t */\n\t[ComponentType.ChannelSelect]: ChannelSelectMenuBuilder;\n}\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentType - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\t// eslint-disable-next-line @typescript-eslint/sort-type-constituents\n\tdata: (APIModalComponent | APIMessageComponent) & { type: ComponentType },\n): MappedComponentTypes[ComponentType];\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentBuilder - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\tdata: ComponentBuilder,\n): ComponentBuilder;\n\nexport function createComponentBuilder(\n\tdata: APIMessageComponent | APIModalComponent | MessageComponentBuilder,\n): ComponentBuilder {\n\tif (data instanceof ComponentBuilder) {\n\t\treturn data;\n\t}\n\n\tswitch (data.type) {\n\t\tcase ComponentType.ActionRow:\n\t\t\treturn new ActionRowBuilder(data);\n\t\tcase ComponentType.Button:\n\t\t\treturn new ButtonBuilder(data);\n\t\tcase ComponentType.StringSelect:\n\t\t\treturn new StringSelectMenuBuilder(data);\n\t\tcase ComponentType.TextInput:\n\t\t\treturn new TextInputBuilder(data);\n\t\tcase ComponentType.UserSelect:\n\t\t\treturn new UserSelectMenuBuilder(data);\n\t\tcase ComponentType.RoleSelect:\n\t\t\treturn new RoleSelectMenuBuilder(data);\n\t\tcase ComponentType.MentionableSelect:\n\t\t\treturn new MentionableSelectMenuBuilder(data);\n\t\tcase ComponentType.ChannelSelect:\n\t\t\treturn new ChannelSelectMenuBuilder(data);\n\t\tdefault:\n\t\t\t// @ts-expect-error This case can still occur if we get a newer unsupported component type\n\t\t\tthrow new Error(`Cannot properly serialize component type: ${data.type}`);\n\t}\n}\n","import {\n\tComponentType,\n\ttype APIButtonComponent,\n\ttype APIButtonComponentWithCustomId,\n\ttype APIButtonComponentWithSKUId,\n\ttype APIButtonComponentWithURL,\n\ttype APIMessageComponentEmoji,\n\ttype ButtonStyle,\n\ttype Snowflake,\n} from 'discord-api-types/v10';\nimport {\n\tbuttonLabelValidator,\n\tbuttonStyleValidator,\n\tcustomIdValidator,\n\tdisabledValidator,\n\temojiValidator,\n\turlValidator,\n\tvalidateRequiredButtonParameters,\n} from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\n\n/**\n * A builder that creates API-compatible JSON data for buttons.\n */\nexport class ButtonBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new button from API data.\n\t *\n\t * @param data - The API data to create this button with\n\t * @example\n\t * Creating a button from an API data object:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tcustom_id: 'a cool button',\n\t * \tstyle: ButtonStyle.Primary,\n\t * \tlabel: 'Click Me',\n\t * \temoji: {\n\t * \t\tname: 'smile',\n\t * \t\tid: '123456789012345678',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a button using setters and API data:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tstyle: ButtonStyle.Secondary,\n\t * \tlabel: 'Click Me',\n\t * })\n\t * \t.setEmoji({ name: '🙂' })\n\t * \t.setCustomId('another cool button');\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ type: ComponentType.Button, ...data });\n\t}\n\n\t/**\n\t * Sets the style of this button.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: ButtonStyle) {\n\t\tthis.data.style = buttonStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL for this button.\n\t *\n\t * @remarks\n\t * This method is only available to buttons using the `Link` button style.\n\t * Only three types of URL schemes are currently supported: `https://`, `http://`, and `discord://`.\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\t(this.data as APIButtonComponentWithURL).url = urlValidator.parse(url);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this button.\n\t *\n\t * @remarks\n\t * This method is only applicable to buttons that are not using the `Link` button style.\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\t(this.data as APIButtonComponentWithCustomId).custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the SKU id that represents a purchasable SKU for this button.\n\t *\n\t * @remarks Only available when using premium-style buttons.\n\t * @param skuId - The SKU id to use\n\t */\n\tpublic setSKUId(skuId: Snowflake) {\n\t\t(this.data as APIButtonComponentWithSKUId).sku_id = skuId;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display on this button.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\t(this.data as Exclude).emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this button is disabled.\n\t *\n\t * @param disabled - Whether to disable this button\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this button.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\t(this.data as Exclude).label = buttonLabelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIButtonComponent {\n\t\tvalidateRequiredButtonParameters(\n\t\t\tthis.data.style,\n\t\t\t(this.data as Exclude).label,\n\t\t\t(this.data as Exclude).emoji,\n\t\t\t(this.data as APIButtonComponentWithCustomId).custom_id,\n\t\t\t(this.data as APIButtonComponentWithSKUId).sku_id,\n\t\t\t(this.data as APIButtonComponentWithURL).url,\n\t\t);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIButtonComponent;\n\t}\n}\n","import {\n\ttype APIChannelSelectComponent,\n\ttype ChannelType,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { channelTypesValidator, customIdValidator, optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for channel select menus.\n */\nexport class ChannelSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement)\n\t * \t.setMinValues(2);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.ChannelSelect });\n\t}\n\n\t/**\n\t * Adds channel types to this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic addChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.push(...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets channel types for this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic setChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.splice(0, this.data.channel_types.length, ...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default channels to this auto populated select menu.\n\t *\n\t * @param channels - The channels to add\n\t */\n\tpublic addDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default channels for this auto populated select menu.\n\t *\n\t * @param channels - The channels to set\n\t */\n\tpublic setDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIChannelSelectComponent {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIChannelSelectComponent;\n\t}\n}\n","import type { APISelectMenuComponent } from 'discord-api-types/v10';\nimport { customIdValidator, disabledValidator, minMaxValidator, placeholderValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\n\n/**\n * The base select menu builder that contains common symbols for select menu builders.\n *\n * @typeParam SelectMenuType - The type of select menu this would be instantiated for.\n */\nexport abstract class BaseSelectMenuBuilder<\n\tSelectMenuType extends APISelectMenuComponent,\n> extends ComponentBuilder {\n\t/**\n\t * Sets the placeholder for this select menu.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum values that must be selected in the select menu.\n\t *\n\t * @param minValues - The minimum values that must be selected\n\t */\n\tpublic setMinValues(minValues: number) {\n\t\tthis.data.min_values = minMaxValidator.parse(minValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum values that must be selected in the select menu.\n\t *\n\t * @param maxValues - The maximum values that must be selected\n\t */\n\tpublic setMaxValues(maxValues: number) {\n\t\tthis.data.max_values = minMaxValidator.parse(maxValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this select menu.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this select menu is disabled.\n\t *\n\t * @param disabled - Whether this select menu is disabled\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): SelectMenuType {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as SelectMenuType;\n\t}\n}\n","import {\n\ttype APIMentionableSelectComponent,\n\ttype APISelectMenuDefaultValue,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for mentionable select menus.\n */\nexport class MentionableSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.MentionableSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default values to this auto populated select menu.\n\t *\n\t * @param values - The values to add\n\t */\n\tpublic addDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\t\tthis.data.default_values.push(...normalizedValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default values for this auto populated select menu.\n\t *\n\t * @param values - The values to set\n\t */\n\tpublic setDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\t\tthis.data.default_values = normalizedValues;\n\t\treturn this;\n\t}\n}\n","import {\n\ttype APIRoleSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for role select menus.\n */\nexport class RoleSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.RoleSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default roles for this auto populated select menu.\n\t *\n\t * @param roles - The roles to set\n\t */\n\tpublic setDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { ComponentType } from 'discord-api-types/v10';\nimport type { APIStringSelectComponent, APISelectMenuOption } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { jsonOptionValidator, optionsLengthValidator, validateRequiredSelectMenuParameters } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\nimport { StringSelectMenuOptionBuilder } from './StringSelectMenuOption.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menus.\n */\nexport class StringSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * The options within this select menu.\n\t */\n\tpublic readonly options: StringSelectMenuOptionBuilder[];\n\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * \toptions: [\n\t * \t\t{ label: 'option 1', value: '1' },\n\t * \t\t{ label: 'option 2', value: '2' },\n\t * \t\t{ label: 'option 3', value: '3' },\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1)\n\t * \t.addOptions({\n\t * \t\tlabel: 'Catchy',\n\t * \t\tvalue: 'catch',\n\t * \t});\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tconst { options, ...initData } = data ?? {};\n\t\tsuper({ ...initData, type: ComponentType.StringSelect });\n\t\tthis.options = options?.map((option: APISelectMenuOption) => new StringSelectMenuOptionBuilder(option)) ?? [];\n\t}\n\n\t/**\n\t * Adds options to this select menu.\n\t *\n\t * @param options - The options to add\n\t */\n\tpublic addOptions(...options: RestOrArray) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\t\toptionsLengthValidator.parse(this.options.length + normalizedOptions.length);\n\t\tthis.options.push(\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the options for this select menu.\n\t *\n\t * @param options - The options to set\n\t */\n\tpublic setOptions(...options: RestOrArray) {\n\t\treturn this.spliceOptions(0, this.options.length, ...options);\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts options for this select menu.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice | Array.prototype.splice()}.\n\t * It's useful for modifying and adjusting the order of existing options.\n\t * @example\n\t * Remove the first option:\n\t * ```ts\n\t * selectMenu.spliceOptions(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n option:\n\t * ```ts\n\t * const n = 4;\n\t * selectMenu.spliceOptions(0, n);\n\t * ```\n\t * @example\n\t * Remove the last option:\n\t * ```ts\n\t * selectMenu.spliceOptions(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of options to remove\n\t * @param options - The replacing option objects or builders\n\t */\n\tpublic spliceOptions(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...options: RestOrArray\n\t) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\n\t\tconst clone = [...this.options];\n\n\t\tclone.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\n\t\toptionsLengthValidator.parse(clone.length);\n\t\tthis.options.splice(0, this.options.length, ...clone);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIStringSelectComponent {\n\t\tvalidateRequiredSelectMenuParameters(this.options, this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t} as APIStringSelectComponent;\n\t}\n}\n","import {\n\ttype APIUserSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for user select menus.\n */\nexport class UserSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.UserSelect });\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default users for this auto populated select menu.\n\t *\n\t * @param users - The users to set\n\t */\n\tpublic setDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { isJSONEncodable, type Equatable, type JSONEncodable } from '@discordjs/util';\nimport { ComponentType, type TextInputStyle, type APITextInputComponent } from 'discord-api-types/v10';\nimport isEqual from 'fast-deep-equal';\nimport { customIdValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\nimport {\n\tmaxLengthValidator,\n\tminLengthValidator,\n\tplaceholderValidator,\n\trequiredValidator,\n\tvalueValidator,\n\tvalidateRequiredParameters,\n\tlabelValidator,\n\ttextInputStyleValidator,\n} from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for text inputs.\n */\nexport class TextInputBuilder\n\textends ComponentBuilder\n\timplements Equatable>\n{\n\t/**\n\t * Creates a new text input from API data.\n\t *\n\t * @param data - The API data to create this text input with\n\t * @example\n\t * Creating a text input from an API data object:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tcustom_id: 'a cool text input',\n\t * \tlabel: 'Type something',\n\t * \tstyle: TextInputStyle.Short,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a text input using setters and API data:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tlabel: 'Type something else',\n\t * })\n\t * \t.setCustomId('woah')\n\t * \t.setStyle(TextInputStyle.Paragraph);\n\t * ```\n\t */\n\tpublic constructor(data?: APITextInputComponent & { type?: ComponentType.TextInput }) {\n\t\tsuper({ type: ComponentType.TextInput, ...data });\n\t}\n\n\t/**\n\t * Sets the custom id for this text input.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this text input.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the style for this text input.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: TextInputStyle) {\n\t\tthis.data.style = textInputStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of text for this text input.\n\t *\n\t * @param minLength - The minimum length of text for this text input\n\t */\n\tpublic setMinLength(minLength: number) {\n\t\tthis.data.min_length = minLengthValidator.parse(minLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum length of text for this text input.\n\t *\n\t * @param maxLength - The maximum length of text for this text input\n\t */\n\tpublic setMaxLength(maxLength: number) {\n\t\tthis.data.max_length = maxLengthValidator.parse(maxLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the placeholder for this text input.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this text input.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = valueValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this text input is required.\n\t *\n\t * @param required - Whether this text input is required\n\t */\n\tpublic setRequired(required = true) {\n\t\tthis.data.required = requiredValidator.parse(required);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APITextInputComponent {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.style, this.data.label);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APITextInputComponent;\n\t}\n\n\t/**\n\t * Whether this is equal to another structure.\n\t */\n\tpublic equals(other: APITextInputComponent | JSONEncodable): boolean {\n\t\tif (isJSONEncodable(other)) {\n\t\t\treturn isEqual(other.toJSON(), this.data);\n\t\t}\n\n\t\treturn isEqual(other, this.data);\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { TextInputStyle } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport { customIdValidator } from '../Assertions.js';\n\nexport const textInputStyleValidator = s.nativeEnum(TextInputStyle);\nexport const minLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const maxLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(1)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const requiredValidator = s.boolean();\nexport const valueValidator = s.string().lengthLessThanOrEqual(4_000).setValidationEnabled(isValidationEnabled);\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled);\nexport const labelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(customId?: string, style?: TextInputStyle, label?: string) {\n\tcustomIdValidator.parse(customId);\n\ttextInputStyleValidator.parse(style);\n\tlabelValidator.parse(label);\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const titleValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\nexport const componentsValidator = s\n\t.instance(ActionRowBuilder)\n\t.array()\n\t.lengthGreaterThanOrEqual(1)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(\n\tcustomId?: string,\n\ttitle?: string,\n\tcomponents?: ActionRowBuilder[],\n) {\n\tcustomIdValidator.parse(customId);\n\ttitleValidator.parse(title);\n\tcomponentsValidator.parse(components);\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPIActionRowComponent,\n\tAPIModalActionRowComponent,\n\tAPIModalInteractionResponseCallbackData,\n} from 'discord-api-types/v10';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { createComponentBuilder } from '../../components/Components.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { titleValidator, validateRequiredParameters } from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for modals.\n */\nexport class ModalBuilder implements JSONEncodable {\n\t/**\n\t * The API data associated with this modal.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * The components within this modal.\n\t */\n\tpublic readonly components: ActionRowBuilder[] = [];\n\n\t/**\n\t * Creates a new modal from API data.\n\t *\n\t * @param data - The API data to create this modal with\n\t */\n\tpublic constructor({ components, ...data }: Partial = {}) {\n\t\tthis.data = { ...data };\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ??\n\t\t\t[]) as ActionRowBuilder[];\n\t}\n\n\t/**\n\t * Sets the title of this modal.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string) {\n\t\tthis.data.title = titleValidator.parse(title);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id of this modal.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds components to this modal.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addComponents(\n\t\t...components: RestOrArray<\n\t\t\tActionRowBuilder | APIActionRowComponent\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) =>\n\t\t\t\tcomponent instanceof ActionRowBuilder\n\t\t\t\t\t? component\n\t\t\t\t\t: new ActionRowBuilder(component),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this modal.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setComponents(...components: RestOrArray>) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIModalInteractionResponseCallbackData {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.title, this.components);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIModalInteractionResponseCallbackData;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport {\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocale,\n\ttype APIApplicationCommandOptionChoice,\n\ttype LocalizationMap,\n} from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t.regex(/^[\\p{Ll}\\p{Lm}\\p{Lo}\\p{N}\\p{sc=Devanagari}\\p{sc=Thai}_-]+$/u)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nconst descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\nconst localePredicate = s.nativeEnum(Locale);\n\nexport function validateDescription(description: unknown): asserts description is string {\n\tdescriptionPredicate.parse(description);\n}\n\nconst maxArrayLengthPredicate = s.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\nexport function validateLocale(locale: unknown) {\n\treturn localePredicate.parse(locale);\n}\n\nexport function validateMaxOptionsLength(options: unknown): asserts options is ToAPIApplicationCommandOptions[] {\n\tmaxArrayLengthPredicate.parse(options);\n}\n\nexport function validateRequiredParameters(\n\tname: string,\n\tdescription: string,\n\toptions: ToAPIApplicationCommandOptions[],\n) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert description conditions\n\tvalidateDescription(description);\n\n\t// Assert options conditions\n\tvalidateMaxOptionsLength(options);\n}\n\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateRequired(required: unknown): asserts required is boolean {\n\tbooleanPredicate.parse(required);\n}\n\nconst choicesLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateChoicesLength(amountAdding: number, choices?: APIApplicationCommandOptionChoice[]): void {\n\tchoicesLengthPredicate.parse((choices?.length ?? 0) + amountAdding);\n}\n\nexport function assertReturnOfBuilder<\n\tReturnType extends ApplicationCommandOptionBase | SlashCommandSubcommandBuilder | SlashCommandSubcommandGroupBuilder,\n>(input: unknown, ExpectedInstanceOf: new () => ReturnType): asserts input is ReturnType {\n\ts.instance(ExpectedInstanceOf).parse(input);\n}\n\nexport const localizationMapPredicate = s\n\t.object(Object.fromEntries(Object.values(Locale).map((locale) => [locale, s.string().nullish()])))\n\t.strict()\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateLocalizationMap(value: unknown): asserts value is LocalizationMap {\n\tlocalizationMapPredicate.parse(value);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport function validateNSFW(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tAPIApplicationCommandOption,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocalizationMap,\n\tPermissions,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommand } from './mixins/SharedSlashCommand.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\nimport { SharedSlashCommandSubcommands } from './mixins/SharedSubcommands.js';\n\n/**\n * A builder that creates API-compatible JSON data for slash commands.\n */\n@mix(SharedSlashCommandOptions, SharedNameAndDescription, SharedSlashCommandSubcommands, SharedSlashCommand)\nexport class SlashCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * The options of this command.\n\t */\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link SlashCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Whether this command is NSFW.\n\t */\n\tpublic readonly nsfw: boolean | undefined = undefined;\n}\n\nexport interface SlashCommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command subcommands.\n */\nexport interface SlashCommandSubcommandsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command options.\n */\nexport interface SlashCommandOptionsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface that ensures the `toJSON()` call will return something\n * that can be serialized into API-compatible data.\n */\nexport interface ToAPIApplicationCommandOptions {\n\ttoJSON(): APIApplicationCommandOption;\n}\n","import type { LocaleString, LocalizationMap } from 'discord-api-types/v10';\nimport { validateDescription, validateLocale, validateName } from '../Assertions.js';\n\n/**\n * This mixin holds name and description symbols for slash commands.\n */\nexport class SharedNameAndDescription {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name!: string;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description!: string;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string): this {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this command.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\t// Assert the description matches the conditions\n\t\tvalidateDescription(description);\n\n\t\tReflect.set(this, 'description', description);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames)) {\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a description localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedDescription - The localized description for the given locale\n\t */\n\tpublic setDescriptionLocalization(locale: LocaleString, localizedDescription: string | null) {\n\t\tif (!this.description_localizations) {\n\t\t\tReflect.set(this, 'description_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedDescription === null) {\n\t\t\tthis.description_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateDescription(localizedDescription);\n\n\t\tthis.description_localizations![parsedLocale] = localizedDescription;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description localizations for this command.\n\t *\n\t * @param localizedDescriptions - The object of localized descriptions to set\n\t */\n\tpublic setDescriptionLocalizations(localizedDescriptions: LocalizationMap | null) {\n\t\tif (localizedDescriptions === null) {\n\t\t\tReflect.set(this, 'description_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'description_localizations', {});\n\t\tfor (const args of Object.entries(localizedDescriptions)) {\n\t\t\tthis.setDescriptionLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n}\n","import {\n\tApplicationCommandType,\n\ttype ApplicationIntegrationType,\n\ttype InteractionContextType,\n\ttype LocalizationMap,\n\ttype Permissions,\n\ttype RESTPostAPIChatInputApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../../util/normalizeArray.js';\nimport { normalizeArray } from '../../../util/normalizeArray.js';\nimport {\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n\tvalidateDMPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDefaultPermission,\n\tvalidateLocalizationMap,\n\tvalidateNSFW,\n\tvalidateRequiredParameters,\n} from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\n\n/**\n * This mixin holds symbols that can be shared in slashcommands independent of options or subcommands.\n */\nexport class SharedSlashCommand {\n\tpublic readonly name: string = undefined!;\n\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\tpublic readonly description: string = undefined!;\n\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\tpublic readonly nsfw: boolean | undefined = undefined;\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether or not to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run the command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated\n\t * Use {@link SharedSlashCommand.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this command is NSFW.\n\t *\n\t * @param nsfw - Whether this command is NSFW\n\t */\n\tpublic setNSFW(nsfw = true) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateNSFW(nsfw);\n\t\tReflect.set(this, 'nsfw', nsfw);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIChatInputApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\treturn {\n\t\t\t...this,\n\t\t\ttype: ApplicationCommandType.ChatInput,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandAttachmentOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command attachment option.\n */\nexport class SlashCommandAttachmentOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Attachment as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandAttachmentOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIApplicationCommandBasicOption, ApplicationCommandOptionType } from 'discord-api-types/v10';\nimport { validateRequiredParameters, validateRequired, validateLocalizationMap } from '../Assertions.js';\nimport { SharedNameAndDescription } from './NameAndDescription.js';\n\n/**\n * The base application command option builder that contains common symbols for application command builders.\n */\nexport abstract class ApplicationCommandOptionBase extends SharedNameAndDescription {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic abstract readonly type: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option is required.\n\t *\n\t * @defaultValue `false`\n\t */\n\tpublic readonly required: boolean = false;\n\n\t/**\n\t * Sets whether this option is required.\n\t *\n\t * @param required - Whether this option should be required\n\t */\n\tpublic setRequired(required: boolean) {\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(required);\n\n\t\tReflect.set(this, 'required', required);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): APIApplicationCommandBasicOption;\n\n\t/**\n\t * This method runs required validators on this builder.\n\t */\n\tprotected runRequiredValidations() {\n\t\tvalidateRequiredParameters(this.name, this.description, []);\n\n\t\t// Validate localizations\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(this.required);\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandBooleanOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command boolean option.\n */\nexport class SlashCommandBooleanOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Boolean as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandBooleanOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandChannelOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionChannelTypesMixin } from '../mixins/ApplicationCommandOptionChannelTypesMixin.js';\n\n/**\n * A slash command channel option.\n */\n@mix(ApplicationCommandOptionChannelTypesMixin)\nexport class SlashCommandChannelOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Channel as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandChannelOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n\nexport interface SlashCommandChannelOption extends ApplicationCommandOptionChannelTypesMixin {}\n","import { s } from '@sapphire/shapeshift';\nimport { ChannelType } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray';\n\n/**\n * The allowed channel types used for a channel option in a slash command builder.\n *\n * @privateRemarks This can't be dynamic because const enums are erased at runtime.\n * @internal\n */\nconst allowedChannelTypes = [\n\tChannelType.GuildText,\n\tChannelType.GuildVoice,\n\tChannelType.GuildCategory,\n\tChannelType.GuildAnnouncement,\n\tChannelType.AnnouncementThread,\n\tChannelType.PublicThread,\n\tChannelType.PrivateThread,\n\tChannelType.GuildStageVoice,\n\tChannelType.GuildForum,\n\tChannelType.GuildMedia,\n] as const;\n\n/**\n * The type of allowed channel types used for a channel option.\n */\nexport type ApplicationCommandOptionAllowedChannelTypes = (typeof allowedChannelTypes)[number];\n\nconst channelTypesPredicate = s.array(s.union(allowedChannelTypes.map((type) => s.literal(type))));\n\n/**\n * This mixin holds channel type symbols used for options.\n */\nexport class ApplicationCommandOptionChannelTypesMixin {\n\t/**\n\t * The channel types of this option.\n\t */\n\tpublic readonly channel_types?: ApplicationCommandOptionAllowedChannelTypes[];\n\n\t/**\n\t * Adds channel types to this option.\n\t *\n\t * @param channelTypes - The channel types\n\t */\n\tpublic addChannelTypes(...channelTypes: RestOrArray) {\n\t\tif (this.channel_types === undefined) {\n\t\t\tReflect.set(this, 'channel_types', []);\n\t\t}\n\n\t\tthis.channel_types!.push(...channelTypesPredicate.parse(normalizeArray(channelTypes)));\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandIntegerOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number().int();\n\n/**\n * A slash command integer option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandIntegerOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Integer as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandIntegerOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandIntegerOption;\n\t}\n}\n\nexport interface SlashCommandIntegerOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","/**\n * This mixin holds minimum and maximum symbols used for options.\n */\nexport abstract class ApplicationCommandNumericOptionMinMaxValueMixin {\n\t/**\n\t * The maximum value of this option.\n\t */\n\tpublic readonly max_value?: number;\n\n\t/**\n\t * The minimum value of this option.\n\t */\n\tpublic readonly min_value?: number;\n\n\t/**\n\t * Sets the maximum number value of this option.\n\t *\n\t * @param max - The maximum value this option can be\n\t */\n\tpublic abstract setMaxValue(max: number): this;\n\n\t/**\n\t * Sets the minimum number value of this option.\n\t *\n\t * @param min - The minimum value this option can be\n\t */\n\tpublic abstract setMinValue(min: number): this;\n}\n","import { s } from '@sapphire/shapeshift';\nimport type { ApplicationCommandOptionType } from 'discord-api-types/v10';\n\nconst booleanPredicate = s.boolean();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithAutocompleteMixin {\n\t/**\n\t * Whether this option utilizes autocomplete.\n\t */\n\tpublic readonly autocomplete?: boolean;\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option uses autocomplete.\n\t *\n\t * @param autocomplete - Whether this option should use autocomplete\n\t */\n\tpublic setAutocomplete(autocomplete: boolean): this {\n\t\t// Assert that you actually passed a boolean\n\t\tbooleanPredicate.parse(autocomplete);\n\n\t\tif (autocomplete && 'choices' in this && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tReflect.set(this, 'autocomplete', autocomplete);\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandOptionChoice } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray.js';\nimport { localizationMapPredicate, validateChoicesLength } from '../Assertions.js';\n\nconst stringPredicate = s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100);\nconst numberPredicate = s.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY);\nconst choicesPredicate = s\n\t.object({\n\t\tname: stringPredicate,\n\t\tname_localizations: localizationMapPredicate,\n\t\tvalue: s.union([stringPredicate, numberPredicate]),\n\t})\n\t.array();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithChoicesMixin {\n\t/**\n\t * The choices of this option.\n\t */\n\tpublic readonly choices?: APIApplicationCommandOptionChoice[];\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Adds multiple choices to this option.\n\t *\n\t * @param choices - The choices to add\n\t */\n\tpublic addChoices(...choices: RestOrArray>): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tif (this.choices === undefined) {\n\t\t\tReflect.set(this, 'choices', []);\n\t\t}\n\n\t\tvalidateChoicesLength(normalizedChoices.length, this.choices);\n\n\t\tfor (const { name, name_localizations, value } of normalizedChoices) {\n\t\t\t// Validate the value\n\t\t\tif (this.type === ApplicationCommandOptionType.String) {\n\t\t\t\tstringPredicate.parse(value);\n\t\t\t} else {\n\t\t\t\tnumberPredicate.parse(value);\n\t\t\t}\n\n\t\t\tthis.choices!.push({ name, name_localizations, value });\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets multiple choices for this option.\n\t *\n\t * @param choices - The choices to set\n\t */\n\tpublic setChoices>(...choices: RestOrArray): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tReflect.set(this, 'choices', []);\n\t\tthis.addChoices(normalizedChoices);\n\n\t\treturn this;\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandMentionableOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command mentionable option.\n */\nexport class SlashCommandMentionableOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Mentionable as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandMentionableOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandNumberOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number();\n\n/**\n * A slash command number option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandNumberOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Number as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandNumberOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandNumberOption;\n\t}\n}\n\nexport interface SlashCommandNumberOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandRoleOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command role option.\n */\nexport class SlashCommandRoleOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Role as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandRoleOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandStringOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst minLengthValidator = s.number().greaterThanOrEqual(0).lessThanOrEqual(6_000);\nconst maxLengthValidator = s.number().greaterThanOrEqual(1).lessThanOrEqual(6_000);\n\n/**\n * A slash command string option.\n */\n@mix(ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin)\nexport class SlashCommandStringOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.String as const;\n\n\t/**\n\t * The maximum length of this option.\n\t */\n\tpublic readonly max_length?: number;\n\n\t/**\n\t * The minimum length of this option.\n\t */\n\tpublic readonly min_length?: number;\n\n\t/**\n\t * Sets the maximum length of this string option.\n\t *\n\t * @param max - The maximum length this option can be\n\t */\n\tpublic setMaxLength(max: number): this {\n\t\tmaxLengthValidator.parse(max);\n\n\t\tReflect.set(this, 'max_length', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of this string option.\n\t *\n\t * @param min - The minimum length this option can be\n\t */\n\tpublic setMinLength(min: number): this {\n\t\tminLengthValidator.parse(min);\n\n\t\tReflect.set(this, 'min_length', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandStringOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandStringOption;\n\t}\n}\n\nexport interface SlashCommandStringOption\n\textends ApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandUserOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command user option.\n */\nexport class SlashCommandUserOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.User as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandUserOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder';\nimport { SlashCommandAttachmentOption } from '../options/attachment.js';\nimport { SlashCommandBooleanOption } from '../options/boolean.js';\nimport { SlashCommandChannelOption } from '../options/channel.js';\nimport { SlashCommandIntegerOption } from '../options/integer.js';\nimport { SlashCommandMentionableOption } from '../options/mentionable.js';\nimport { SlashCommandNumberOption } from '../options/number.js';\nimport { SlashCommandRoleOption } from '../options/role.js';\nimport { SlashCommandStringOption } from '../options/string.js';\nimport { SlashCommandUserOption } from '../options/user.js';\nimport type { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js';\n\n/**\n * This mixin holds symbols that can be shared in slash command options.\n *\n * @typeParam TypeAfterAddingOptions - The type this class should return after adding an option.\n */\nexport class SharedSlashCommandOptions<\n\tTypeAfterAddingOptions extends SharedSlashCommandOptions,\n> {\n\tpublic readonly options!: ToAPIApplicationCommandOptions[];\n\n\t/**\n\t * Adds a boolean option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addBooleanOption(\n\t\tinput: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandBooleanOption);\n\t}\n\n\t/**\n\t * Adds a user option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandUserOption);\n\t}\n\n\t/**\n\t * Adds a channel option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addChannelOption(\n\t\tinput: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandChannelOption);\n\t}\n\n\t/**\n\t * Adds a role option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandRoleOption);\n\t}\n\n\t/**\n\t * Adds an attachment option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addAttachmentOption(\n\t\tinput: SlashCommandAttachmentOption | ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandAttachmentOption);\n\t}\n\n\t/**\n\t * Adds a mentionable option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addMentionableOption(\n\t\tinput: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandMentionableOption);\n\t}\n\n\t/**\n\t * Adds a string option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addStringOption(\n\t\tinput: SlashCommandStringOption | ((builder: SlashCommandStringOption) => SlashCommandStringOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandStringOption);\n\t}\n\n\t/**\n\t * Adds an integer option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addIntegerOption(\n\t\tinput: SlashCommandIntegerOption | ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandIntegerOption);\n\t}\n\n\t/**\n\t * Adds a number option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addNumberOption(\n\t\tinput: SlashCommandNumberOption | ((builder: SlashCommandNumberOption) => SlashCommandNumberOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandNumberOption);\n\t}\n\n\t/**\n\t * Where the actual adding magic happens. ✨\n\t *\n\t * @param input - The input. What else?\n\t * @param Instance - The instance of whatever is being added\n\t * @internal\n\t */\n\tprivate _sharedAddOptionMethod(\n\t\tinput: OptionBuilder | ((builder: OptionBuilder) => OptionBuilder),\n\t\tInstance: new () => OptionBuilder,\n\t): TypeAfterAddingOptions {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new Instance()) : input;\n\n\t\tassertReturnOfBuilder(result, Instance);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingOptions;\n\t}\n}\n","import {\n\tApplicationCommandOptionType,\n\ttype APIApplicationCommandSubcommandGroupOption,\n\ttype APIApplicationCommandSubcommandOption,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { assertReturnOfBuilder, validateMaxOptionsLength, validateRequiredParameters } from './Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\n\n/**\n * Represents a folder for subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription)\nexport class SlashCommandSubcommandGroupBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand group.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand group.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The subcommands within this subcommand group.\n\t */\n\tpublic readonly options: SlashCommandSubcommandBuilder[] = [];\n\n\t/**\n\t * Adds a new subcommand to this group.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t) {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandGroupOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.SubcommandGroup,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandGroupBuilder extends SharedNameAndDescription {}\n\n/**\n * A builder that creates API-compatible JSON data for slash command subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription, SharedSlashCommandOptions)\nexport class SlashCommandSubcommandBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The options within this subcommand.\n\t */\n\tpublic readonly options: ApplicationCommandOptionBase[] = [];\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.Subcommand,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions {}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\nimport { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from '../SlashCommandSubcommands.js';\n\n/**\n * This mixin holds symbols that can be shared in slash subcommands.\n *\n * @typeParam TypeAfterAddingSubcommands - The type this class should return after adding a subcommand or subcommand group.\n */\nexport class SharedSlashCommandSubcommands<\n\tTypeAfterAddingSubcommands extends SharedSlashCommandSubcommands,\n> {\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * Adds a new subcommand group to this command.\n\t *\n\t * @param input - A function that returns a subcommand group builder or an already built builder\n\t */\n\tpublic addSubcommandGroup(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandGroupBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandGroupBuilder) => SlashCommandSubcommandGroupBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandGroupBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandGroupBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n\n\t/**\n\t * Adds a new subcommand to this command.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandType, ApplicationIntegrationType, InteractionContextType } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ContextMenuCommandType } from './ContextMenuCommandBuilder.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t// eslint-disable-next-line prefer-named-capture-group\n\t.regex(/^( *[\\p{P}\\p{L}\\p{N}\\p{sc=Devanagari}\\p{sc=Thai}]+ *)+$/u)\n\t.setValidationEnabled(isValidationEnabled);\nconst typePredicate = s\n\t.union([s.literal(ApplicationCommandType.User), s.literal(ApplicationCommandType.Message)])\n\t.setValidationEnabled(isValidationEnabled);\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nexport function validateType(type: unknown): asserts type is ContextMenuCommandType {\n\ttypePredicate.parse(type);\n}\n\nexport function validateRequiredParameters(name: string, type: number) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert type is valid\n\tvalidateType(type);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tApplicationCommandType,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocaleString,\n\tLocalizationMap,\n\tPermissions,\n\tRESTPostAPIContextMenuApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../util/normalizeArray.js';\nimport { normalizeArray } from '../../util/normalizeArray.js';\nimport { validateLocale, validateLocalizationMap } from '../slashCommands/Assertions.js';\nimport {\n\tvalidateRequiredParameters,\n\tvalidateName,\n\tvalidateType,\n\tvalidateDefaultPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDMPermission,\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n} from './Assertions.js';\n\n/**\n * The type a context menu command can be.\n */\nexport type ContextMenuCommandType = ApplicationCommandType.Message | ApplicationCommandType.User;\n\n/**\n * A builder that creates API-compatible JSON data for context menu commands.\n */\nexport class ContextMenuCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The type of this command.\n\t */\n\tpublic readonly type: ContextMenuCommandType = undefined!;\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link ContextMenuCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string) {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the type of this command.\n\t *\n\t * @param type - The type to use\n\t */\n\tpublic setType(type: ContextMenuCommandType) {\n\t\t// Assert the type is valid\n\t\tvalidateType(type);\n\n\t\tReflect.set(this, 'type', type);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run this command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames))\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIContextMenuApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.type);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIEmbed } from 'discord-api-types/v10';\n\n/**\n * Calculates the length of the embed.\n *\n * @param data - The embed data to check\n */\nexport function embedLength(data: APIEmbed) {\n\treturn (\n\t\t(data.title?.length ?? 0) +\n\t\t(data.description?.length ?? 0) +\n\t\t(data.fields?.reduce((prev, curr) => prev + curr.name.length + curr.value.length, 0) ?? 0) +\n\t\t(data.footer?.text.length ?? 0) +\n\t\t(data.author?.name.length ?? 0)\n\t);\n}\n"],"mappings":"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","names":["Assertions_exports","Assertions_exports","import_shapeshift","import_v10","import_v10","import_v10","import_v10","import_v10","import_v10","import_v10","import_v10","import_v10","Assertions_exports","placeholderValidator","import_shapeshift","import_v10","placeholderValidator","placeholderValidator","isEqual","Assertions_exports","validateRequiredParameters","import_shapeshift","validateRequiredParameters","validateRequiredParameters","Assertions_exports","validateRequiredParameters","import_shapeshift","import_v10","descriptionPredicate","validateRequiredParameters","import_ts_mixer","import_v10","validateRequiredParameters","import_v10","validateRequiredParameters","import_v10","import_v10","import_shapeshift","import_v10","import_shapeshift","import_v10","import_ts_mixer","import_shapeshift","booleanPredicate","import_shapeshift","import_v10","import_v10","import_shapeshift","import_v10","import_ts_mixer","numberValidator","import_v10","import_shapeshift","import_v10","import_ts_mixer","minLengthValidator","maxLengthValidator","import_v10","import_v10","import_ts_mixer","validateRequiredParameters","Assertions_exports","contextsPredicate","integrationTypesPredicate","validateDMPermission","validateDefaultMemberPermissions","validateDefaultPermission","validateName","validateRequiredParameters","import_shapeshift","import_v10","namePredicate","booleanPredicate","validateDefaultPermission","validateName","validateRequiredParameters","dmPermissionPredicate","validateDMPermission","memberPermissionPredicate","validateDefaultMemberPermissions","contextsPredicate","integrationTypesPredicate","contextsPredicate","integrationTypesPredicate","validateName","validateDefaultPermission","validateDefaultMemberPermissions","validateDMPermission","validateRequiredParameters"]} \ No newline at end of file +{"version":3,"sources":["../src/index.ts","../src/messages/embed/Assertions.ts","../src/util/validation.ts","../src/util/normalizeArray.ts","../src/messages/embed/Embed.ts","../src/components/Assertions.ts","../src/components/selectMenu/StringSelectMenuOption.ts","../src/components/ActionRow.ts","../src/components/Component.ts","../src/components/Components.ts","../src/components/button/Button.ts","../src/components/selectMenu/ChannelSelectMenu.ts","../src/components/selectMenu/BaseSelectMenu.ts","../src/components/selectMenu/MentionableSelectMenu.ts","../src/components/selectMenu/RoleSelectMenu.ts","../src/components/selectMenu/StringSelectMenu.ts","../src/components/selectMenu/UserSelectMenu.ts","../src/components/textInput/TextInput.ts","../src/components/textInput/Assertions.ts","../src/components/v2/Container.ts","../src/components/v2/Assertions.ts","../src/components/v2/Thumbnail.ts","../src/components/v2/File.ts","../src/components/v2/Separator.ts","../src/components/v2/TextDisplay.ts","../src/components/v2/MediaGallery.ts","../src/components/v2/MediaGalleryItem.ts","../src/components/v2/Section.ts","../src/interactions/modals/Assertions.ts","../src/interactions/modals/Modal.ts","../src/interactions/slashCommands/Assertions.ts","../src/interactions/slashCommands/SlashCommandBuilder.ts","../src/interactions/slashCommands/mixins/NameAndDescription.ts","../src/interactions/slashCommands/mixins/SharedSlashCommand.ts","../src/interactions/slashCommands/options/attachment.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts","../src/interactions/slashCommands/options/boolean.ts","../src/interactions/slashCommands/options/channel.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.ts","../src/interactions/slashCommands/options/integer.ts","../src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.ts","../src/interactions/slashCommands/options/mentionable.ts","../src/interactions/slashCommands/options/number.ts","../src/interactions/slashCommands/options/role.ts","../src/interactions/slashCommands/options/string.ts","../src/interactions/slashCommands/options/user.ts","../src/interactions/slashCommands/mixins/SharedSlashCommandOptions.ts","../src/interactions/slashCommands/SlashCommandSubcommands.ts","../src/interactions/slashCommands/mixins/SharedSubcommands.ts","../src/interactions/contextMenuCommands/Assertions.ts","../src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts","../src/util/componentUtil.ts"],"sourcesContent":["export * as EmbedAssertions from './messages/embed/Assertions.js';\nexport * from './messages/embed/Embed.js';\n// TODO: Consider removing this dep in the next major version\nexport * from '@discordjs/formatters';\n\nexport * as ComponentAssertions from './components/Assertions.js';\nexport * from './components/ActionRow.js';\nexport * from './components/button/Button.js';\nexport * from './components/Component.js';\nexport * from './components/Components.js';\nexport * from './components/textInput/TextInput.js';\nexport * as TextInputAssertions from './components/textInput/Assertions.js';\nexport * from './interactions/modals/Modal.js';\nexport * as ModalAssertions from './interactions/modals/Assertions.js';\n\nexport * from './components/selectMenu/BaseSelectMenu.js';\nexport * from './components/selectMenu/ChannelSelectMenu.js';\nexport * from './components/selectMenu/MentionableSelectMenu.js';\nexport * from './components/selectMenu/RoleSelectMenu.js';\nexport * from './components/selectMenu/StringSelectMenu.js';\n// TODO: Remove those aliases in v2\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuBuilder} instead.\n\t */\n\tStringSelectMenuBuilder as SelectMenuBuilder,\n} from './components/selectMenu/StringSelectMenu.js';\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuOptionBuilder} instead.\n\t */\n\tStringSelectMenuOptionBuilder as SelectMenuOptionBuilder,\n} from './components/selectMenu/StringSelectMenuOption.js';\nexport * from './components/selectMenu/StringSelectMenuOption.js';\nexport * from './components/selectMenu/UserSelectMenu.js';\n\nexport * as ComponentsV2Assertions from './components/v2/Assertions.js';\nexport * from './components/v2/Container.js';\nexport * from './components/v2/File.js';\nexport * from './components/v2/MediaGallery.js';\nexport * from './components/v2/MediaGalleryItem.js';\nexport * from './components/v2/Section.js';\nexport * from './components/v2/Separator.js';\nexport * from './components/v2/TextDisplay.js';\nexport * from './components/v2/Thumbnail.js';\n\nexport * as SlashCommandAssertions from './interactions/slashCommands/Assertions.js';\nexport * from './interactions/slashCommands/SlashCommandBuilder.js';\nexport * from './interactions/slashCommands/SlashCommandSubcommands.js';\nexport * from './interactions/slashCommands/options/boolean.js';\nexport * from './interactions/slashCommands/options/channel.js';\nexport * from './interactions/slashCommands/options/integer.js';\nexport * from './interactions/slashCommands/options/mentionable.js';\nexport * from './interactions/slashCommands/options/number.js';\nexport * from './interactions/slashCommands/options/role.js';\nexport * from './interactions/slashCommands/options/attachment.js';\nexport * from './interactions/slashCommands/options/string.js';\nexport * from './interactions/slashCommands/options/user.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionBase.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.js';\nexport * from './interactions/slashCommands/mixins/NameAndDescription.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommandOptions.js';\nexport * from './interactions/slashCommands/mixins/SharedSubcommands.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommand.js';\n\nexport * as ContextMenuCommandAssertions from './interactions/contextMenuCommands/Assertions.js';\nexport * from './interactions/contextMenuCommands/ContextMenuCommandBuilder.js';\n\nexport * from './util/componentUtil.js';\nexport * from './util/normalizeArray.js';\nexport * from './util/validation.js';\n\n/**\n * The {@link https://github.com/discordjs/discord.js/blob/main/packages/builders#readme | @discordjs/builders} version\n * that you are currently using.\n *\n * @privateRemarks This needs to explicitly be `string` so it is not typed as a \"const string\" that gets injected by esbuild.\n */\nexport const version = '1.11.2' as string;\n","import { s } from '@sapphire/shapeshift';\nimport type { APIEmbedField } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const fieldNamePredicate = s.string().lengthLessThanOrEqual(256).setValidationEnabled(isValidationEnabled);\n\nexport const fieldValuePredicate = s.string().lengthLessThanOrEqual(1_024).setValidationEnabled(isValidationEnabled);\n\nexport const fieldInlinePredicate = s.boolean().optional();\n\nexport const embedFieldPredicate = s\n\t.object({\n\t\tname: fieldNamePredicate,\n\t\tvalue: fieldValuePredicate,\n\t\tinline: fieldInlinePredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFieldsArrayPredicate = embedFieldPredicate.array().setValidationEnabled(isValidationEnabled);\n\nexport const fieldLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateFieldLength(amountAdding: number, fields?: APIEmbedField[]): void {\n\tfieldLengthPredicate.parse((fields?.length ?? 0) + amountAdding);\n}\n\nexport const authorNamePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const imageURLPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'attachment:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const urlPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedAuthorPredicate = s\n\t.object({\n\t\tname: authorNamePredicate,\n\t\ticonURL: imageURLPredicate,\n\t\turl: urlPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const RGBPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(255)\n\t.setValidationEnabled(isValidationEnabled);\nexport const colorPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(0xffffff)\n\t.or(s.tuple([RGBPredicate, RGBPredicate, RGBPredicate]))\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(4_096)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const footerTextPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(2_048)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFooterPredicate = s\n\t.object({\n\t\ttext: footerTextPredicate,\n\t\ticonURL: imageURLPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const timestampPredicate = s.union([s.number(), s.date()]).nullable().setValidationEnabled(isValidationEnabled);\n\nexport const titlePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n","let validate = true;\n\n/**\n * Enables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function enableValidators() {\n\treturn (validate = true);\n}\n\n/**\n * Disables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function disableValidators() {\n\treturn (validate = false);\n}\n\n/**\n * Checks whether validation is occurring.\n */\nexport function isValidationEnabled() {\n\treturn validate;\n}\n","/**\n * Normalizes data that is a rest parameter or an array into an array with a depth of 1.\n *\n * @typeParam ItemType - The data that must satisfy {@link RestOrArray}.\n * @param arr - The (possibly variadic) data to normalize\n */\nexport function normalizeArray(arr: RestOrArray): ItemType[] {\n\tif (Array.isArray(arr[0])) return [...arr[0]];\n\treturn arr as ItemType[];\n}\n\n/**\n * Represents data that may be an array or came from a rest parameter.\n *\n * @remarks\n * This type is used throughout builders to ensure both an array and variadic arguments\n * may be used. It is normalized with {@link normalizeArray}.\n */\nexport type RestOrArray = Type[] | [Type[]];\n","import type { APIEmbed, APIEmbedAuthor, APIEmbedField, APIEmbedFooter, APIEmbedImage } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport {\n\tcolorPredicate,\n\tdescriptionPredicate,\n\tembedAuthorPredicate,\n\tembedFieldsArrayPredicate,\n\tembedFooterPredicate,\n\timageURLPredicate,\n\ttimestampPredicate,\n\ttitlePredicate,\n\turlPredicate,\n\tvalidateFieldLength,\n} from './Assertions.js';\n\n/**\n * A tuple satisfying the RGB color model.\n *\n * @see {@link https://developer.mozilla.org/docs/Glossary/RGB}\n */\nexport type RGBTuple = [red: number, green: number, blue: number];\n\n/**\n * The base icon data typically used in payloads.\n */\nexport interface IconData {\n\t/**\n\t * The URL of the icon.\n\t */\n\ticonURL?: string;\n\t/**\n\t * The proxy URL of the icon.\n\t */\n\tproxyIconURL?: string;\n}\n\n/**\n * Represents the author data of an embed.\n */\nexport interface EmbedAuthorData extends IconData, Omit {}\n\n/**\n * Represents the author options of an embed.\n */\nexport interface EmbedAuthorOptions extends Omit {}\n\n/**\n * Represents the footer data of an embed.\n */\nexport interface EmbedFooterData extends IconData, Omit {}\n\n/**\n * Represents the footer options of an embed.\n */\nexport interface EmbedFooterOptions extends Omit {}\n\n/**\n * Represents the image data of an embed.\n */\nexport interface EmbedImageData extends Omit {\n\t/**\n\t * The proxy URL for the image.\n\t */\n\tproxyURL?: string;\n}\n\n/**\n * A builder that creates API-compatible JSON data for embeds.\n */\nexport class EmbedBuilder {\n\t/**\n\t * The API data associated with this embed.\n\t */\n\tpublic readonly data: APIEmbed;\n\n\t/**\n\t * Creates a new embed from API data.\n\t *\n\t * @param data - The API data to create this embed with\n\t */\n\tpublic constructor(data: APIEmbed = {}) {\n\t\tthis.data = { ...data };\n\t\tif (data.timestamp) this.data.timestamp = new Date(data.timestamp).toISOString();\n\t}\n\n\t/**\n\t * Appends fields to the embed.\n\t *\n\t * @remarks\n\t * This method accepts either an array of fields or a variable number of field parameters.\n\t * The maximum amount of fields that can be added is 25.\n\t * @example\n\t * Using an array:\n\t * ```ts\n\t * const fields: APIEmbedField[] = ...;\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(fields);\n\t * ```\n\t * @example\n\t * Using rest parameters (variadic):\n\t * ```ts\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(\n\t * \t\t{ name: 'Field 1', value: 'Value 1' },\n\t * \t\t{ name: 'Field 2', value: 'Value 2' },\n\t * \t);\n\t * ```\n\t * @param fields - The fields to add\n\t */\n\tpublic addFields(...fields: RestOrArray): this {\n\t\tconst normalizedFields = normalizeArray(fields);\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(normalizedFields.length, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(normalizedFields);\n\n\t\tif (this.data.fields) this.data.fields.push(...normalizedFields);\n\t\telse this.data.fields = normalizedFields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts fields for this embed.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}.\n\t * The maximum amount of fields that can be added is 25.\n\t *\n\t * It's useful for modifying and adjusting order of the already-existing fields of an embed.\n\t * @example\n\t * Remove the first field:\n\t * ```ts\n\t * embed.spliceFields(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n fields:\n\t * ```ts\n\t * const n = 4;\n\t * embed.spliceFields(0, n);\n\t * ```\n\t * @example\n\t * Remove the last field:\n\t * ```ts\n\t * embed.spliceFields(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of fields to remove\n\t * @param fields - The replacing field objects\n\t */\n\tpublic spliceFields(index: number, deleteCount: number, ...fields: APIEmbedField[]): this {\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(fields.length - deleteCount, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(fields);\n\t\tif (this.data.fields) this.data.fields.splice(index, deleteCount, ...fields);\n\t\telse this.data.fields = fields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the fields for this embed.\n\t *\n\t * @remarks\n\t * This method is an alias for {@link EmbedBuilder.spliceFields}. More specifically,\n\t * it splices the entire array of fields, replacing them with the provided fields.\n\t *\n\t * You can set a maximum of 25 fields.\n\t * @param fields - The fields to set\n\t */\n\tpublic setFields(...fields: RestOrArray): this {\n\t\tthis.spliceFields(0, this.data.fields?.length ?? 0, ...normalizeArray(fields));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the author of this embed.\n\t *\n\t * @param options - The options to use\n\t */\n\n\tpublic setAuthor(options: EmbedAuthorOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.author = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedAuthorPredicate.parse(options);\n\n\t\tthis.data.author = { name: options.name, url: options.url, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the color of this embed.\n\t *\n\t * @param color - The color to use\n\t */\n\tpublic setColor(color: RGBTuple | number | null): this {\n\t\t// Data assertions\n\t\tcolorPredicate.parse(color);\n\n\t\tif (Array.isArray(color)) {\n\t\t\tconst [red, green, blue] = color;\n\t\t\tthis.data.color = (red << 16) + (green << 8) + blue;\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.data.color = color ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this embed.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string | null): this {\n\t\t// Data assertions\n\t\tdescriptionPredicate.parse(description);\n\n\t\tthis.data.description = description ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the footer of this embed.\n\t *\n\t * @param options - The footer to use\n\t */\n\tpublic setFooter(options: EmbedFooterOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.footer = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedFooterPredicate.parse(options);\n\n\t\tthis.data.footer = { text: options.text, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the image of this embed.\n\t *\n\t * @param url - The image URL to use\n\t */\n\tpublic setImage(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.image = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the thumbnail of this embed.\n\t *\n\t * @param url - The thumbnail URL to use\n\t */\n\tpublic setThumbnail(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.thumbnail = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the timestamp of this embed.\n\t *\n\t * @param timestamp - The timestamp or date to use\n\t */\n\tpublic setTimestamp(timestamp: Date | number | null = Date.now()): this {\n\t\t// Data assertions\n\t\ttimestampPredicate.parse(timestamp);\n\n\t\tthis.data.timestamp = timestamp ? new Date(timestamp).toISOString() : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the title for this embed.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string | null): this {\n\t\t// Data assertions\n\t\ttitlePredicate.parse(title);\n\n\t\tthis.data.title = title ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL of this embed.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string | null): this {\n\t\t// Data assertions\n\t\turlPredicate.parse(url);\n\n\t\tthis.data.url = url ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIEmbed {\n\t\treturn { ...this.data };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ButtonStyle, ChannelType, type APIMessageComponentEmoji } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../util/validation.js';\nimport { StringSelectMenuOptionBuilder } from './selectMenu/StringSelectMenuOption.js';\n\nexport const idValidator = s\n\t.number()\n\t.safeInt()\n\t.greaterThanOrEqual(1)\n\t.lessThan(4_294_967_296) // 2^32 - 1\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const customIdValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const emojiValidator = s\n\t.object({\n\t\tid: s.string(),\n\t\tname: s.string(),\n\t\tanimated: s.boolean(),\n\t})\n\t.partial()\n\t.strict()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const disabledValidator = s.boolean();\n\nexport const buttonLabelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(80)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const buttonStyleValidator = s.nativeEnum(ButtonStyle);\n\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(150).setValidationEnabled(isValidationEnabled);\nexport const minMaxValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const labelValueDescriptionValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const jsonOptionValidator = s\n\t.object({\n\t\tlabel: labelValueDescriptionValidator,\n\t\tvalue: labelValueDescriptionValidator,\n\t\tdescription: labelValueDescriptionValidator.optional(),\n\t\temoji: emojiValidator.optional(),\n\t\tdefault: s.boolean().optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const optionValidator = s.instance(StringSelectMenuOptionBuilder).setValidationEnabled(isValidationEnabled);\n\nexport const optionsValidator = optionValidator\n\t.array()\n\t.lengthGreaterThanOrEqual(0)\n\t.setValidationEnabled(isValidationEnabled);\nexport const optionsLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredSelectMenuParameters(options: StringSelectMenuOptionBuilder[], customId?: string) {\n\tcustomIdValidator.parse(customId);\n\toptionsValidator.parse(options);\n}\n\nexport const defaultValidator = s.boolean();\n\nexport function validateRequiredSelectMenuOptionParameters(label?: string, value?: string) {\n\tlabelValueDescriptionValidator.parse(label);\n\tlabelValueDescriptionValidator.parse(value);\n}\n\nexport const channelTypesValidator = s.nativeEnum(ChannelType).array().setValidationEnabled(isValidationEnabled);\n\nexport const urlValidator = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'discord:'],\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredButtonParameters(\n\tstyle?: ButtonStyle,\n\tlabel?: string,\n\temoji?: APIMessageComponentEmoji,\n\tcustomId?: string,\n\tskuId?: string,\n\turl?: string,\n) {\n\tif (style === ButtonStyle.Premium) {\n\t\tif (!skuId) {\n\t\t\tthrow new RangeError('Premium buttons must have an SKU id.');\n\t\t}\n\n\t\tif (customId || label || url || emoji) {\n\t\t\tthrow new RangeError('Premium buttons cannot have a custom id, label, URL, or emoji.');\n\t\t}\n\t} else {\n\t\tif (skuId) {\n\t\t\tthrow new RangeError('Non-premium buttons must not have an SKU id.');\n\t\t}\n\n\t\tif (url && customId) {\n\t\t\tthrow new RangeError('URL and custom id are mutually exclusive.');\n\t\t}\n\n\t\tif (!label && !emoji) {\n\t\t\tthrow new RangeError('Non-premium buttons must have a label and/or an emoji.');\n\t\t}\n\n\t\tif (style === ButtonStyle.Link) {\n\t\t\tif (!url) {\n\t\t\t\tthrow new RangeError('Link buttons must have a URL.');\n\t\t\t}\n\t\t} else if (url) {\n\t\t\tthrow new RangeError('Non-premium and non-link buttons cannot have a URL.');\n\t\t}\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type { APIMessageComponentEmoji, APISelectMenuOption } from 'discord-api-types/v10';\nimport {\n\tdefaultValidator,\n\temojiValidator,\n\tlabelValueDescriptionValidator,\n\tvalidateRequiredSelectMenuOptionParameters,\n} from '../Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menu options.\n */\nexport class StringSelectMenuOptionBuilder implements JSONEncodable {\n\t/**\n\t * Creates a new string select menu option from API data.\n\t *\n\t * @param data - The API data to create this string select menu option with\n\t * @example\n\t * Creating a string select menu option from an API data object:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tlabel: 'catchy label',\n\t * \tvalue: '1',\n\t * });\n\t * ```\n\t * @example\n\t * Creating a string select menu option using setters and API data:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tdefault: true,\n\t * \tvalue: '1',\n\t * })\n\t * \t.setLabel('woah');\n\t * ```\n\t */\n\tpublic constructor(public data: Partial = {}) {}\n\n\t/**\n\t * Sets the label for this option.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValueDescriptionValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this option.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = labelValueDescriptionValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description for this option.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = labelValueDescriptionValidator.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this option is selected by default.\n\t *\n\t * @param isDefault - Whether this option is selected by default\n\t */\n\tpublic setDefault(isDefault = true) {\n\t\tthis.data.default = defaultValidator.parse(isDefault);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display for this option.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\tthis.data.emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic toJSON(): APISelectMenuOption {\n\t\tvalidateRequiredSelectMenuOptionParameters(this.data.label, this.data.value);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APISelectMenuOption;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport {\n\ttype APIActionRowComponent,\n\tComponentType,\n\ttype APIComponentInMessageActionRow,\n\ttype APIComponentInModalActionRow,\n\ttype APIComponentInActionRow,\n} from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../util/normalizeArray.js';\nimport { ComponentBuilder } from './Component.js';\nimport { createComponentBuilder } from './Components.js';\nimport type { ButtonBuilder } from './button/Button.js';\nimport type { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport type { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport type { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport type { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport type { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport type { TextInputBuilder } from './textInput/TextInput.js';\n\n/**\n * The builders that may be used for modals.\n */\nexport type ModalComponentBuilder = ActionRowBuilder | ModalActionRowComponentBuilder;\n\n/**\n * The builders that may be used within an action row for messages.\n */\nexport type MessageActionRowComponentBuilder =\n\t| ButtonBuilder\n\t| ChannelSelectMenuBuilder\n\t| MentionableSelectMenuBuilder\n\t| RoleSelectMenuBuilder\n\t| StringSelectMenuBuilder\n\t| UserSelectMenuBuilder;\n\n/**\n * The builders that may be used within an action row for modals.\n */\nexport type ModalActionRowComponentBuilder = TextInputBuilder;\n\n/**\n * Any builder.\n */\nexport type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalActionRowComponentBuilder;\n\n/**\n * A builder that creates API-compatible JSON data for action rows.\n *\n * @typeParam ComponentType - The types of components this action row holds\n */\nexport class ActionRowBuilder extends ComponentBuilder<\n\tAPIActionRowComponent\n> {\n\t/**\n\t * The components within this action row.\n\t */\n\tpublic readonly components: ComponentType[];\n\n\t/**\n\t * Creates a new action row from API data.\n\t *\n\t * @param data - The API data to create this action row with\n\t * @example\n\t * Creating an action row from an API data object:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Type something\",\n\t * \t\t\tstyle: TextInputStyle.Short,\n\t * \t\t\ttype: ComponentType.TextInput,\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating an action row using setters and API data:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Click me\",\n\t * \t\t\tstyle: ButtonStyle.Primary,\n\t * \t\t\ttype: ComponentType.Button,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addComponents(button2, button3);\n\t * ```\n\t */\n\tpublic constructor({ components, ...data }: Partial> = {}) {\n\t\tsuper({ type: ComponentType.ActionRow, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ComponentType[];\n\t}\n\n\t/**\n\t * Adds components to this action row.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addComponents(...components: RestOrArray) {\n\t\tthis.components.push(...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this action row.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setComponents(...components: RestOrArray) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIActionRowComponent> {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIActionRowComponent>;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInActionRow,\n\tAPIBaseComponent,\n\tComponentType,\n\tAPIMessageComponent,\n} from 'discord-api-types/v10';\nimport { idValidator } from './Assertions';\n\n/**\n * Any action row component data represented as an object.\n */\nexport type AnyAPIActionRowComponent =\n\t| APIActionRowComponent\n\t| APIComponentInActionRow\n\t| APIMessageComponent;\n\n/**\n * The base component builder that contains common symbols for all sorts of components.\n *\n * @typeParam DataType - The type of internal API data that is stored within the component\n */\nexport abstract class ComponentBuilder<\n\tDataType extends Partial> = APIBaseComponent,\n> implements JSONEncodable\n{\n\t/**\n\t * The API data associated with this component.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): AnyAPIActionRowComponent;\n\n\t/**\n\t * Constructs a new kind of component.\n\t *\n\t * @param data - The data to construct a component out of\n\t */\n\tpublic constructor(data: Partial) {\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Sets the id (not the custom id) for this component.\n\t *\n\t * @param id - The id for this component\n\t */\n\tpublic setId(id: number) {\n\t\tthis.data.id = idValidator.parse(id);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the id of this component, defaulting to a default incremented id.\n\t */\n\tpublic clearId() {\n\t\tthis.data.id = undefined;\n\t\treturn this;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport { ComponentType, type APIMessageComponent, type APIModalComponent } from 'discord-api-types/v10';\nimport {\n\tActionRowBuilder,\n\ttype MessageActionRowComponentBuilder,\n\ttype AnyComponentBuilder,\n\ttype ModalComponentBuilder,\n} from './ActionRow.js';\nimport { ComponentBuilder } from './Component.js';\nimport { ButtonBuilder } from './button/Button.js';\nimport { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport { TextInputBuilder } from './textInput/TextInput.js';\nimport { ContainerBuilder } from './v2/Container.js';\nimport { FileBuilder } from './v2/File.js';\nimport { MediaGalleryBuilder } from './v2/MediaGallery.js';\nimport { SectionBuilder } from './v2/Section.js';\nimport { SeparatorBuilder } from './v2/Separator.js';\nimport { TextDisplayBuilder } from './v2/TextDisplay.js';\nimport { ThumbnailBuilder } from './v2/Thumbnail.js';\n\n/**\n * The builders that may be used for messages.\n */\nexport type MessageComponentBuilder =\n\t| ActionRowBuilder\n\t| ContainerBuilder\n\t| FileBuilder\n\t| MediaGalleryBuilder\n\t| MessageActionRowComponentBuilder\n\t| SectionBuilder\n\t| SeparatorBuilder\n\t| TextDisplayBuilder\n\t| ThumbnailBuilder;\n\n/**\n * Components here are mapped to their respective builder.\n */\nexport interface MappedComponentTypes {\n\t/**\n\t * The action row component type is associated with an {@link ActionRowBuilder}.\n\t */\n\t[ComponentType.ActionRow]: ActionRowBuilder;\n\t/**\n\t * The button component type is associated with a {@link ButtonBuilder}.\n\t */\n\t[ComponentType.Button]: ButtonBuilder;\n\t/**\n\t * The string select component type is associated with a {@link StringSelectMenuBuilder}.\n\t */\n\t[ComponentType.StringSelect]: StringSelectMenuBuilder;\n\t/**\n\t * The text input component type is associated with a {@link TextInputBuilder}.\n\t */\n\t[ComponentType.TextInput]: TextInputBuilder;\n\t/**\n\t * The user select component type is associated with a {@link UserSelectMenuBuilder}.\n\t */\n\t[ComponentType.UserSelect]: UserSelectMenuBuilder;\n\t/**\n\t * The role select component type is associated with a {@link RoleSelectMenuBuilder}.\n\t */\n\t[ComponentType.RoleSelect]: RoleSelectMenuBuilder;\n\t/**\n\t * The mentionable select component type is associated with a {@link MentionableSelectMenuBuilder}.\n\t */\n\t[ComponentType.MentionableSelect]: MentionableSelectMenuBuilder;\n\t/**\n\t * The channel select component type is associated with a {@link ChannelSelectMenuBuilder}.\n\t */\n\t[ComponentType.ChannelSelect]: ChannelSelectMenuBuilder;\n\t/**\n\t * The file component type is associated with a {@link FileBuilder}.\n\t */\n\t[ComponentType.File]: FileBuilder;\n\t/**\n\t * The separator component type is associated with a {@link SeparatorBuilder}.\n\t */\n\t[ComponentType.Separator]: SeparatorBuilder;\n\t/**\n\t * The container component type is associated with a {@link ContainerBuilder}.\n\t */\n\t[ComponentType.Container]: ContainerBuilder;\n\t/**\n\t * The text display component type is associated with a {@link TextDisplayBuilder}.\n\t */\n\t[ComponentType.TextDisplay]: TextDisplayBuilder;\n\t/**\n\t * The thumbnail component type is associated with a {@link ThumbnailBuilder}.\n\t */\n\t[ComponentType.Thumbnail]: ThumbnailBuilder;\n\t/**\n\t * The section component type is associated with a {@link SectionBuilder}.\n\t */\n\t[ComponentType.Section]: SectionBuilder;\n\t/**\n\t * The media gallery component type is associated with a {@link MediaGalleryBuilder}.\n\t */\n\t[ComponentType.MediaGallery]: MediaGalleryBuilder;\n}\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentType - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\t// eslint-disable-next-line @typescript-eslint/sort-type-constituents\n\tdata: (APIModalComponent | APIMessageComponent) & { type: ComponentType },\n): MappedComponentTypes[ComponentType];\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentBuilder - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\tdata: ComponentBuilder,\n): ComponentBuilder;\n\nexport function createComponentBuilder(\n\tdata: APIMessageComponent | APIModalComponent | MessageComponentBuilder,\n): ComponentBuilder {\n\tif (data instanceof ComponentBuilder) {\n\t\treturn data;\n\t}\n\n\tswitch (data.type) {\n\t\tcase ComponentType.ActionRow:\n\t\t\treturn new ActionRowBuilder(data);\n\t\tcase ComponentType.Button:\n\t\t\treturn new ButtonBuilder(data);\n\t\tcase ComponentType.StringSelect:\n\t\t\treturn new StringSelectMenuBuilder(data);\n\t\tcase ComponentType.TextInput:\n\t\t\treturn new TextInputBuilder(data);\n\t\tcase ComponentType.UserSelect:\n\t\t\treturn new UserSelectMenuBuilder(data);\n\t\tcase ComponentType.RoleSelect:\n\t\t\treturn new RoleSelectMenuBuilder(data);\n\t\tcase ComponentType.MentionableSelect:\n\t\t\treturn new MentionableSelectMenuBuilder(data);\n\t\tcase ComponentType.ChannelSelect:\n\t\t\treturn new ChannelSelectMenuBuilder(data);\n\t\tcase ComponentType.File:\n\t\t\treturn new FileBuilder(data);\n\t\tcase ComponentType.Container:\n\t\t\treturn new ContainerBuilder(data);\n\t\tcase ComponentType.Section:\n\t\t\treturn new SectionBuilder(data);\n\t\tcase ComponentType.Separator:\n\t\t\treturn new SeparatorBuilder(data);\n\t\tcase ComponentType.TextDisplay:\n\t\t\treturn new TextDisplayBuilder(data);\n\t\tcase ComponentType.Thumbnail:\n\t\t\treturn new ThumbnailBuilder(data);\n\t\tcase ComponentType.MediaGallery:\n\t\t\treturn new MediaGalleryBuilder(data);\n\t\tdefault:\n\t\t\t// @ts-expect-error This case can still occur if we get a newer unsupported component type\n\t\t\tthrow new Error(`Cannot properly serialize component type: ${data.type}`);\n\t}\n}\n\nfunction isBuilder>(\n\tbuilder: unknown,\n\tConstructor: new () => Builder,\n): builder is Builder {\n\treturn builder instanceof Constructor;\n}\n\nexport function resolveBuilder, Builder extends JSONEncodable>(\n\tbuilder: Builder | ComponentType | ((builder: Builder) => Builder),\n\tConstructor: new (data?: ComponentType) => Builder,\n) {\n\tif (isBuilder(builder, Constructor)) {\n\t\treturn builder;\n\t}\n\n\tif (typeof builder === 'function') {\n\t\treturn builder(new Constructor());\n\t}\n\n\treturn new Constructor(builder);\n}\n","import {\n\tComponentType,\n\ttype APIButtonComponent,\n\ttype APIButtonComponentWithCustomId,\n\ttype APIButtonComponentWithSKUId,\n\ttype APIButtonComponentWithURL,\n\ttype APIMessageComponentEmoji,\n\ttype ButtonStyle,\n\ttype Snowflake,\n} from 'discord-api-types/v10';\nimport {\n\tbuttonLabelValidator,\n\tbuttonStyleValidator,\n\tcustomIdValidator,\n\tdisabledValidator,\n\temojiValidator,\n\turlValidator,\n\tvalidateRequiredButtonParameters,\n} from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\n\n/**\n * A builder that creates API-compatible JSON data for buttons.\n */\nexport class ButtonBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new button from API data.\n\t *\n\t * @param data - The API data to create this button with\n\t * @example\n\t * Creating a button from an API data object:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tcustom_id: 'a cool button',\n\t * \tstyle: ButtonStyle.Primary,\n\t * \tlabel: 'Click Me',\n\t * \temoji: {\n\t * \t\tname: 'smile',\n\t * \t\tid: '123456789012345678',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a button using setters and API data:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tstyle: ButtonStyle.Secondary,\n\t * \tlabel: 'Click Me',\n\t * })\n\t * \t.setEmoji({ name: '🙂' })\n\t * \t.setCustomId('another cool button');\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ type: ComponentType.Button, ...data });\n\t}\n\n\t/**\n\t * Sets the style of this button.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: ButtonStyle) {\n\t\tthis.data.style = buttonStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL for this button.\n\t *\n\t * @remarks\n\t * This method is only available to buttons using the `Link` button style.\n\t * Only three types of URL schemes are currently supported: `https://`, `http://`, and `discord://`.\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\t(this.data as APIButtonComponentWithURL).url = urlValidator.parse(url);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this button.\n\t *\n\t * @remarks\n\t * This method is only applicable to buttons that are not using the `Link` button style.\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\t(this.data as APIButtonComponentWithCustomId).custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the SKU id that represents a purchasable SKU for this button.\n\t *\n\t * @remarks Only available when using premium-style buttons.\n\t * @param skuId - The SKU id to use\n\t */\n\tpublic setSKUId(skuId: Snowflake) {\n\t\t(this.data as APIButtonComponentWithSKUId).sku_id = skuId;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display on this button.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\t(this.data as Exclude).emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this button is disabled.\n\t *\n\t * @param disabled - Whether to disable this button\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this button.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\t(this.data as Exclude).label = buttonLabelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIButtonComponent {\n\t\tvalidateRequiredButtonParameters(\n\t\t\tthis.data.style,\n\t\t\t(this.data as Exclude).label,\n\t\t\t(this.data as Exclude).emoji,\n\t\t\t(this.data as APIButtonComponentWithCustomId).custom_id,\n\t\t\t(this.data as APIButtonComponentWithSKUId).sku_id,\n\t\t\t(this.data as APIButtonComponentWithURL).url,\n\t\t);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIButtonComponent;\n\t}\n}\n","import {\n\ttype APIChannelSelectComponent,\n\ttype ChannelType,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { channelTypesValidator, customIdValidator, optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for channel select menus.\n */\nexport class ChannelSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement)\n\t * \t.setMinValues(2);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.ChannelSelect });\n\t}\n\n\t/**\n\t * Adds channel types to this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic addChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.push(...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets channel types for this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic setChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.splice(0, this.data.channel_types.length, ...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default channels to this auto populated select menu.\n\t *\n\t * @param channels - The channels to add\n\t */\n\tpublic addDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default channels for this auto populated select menu.\n\t *\n\t * @param channels - The channels to set\n\t */\n\tpublic setDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIChannelSelectComponent {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIChannelSelectComponent;\n\t}\n}\n","import type { APISelectMenuComponent } from 'discord-api-types/v10';\nimport { customIdValidator, disabledValidator, minMaxValidator, placeholderValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\n\n/**\n * The base select menu builder that contains common symbols for select menu builders.\n *\n * @typeParam SelectMenuType - The type of select menu this would be instantiated for.\n */\nexport abstract class BaseSelectMenuBuilder<\n\tSelectMenuType extends APISelectMenuComponent,\n> extends ComponentBuilder {\n\t/**\n\t * Sets the placeholder for this select menu.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum values that must be selected in the select menu.\n\t *\n\t * @param minValues - The minimum values that must be selected\n\t */\n\tpublic setMinValues(minValues: number) {\n\t\tthis.data.min_values = minMaxValidator.parse(minValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum values that must be selected in the select menu.\n\t *\n\t * @param maxValues - The maximum values that must be selected\n\t */\n\tpublic setMaxValues(maxValues: number) {\n\t\tthis.data.max_values = minMaxValidator.parse(maxValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this select menu.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this select menu is disabled.\n\t *\n\t * @param disabled - Whether this select menu is disabled\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): SelectMenuType {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as SelectMenuType;\n\t}\n}\n","import {\n\ttype APIMentionableSelectComponent,\n\ttype APISelectMenuDefaultValue,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for mentionable select menus.\n */\nexport class MentionableSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.MentionableSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default values to this auto populated select menu.\n\t *\n\t * @param values - The values to add\n\t */\n\tpublic addDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\t\tthis.data.default_values.push(...normalizedValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default values for this auto populated select menu.\n\t *\n\t * @param values - The values to set\n\t */\n\tpublic setDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\t\tthis.data.default_values = normalizedValues;\n\t\treturn this;\n\t}\n}\n","import {\n\ttype APIRoleSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for role select menus.\n */\nexport class RoleSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.RoleSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default roles for this auto populated select menu.\n\t *\n\t * @param roles - The roles to set\n\t */\n\tpublic setDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { ComponentType } from 'discord-api-types/v10';\nimport type { APIStringSelectComponent, APISelectMenuOption } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { jsonOptionValidator, optionsLengthValidator, validateRequiredSelectMenuParameters } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\nimport { StringSelectMenuOptionBuilder } from './StringSelectMenuOption.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menus.\n */\nexport class StringSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * The options within this select menu.\n\t */\n\tpublic readonly options: StringSelectMenuOptionBuilder[];\n\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * \toptions: [\n\t * \t\t{ label: 'option 1', value: '1' },\n\t * \t\t{ label: 'option 2', value: '2' },\n\t * \t\t{ label: 'option 3', value: '3' },\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1)\n\t * \t.addOptions({\n\t * \t\tlabel: 'Catchy',\n\t * \t\tvalue: 'catch',\n\t * \t});\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tconst { options, ...initData } = data ?? {};\n\t\tsuper({ ...initData, type: ComponentType.StringSelect });\n\t\tthis.options = options?.map((option: APISelectMenuOption) => new StringSelectMenuOptionBuilder(option)) ?? [];\n\t}\n\n\t/**\n\t * Adds options to this select menu.\n\t *\n\t * @param options - The options to add\n\t */\n\tpublic addOptions(...options: RestOrArray) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\t\toptionsLengthValidator.parse(this.options.length + normalizedOptions.length);\n\t\tthis.options.push(\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the options for this select menu.\n\t *\n\t * @param options - The options to set\n\t */\n\tpublic setOptions(...options: RestOrArray) {\n\t\treturn this.spliceOptions(0, this.options.length, ...options);\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts options for this select menu.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice | Array.prototype.splice()}.\n\t * It's useful for modifying and adjusting the order of existing options.\n\t * @example\n\t * Remove the first option:\n\t * ```ts\n\t * selectMenu.spliceOptions(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n option:\n\t * ```ts\n\t * const n = 4;\n\t * selectMenu.spliceOptions(0, n);\n\t * ```\n\t * @example\n\t * Remove the last option:\n\t * ```ts\n\t * selectMenu.spliceOptions(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of options to remove\n\t * @param options - The replacing option objects or builders\n\t */\n\tpublic spliceOptions(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...options: RestOrArray\n\t) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\n\t\tconst clone = [...this.options];\n\n\t\tclone.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\n\t\toptionsLengthValidator.parse(clone.length);\n\t\tthis.options.splice(0, this.options.length, ...clone);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIStringSelectComponent {\n\t\tvalidateRequiredSelectMenuParameters(this.options, this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t} as APIStringSelectComponent;\n\t}\n}\n","import {\n\ttype APIUserSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for user select menus.\n */\nexport class UserSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.UserSelect });\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default users for this auto populated select menu.\n\t *\n\t * @param users - The users to set\n\t */\n\tpublic setDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { isJSONEncodable, type Equatable, type JSONEncodable } from '@discordjs/util';\nimport { ComponentType, type TextInputStyle, type APITextInputComponent } from 'discord-api-types/v10';\nimport isEqual from 'fast-deep-equal';\nimport { customIdValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\nimport {\n\tmaxLengthValidator,\n\tminLengthValidator,\n\tplaceholderValidator,\n\trequiredValidator,\n\tvalueValidator,\n\tvalidateRequiredParameters,\n\tlabelValidator,\n\ttextInputStyleValidator,\n} from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for text inputs.\n */\nexport class TextInputBuilder\n\textends ComponentBuilder\n\timplements Equatable>\n{\n\t/**\n\t * Creates a new text input from API data.\n\t *\n\t * @param data - The API data to create this text input with\n\t * @example\n\t * Creating a text input from an API data object:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tcustom_id: 'a cool text input',\n\t * \tlabel: 'Type something',\n\t * \tstyle: TextInputStyle.Short,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a text input using setters and API data:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tlabel: 'Type something else',\n\t * })\n\t * \t.setCustomId('woah')\n\t * \t.setStyle(TextInputStyle.Paragraph);\n\t * ```\n\t */\n\tpublic constructor(data?: APITextInputComponent & { type?: ComponentType.TextInput }) {\n\t\tsuper({ type: ComponentType.TextInput, ...data });\n\t}\n\n\t/**\n\t * Sets the custom id for this text input.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this text input.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the style for this text input.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: TextInputStyle) {\n\t\tthis.data.style = textInputStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of text for this text input.\n\t *\n\t * @param minLength - The minimum length of text for this text input\n\t */\n\tpublic setMinLength(minLength: number) {\n\t\tthis.data.min_length = minLengthValidator.parse(minLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum length of text for this text input.\n\t *\n\t * @param maxLength - The maximum length of text for this text input\n\t */\n\tpublic setMaxLength(maxLength: number) {\n\t\tthis.data.max_length = maxLengthValidator.parse(maxLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the placeholder for this text input.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this text input.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = valueValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this text input is required.\n\t *\n\t * @param required - Whether this text input is required\n\t */\n\tpublic setRequired(required = true) {\n\t\tthis.data.required = requiredValidator.parse(required);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APITextInputComponent {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.style, this.data.label);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APITextInputComponent;\n\t}\n\n\t/**\n\t * Whether this is equal to another structure.\n\t */\n\tpublic equals(other: APITextInputComponent | JSONEncodable): boolean {\n\t\tif (isJSONEncodable(other)) {\n\t\t\treturn isEqual(other.toJSON(), this.data);\n\t\t}\n\n\t\treturn isEqual(other, this.data);\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { TextInputStyle } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport { customIdValidator } from '../Assertions.js';\n\nexport const textInputStyleValidator = s.nativeEnum(TextInputStyle);\nexport const minLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const maxLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(1)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const requiredValidator = s.boolean();\nexport const valueValidator = s.string().lengthLessThanOrEqual(4_000).setValidationEnabled(isValidationEnabled);\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled);\nexport const labelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(customId?: string, style?: TextInputStyle, label?: string) {\n\tcustomIdValidator.parse(customId);\n\ttextInputStyleValidator.parse(style);\n\tlabelValidator.parse(label);\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInContainer,\n\tAPIComponentInMessageActionRow,\n\tAPIContainerComponent,\n\tAPIFileComponent,\n\tAPIMediaGalleryComponent,\n\tAPISectionComponent,\n\tAPISeparatorComponent,\n\tAPITextDisplayComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport type { RGBTuple } from '../../index.js';\nimport { MediaGalleryBuilder, SectionBuilder } from '../../index.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport type { AnyComponentBuilder, MessageActionRowComponentBuilder } from '../ActionRow.js';\nimport { ActionRowBuilder } from '../ActionRow.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { createComponentBuilder, resolveBuilder } from '../Components.js';\nimport { containerColorPredicate, spoilerPredicate } from './Assertions.js';\nimport { FileBuilder } from './File.js';\nimport { SeparatorBuilder } from './Separator.js';\nimport { TextDisplayBuilder } from './TextDisplay.js';\n\n/**\n * The builders that may be used within a container.\n */\nexport type ContainerComponentBuilder =\n\t| ActionRowBuilder\n\t| FileBuilder\n\t| MediaGalleryBuilder\n\t| SectionBuilder\n\t| SeparatorBuilder\n\t| TextDisplayBuilder;\n\n/**\n * A builder that creates API-compatible JSON data for a container.\n */\nexport class ContainerBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this container.\n\t */\n\tpublic readonly components: ContainerComponentBuilder[];\n\n\t/**\n\t * Creates a new container from API data.\n\t *\n\t * @param data - The API data to create this container with\n\t * @example\n\t * Creating a container from an API data object:\n\t * ```ts\n\t * const container = new ContainerBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"Some text here\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a container using setters and API data:\n\t * ```ts\n\t * const container = new ContainerBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"# Heading\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addComponents(separator, section);\n\t * ```\n\t */\n\tpublic constructor({ components, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.Container, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ??\n\t\t\t[]) as ContainerComponentBuilder[];\n\t}\n\n\t/**\n\t * Sets the accent color of this container.\n\t *\n\t * @param color - The color to use\n\t */\n\tpublic setAccentColor(color?: RGBTuple | number): this {\n\t\t// Data assertions\n\t\tcontainerColorPredicate.parse(color);\n\n\t\tif (Array.isArray(color)) {\n\t\t\tconst [red, green, blue] = color;\n\t\t\tthis.data.accent_color = (red << 16) + (green << 8) + blue;\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.data.accent_color = color;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the accent color of this container.\n\t */\n\tpublic clearAccentColor() {\n\t\tthis.data.accent_color = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds action row components to this container.\n\t *\n\t * @param components - The action row components to add\n\t */\n\tpublic addActionRowComponents(\n\t\t...components: RestOrArray<\n\t\t\t| ActionRowBuilder\n\t\t\t| APIActionRowComponent\n\t\t\t| ((builder: ActionRowBuilder) => ActionRowBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, ActionRowBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds file components to this container.\n\t *\n\t * @param components - The file components to add\n\t */\n\tpublic addFileComponents(\n\t\t...components: RestOrArray FileBuilder)>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, FileBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds media gallery components to this container.\n\t *\n\t * @param components - The media gallery components to add\n\t */\n\tpublic addMediaGalleryComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPIMediaGalleryComponent | MediaGalleryBuilder | ((builder: MediaGalleryBuilder) => MediaGalleryBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, MediaGalleryBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds section components to this container.\n\t *\n\t * @param components - The section components to add\n\t */\n\tpublic addSectionComponents(\n\t\t...components: RestOrArray SectionBuilder)>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SectionBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds separator components to this container.\n\t *\n\t * @param components - The separator components to add\n\t */\n\tpublic addSeparatorComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPISeparatorComponent | SeparatorBuilder | ((builder: SeparatorBuilder) => SeparatorBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SeparatorBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds text display components to this container.\n\t *\n\t * @param components - The text display components to add\n\t */\n\tpublic addTextDisplayComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPITextDisplayComponent | TextDisplayBuilder | ((builder: TextDisplayBuilder) => TextDisplayBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, TextDisplayBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts components for this container.\n\t *\n\t * @param index - The index to start removing, replacing or inserting components\n\t * @param deleteCount - The amount of components to remove\n\t * @param components - The components to set\n\t */\n\tpublic spliceComponents(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...components: RestOrArray\n\t) {\n\t\tthis.components.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(components).map((component) =>\n\t\t\t\tcomponent instanceof ComponentBuilder ? component : createComponentBuilder(component),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this container.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIContainerComponent {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIContainerComponent;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { SeparatorSpacingSize } from 'discord-api-types/v10';\nimport { colorPredicate } from '../../messages/embed/Assertions';\nimport { isValidationEnabled } from '../../util/validation';\nimport { ComponentBuilder } from '../Component';\nimport { ButtonBuilder } from '../button/Button';\nimport type { ContainerComponentBuilder } from './Container';\nimport type { MediaGalleryItemBuilder } from './MediaGalleryItem';\nimport type { TextDisplayBuilder } from './TextDisplay';\nimport { ThumbnailBuilder } from './Thumbnail';\n\nexport const unfurledMediaItemPredicate = s\n\t.object({\n\t\turl: s\n\t\t\t.string()\n\t\t\t.url(\n\t\t\t\t{ allowedProtocols: ['http:', 'https:', 'attachment:'] },\n\t\t\t\t{ message: 'Invalid protocol for media URL. Must be http:, https:, or attachment:' },\n\t\t\t),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(1_024)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const filePredicate = s\n\t.object({\n\t\turl: s\n\t\t\t.string()\n\t\t\t.url({ allowedProtocols: ['attachment:'] }, { message: 'Invalid protocol for file URL. Must be attachment:' }),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const spoilerPredicate = s.boolean();\n\nexport const dividerPredicate = s.boolean();\n\nexport const spacingPredicate = s.nativeEnum(SeparatorSpacingSize);\n\nexport const textDisplayContentPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const accessoryPredicate = s\n\t.instance(ButtonBuilder)\n\t.or(s.instance(ThumbnailBuilder))\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const containerColorPredicate = colorPredicate.nullish();\n\nexport function assertReturnOfBuilder(\n\tinput: unknown,\n\tExpectedInstanceOf: new () => ReturnType,\n): asserts input is ReturnType {\n\ts.instance(ExpectedInstanceOf).setValidationEnabled(isValidationEnabled).parse(input);\n}\n\nexport function validateComponentArray<\n\tReturnType extends ContainerComponentBuilder | MediaGalleryItemBuilder = ContainerComponentBuilder,\n>(input: unknown, min: number, max: number, ExpectedInstanceOf?: new () => ReturnType): asserts input is ReturnType[] {\n\t(ExpectedInstanceOf ? s.instance(ExpectedInstanceOf) : s.instance(ComponentBuilder))\n\t\t.array()\n\t\t.lengthGreaterThanOrEqual(min)\n\t\t.lengthLessThanOrEqual(max)\n\t\t.setValidationEnabled(isValidationEnabled)\n\t\t.parse(input);\n}\n","import type { APIThumbnailComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { descriptionPredicate, spoilerPredicate, unfurledMediaItemPredicate } from './Assertions';\n\nexport class ThumbnailBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new thumbnail from API data.\n\t *\n\t * @param data - The API data to create this thumbnail with\n\t * @example\n\t * Creating a thumbnail from an API data object:\n\t * ```ts\n\t * const thumbnail = new ThumbnailBuilder({\n\t * \tdescription: 'some text',\n\t * media: {\n\t * url: 'https://cdn.discordapp.com/embed/avatars/4.png',\n\t * },\n\t * });\n\t * ```\n\t * @example\n\t * Creating a thumbnail using setters and API data:\n\t * ```ts\n\t * const thumbnail = new ThumbnailBuilder({\n\t * \tmedia: {\n\t * url: 'attachment://image.png',\n\t * },\n\t * })\n\t * \t.setDescription('alt text');\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.Thumbnail,\n\t\t\t...data,\n\t\t\tmedia: data.media ? { url: data.media.url } : undefined,\n\t\t});\n\t}\n\n\t/**\n\t * Sets the description of this thumbnail.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = descriptionPredicate.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the description of this thumbnail.\n\t */\n\tpublic clearDescription() {\n\t\tthis.data.description = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this thumbnail.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this thumbnail.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.media = unfurledMediaItemPredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritdoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIThumbnailComponent {\n\t\tunfurledMediaItemPredicate.parse(this.data.media);\n\n\t\treturn { ...this.data } as APIThumbnailComponent;\n\t}\n}\n","import { ComponentType, type APIFileComponent } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { filePredicate, spoilerPredicate } from './Assertions';\n\nexport class FileBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new file from API data.\n\t *\n\t * @param data - The API data to create this file with\n\t * @example\n\t * Creating a file from an API data object:\n\t * ```ts\n\t * const file = new FileBuilder({\n\t * \tspoiler: true,\n\t * \tfile: {\n\t * \t\turl: 'attachment://file.png',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a file using setters and API data:\n\t * ```ts\n\t * const file = new FileBuilder({\n\t * \tfile: {\n\t * \t\turl: 'attachment://image.jpg',\n\t * \t},\n\t * })\n\t * \t.setSpoiler(false);\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({ type: ComponentType.File, ...data, file: data.file ? { url: data.file.url } : undefined });\n\t}\n\n\t/**\n\t * Sets the spoiler status of this file.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this file.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.file = filePredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIFileComponent {\n\t\tfilePredicate.parse(this.data.file);\n\n\t\treturn { ...this.data, file: { ...this.data.file } } as APIFileComponent;\n\t}\n}\n","import type { SeparatorSpacingSize, APISeparatorComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { dividerPredicate, spacingPredicate } from './Assertions';\n\nexport class SeparatorBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new separator from API data.\n\t *\n\t * @param data - The API data to create this separator with\n\t * @example\n\t * Creating a separator from an API data object:\n\t * ```ts\n\t * const separator = new SeparatorBuilder({\n\t * \tspacing: SeparatorSpacingSize.Small,\n\t * divider: true,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a separator using setters and API data:\n\t * ```ts\n\t * const separator = new SeparatorBuilder({\n\t * \tspacing: SeparatorSpacingSize.Large,\n\t * })\n\t * \t.setDivider(false);\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.Separator,\n\t\t\t...data,\n\t\t});\n\t}\n\n\t/**\n\t * Sets whether this separator should show a divider line.\n\t *\n\t * @param divider - Whether to show a divider line\n\t */\n\tpublic setDivider(divider = true) {\n\t\tthis.data.divider = dividerPredicate.parse(divider);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spacing of this separator.\n\t *\n\t * @param spacing - The spacing to use\n\t */\n\tpublic setSpacing(spacing: SeparatorSpacingSize) {\n\t\tthis.data.spacing = spacingPredicate.parse(spacing);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the spacing of this separator.\n\t */\n\tpublic clearSpacing() {\n\t\tthis.data.spacing = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APISeparatorComponent {\n\t\treturn { ...this.data } as APISeparatorComponent;\n\t}\n}\n","import type { APITextDisplayComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { textDisplayContentPredicate } from './Assertions';\n\nexport class TextDisplayBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new text display from API data.\n\t *\n\t * @param data - The API data to create this text display with\n\t * @example\n\t * Creating a text display from an API data object:\n\t * ```ts\n\t * const textDisplay = new TextDisplayBuilder({\n\t * \tcontent: 'some text',\n\t * });\n\t * ```\n\t * @example\n\t * Creating a text display using setters and API data:\n\t * ```ts\n\t * const textDisplay = new TextDisplayBuilder({\n\t * \tcontent: 'old text',\n\t * })\n\t * \t.setContent('new text');\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.TextDisplay,\n\t\t\t...data,\n\t\t});\n\t}\n\n\t/**\n\t * Sets the text of this text display.\n\t *\n\t * @param content - The text to use\n\t */\n\tpublic setContent(content: string) {\n\t\tthis.data.content = textDisplayContentPredicate.parse(content);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APITextDisplayComponent {\n\t\ttextDisplayContentPredicate.parse(this.data.content);\n\n\t\treturn { ...this.data } as APITextDisplayComponent;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type { APIMediaGalleryComponent, APIMediaGalleryItem } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { resolveBuilder } from '../Components.js';\nimport { assertReturnOfBuilder, validateComponentArray } from './Assertions.js';\nimport { MediaGalleryItemBuilder } from './MediaGalleryItem.js';\n\n/**\n * A builder that creates API-compatible JSON data for a container.\n */\nexport class MediaGalleryBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this container.\n\t */\n\tpublic readonly items: MediaGalleryItemBuilder[];\n\n\t/**\n\t * Creates a new media gallery from API data.\n\t *\n\t * @param data - The API data to create this media gallery with\n\t * @example\n\t * Creating a media gallery from an API data object:\n\t * ```ts\n\t * const mediaGallery = new MediaGalleryBuilder({\n\t * \titems: [\n\t * \t\t{\n\t * \t\t\tdescription: \"Some text here\",\n\t * \t\t\tmedia: {\n\t * \t\t\t\turl: 'https://cdn.discordapp.com/embed/avatars/2.png',\n\t * \t\t\t},\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a media gallery using setters and API data:\n\t * ```ts\n\t * const mediaGallery = new MediaGalleryBuilder({\n\t * \titems: [\n\t * \t\t{\n\t * \t\t\tdescription: \"alt text\",\n\t * \t\t\tmedia: {\n\t * \t\t\t\turl: 'https://cdn.discordapp.com/embed/avatars/5.png',\n\t * \t\t\t},\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addItems(item2, item3);\n\t * ```\n\t */\n\tpublic constructor({ items, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.MediaGallery, ...data });\n\t\tthis.items = items?.map((item) => new MediaGalleryItemBuilder(item)) ?? [];\n\t}\n\n\t/**\n\t * Adds items to this media gallery.\n\t *\n\t * @param items - The items to add\n\t */\n\tpublic addItems(\n\t\t...items: RestOrArray<\n\t\t\tAPIMediaGalleryItem | MediaGalleryItemBuilder | ((builder: MediaGalleryItemBuilder) => MediaGalleryItemBuilder)\n\t\t>\n\t) {\n\t\tthis.items.push(\n\t\t\t...normalizeArray(items).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, MediaGalleryItemBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, MediaGalleryItemBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts media gallery items for this media gallery.\n\t *\n\t * @param index - The index to start removing, replacing or inserting items\n\t * @param deleteCount - The amount of items to remove\n\t * @param items - The items to insert\n\t */\n\tpublic spliceItems(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...items: RestOrArray<\n\t\t\tAPIMediaGalleryItem | MediaGalleryItemBuilder | ((builder: MediaGalleryItemBuilder) => MediaGalleryItemBuilder)\n\t\t>\n\t) {\n\t\tthis.items.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(items).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, MediaGalleryItemBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, MediaGalleryItemBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIMediaGalleryComponent {\n\t\tvalidateComponentArray(this.items, 1, 10, MediaGalleryItemBuilder);\n\t\treturn {\n\t\t\t...this.data,\n\t\t\titems: this.items.map((item) => item.toJSON()),\n\t\t} as APIMediaGalleryComponent;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type { APIMediaGalleryItem } from 'discord-api-types/v10';\nimport { descriptionPredicate, spoilerPredicate, unfurledMediaItemPredicate } from './Assertions';\n\nexport class MediaGalleryItemBuilder implements JSONEncodable {\n\t/**\n\t * The API data associated with this media gallery item.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * Creates a new media gallery item from API data.\n\t *\n\t * @param data - The API data to create this media gallery item with\n\t * @example\n\t * Creating a media gallery item from an API data object:\n\t * ```ts\n\t * const item = new MediaGalleryItemBuilder({\n\t * \tdescription: \"Some text here\",\n\t * \tmedia: {\n\t * \t\turl: 'https://cdn.discordapp.com/embed/avatars/2.png',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a media gallery item using setters and API data:\n\t * ```ts\n\t * const item = new MediaGalleryItemBuilder({\n\t * \tmedia: {\n\t * \t\turl: 'https://cdn.discordapp.com/embed/avatars/5.png',\n\t * \t},\n\t * })\n\t * \t.setDescription(\"alt text\");\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Sets the description of this media gallery item.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = descriptionPredicate.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the description of this media gallery item.\n\t */\n\tpublic clearDescription() {\n\t\tthis.data.description = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this media gallery item.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this media gallery item.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.media = unfurledMediaItemPredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIMediaGalleryItem {\n\t\tunfurledMediaItemPredicate.parse(this.data.media);\n\n\t\treturn { ...this.data } as APIMediaGalleryItem;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type {\n\tAPIButtonComponent,\n\tAPISectionComponent,\n\tAPITextDisplayComponent,\n\tAPIThumbnailComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ButtonBuilder, ThumbnailBuilder } from '../../index.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { createComponentBuilder, resolveBuilder } from '../Components.js';\nimport { accessoryPredicate, assertReturnOfBuilder, validateComponentArray } from './Assertions.js';\nimport { TextDisplayBuilder } from './TextDisplay.js';\n\n/**\n * A builder that creates API-compatible JSON data for a section.\n */\nexport class SectionBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this section.\n\t */\n\tpublic readonly components: ComponentBuilder[];\n\n\t/**\n\t * The accessory of this section.\n\t */\n\tpublic readonly accessory?: ButtonBuilder | ThumbnailBuilder;\n\n\t/**\n\t * Creates a new section from API data.\n\t *\n\t * @param data - The API data to create this section with\n\t * @example\n\t * Creating a section from an API data object:\n\t * ```ts\n\t * const section = new SectionBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"Some text here\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * accessory: {\n\t * media: {\n\t * url: 'https://cdn.discordapp.com/embed/avatars/3.png',\n\t * },\n\t * }\n\t * });\n\t * ```\n\t * @example\n\t * Creating a section using setters and API data:\n\t * ```ts\n\t * const section = new SectionBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"# Heading\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.setPrimaryButtonAccessory(button);\n\t * ```\n\t */\n\tpublic constructor({ components, accessory, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.Section, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ComponentBuilder[];\n\t\tthis.accessory = accessory ? createComponentBuilder(accessory) : undefined;\n\t}\n\n\t/**\n\t * Sets the accessory of this section to a button.\n\t *\n\t * @param accessory - The accessory to use\n\t */\n\tpublic setButtonAccessory(\n\t\taccessory: APIButtonComponent | ButtonBuilder | ((builder: ButtonBuilder) => ButtonBuilder),\n\t): this {\n\t\tReflect.set(this, 'accessory', accessoryPredicate.parse(resolveBuilder(accessory, ButtonBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the accessory of this section to a thumbnail.\n\t *\n\t * @param accessory - The accessory to use\n\t */\n\tpublic setThumbnailAccessory(\n\t\taccessory: APIThumbnailComponent | ThumbnailBuilder | ((builder: ThumbnailBuilder) => ThumbnailBuilder),\n\t): this {\n\t\tReflect.set(this, 'accessory', accessoryPredicate.parse(resolveBuilder(accessory, ThumbnailBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds text display components to this section.\n\t *\n\t * @param components - The text display components to add\n\t */\n\tpublic addTextDisplayComponents(\n\t\t...components: RestOrArray TextDisplayBuilder)>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, TextDisplayBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, TextDisplayBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts text display components for this section.\n\t *\n\t * @param index - The index to start removing, replacing or inserting text display components\n\t * @param deleteCount - The amount of text display components to remove\n\t * @param components - The text display components to insert\n\t */\n\tpublic spliceTextDisplayComponents(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...components: RestOrArray<\n\t\t\tAPITextDisplayComponent | TextDisplayBuilder | ((builder: TextDisplayBuilder) => TextDisplayBuilder)\n\t\t>\n\t) {\n\t\tthis.components.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(components).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, TextDisplayBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, TextDisplayBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APISectionComponent {\n\t\tvalidateComponentArray(this.components, 1, 3, TextDisplayBuilder);\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t\taccessory: accessoryPredicate.parse(this.accessory).toJSON(),\n\t\t} as APISectionComponent;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const titleValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\nexport const componentsValidator = s\n\t.instance(ActionRowBuilder)\n\t.array()\n\t.lengthGreaterThanOrEqual(1)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(\n\tcustomId?: string,\n\ttitle?: string,\n\tcomponents?: ActionRowBuilder[],\n) {\n\tcustomIdValidator.parse(customId);\n\ttitleValidator.parse(title);\n\tcomponentsValidator.parse(components);\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInModalActionRow,\n\tAPIModalInteractionResponseCallbackData,\n} from 'discord-api-types/v10';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { createComponentBuilder } from '../../components/Components.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { titleValidator, validateRequiredParameters } from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for modals.\n */\nexport class ModalBuilder implements JSONEncodable {\n\t/**\n\t * The API data associated with this modal.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * The components within this modal.\n\t */\n\tpublic readonly components: ActionRowBuilder[] = [];\n\n\t/**\n\t * Creates a new modal from API data.\n\t *\n\t * @param data - The API data to create this modal with\n\t */\n\tpublic constructor({ components, ...data }: Partial = {}) {\n\t\tthis.data = { ...data };\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ??\n\t\t\t[]) as ActionRowBuilder[];\n\t}\n\n\t/**\n\t * Sets the title of this modal.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string) {\n\t\tthis.data.title = titleValidator.parse(title);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id of this modal.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds components to this modal.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addComponents(\n\t\t...components: RestOrArray<\n\t\t\tActionRowBuilder | APIActionRowComponent\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) =>\n\t\t\t\tcomponent instanceof ActionRowBuilder\n\t\t\t\t\t? component\n\t\t\t\t\t: new ActionRowBuilder(component),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this modal.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setComponents(...components: RestOrArray>) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIModalInteractionResponseCallbackData {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.title, this.components);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIModalInteractionResponseCallbackData;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport {\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocale,\n\ttype APIApplicationCommandOptionChoice,\n\ttype LocalizationMap,\n} from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t.regex(/^[\\p{Ll}\\p{Lm}\\p{Lo}\\p{N}\\p{sc=Devanagari}\\p{sc=Thai}_-]+$/u)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nconst descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\nconst localePredicate = s.nativeEnum(Locale);\n\nexport function validateDescription(description: unknown): asserts description is string {\n\tdescriptionPredicate.parse(description);\n}\n\nconst maxArrayLengthPredicate = s.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\nexport function validateLocale(locale: unknown) {\n\treturn localePredicate.parse(locale);\n}\n\nexport function validateMaxOptionsLength(options: unknown): asserts options is ToAPIApplicationCommandOptions[] {\n\tmaxArrayLengthPredicate.parse(options);\n}\n\nexport function validateRequiredParameters(\n\tname: string,\n\tdescription: string,\n\toptions: ToAPIApplicationCommandOptions[],\n) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert description conditions\n\tvalidateDescription(description);\n\n\t// Assert options conditions\n\tvalidateMaxOptionsLength(options);\n}\n\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateRequired(required: unknown): asserts required is boolean {\n\tbooleanPredicate.parse(required);\n}\n\nconst choicesLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateChoicesLength(amountAdding: number, choices?: APIApplicationCommandOptionChoice[]): void {\n\tchoicesLengthPredicate.parse((choices?.length ?? 0) + amountAdding);\n}\n\nexport function assertReturnOfBuilder<\n\tReturnType extends ApplicationCommandOptionBase | SlashCommandSubcommandBuilder | SlashCommandSubcommandGroupBuilder,\n>(input: unknown, ExpectedInstanceOf: new () => ReturnType): asserts input is ReturnType {\n\ts.instance(ExpectedInstanceOf).parse(input);\n}\n\nexport const localizationMapPredicate = s\n\t.object(Object.fromEntries(Object.values(Locale).map((locale) => [locale, s.string().nullish()])))\n\t.strict()\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateLocalizationMap(value: unknown): asserts value is LocalizationMap {\n\tlocalizationMapPredicate.parse(value);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport function validateNSFW(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tAPIApplicationCommandOption,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocalizationMap,\n\tPermissions,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommand } from './mixins/SharedSlashCommand.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\nimport { SharedSlashCommandSubcommands } from './mixins/SharedSubcommands.js';\n\n/**\n * A builder that creates API-compatible JSON data for slash commands.\n */\n@mix(SharedSlashCommandOptions, SharedNameAndDescription, SharedSlashCommandSubcommands, SharedSlashCommand)\nexport class SlashCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * The options of this command.\n\t */\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link SlashCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Whether this command is NSFW.\n\t */\n\tpublic readonly nsfw: boolean | undefined = undefined;\n}\n\nexport interface SlashCommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command subcommands.\n */\nexport interface SlashCommandSubcommandsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command options.\n */\nexport interface SlashCommandOptionsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface that ensures the `toJSON()` call will return something\n * that can be serialized into API-compatible data.\n */\nexport interface ToAPIApplicationCommandOptions {\n\ttoJSON(): APIApplicationCommandOption;\n}\n","import type { LocaleString, LocalizationMap } from 'discord-api-types/v10';\nimport { validateDescription, validateLocale, validateName } from '../Assertions.js';\n\n/**\n * This mixin holds name and description symbols for slash commands.\n */\nexport class SharedNameAndDescription {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name!: string;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description!: string;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string): this {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this command.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\t// Assert the description matches the conditions\n\t\tvalidateDescription(description);\n\n\t\tReflect.set(this, 'description', description);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames)) {\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a description localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedDescription - The localized description for the given locale\n\t */\n\tpublic setDescriptionLocalization(locale: LocaleString, localizedDescription: string | null) {\n\t\tif (!this.description_localizations) {\n\t\t\tReflect.set(this, 'description_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedDescription === null) {\n\t\t\tthis.description_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateDescription(localizedDescription);\n\n\t\tthis.description_localizations![parsedLocale] = localizedDescription;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description localizations for this command.\n\t *\n\t * @param localizedDescriptions - The object of localized descriptions to set\n\t */\n\tpublic setDescriptionLocalizations(localizedDescriptions: LocalizationMap | null) {\n\t\tif (localizedDescriptions === null) {\n\t\t\tReflect.set(this, 'description_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'description_localizations', {});\n\t\tfor (const args of Object.entries(localizedDescriptions)) {\n\t\t\tthis.setDescriptionLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n}\n","import {\n\tApplicationCommandType,\n\ttype ApplicationIntegrationType,\n\ttype InteractionContextType,\n\ttype LocalizationMap,\n\ttype Permissions,\n\ttype RESTPostAPIChatInputApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../../util/normalizeArray.js';\nimport { normalizeArray } from '../../../util/normalizeArray.js';\nimport {\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n\tvalidateDMPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDefaultPermission,\n\tvalidateLocalizationMap,\n\tvalidateNSFW,\n\tvalidateRequiredParameters,\n} from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\n\n/**\n * This mixin holds symbols that can be shared in slashcommands independent of options or subcommands.\n */\nexport class SharedSlashCommand {\n\tpublic readonly name: string = undefined!;\n\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\tpublic readonly description: string = undefined!;\n\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\tpublic readonly nsfw: boolean | undefined = undefined;\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether or not to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run the command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated\n\t * Use {@link SharedSlashCommand.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this command is NSFW.\n\t *\n\t * @param nsfw - Whether this command is NSFW\n\t */\n\tpublic setNSFW(nsfw = true) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateNSFW(nsfw);\n\t\tReflect.set(this, 'nsfw', nsfw);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIChatInputApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\treturn {\n\t\t\t...this,\n\t\t\ttype: ApplicationCommandType.ChatInput,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandAttachmentOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command attachment option.\n */\nexport class SlashCommandAttachmentOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Attachment as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandAttachmentOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIApplicationCommandBasicOption, ApplicationCommandOptionType } from 'discord-api-types/v10';\nimport { validateRequiredParameters, validateRequired, validateLocalizationMap } from '../Assertions.js';\nimport { SharedNameAndDescription } from './NameAndDescription.js';\n\n/**\n * The base application command option builder that contains common symbols for application command builders.\n */\nexport abstract class ApplicationCommandOptionBase extends SharedNameAndDescription {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic abstract readonly type: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option is required.\n\t *\n\t * @defaultValue `false`\n\t */\n\tpublic readonly required: boolean = false;\n\n\t/**\n\t * Sets whether this option is required.\n\t *\n\t * @param required - Whether this option should be required\n\t */\n\tpublic setRequired(required: boolean) {\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(required);\n\n\t\tReflect.set(this, 'required', required);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): APIApplicationCommandBasicOption;\n\n\t/**\n\t * This method runs required validators on this builder.\n\t */\n\tprotected runRequiredValidations() {\n\t\tvalidateRequiredParameters(this.name, this.description, []);\n\n\t\t// Validate localizations\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(this.required);\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandBooleanOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command boolean option.\n */\nexport class SlashCommandBooleanOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Boolean as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandBooleanOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandChannelOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionChannelTypesMixin } from '../mixins/ApplicationCommandOptionChannelTypesMixin.js';\n\n/**\n * A slash command channel option.\n */\n@mix(ApplicationCommandOptionChannelTypesMixin)\nexport class SlashCommandChannelOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Channel as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandChannelOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n\nexport interface SlashCommandChannelOption extends ApplicationCommandOptionChannelTypesMixin {}\n","import { s } from '@sapphire/shapeshift';\nimport { ChannelType } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray';\n\n/**\n * The allowed channel types used for a channel option in a slash command builder.\n *\n * @privateRemarks This can't be dynamic because const enums are erased at runtime.\n * @internal\n */\nconst allowedChannelTypes = [\n\tChannelType.GuildText,\n\tChannelType.GuildVoice,\n\tChannelType.GuildCategory,\n\tChannelType.GuildAnnouncement,\n\tChannelType.AnnouncementThread,\n\tChannelType.PublicThread,\n\tChannelType.PrivateThread,\n\tChannelType.GuildStageVoice,\n\tChannelType.GuildForum,\n\tChannelType.GuildMedia,\n] as const;\n\n/**\n * The type of allowed channel types used for a channel option.\n */\nexport type ApplicationCommandOptionAllowedChannelTypes = (typeof allowedChannelTypes)[number];\n\nconst channelTypesPredicate = s.array(s.union(allowedChannelTypes.map((type) => s.literal(type))));\n\n/**\n * This mixin holds channel type symbols used for options.\n */\nexport class ApplicationCommandOptionChannelTypesMixin {\n\t/**\n\t * The channel types of this option.\n\t */\n\tpublic readonly channel_types?: ApplicationCommandOptionAllowedChannelTypes[];\n\n\t/**\n\t * Adds channel types to this option.\n\t *\n\t * @param channelTypes - The channel types\n\t */\n\tpublic addChannelTypes(...channelTypes: RestOrArray) {\n\t\tif (this.channel_types === undefined) {\n\t\t\tReflect.set(this, 'channel_types', []);\n\t\t}\n\n\t\tthis.channel_types!.push(...channelTypesPredicate.parse(normalizeArray(channelTypes)));\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandIntegerOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number().int();\n\n/**\n * A slash command integer option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandIntegerOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Integer as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandIntegerOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandIntegerOption;\n\t}\n}\n\nexport interface SlashCommandIntegerOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","/**\n * This mixin holds minimum and maximum symbols used for options.\n */\nexport abstract class ApplicationCommandNumericOptionMinMaxValueMixin {\n\t/**\n\t * The maximum value of this option.\n\t */\n\tpublic readonly max_value?: number;\n\n\t/**\n\t * The minimum value of this option.\n\t */\n\tpublic readonly min_value?: number;\n\n\t/**\n\t * Sets the maximum number value of this option.\n\t *\n\t * @param max - The maximum value this option can be\n\t */\n\tpublic abstract setMaxValue(max: number): this;\n\n\t/**\n\t * Sets the minimum number value of this option.\n\t *\n\t * @param min - The minimum value this option can be\n\t */\n\tpublic abstract setMinValue(min: number): this;\n}\n","import { s } from '@sapphire/shapeshift';\nimport type { ApplicationCommandOptionType } from 'discord-api-types/v10';\n\nconst booleanPredicate = s.boolean();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithAutocompleteMixin {\n\t/**\n\t * Whether this option utilizes autocomplete.\n\t */\n\tpublic readonly autocomplete?: boolean;\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option uses autocomplete.\n\t *\n\t * @param autocomplete - Whether this option should use autocomplete\n\t */\n\tpublic setAutocomplete(autocomplete: boolean): this {\n\t\t// Assert that you actually passed a boolean\n\t\tbooleanPredicate.parse(autocomplete);\n\n\t\tif (autocomplete && 'choices' in this && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tReflect.set(this, 'autocomplete', autocomplete);\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandOptionChoice } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray.js';\nimport { localizationMapPredicate, validateChoicesLength } from '../Assertions.js';\n\nconst stringPredicate = s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100);\nconst numberPredicate = s.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY);\nconst choicesPredicate = s\n\t.object({\n\t\tname: stringPredicate,\n\t\tname_localizations: localizationMapPredicate,\n\t\tvalue: s.union([stringPredicate, numberPredicate]),\n\t})\n\t.array();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithChoicesMixin {\n\t/**\n\t * The choices of this option.\n\t */\n\tpublic readonly choices?: APIApplicationCommandOptionChoice[];\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Adds multiple choices to this option.\n\t *\n\t * @param choices - The choices to add\n\t */\n\tpublic addChoices(...choices: RestOrArray>): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tif (this.choices === undefined) {\n\t\t\tReflect.set(this, 'choices', []);\n\t\t}\n\n\t\tvalidateChoicesLength(normalizedChoices.length, this.choices);\n\n\t\tfor (const { name, name_localizations, value } of normalizedChoices) {\n\t\t\t// Validate the value\n\t\t\tif (this.type === ApplicationCommandOptionType.String) {\n\t\t\t\tstringPredicate.parse(value);\n\t\t\t} else {\n\t\t\t\tnumberPredicate.parse(value);\n\t\t\t}\n\n\t\t\tthis.choices!.push({ name, name_localizations, value });\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets multiple choices for this option.\n\t *\n\t * @param choices - The choices to set\n\t */\n\tpublic setChoices>(...choices: RestOrArray): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tReflect.set(this, 'choices', []);\n\t\tthis.addChoices(normalizedChoices);\n\n\t\treturn this;\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandMentionableOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command mentionable option.\n */\nexport class SlashCommandMentionableOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Mentionable as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandMentionableOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandNumberOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number();\n\n/**\n * A slash command number option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandNumberOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Number as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandNumberOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandNumberOption;\n\t}\n}\n\nexport interface SlashCommandNumberOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandRoleOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command role option.\n */\nexport class SlashCommandRoleOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Role as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandRoleOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandStringOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst minLengthValidator = s.number().greaterThanOrEqual(0).lessThanOrEqual(6_000);\nconst maxLengthValidator = s.number().greaterThanOrEqual(1).lessThanOrEqual(6_000);\n\n/**\n * A slash command string option.\n */\n@mix(ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin)\nexport class SlashCommandStringOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.String as const;\n\n\t/**\n\t * The maximum length of this option.\n\t */\n\tpublic readonly max_length?: number;\n\n\t/**\n\t * The minimum length of this option.\n\t */\n\tpublic readonly min_length?: number;\n\n\t/**\n\t * Sets the maximum length of this string option.\n\t *\n\t * @param max - The maximum length this option can be\n\t */\n\tpublic setMaxLength(max: number): this {\n\t\tmaxLengthValidator.parse(max);\n\n\t\tReflect.set(this, 'max_length', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of this string option.\n\t *\n\t * @param min - The minimum length this option can be\n\t */\n\tpublic setMinLength(min: number): this {\n\t\tminLengthValidator.parse(min);\n\n\t\tReflect.set(this, 'min_length', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandStringOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandStringOption;\n\t}\n}\n\nexport interface SlashCommandStringOption\n\textends ApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandUserOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command user option.\n */\nexport class SlashCommandUserOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.User as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandUserOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder';\nimport { SlashCommandAttachmentOption } from '../options/attachment.js';\nimport { SlashCommandBooleanOption } from '../options/boolean.js';\nimport { SlashCommandChannelOption } from '../options/channel.js';\nimport { SlashCommandIntegerOption } from '../options/integer.js';\nimport { SlashCommandMentionableOption } from '../options/mentionable.js';\nimport { SlashCommandNumberOption } from '../options/number.js';\nimport { SlashCommandRoleOption } from '../options/role.js';\nimport { SlashCommandStringOption } from '../options/string.js';\nimport { SlashCommandUserOption } from '../options/user.js';\nimport type { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js';\n\n/**\n * This mixin holds symbols that can be shared in slash command options.\n *\n * @typeParam TypeAfterAddingOptions - The type this class should return after adding an option.\n */\nexport class SharedSlashCommandOptions<\n\tTypeAfterAddingOptions extends SharedSlashCommandOptions,\n> {\n\tpublic readonly options!: ToAPIApplicationCommandOptions[];\n\n\t/**\n\t * Adds a boolean option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addBooleanOption(\n\t\tinput: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandBooleanOption);\n\t}\n\n\t/**\n\t * Adds a user option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandUserOption);\n\t}\n\n\t/**\n\t * Adds a channel option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addChannelOption(\n\t\tinput: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandChannelOption);\n\t}\n\n\t/**\n\t * Adds a role option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandRoleOption);\n\t}\n\n\t/**\n\t * Adds an attachment option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addAttachmentOption(\n\t\tinput: SlashCommandAttachmentOption | ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandAttachmentOption);\n\t}\n\n\t/**\n\t * Adds a mentionable option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addMentionableOption(\n\t\tinput: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandMentionableOption);\n\t}\n\n\t/**\n\t * Adds a string option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addStringOption(\n\t\tinput: SlashCommandStringOption | ((builder: SlashCommandStringOption) => SlashCommandStringOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandStringOption);\n\t}\n\n\t/**\n\t * Adds an integer option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addIntegerOption(\n\t\tinput: SlashCommandIntegerOption | ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandIntegerOption);\n\t}\n\n\t/**\n\t * Adds a number option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addNumberOption(\n\t\tinput: SlashCommandNumberOption | ((builder: SlashCommandNumberOption) => SlashCommandNumberOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandNumberOption);\n\t}\n\n\t/**\n\t * Where the actual adding magic happens. ✨\n\t *\n\t * @param input - The input. What else?\n\t * @param Instance - The instance of whatever is being added\n\t * @internal\n\t */\n\tprivate _sharedAddOptionMethod(\n\t\tinput: OptionBuilder | ((builder: OptionBuilder) => OptionBuilder),\n\t\tInstance: new () => OptionBuilder,\n\t): TypeAfterAddingOptions {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new Instance()) : input;\n\n\t\tassertReturnOfBuilder(result, Instance);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingOptions;\n\t}\n}\n","import {\n\tApplicationCommandOptionType,\n\ttype APIApplicationCommandSubcommandGroupOption,\n\ttype APIApplicationCommandSubcommandOption,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { assertReturnOfBuilder, validateMaxOptionsLength, validateRequiredParameters } from './Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\n\n/**\n * Represents a folder for subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription)\nexport class SlashCommandSubcommandGroupBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand group.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand group.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The subcommands within this subcommand group.\n\t */\n\tpublic readonly options: SlashCommandSubcommandBuilder[] = [];\n\n\t/**\n\t * Adds a new subcommand to this group.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t) {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandGroupOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.SubcommandGroup,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandGroupBuilder extends SharedNameAndDescription {}\n\n/**\n * A builder that creates API-compatible JSON data for slash command subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription, SharedSlashCommandOptions)\nexport class SlashCommandSubcommandBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The options within this subcommand.\n\t */\n\tpublic readonly options: ApplicationCommandOptionBase[] = [];\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.Subcommand,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions {}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\nimport { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from '../SlashCommandSubcommands.js';\n\n/**\n * This mixin holds symbols that can be shared in slash subcommands.\n *\n * @typeParam TypeAfterAddingSubcommands - The type this class should return after adding a subcommand or subcommand group.\n */\nexport class SharedSlashCommandSubcommands<\n\tTypeAfterAddingSubcommands extends SharedSlashCommandSubcommands,\n> {\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * Adds a new subcommand group to this command.\n\t *\n\t * @param input - A function that returns a subcommand group builder or an already built builder\n\t */\n\tpublic addSubcommandGroup(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandGroupBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandGroupBuilder) => SlashCommandSubcommandGroupBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandGroupBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandGroupBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n\n\t/**\n\t * Adds a new subcommand to this command.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandType, ApplicationIntegrationType, InteractionContextType } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ContextMenuCommandType } from './ContextMenuCommandBuilder.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t// eslint-disable-next-line prefer-named-capture-group\n\t.regex(/^( *[\\p{P}\\p{L}\\p{N}\\p{sc=Devanagari}\\p{sc=Thai}]+ *)+$/u)\n\t.setValidationEnabled(isValidationEnabled);\nconst typePredicate = s\n\t.union([s.literal(ApplicationCommandType.User), s.literal(ApplicationCommandType.Message)])\n\t.setValidationEnabled(isValidationEnabled);\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nexport function validateType(type: unknown): asserts type is ContextMenuCommandType {\n\ttypePredicate.parse(type);\n}\n\nexport function validateRequiredParameters(name: string, type: number) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert type is valid\n\tvalidateType(type);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tApplicationCommandType,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocaleString,\n\tLocalizationMap,\n\tPermissions,\n\tRESTPostAPIContextMenuApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../util/normalizeArray.js';\nimport { normalizeArray } from '../../util/normalizeArray.js';\nimport { validateLocale, validateLocalizationMap } from '../slashCommands/Assertions.js';\nimport {\n\tvalidateRequiredParameters,\n\tvalidateName,\n\tvalidateType,\n\tvalidateDefaultPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDMPermission,\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n} from './Assertions.js';\n\n/**\n * The type a context menu command can be.\n */\nexport type ContextMenuCommandType = ApplicationCommandType.Message | ApplicationCommandType.User;\n\n/**\n * A builder that creates API-compatible JSON data for context menu commands.\n */\nexport class ContextMenuCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The type of this command.\n\t */\n\tpublic readonly type: ContextMenuCommandType = undefined!;\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link ContextMenuCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string) {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the type of this command.\n\t *\n\t * @param type - The type to use\n\t */\n\tpublic setType(type: ContextMenuCommandType) {\n\t\t// Assert the type is valid\n\t\tvalidateType(type);\n\n\t\tReflect.set(this, 'type', type);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run this command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames))\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIContextMenuApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.type);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIEmbed } from 'discord-api-types/v10';\n\n/**\n * Calculates the length of the embed.\n *\n * @param data - The embed data to check\n */\nexport function embedLength(data: APIEmbed) {\n\treturn (\n\t\t(data.title?.length ?? 0) +\n\t\t(data.description?.length ?? 0) +\n\t\t(data.fields?.reduce((prev, curr) => prev + curr.name.length + curr.value.length, 0) ?? 0) +\n\t\t(data.footer?.text.length ?? 0) +\n\t\t(data.author?.name.length ?? 0)\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAAAA;AAAA,EAAA;AAAA,gCAAAA;AAAA,EAAA;AAAA,sCAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAkB;;;ACAlB,IAAI,WAAW;AAOR,SAAS,mBAAmB;AAClC,SAAQ,WAAW;AACpB;AAFgB;AAST,SAAS,oBAAoB;AACnC,SAAQ,WAAW;AACpB;AAFgB;AAOT,SAAS,sBAAsB;AACrC,SAAO;AACR;AAFgB;;;ADnBT,IAAM,qBAAqB,oBAAE,OAAO,EAAE,sBAAsB,GAAG,EAAE,qBAAqB,mBAAmB;AAEzG,IAAM,sBAAsB,oBAAE,OAAO,EAAE,sBAAsB,IAAK,EAAE,qBAAqB,mBAAmB;AAE5G,IAAM,uBAAuB,oBAAE,QAAQ,EAAE,SAAS;AAElD,IAAM,sBAAsB,oBACjC,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AACT,CAAC,EACA,qBAAqB,mBAAmB;AAEnC,IAAM,4BAA4B,oBAAoB,MAAM,EAAE,qBAAqB,mBAAmB;AAEtG,IAAM,uBAAuB,oBAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,qBAAqB,mBAAmB;AAEpG,SAAS,oBAAoB,cAAsB,QAAgC;AACzF,uBAAqB,OAAO,QAAQ,UAAU,KAAK,YAAY;AAChE;AAFgB;AAIT,IAAM,sBAAsB,mBACjC,yBAAyB,CAAC,EAC1B,SAAS,EACT,qBAAqB,mBAAmB;AAEnC,IAAM,oBAAoB,oBAC/B,OAAO,EACP,IAAI;AAAA,EACJ,kBAAkB,CAAC,SAAS,UAAU,aAAa;AACpD,CAAC,EACA,QAAQ,EACR,qBAAqB,mBAAmB;AAEnC,IAAM,eAAe,oBAC1B,OAAO,EACP,IAAI;AAAA,EACJ,kBAAkB,CAAC,SAAS,QAAQ;AACrC,CAAC,EACA,QAAQ,EACR,qBAAqB,mBAAmB;AAEnC,IAAM,uBAAuB,oBAClC,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AAAA,EACT,KAAK;AACN,CAAC,EACA,qBAAqB,mBAAmB;AAEnC,IAAM,eAAe,oBAC1B,OAAO,EACP,IAAI,EACJ,mBAAmB,CAAC,EACpB,gBAAgB,GAAG,EACnB,qBAAqB,mBAAmB;AACnC,IAAM,iBAAiB,oBAC5B,OAAO,EACP,IAAI,EACJ,mBAAmB,CAAC,EACpB,gBAAgB,QAAQ,EACxB,GAAG,oBAAE,MAAM,CAAC,cAAc,cAAc,YAAY,CAAC,CAAC,EACtD,SAAS,EACT,qBAAqB,mBAAmB;AAEnC,IAAM,uBAAuB,oBAClC,OAAO,EACP,yBAAyB,CAAC,EAC1B,sBAAsB,IAAK,EAC3B,SAAS,EACT,qBAAqB,mBAAmB;AAEnC,IAAM,sBAAsB,oBACjC,OAAO,EACP,yBAAyB,CAAC,EAC1B,sBAAsB,IAAK,EAC3B,SAAS,EACT,qBAAqB,mBAAmB;AAEnC,IAAM,uBAAuB,oBAClC,OAAO;AAAA,EACP,MAAM;AAAA,EACN,SAAS;AACV,CAAC,EACA,qBAAqB,mBAAmB;AAEnC,IAAM,qBAAqB,oBAAE,MAAM,CAAC,oBAAE,OAAO,GAAG,oBAAE,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,qBAAqB,mBAAmB;AAE9G,IAAM,iBAAiB,mBAC5B,yBAAyB,CAAC,EAC1B,SAAS,EACT,qBAAqB,mBAAmB;;;AE1FnC,SAAS,eAAyB,KAAwC;AAChF,MAAI,MAAM,QAAQ,IAAI,CAAC,CAAC,EAAG,QAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5C,SAAO;AACR;AAHgB;;;AC+DT,IAAM,eAAN,MAAmB;AAAA,EArE1B,OAqE0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAIT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,YAAY,OAAiB,CAAC,GAAG;AACvC,SAAK,OAAO,EAAE,GAAG,KAAK;AACtB,QAAI,KAAK,UAAW,MAAK,KAAK,YAAY,IAAI,KAAK,KAAK,SAAS,EAAE,YAAY;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BO,aAAa,QAA0C;AAC7D,UAAM,mBAAmB,eAAe,MAAM;AAE9C,wBAAoB,iBAAiB,QAAQ,KAAK,KAAK,MAAM;AAG7D,8BAA0B,MAAM,gBAAgB;AAEhD,QAAI,KAAK,KAAK,OAAQ,MAAK,KAAK,OAAO,KAAK,GAAG,gBAAgB;AAAA,QAC1D,MAAK,KAAK,SAAS;AACxB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+BO,aAAa,OAAe,gBAAwB,QAA+B;AAEzF,wBAAoB,OAAO,SAAS,aAAa,KAAK,KAAK,MAAM;AAGjE,8BAA0B,MAAM,MAAM;AACtC,QAAI,KAAK,KAAK,OAAQ,MAAK,KAAK,OAAO,OAAO,OAAO,aAAa,GAAG,MAAM;AAAA,QACtE,MAAK,KAAK,SAAS;AACxB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYO,aAAa,QAA0C;AAC7D,SAAK,aAAa,GAAG,KAAK,KAAK,QAAQ,UAAU,GAAG,GAAG,eAAe,MAAM,CAAC;AAC7E,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,UAAU,SAA0C;AAC1D,QAAI,YAAY,MAAM;AACrB,WAAK,KAAK,SAAS;AACnB,aAAO;AAAA,IACR;AAGA,yBAAqB,MAAM,OAAO;AAElC,SAAK,KAAK,SAAS,EAAE,MAAM,QAAQ,MAAM,KAAK,QAAQ,KAAK,UAAU,QAAQ,QAAQ;AACrF,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,OAAuC;AAEtD,mBAAe,MAAM,KAAK;AAE1B,QAAI,MAAM,QAAQ,KAAK,GAAG;AACzB,YAAM,CAAC,KAAK,OAAO,IAAI,IAAI;AAC3B,WAAK,KAAK,SAAS,OAAO,OAAO,SAAS,KAAK;AAC/C,aAAO;AAAA,IACR;AAEA,SAAK,KAAK,QAAQ,SAAS;AAC3B,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,eAAe,aAAkC;AAEvD,yBAAqB,MAAM,WAAW;AAEtC,SAAK,KAAK,cAAc,eAAe;AACvC,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAU,SAA0C;AAC1D,QAAI,YAAY,MAAM;AACrB,WAAK,KAAK,SAAS;AACnB,aAAO;AAAA,IACR;AAGA,yBAAqB,MAAM,OAAO;AAElC,SAAK,KAAK,SAAS,EAAE,MAAM,QAAQ,MAAM,UAAU,QAAQ,QAAQ;AACnE,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,KAA0B;AAEzC,sBAAkB,MAAM,GAAG;AAE3B,SAAK,KAAK,QAAQ,MAAM,EAAE,IAAI,IAAI;AAClC,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aAAa,KAA0B;AAE7C,sBAAkB,MAAM,GAAG;AAE3B,SAAK,KAAK,YAAY,MAAM,EAAE,IAAI,IAAI;AACtC,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aAAa,YAAkC,KAAK,IAAI,GAAS;AAEvE,uBAAmB,MAAM,SAAS;AAElC,SAAK,KAAK,YAAY,YAAY,IAAI,KAAK,SAAS,EAAE,YAAY,IAAI;AACtE,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,OAA4B;AAE3C,mBAAe,MAAM,KAAK;AAE1B,SAAK,KAAK,QAAQ,SAAS;AAC3B,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,OAAO,KAA0B;AAEvC,iBAAa,MAAM,GAAG;AAEtB,SAAK,KAAK,MAAM,OAAO;AACvB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,SAAmB;AACzB,WAAO,EAAE,GAAG,KAAK,KAAK;AAAA,EACvB;AACD;;;AJ9TA,wBAAc,kCAHd;;;AKAA,IAAAC,sBAAA;AAAA,SAAAA,qBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAC,qBAAkB;AAClB,iBAAwE;;;ACWjE,IAAM,gCAAN,MAAkF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBjF,YAAmB,OAAqC,CAAC,GAAG;AAAzC;AAAA,EAA0C;AAAA,EAnCrE,OAYyF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BjF,SAAS,OAAe;AAC9B,SAAK,KAAK,QAAQ,+BAA+B,MAAM,KAAK;AAC5D,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,OAAe;AAC9B,SAAK,KAAK,QAAQ,+BAA+B,MAAM,KAAK;AAC5D,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,eAAe,aAAqB;AAC1C,SAAK,KAAK,cAAc,+BAA+B,MAAM,WAAW;AACxE,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,WAAW,YAAY,MAAM;AACnC,SAAK,KAAK,UAAU,iBAAiB,MAAM,SAAS;AACpD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,OAAiC;AAChD,SAAK,KAAK,QAAQ,eAAe,MAAM,KAAK;AAC5C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,SAA8B;AACpC,+CAA2C,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK;AAE3E,WAAO;AAAA,MACN,GAAG,KAAK;AAAA,IACT;AAAA,EACD;AACD;;;AD5FO,IAAM,cAAc,qBACzB,OAAO,EACP,QAAQ,EACR,mBAAmB,CAAC,EACpB,SAAS,UAAa,EACtB,qBAAqB,mBAAmB;AAEnC,IAAM,oBAAoB,qBAC/B,OAAO,EACP,yBAAyB,CAAC,EAC1B,sBAAsB,GAAG,EACzB,qBAAqB,mBAAmB;AAEnC,IAAM,iBAAiB,qBAC5B,OAAO;AAAA,EACP,IAAI,qBAAE,OAAO;AAAA,EACb,MAAM,qBAAE,OAAO;AAAA,EACf,UAAU,qBAAE,QAAQ;AACrB,CAAC,EACA,QAAQ,EACR,OAAO,EACP,qBAAqB,mBAAmB;AAEnC,IAAM,oBAAoB,qBAAE,QAAQ;AAEpC,IAAM,uBAAuB,qBAClC,OAAO,EACP,yBAAyB,CAAC,EAC1B,sBAAsB,EAAE,EACxB,qBAAqB,mBAAmB;AAEnC,IAAM,uBAAuB,qBAAE,WAAW,sBAAW;AAErD,IAAM,uBAAuB,qBAAE,OAAO,EAAE,sBAAsB,GAAG,EAAE,qBAAqB,mBAAmB;AAC3G,IAAM,kBAAkB,qBAC7B,OAAO,EACP,IAAI,EACJ,mBAAmB,CAAC,EACpB,gBAAgB,EAAE,EAClB,qBAAqB,mBAAmB;AAEnC,IAAM,iCAAiC,qBAC5C,OAAO,EACP,yBAAyB,CAAC,EAC1B,sBAAsB,GAAG,EACzB,qBAAqB,mBAAmB;AAEnC,IAAM,sBAAsB,qBACjC,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,aAAa,+BAA+B,SAAS;AAAA,EACrD,OAAO,eAAe,SAAS;AAAA,EAC/B,SAAS,qBAAE,QAAQ,EAAE,SAAS;AAC/B,CAAC,EACA,qBAAqB,mBAAmB;AAEnC,IAAM,kBAAkB,qBAAE,SAAS,6BAA6B,EAAE,qBAAqB,mBAAmB;AAE1G,IAAM,mBAAmB,gBAC9B,MAAM,EACN,yBAAyB,CAAC,EAC1B,qBAAqB,mBAAmB;AACnC,IAAM,yBAAyB,qBACpC,OAAO,EACP,IAAI,EACJ,mBAAmB,CAAC,EACpB,gBAAgB,EAAE,EAClB,qBAAqB,mBAAmB;AAEnC,SAAS,qCAAqC,SAA0C,UAAmB;AACjH,oBAAkB,MAAM,QAAQ;AAChC,mBAAiB,MAAM,OAAO;AAC/B;AAHgB;AAKT,IAAM,mBAAmB,qBAAE,QAAQ;AAEnC,SAAS,2CAA2C,OAAgB,OAAgB;AAC1F,iCAA+B,MAAM,KAAK;AAC1C,iCAA+B,MAAM,KAAK;AAC3C;AAHgB;AAKT,IAAM,wBAAwB,qBAAE,WAAW,sBAAW,EAAE,MAAM,EAAE,qBAAqB,mBAAmB;AAExG,IAAM,eAAe,qBAC1B,OAAO,EACP,IAAI;AAAA,EACJ,kBAAkB,CAAC,SAAS,UAAU,UAAU;AACjD,CAAC,EACA,qBAAqB,mBAAmB;AAEnC,SAAS,iCACf,OACA,OACA,OACA,UACA,OACA,KACC;AACD,MAAI,UAAU,uBAAY,SAAS;AAClC,QAAI,CAAC,OAAO;AACX,YAAM,IAAI,WAAW,sCAAsC;AAAA,IAC5D;AAEA,QAAI,YAAY,SAAS,OAAO,OAAO;AACtC,YAAM,IAAI,WAAW,gEAAgE;AAAA,IACtF;AAAA,EACD,OAAO;AACN,QAAI,OAAO;AACV,YAAM,IAAI,WAAW,8CAA8C;AAAA,IACpE;AAEA,QAAI,OAAO,UAAU;AACpB,YAAM,IAAI,WAAW,2CAA2C;AAAA,IACjE;AAEA,QAAI,CAAC,SAAS,CAAC,OAAO;AACrB,YAAM,IAAI,WAAW,wDAAwD;AAAA,IAC9E;AAEA,QAAI,UAAU,uBAAY,MAAM;AAC/B,UAAI,CAAC,KAAK;AACT,cAAM,IAAI,WAAW,+BAA+B;AAAA,MACrD;AAAA,IACD,WAAW,KAAK;AACf,YAAM,IAAI,WAAW,qDAAqD;AAAA,IAC3E;AAAA,EACD;AACD;AArCgB;;;AE9FhB,IAAAC,eAMO;;;ACeA,IAAe,mBAAf,MAGP;AAAA,EA1BA,OA0BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAIiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBT,YAAY,MAAyB;AAC3C,SAAK,OAAO;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,MAAM,IAAY;AACxB,SAAK,KAAK,KAAK,YAAY,MAAM,EAAE;AACnC,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,UAAU;AAChB,SAAK,KAAK,KAAK;AACf,WAAO;AAAA,EACR;AACD;;;AClEA,IAAAC,eAAgF;;;ACDhF,IAAAC,cASO;AAeA,IAAM,gBAAN,cAA4B,iBAAqC;AAAA,EAxBxE,OAwBwE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BhE,YAAY,MAAoC;AACtD,UAAM,EAAE,MAAM,0BAAc,QAAQ,GAAG,KAAK,CAAC;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,OAAoB;AACnC,SAAK,KAAK,QAAQ,qBAAqB,MAAM,KAAK;AAClD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUO,OAAO,KAAa;AAC1B,IAAC,KAAK,KAAmC,MAAM,aAAa,MAAM,GAAG;AACrE,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,YAAY,UAAkB;AACpC,IAAC,KAAK,KAAwC,YAAY,kBAAkB,MAAM,QAAQ;AAC1F,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,SAAS,OAAkB;AACjC,IAAC,KAAK,KAAqC,SAAS;AACpD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,OAAiC;AAChD,IAAC,KAAK,KAAkE,QAAQ,eAAe,MAAM,KAAK;AAC1G,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,YAAY,WAAW,MAAM;AACnC,SAAK,KAAK,WAAW,kBAAkB,MAAM,QAAQ;AACrD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,OAAe;AAC9B,IAAC,KAAK,KAAkE,QAAQ,qBAAqB,MAAM,KAAK;AAChH,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,SAA6B;AACnC;AAAA,MACC,KAAK,KAAK;AAAA,MACT,KAAK,KAAkE;AAAA,MACvE,KAAK,KAAkE;AAAA,MACvE,KAAK,KAAwC;AAAA,MAC7C,KAAK,KAAqC;AAAA,MAC1C,KAAK,KAAmC;AAAA,IAC1C;AAEA,WAAO;AAAA,MACN,GAAG,KAAK;AAAA,IACT;AAAA,EACD;AACD;;;ACtJA,IAAAC,cAMO;;;ACGA,IAAe,wBAAf,cAEG,iBAAiC;AAAA,EAX3C,OAW2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnC,eAAe,aAAqB;AAC1C,SAAK,KAAK,cAAc,qBAAqB,MAAM,WAAW;AAC9D,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aAAa,WAAmB;AACtC,SAAK,KAAK,aAAa,gBAAgB,MAAM,SAAS;AACtD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aAAa,WAAmB;AACtC,SAAK,KAAK,aAAa,gBAAgB,MAAM,SAAS;AACtD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,YAAY,UAAkB;AACpC,SAAK,KAAK,YAAY,kBAAkB,MAAM,QAAQ;AACtD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,YAAY,WAAW,MAAM;AACnC,SAAK,KAAK,WAAW,kBAAkB,MAAM,QAAQ;AACrD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,SAAyB;AAC/B,sBAAkB,MAAM,KAAK,KAAK,SAAS;AAC3C,WAAO;AAAA,MACN,GAAG,KAAK;AAAA,IACT;AAAA,EACD;AACD;;;ADzDO,IAAM,2BAAN,cAAuC,sBAAiD;AAAA,EAd/F,OAc+F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBvF,YAAY,MAA2C;AAC7D,UAAM,EAAE,GAAG,MAAM,MAAM,0BAAc,cAAc,CAAC;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,mBAAmB,OAAiC;AAC1D,UAAM,kBAAkB,eAAe,KAAK;AAC5C,SAAK,KAAK,kBAAkB,CAAC;AAC7B,SAAK,KAAK,cAAc,KAAK,GAAG,sBAAsB,MAAM,eAAe,CAAC;AAC5E,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,mBAAmB,OAAiC;AAC1D,UAAM,kBAAkB,eAAe,KAAK;AAC5C,SAAK,KAAK,kBAAkB,CAAC;AAC7B,SAAK,KAAK,cAAc,OAAO,GAAG,KAAK,KAAK,cAAc,QAAQ,GAAG,sBAAsB,MAAM,eAAe,CAAC;AACjH,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,sBAAsB,UAAkC;AAC9D,UAAM,mBAAmB,eAAe,QAAQ;AAChD,2BAAuB,OAAO,KAAK,KAAK,gBAAgB,UAAU,KAAK,iBAAiB,MAAM;AAC9F,SAAK,KAAK,mBAAmB,CAAC;AAE9B,SAAK,KAAK,eAAe;AAAA,MACxB,GAAG,iBAAiB,IAAI,CAAC,QAAQ;AAAA,QAChC;AAAA,QACA,MAAM,uCAA2B;AAAA,MAClC,EAAE;AAAA,IACH;AAEA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,sBAAsB,UAAkC;AAC9D,UAAM,mBAAmB,eAAe,QAAQ;AAChD,2BAAuB,MAAM,iBAAiB,MAAM;AAEpD,SAAK,KAAK,iBAAiB,iBAAiB,IAAI,CAAC,QAAQ;AAAA,MACxD;AAAA,MACA,MAAM,uCAA2B;AAAA,IAClC,EAAE;AAEF,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKgB,SAAoC;AACnD,sBAAkB,MAAM,KAAK,KAAK,SAAS;AAE3C,WAAO;AAAA,MACN,GAAG,KAAK;AAAA,IACT;AAAA,EACD;AACD;;;AEjHA,IAAAC,cAMO;AAQA,IAAM,+BAAN,cAA2C,sBAAqD;AAAA,EAdvG,OAcuG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuB/F,YAAY,MAA+C;AACjE,UAAM,EAAE,GAAG,MAAM,MAAM,0BAAc,kBAAkB,CAAC;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,mBAAmB,OAA+B;AACxD,UAAM,mBAAmB,eAAe,KAAK;AAC7C,2BAAuB,OAAO,KAAK,KAAK,gBAAgB,UAAU,KAAK,iBAAiB,MAAM;AAC9F,SAAK,KAAK,mBAAmB,CAAC;AAE9B,SAAK,KAAK,eAAe;AAAA,MACxB,GAAG,iBAAiB,IAAI,CAAC,QAAQ;AAAA,QAChC;AAAA,QACA,MAAM,uCAA2B;AAAA,MAClC,EAAE;AAAA,IACH;AAEA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,mBAAmB,OAA+B;AACxD,UAAM,mBAAmB,eAAe,KAAK;AAC7C,2BAAuB,OAAO,KAAK,KAAK,gBAAgB,UAAU,KAAK,iBAAiB,MAAM;AAC9F,SAAK,KAAK,mBAAmB,CAAC;AAE9B,SAAK,KAAK,eAAe;AAAA,MACxB,GAAG,iBAAiB,IAAI,CAAC,QAAQ;AAAA,QAChC;AAAA,QACA,MAAM,uCAA2B;AAAA,MAClC,EAAE;AAAA,IACH;AAEA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,oBACH,QAIF;AACD,UAAM,mBAAmB,eAAe,MAAM;AAC9C,2BAAuB,OAAO,KAAK,KAAK,gBAAgB,UAAU,KAAK,iBAAiB,MAAM;AAC9F,SAAK,KAAK,mBAAmB,CAAC;AAC9B,SAAK,KAAK,eAAe,KAAK,GAAG,gBAAgB;AACjD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,oBACH,QAIF;AACD,UAAM,mBAAmB,eAAe,MAAM;AAC9C,2BAAuB,MAAM,iBAAiB,MAAM;AACpD,SAAK,KAAK,iBAAiB;AAC3B,WAAO;AAAA,EACR;AACD;;;ACnHA,IAAAC,cAKO;AAQA,IAAM,wBAAN,cAAoC,sBAA8C;AAAA,EAbzF,OAayF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBjF,YAAY,MAAwC;AAC1D,UAAM,EAAE,GAAG,MAAM,MAAM,0BAAc,WAAW,CAAC;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,mBAAmB,OAA+B;AACxD,UAAM,mBAAmB,eAAe,KAAK;AAC7C,2BAAuB,OAAO,KAAK,KAAK,gBAAgB,UAAU,KAAK,iBAAiB,MAAM;AAC9F,SAAK,KAAK,mBAAmB,CAAC;AAE9B,SAAK,KAAK,eAAe;AAAA,MACxB,GAAG,iBAAiB,IAAI,CAAC,QAAQ;AAAA,QAChC;AAAA,QACA,MAAM,uCAA2B;AAAA,MAClC,EAAE;AAAA,IACH;AAEA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,mBAAmB,OAA+B;AACxD,UAAM,mBAAmB,eAAe,KAAK;AAC7C,2BAAuB,MAAM,iBAAiB,MAAM;AAEpD,SAAK,KAAK,iBAAiB,iBAAiB,IAAI,CAAC,QAAQ;AAAA,MACxD;AAAA,MACA,MAAM,uCAA2B;AAAA,IAClC,EAAE;AAEF,WAAO;AAAA,EACR;AACD;;;AC5EA,IAAAC,cAA8B;AAUvB,IAAM,0BAAN,cAAsC,sBAAgD;AAAA,EAV7F,OAU6F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAI5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiCT,YAAY,MAA0C;AAC5D,UAAM,EAAE,SAAS,GAAG,SAAS,IAAI,QAAQ,CAAC;AAC1C,UAAM,EAAE,GAAG,UAAU,MAAM,0BAAc,aAAa,CAAC;AACvD,SAAK,UAAU,SAAS,IAAI,CAAC,WAAgC,IAAI,8BAA8B,MAAM,CAAC,KAAK,CAAC;AAAA,EAC7G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,cAAc,SAA2E;AAC/F,UAAM,oBAAoB,eAAe,OAAO;AAChD,2BAAuB,MAAM,KAAK,QAAQ,SAAS,kBAAkB,MAAM;AAC3E,SAAK,QAAQ;AAAA,MACZ,GAAG,kBAAkB;AAAA,QAAI,CAAC,qBACzB,4BAA4B,gCACzB,mBACA,IAAI,8BAA8B,oBAAoB,MAAM,gBAAgB,CAAC;AAAA,MACjF;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,cAAc,SAA2E;AAC/F,WAAO,KAAK,cAAc,GAAG,KAAK,QAAQ,QAAQ,GAAG,OAAO;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BO,cACN,OACA,gBACG,SACF;AACD,UAAM,oBAAoB,eAAe,OAAO;AAEhD,UAAM,QAAQ,CAAC,GAAG,KAAK,OAAO;AAE9B,UAAM;AAAA,MACL;AAAA,MACA;AAAA,MACA,GAAG,kBAAkB;AAAA,QAAI,CAAC,qBACzB,4BAA4B,gCACzB,mBACA,IAAI,8BAA8B,oBAAoB,MAAM,gBAAgB,CAAC;AAAA,MACjF;AAAA,IACD;AAEA,2BAAuB,MAAM,MAAM,MAAM;AACzC,SAAK,QAAQ,OAAO,GAAG,KAAK,QAAQ,QAAQ,GAAG,KAAK;AACpD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKgB,SAAmC;AAClD,yCAAqC,KAAK,SAAS,KAAK,KAAK,SAAS;AAEtE,WAAO;AAAA,MACN,GAAG,KAAK;AAAA,MACR,SAAS,KAAK,QAAQ,IAAI,CAAC,WAAW,OAAO,OAAO,CAAC;AAAA,IACtD;AAAA,EACD;AACD;;;AC9IA,IAAAC,cAKO;AAQA,IAAM,wBAAN,cAAoC,sBAA8C;AAAA,EAbzF,OAayF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBjF,YAAY,MAAwC;AAC1D,UAAM,EAAE,GAAG,MAAM,MAAM,0BAAc,WAAW,CAAC;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,mBAAmB,OAA+B;AACxD,UAAM,mBAAmB,eAAe,KAAK;AAC7C,2BAAuB,OAAO,KAAK,KAAK,gBAAgB,UAAU,KAAK,iBAAiB,MAAM;AAC9F,SAAK,KAAK,mBAAmB,CAAC;AAE9B,SAAK,KAAK,eAAe;AAAA,MACxB,GAAG,iBAAiB,IAAI,CAAC,QAAQ;AAAA,QAChC;AAAA,QACA,MAAM,uCAA2B;AAAA,MAClC,EAAE;AAAA,IACH;AAEA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,mBAAmB,OAA+B;AACxD,UAAM,mBAAmB,eAAe,KAAK;AAC7C,2BAAuB,MAAM,iBAAiB,MAAM;AAEpD,SAAK,KAAK,iBAAiB,iBAAiB,IAAI,CAAC,QAAQ;AAAA,MACxD;AAAA,MACA,MAAM,uCAA2B;AAAA,IAClC,EAAE;AAEF,WAAO;AAAA,EACR;AACD;;;AC5EA,kBAAoE;AACpE,IAAAC,cAA+E;AAC/E,6BAAoB;;;ACFpB,IAAAC,sBAAA;AAAA,SAAAA,qBAAA;AAAA;AAAA;AAAA;AAAA,8BAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAC,qBAAkB;AAClB,IAAAC,cAA+B;AAIxB,IAAM,0BAA0B,qBAAE,WAAW,0BAAc;AAC3D,IAAM,qBAAqB,qBAChC,OAAO,EACP,IAAI,EACJ,mBAAmB,CAAC,EACpB,gBAAgB,GAAK,EACrB,qBAAqB,mBAAmB;AACnC,IAAM,qBAAqB,qBAChC,OAAO,EACP,IAAI,EACJ,mBAAmB,CAAC,EACpB,gBAAgB,GAAK,EACrB,qBAAqB,mBAAmB;AACnC,IAAM,oBAAoB,qBAAE,QAAQ;AACpC,IAAM,iBAAiB,qBAAE,OAAO,EAAE,sBAAsB,GAAK,EAAE,qBAAqB,mBAAmB;AACvG,IAAMC,wBAAuB,qBAAE,OAAO,EAAE,sBAAsB,GAAG,EAAE,qBAAqB,mBAAmB;AAC3G,IAAM,iBAAiB,qBAC5B,OAAO,EACP,yBAAyB,CAAC,EAC1B,sBAAsB,EAAE,EACxB,qBAAqB,mBAAmB;AAEnC,SAAS,2BAA2B,UAAmB,OAAwB,OAAgB;AACrG,oBAAkB,MAAM,QAAQ;AAChC,0BAAwB,MAAM,KAAK;AACnC,iBAAe,MAAM,KAAK;AAC3B;AAJgB;;;ADRT,IAAM,mBAAN,cACE,iBAET;AAAA,EAtBA,OAsBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBQ,YAAY,MAAmE;AACrF,UAAM,EAAE,MAAM,0BAAc,WAAW,GAAG,KAAK,CAAC;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,YAAY,UAAkB;AACpC,SAAK,KAAK,YAAY,kBAAkB,MAAM,QAAQ;AACtD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,OAAe;AAC9B,SAAK,KAAK,QAAQ,eAAe,MAAM,KAAK;AAC5C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,OAAuB;AACtC,SAAK,KAAK,QAAQ,wBAAwB,MAAM,KAAK;AACrD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aAAa,WAAmB;AACtC,SAAK,KAAK,aAAa,mBAAmB,MAAM,SAAS;AACzD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aAAa,WAAmB;AACtC,SAAK,KAAK,aAAa,mBAAmB,MAAM,SAAS;AACzD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,eAAe,aAAqB;AAC1C,SAAK,KAAK,cAAcC,sBAAqB,MAAM,WAAW;AAC9D,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,OAAe;AAC9B,SAAK,KAAK,QAAQ,eAAe,MAAM,KAAK;AAC5C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,YAAY,WAAW,MAAM;AACnC,SAAK,KAAK,WAAW,kBAAkB,MAAM,QAAQ;AACrD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,SAAgC;AACtC,+BAA2B,KAAK,KAAK,WAAW,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK;AAEhF,WAAO;AAAA,MACN,GAAG,KAAK;AAAA,IACT;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,OAA8E;AAC3F,YAAI,6BAAgB,KAAK,GAAG;AAC3B,iBAAO,uBAAAC,SAAQ,MAAM,OAAO,GAAG,KAAK,IAAI;AAAA,IACzC;AAEA,eAAO,uBAAAA,SAAQ,OAAO,KAAK,IAAI;AAAA,EAChC;AACD;;;AE1IA,IAAAC,eAA8B;;;ACb9B,IAAAC,sBAAA;AAAA,SAAAA,qBAAA;AAAA;AAAA;AAAA;AAAA,8BAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAC,qBAAkB;AAClB,IAAAC,eAAqC;;;ACArC,IAAAC,eAA8B;AAIvB,IAAM,mBAAN,cAA+B,iBAAwC;AAAA,EAL9E,OAK8E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BtE,YAAY,OAAuC,CAAC,GAAG;AAC7D,UAAM;AAAA,MACL,MAAM,2BAAc;AAAA,MACpB,GAAG;AAAA,MACH,OAAO,KAAK,QAAQ,EAAE,KAAK,KAAK,MAAM,IAAI,IAAI;AAAA,IAC/C,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,eAAe,aAAqB;AAC1C,SAAK,KAAK,cAAcC,sBAAqB,MAAM,WAAW;AAC9D,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,mBAAmB;AACzB,SAAK,KAAK,cAAc;AACxB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,WAAW,UAAU,MAAM;AACjC,SAAK,KAAK,UAAU,iBAAiB,MAAM,OAAO;AAClD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,OAAO,KAAa;AAC1B,SAAK,KAAK,QAAQ,2BAA2B,MAAM,EAAE,IAAI,CAAC;AAC1D,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKgB,SAAgC;AAC/C,+BAA2B,MAAM,KAAK,KAAK,KAAK;AAEhD,WAAO,EAAE,GAAG,KAAK,KAAK;AAAA,EACvB;AACD;;;AD1EO,IAAM,6BAA6B,qBACxC,OAAO;AAAA,EACP,KAAK,qBACH,OAAO,EACP;AAAA,IACA,EAAE,kBAAkB,CAAC,SAAS,UAAU,aAAa,EAAE;AAAA,IACvD,EAAE,SAAS,wEAAwE;AAAA,EACpF;AACF,CAAC,EACA,qBAAqB,mBAAmB;AAEnC,IAAMC,wBAAuB,qBAClC,OAAO,EACP,yBAAyB,CAAC,EAC1B,sBAAsB,IAAK,EAC3B,qBAAqB,mBAAmB;AAEnC,IAAM,gBAAgB,qBAC3B,OAAO;AAAA,EACP,KAAK,qBACH,OAAO,EACP,IAAI,EAAE,kBAAkB,CAAC,aAAa,EAAE,GAAG,EAAE,SAAS,qDAAqD,CAAC;AAC/G,CAAC,EACA,qBAAqB,mBAAmB;AAEnC,IAAM,mBAAmB,qBAAE,QAAQ;AAEnC,IAAM,mBAAmB,qBAAE,QAAQ;AAEnC,IAAM,mBAAmB,qBAAE,WAAW,iCAAoB;AAE1D,IAAM,8BAA8B,qBACzC,OAAO,EACP,yBAAyB,CAAC,EAC1B,sBAAsB,GAAK,EAC3B,qBAAqB,mBAAmB;AAEnC,IAAM,qBAAqB,qBAChC,SAAS,aAAa,EACtB,GAAG,qBAAE,SAAS,gBAAgB,CAAC,EAC/B,qBAAqB,mBAAmB;AAEnC,IAAM,0BAA0B,eAAe,QAAQ;AAEvD,SAAS,sBACf,OACA,oBAC8B;AAC9B,uBAAE,SAAS,kBAAkB,EAAE,qBAAqB,mBAAmB,EAAE,MAAM,KAAK;AACrF;AALgB;AAOT,SAAS,uBAEd,OAAgB,KAAa,KAAa,oBAA0E;AACrH,GAAC,qBAAqB,qBAAE,SAAS,kBAAkB,IAAI,qBAAE,SAAS,gBAAgB,GAChF,MAAM,EACN,yBAAyB,GAAG,EAC5B,sBAAsB,GAAG,EACzB,qBAAqB,mBAAmB,EACxC,MAAM,KAAK;AACd;AATgB;;;AE9DhB,IAAAC,eAAqD;AAI9C,IAAM,cAAN,cAA0B,iBAAmC;AAAA,EAJpE,OAIoE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0B5D,YAAY,OAAkC,CAAC,GAAG;AACxD,UAAM,EAAE,MAAM,2BAAc,MAAM,GAAG,MAAM,MAAM,KAAK,OAAO,EAAE,KAAK,KAAK,KAAK,IAAI,IAAI,OAAU,CAAC;AAAA,EAClG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,WAAW,UAAU,MAAM;AACjC,SAAK,KAAK,UAAU,iBAAiB,MAAM,OAAO;AAClD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,OAAO,KAAa;AAC1B,SAAK,KAAK,OAAO,cAAc,MAAM,EAAE,IAAI,CAAC;AAC5C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKgB,SAA2B;AAC1C,kBAAc,MAAM,KAAK,KAAK,IAAI;AAElC,WAAO,EAAE,GAAG,KAAK,MAAM,MAAM,EAAE,GAAG,KAAK,KAAK,KAAK,EAAE;AAAA,EACpD;AACD;;;AC7DA,IAAAC,eAA8B;AAIvB,IAAM,mBAAN,cAA+B,iBAAwC;AAAA,EAL9E,OAK8E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBtE,YAAY,OAAuC,CAAC,GAAG;AAC7D,UAAM;AAAA,MACL,MAAM,2BAAc;AAAA,MACpB,GAAG;AAAA,IACJ,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,WAAW,UAAU,MAAM;AACjC,SAAK,KAAK,UAAU,iBAAiB,MAAM,OAAO;AAClD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,WAAW,SAA+B;AAChD,SAAK,KAAK,UAAU,iBAAiB,MAAM,OAAO;AAClD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,eAAe;AACrB,SAAK,KAAK,UAAU;AACpB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKgB,SAAgC;AAC/C,WAAO,EAAE,GAAG,KAAK,KAAK;AAAA,EACvB;AACD;;;ACnEA,IAAAC,eAA8B;AAIvB,IAAM,qBAAN,cAAiC,iBAA0C;AAAA,EALlF,OAKkF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqB1E,YAAY,OAAyC,CAAC,GAAG;AAC/D,UAAM;AAAA,MACL,MAAM,2BAAc;AAAA,MACpB,GAAG;AAAA,IACJ,CAAC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,WAAW,SAAiB;AAClC,SAAK,KAAK,UAAU,4BAA4B,MAAM,OAAO;AAC7D,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKgB,SAAkC;AACjD,gCAA4B,MAAM,KAAK,KAAK,OAAO;AAEnD,WAAO,EAAE,GAAG,KAAK,KAAK;AAAA,EACvB;AACD;;;ALXO,IAAM,mBAAN,cAA+B,iBAAwC;AAAA,EAxC9E,OAwC8E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAI7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgCT,YAAY,EAAE,YAAY,GAAG,KAAK,IAAoC,CAAC,GAAG;AAChF,UAAM,EAAE,MAAM,2BAAc,WAAW,GAAG,KAAK,CAAC;AAChD,SAAK,aAAc,YAAY,IAAI,CAAC,cAAc,uBAAuB,SAAS,CAAC,KAClF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,eAAe,OAAiC;AAEtD,4BAAwB,MAAM,KAAK;AAEnC,QAAI,MAAM,QAAQ,KAAK,GAAG;AACzB,YAAM,CAAC,KAAK,OAAO,IAAI,IAAI;AAC3B,WAAK,KAAK,gBAAgB,OAAO,OAAO,SAAS,KAAK;AACtD,aAAO;AAAA,IACR;AAEA,SAAK,KAAK,eAAe;AACzB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,mBAAmB;AACzB,SAAK,KAAK,eAAe;AACzB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,0BACH,YAKF;AACD,SAAK,WAAW;AAAA,MACf,GAAG,eAAe,UAAU,EAAE,IAAI,CAAC,cAAc,eAAe,WAAW,gBAA+B,CAAC;AAAA,IAC5G;AACA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,qBACH,YACF;AACD,SAAK,WAAW,KAAK,GAAG,eAAe,UAAU,EAAE,IAAI,CAAC,cAAc,eAAe,WAAW,WAAW,CAAC,CAAC;AAC7G,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,6BACH,YAGF;AACD,SAAK,WAAW;AAAA,MACf,GAAG,eAAe,UAAU,EAAE,IAAI,CAAC,cAAc,eAAe,WAAW,mBAAmB,CAAC;AAAA,IAChG;AACA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,wBACH,YACF;AACD,SAAK,WAAW,KAAK,GAAG,eAAe,UAAU,EAAE,IAAI,CAAC,cAAc,eAAe,WAAW,cAAc,CAAC,CAAC;AAChH,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,0BACH,YAGF;AACD,SAAK,WAAW,KAAK,GAAG,eAAe,UAAU,EAAE,IAAI,CAAC,cAAc,eAAe,WAAW,gBAAgB,CAAC,CAAC;AAClH,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,4BACH,YAGF;AACD,SAAK,WAAW;AAAA,MACf,GAAG,eAAe,UAAU,EAAE,IAAI,CAAC,cAAc,eAAe,WAAW,kBAAkB,CAAC;AAAA,IAC/F;AACA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,iBACN,OACA,gBACG,YACF;AACD,SAAK,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA,GAAG,eAAe,UAAU,EAAE;AAAA,QAAI,CAAC,cAClC,qBAAqB,mBAAmB,YAAY,uBAAuB,SAAS;AAAA,MACrF;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,WAAW,UAAU,MAAM;AACjC,SAAK,KAAK,UAAU,iBAAiB,MAAM,OAAO;AAClD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,SAAgC;AACtC,WAAO;AAAA,MACN,GAAG,KAAK;AAAA,MACR,YAAY,KAAK,WAAW,IAAI,CAAC,cAAc,UAAU,OAAO,CAAC;AAAA,IAClE;AAAA,EACD;AACD;;;AM3OA,IAAAC,eAA8B;;;ACCvB,IAAM,0BAAN,MAA4E;AAAA,EAJnF,OAImF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAIlE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BT,YAAY,OAAqC,CAAC,GAAG;AAC3D,SAAK,OAAO;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,eAAe,aAAqB;AAC1C,SAAK,KAAK,cAAcC,sBAAqB,MAAM,WAAW;AAC9D,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,mBAAmB;AACzB,SAAK,KAAK,cAAc;AACxB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,WAAW,UAAU,MAAM;AACjC,SAAK,KAAK,UAAU,iBAAiB,MAAM,OAAO;AAClD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,OAAO,KAAa;AAC1B,SAAK,KAAK,QAAQ,2BAA2B,MAAM,EAAE,IAAI,CAAC;AAC1D,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,SAA8B;AACpC,+BAA2B,MAAM,KAAK,KAAK,KAAK;AAEhD,WAAO,EAAE,GAAG,KAAK,KAAK;AAAA,EACvB;AACD;;;AD5EO,IAAM,sBAAN,cAAkC,iBAA2C;AAAA,EAbpF,OAaoF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAInE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoCT,YAAY,EAAE,OAAO,GAAG,KAAK,IAAuC,CAAC,GAAG;AAC9E,UAAM,EAAE,MAAM,2BAAc,cAAc,GAAG,KAAK,CAAC;AACnD,SAAK,QAAQ,OAAO,IAAI,CAAC,SAAS,IAAI,wBAAwB,IAAI,CAAC,KAAK,CAAC;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,YACH,OAGF;AACD,SAAK,MAAM;AAAA,MACV,GAAG,eAAe,KAAK,EAAE,IAAI,CAAC,UAAU;AACvC,cAAM,SAAS,eAAe,OAAO,uBAAuB;AAE5D,8BAAsB,QAAQ,uBAAuB;AACrD,eAAO;AAAA,MACR,CAAC;AAAA,IACF;AACA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,YACN,OACA,gBACG,OAGF;AACD,SAAK,MAAM;AAAA,MACV;AAAA,MACA;AAAA,MACA,GAAG,eAAe,KAAK,EAAE,IAAI,CAAC,UAAU;AACvC,cAAM,SAAS,eAAe,OAAO,uBAAuB;AAE5D,8BAAsB,QAAQ,uBAAuB;AACrD,eAAO;AAAA,MACR,CAAC;AAAA,IACF;AACA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,SAAmC;AACzC,2BAAuB,KAAK,OAAO,GAAG,IAAI,uBAAuB;AACjE,WAAO;AAAA,MACN,GAAG,KAAK;AAAA,MACR,OAAO,KAAK,MAAM,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC;AAAA,IAC9C;AAAA,EACD;AACD;;;AE5GA,IAAAC,eAA8B;AAWvB,IAAM,iBAAN,cAA6B,iBAAsC;AAAA,EAnB1E,OAmB0E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAIzD;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqCT,YAAY,EAAE,YAAY,WAAW,GAAG,KAAK,IAAkC,CAAC,GAAG;AACzF,UAAM,EAAE,MAAM,2BAAc,SAAS,GAAG,KAAK,CAAC;AAC9C,SAAK,aAAc,YAAY,IAAI,CAAC,cAAc,uBAAuB,SAAS,CAAC,KAAK,CAAC;AACzF,SAAK,YAAY,YAAY,uBAAuB,SAAS,IAAI;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,mBACN,WACO;AACP,YAAQ,IAAI,MAAM,aAAa,mBAAmB,MAAM,eAAe,WAAW,aAAa,CAAC,CAAC;AACjG,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,sBACN,WACO;AACP,YAAQ,IAAI,MAAM,aAAa,mBAAmB,MAAM,eAAe,WAAW,gBAAgB,CAAC,CAAC;AACpG,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,4BACH,YACF;AACD,SAAK,WAAW;AAAA,MACf,GAAG,eAAe,UAAU,EAAE,IAAI,CAAC,UAAU;AAC5C,cAAM,SAAS,eAAe,OAAO,kBAAkB;AAEvD,8BAAsB,QAAQ,kBAAkB;AAChD,eAAO;AAAA,MACR,CAAC;AAAA,IACF;AACA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,4BACN,OACA,gBACG,YAGF;AACD,SAAK,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA,GAAG,eAAe,UAAU,EAAE,IAAI,CAAC,UAAU;AAC5C,cAAM,SAAS,eAAe,OAAO,kBAAkB;AAEvD,8BAAsB,QAAQ,kBAAkB;AAChD,eAAO;AAAA,MACR,CAAC;AAAA,IACF;AACA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,SAA8B;AACpC,2BAAuB,KAAK,YAAY,GAAG,GAAG,kBAAkB;AAChE,WAAO;AAAA,MACN,GAAG,KAAK;AAAA,MACR,YAAY,KAAK,WAAW,IAAI,CAAC,cAAc,UAAU,OAAO,CAAC;AAAA,MACjE,WAAW,mBAAmB,MAAM,KAAK,SAAS,EAAE,OAAO;AAAA,IAC5D;AAAA,EACD;AACD;;;AlB3BO,SAAS,uBACf,MACmB;AACnB,MAAI,gBAAgB,kBAAkB;AACrC,WAAO;AAAA,EACR;AAEA,UAAQ,KAAK,MAAM;AAAA,IAClB,KAAK,2BAAc;AAClB,aAAO,IAAI,iBAAiB,IAAI;AAAA,IACjC,KAAK,2BAAc;AAClB,aAAO,IAAI,cAAc,IAAI;AAAA,IAC9B,KAAK,2BAAc;AAClB,aAAO,IAAI,wBAAwB,IAAI;AAAA,IACxC,KAAK,2BAAc;AAClB,aAAO,IAAI,iBAAiB,IAAI;AAAA,IACjC,KAAK,2BAAc;AAClB,aAAO,IAAI,sBAAsB,IAAI;AAAA,IACtC,KAAK,2BAAc;AAClB,aAAO,IAAI,sBAAsB,IAAI;AAAA,IACtC,KAAK,2BAAc;AAClB,aAAO,IAAI,6BAA6B,IAAI;AAAA,IAC7C,KAAK,2BAAc;AAClB,aAAO,IAAI,yBAAyB,IAAI;AAAA,IACzC,KAAK,2BAAc;AAClB,aAAO,IAAI,YAAY,IAAI;AAAA,IAC5B,KAAK,2BAAc;AAClB,aAAO,IAAI,iBAAiB,IAAI;AAAA,IACjC,KAAK,2BAAc;AAClB,aAAO,IAAI,eAAe,IAAI;AAAA,IAC/B,KAAK,2BAAc;AAClB,aAAO,IAAI,iBAAiB,IAAI;AAAA,IACjC,KAAK,2BAAc;AAClB,aAAO,IAAI,mBAAmB,IAAI;AAAA,IACnC,KAAK,2BAAc;AAClB,aAAO,IAAI,iBAAiB,IAAI;AAAA,IACjC,KAAK,2BAAc;AAClB,aAAO,IAAI,oBAAoB,IAAI;AAAA,IACpC;AAEC,YAAM,IAAI,MAAM,6CAA6C,KAAK,IAAI,EAAE;AAAA,EAC1E;AACD;AA1CgB;AA4ChB,SAAS,UACR,SACA,aACqB;AACrB,SAAO,mBAAmB;AAC3B;AALS;AAOF,SAAS,eACf,SACA,aACC;AACD,MAAI,UAAU,SAAS,WAAW,GAAG;AACpC,WAAO;AAAA,EACR;AAEA,MAAI,OAAO,YAAY,YAAY;AAClC,WAAO,QAAQ,IAAI,YAAY,CAAC;AAAA,EACjC;AAEA,SAAO,IAAI,YAAY,OAAO;AAC/B;AAbgB;;;AF7HT,IAAM,mBAAN,cAA0E,iBAE/E;AAAA,EArDF,OAqDE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAIe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoCT,YAAY,EAAE,YAAY,GAAG,KAAK,IAA6D,CAAC,GAAG;AACzG,UAAM,EAAE,MAAM,2BAAc,WAAW,GAAG,KAAK,CAAC;AAChD,SAAK,aAAc,YAAY,IAAI,CAAC,cAAc,uBAAuB,SAAS,CAAC,KAAK,CAAC;AAAA,EAC1F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,iBAAiB,YAAwC;AAC/D,SAAK,WAAW,KAAK,GAAG,eAAe,UAAU,CAAC;AAClD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,iBAAiB,YAAwC;AAC/D,SAAK,WAAW,OAAO,GAAG,KAAK,WAAW,QAAQ,GAAG,eAAe,UAAU,CAAC;AAC/E,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,SAAqE;AAC3E,WAAO;AAAA,MACN,GAAG,KAAK;AAAA,MACR,YAAY,KAAK,WAAW,IAAI,CAAC,cAAc,UAAU,OAAO,CAAC;AAAA,IAClE;AAAA,EACD;AACD;;;AqB/HA,IAAAC,sBAAA;AAAA,SAAAA,qBAAA;AAAA;AAAA;AAAA,oCAAAC;AAAA;AAAA,IAAAC,qBAAkB;AAKX,IAAM,iBAAiB,qBAC5B,OAAO,EACP,yBAAyB,CAAC,EAC1B,sBAAsB,EAAE,EACxB,qBAAqB,mBAAmB;AACnC,IAAM,sBAAsB,qBACjC,SAAS,gBAAgB,EACzB,MAAM,EACN,yBAAyB,CAAC,EAC1B,qBAAqB,mBAAmB;AAEnC,SAASC,4BACf,UACA,OACA,YACC;AACD,oBAAkB,MAAM,QAAQ;AAChC,iBAAe,MAAM,KAAK;AAC1B,sBAAoB,MAAM,UAAU;AACrC;AARgB,OAAAA,6BAAA;;;ACCT,IAAM,eAAN,MAAqF;AAAA,EAjB5F,OAiB4F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAI3E;AAAA;AAAA;AAAA;AAAA,EAKA,aAAiE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO3E,YAAY,EAAE,YAAY,GAAG,KAAK,IAAsD,CAAC,GAAG;AAClG,SAAK,OAAO,EAAE,GAAG,KAAK;AACtB,SAAK,aAAc,YAAY,IAAI,CAAC,cAAc,uBAAuB,SAAS,CAAC,KAClF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,OAAe;AAC9B,SAAK,KAAK,QAAQ,eAAe,MAAM,KAAK;AAC5C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,YAAY,UAAkB;AACpC,SAAK,KAAK,YAAY,kBAAkB,MAAM,QAAQ;AACtD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,iBACH,YAGF;AACD,SAAK,WAAW;AAAA,MACf,GAAG,eAAe,UAAU,EAAE;AAAA,QAAI,CAAC,cAClC,qBAAqB,mBAClB,YACA,IAAI,iBAAiD,SAAS;AAAA,MAClE;AAAA,IACD;AACA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,iBAAiB,YAA2E;AAClG,SAAK,WAAW,OAAO,GAAG,KAAK,WAAW,QAAQ,GAAG,eAAe,UAAU,CAAC;AAC/E,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,SAAkD;AACxD,IAAAC,4BAA2B,KAAK,KAAK,WAAW,KAAK,KAAK,OAAO,KAAK,UAAU;AAEhF,WAAO;AAAA,MACN,GAAG,KAAK;AAAA,MACR,YAAY,KAAK,WAAW,IAAI,CAAC,cAAc,UAAU,OAAO,CAAC;AAAA,IAClE;AAAA,EACD;AACD;;;ACpGA,IAAAC,sBAAA;AAAA,SAAAA,qBAAA;AAAA,+BAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAAAC;AAAA;AAAA,IAAAC,qBAAkB;AAClB,IAAAC,eAMO;AAMP,IAAM,gBAAgB,qBACpB,OAAO,EACP,yBAAyB,CAAC,EAC1B,sBAAsB,EAAE,EACxB,MAAM,6DAA6D,EACnE,qBAAqB,mBAAmB;AAEnC,SAAS,aAAa,MAAuC;AACnE,gBAAc,MAAM,IAAI;AACzB;AAFgB;AAIhB,IAAMC,wBAAuB,qBAC3B,OAAO,EACP,yBAAyB,CAAC,EAC1B,sBAAsB,GAAG,EACzB,qBAAqB,mBAAmB;AAC1C,IAAM,kBAAkB,qBAAE,WAAW,mBAAM;AAEpC,SAAS,oBAAoB,aAAqD;AACxF,EAAAA,sBAAqB,MAAM,WAAW;AACvC;AAFgB;AAIhB,IAAM,0BAA0B,qBAAE,QAAQ,EAAE,MAAM,EAAE,sBAAsB,EAAE,EAAE,qBAAqB,mBAAmB;AAC/G,SAAS,eAAe,QAAiB;AAC/C,SAAO,gBAAgB,MAAM,MAAM;AACpC;AAFgB;AAIT,SAAS,yBAAyB,SAAuE;AAC/G,0BAAwB,MAAM,OAAO;AACtC;AAFgB;AAIT,SAASC,4BACf,MACA,aACA,SACC;AAED,eAAa,IAAI;AAGjB,sBAAoB,WAAW;AAG/B,2BAAyB,OAAO;AACjC;AAbgB,OAAAA,6BAAA;AAehB,IAAM,mBAAmB,qBAAE,QAAQ;AAE5B,SAAS,0BAA0B,OAA0C;AACnF,mBAAiB,MAAM,KAAK;AAC7B;AAFgB;AAIT,SAAS,iBAAiB,UAAgD;AAChF,mBAAiB,MAAM,QAAQ;AAChC;AAFgB;AAIhB,IAAM,yBAAyB,qBAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,qBAAqB,mBAAmB;AAE/F,SAAS,sBAAsB,cAAsB,SAAqD;AAChH,yBAAuB,OAAO,SAAS,UAAU,KAAK,YAAY;AACnE;AAFgB;AAIT,SAASC,uBAEd,OAAgB,oBAAuE;AACxF,uBAAE,SAAS,kBAAkB,EAAE,MAAM,KAAK;AAC3C;AAJgB,OAAAA,wBAAA;AAMT,IAAM,2BAA2B,qBACtC,OAAwB,OAAO,YAAY,OAAO,OAAO,mBAAM,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,qBAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EACjH,OAAO,EACP,QAAQ,EACR,qBAAqB,mBAAmB;AAEnC,SAAS,wBAAwB,OAAkD;AACzF,2BAAyB,MAAM,KAAK;AACrC;AAFgB;AAIhB,IAAM,wBAAwB,qBAAE,QAAQ,EAAE,QAAQ;AAE3C,SAAS,qBAAqB,OAA6D;AACjG,wBAAsB,MAAM,KAAK;AAClC;AAFgB;AAIhB,IAAM,4BAA4B,qBAChC,MAAM;AAAA,EACN,qBAAE,OAAO,EAAE,UAAU,CAAC,UAAU,MAAM,SAAS,CAAC;AAAA,EAChD,qBACE,OAAO,EACP,QAAQ,EACR,UAAU,CAAC,UAAU,MAAM,SAAS,CAAC;AAAA,EACvC,qBAAE,OAAO,EAAE,MAAM,OAAO;AACzB,CAAC,EACA,QAAQ;AAEH,SAAS,iCAAiC,aAAsB;AACtE,SAAO,0BAA0B,MAAM,WAAW;AACnD;AAFgB;AAIT,SAAS,aAAa,OAA0C;AACtE,mBAAiB,MAAM,KAAK;AAC7B;AAFgB;AAIT,IAAM,oBAAoB,qBAAE;AAAA,EAClC,qBAAE,WAAW,mCAAsB,EAAE,qBAAqB,mBAAmB;AAC9E;AAEO,IAAM,4BAA4B,qBAAE;AAAA,EAC1C,qBAAE,WAAW,uCAA0B,EAAE,qBAAqB,mBAAmB;AAClF;;;ACnHA,IAAAC,mBAAoB;;;ACDb,IAAM,2BAAN,MAA+B;AAAA,EANtC,OAMsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAIrB;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,QAAQ,MAAoB;AAElC,iBAAa,IAAI;AAEjB,YAAQ,IAAI,MAAM,QAAQ,IAAI;AAE9B,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,eAAe,aAAqB;AAE1C,wBAAoB,WAAW;AAE/B,YAAQ,IAAI,MAAM,eAAe,WAAW;AAE5C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,oBAAoB,QAAsB,eAA8B;AAC9E,QAAI,CAAC,KAAK,oBAAoB;AAC7B,cAAQ,IAAI,MAAM,sBAAsB,CAAC,CAAC;AAAA,IAC3C;AAEA,UAAM,eAAe,eAAe,MAAM;AAE1C,QAAI,kBAAkB,MAAM;AAC3B,WAAK,mBAAoB,YAAY,IAAI;AACzC,aAAO;AAAA,IACR;AAEA,iBAAa,aAAa;AAE1B,SAAK,mBAAoB,YAAY,IAAI;AACzC,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,qBAAqB,gBAAwC;AACnE,QAAI,mBAAmB,MAAM;AAC5B,cAAQ,IAAI,MAAM,sBAAsB,IAAI;AAC5C,aAAO;AAAA,IACR;AAEA,YAAQ,IAAI,MAAM,sBAAsB,CAAC,CAAC;AAE1C,eAAW,QAAQ,OAAO,QAAQ,cAAc,GAAG;AAClD,WAAK,oBAAoB,GAAI,IAAsC;AAAA,IACpE;AAEA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,2BAA2B,QAAsB,sBAAqC;AAC5F,QAAI,CAAC,KAAK,2BAA2B;AACpC,cAAQ,IAAI,MAAM,6BAA6B,CAAC,CAAC;AAAA,IAClD;AAEA,UAAM,eAAe,eAAe,MAAM;AAE1C,QAAI,yBAAyB,MAAM;AAClC,WAAK,0BAA2B,YAAY,IAAI;AAChD,aAAO;AAAA,IACR;AAEA,wBAAoB,oBAAoB;AAExC,SAAK,0BAA2B,YAAY,IAAI;AAChD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,4BAA4B,uBAA+C;AACjF,QAAI,0BAA0B,MAAM;AACnC,cAAQ,IAAI,MAAM,6BAA6B,IAAI;AACnD,aAAO;AAAA,IACR;AAEA,YAAQ,IAAI,MAAM,6BAA6B,CAAC,CAAC;AACjD,eAAW,QAAQ,OAAO,QAAQ,qBAAqB,GAAG;AACzD,WAAK,2BAA2B,GAAI,IAAsC;AAAA,IAC3E;AAEA,WAAO;AAAA,EACR;AACD;;;AC7IA,IAAAC,eAOO;AAkBA,IAAM,qBAAN,MAAyB;AAAA,EAzBhC,OAyBgC;AAAA;AAAA;AAAA,EACf,OAAe;AAAA,EAEf;AAAA,EAEA,cAAsB;AAAA,EAEtB;AAAA,EAEA,UAA4C,CAAC;AAAA,EAE7C;AAAA;AAAA;AAAA;AAAA,EAKA,qBAA0C;AAAA,EAE1C,6BAA6D;AAAA;AAAA;AAAA;AAAA,EAK7D,gBAAqC;AAAA,EAErC;AAAA,EAEA,OAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOrC,eAAe,UAA+C;AACpE,YAAQ,IAAI,MAAM,YAAY,kBAAkB,MAAM,eAAe,QAAQ,CAAC,CAAC;AAE/E,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,uBAAuB,kBAA2D;AACxF,YAAQ,IAAI,MAAM,qBAAqB,0BAA0B,MAAM,eAAe,gBAAgB,CAAC,CAAC;AAExG,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWO,qBAAqB,OAAgB;AAE3C,8BAA0B,KAAK;AAE/B,YAAQ,IAAI,MAAM,sBAAsB,KAAK;AAE7C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUO,4BAA4B,aAA+D;AAEjG,UAAM,kBAAkB,iCAAiC,WAAW;AAEpE,YAAQ,IAAI,MAAM,8BAA8B,eAAe;AAE/D,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYO,gBAAgB,SAAqC;AAE3D,yBAAqB,OAAO;AAE5B,YAAQ,IAAI,MAAM,iBAAiB,OAAO;AAE1C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,QAAQ,OAAO,MAAM;AAE3B,iBAAa,IAAI;AACjB,YAAQ,IAAI,MAAM,QAAQ,IAAI;AAC9B,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,SAA0D;AAChE,IAAAC,4BAA2B,KAAK,MAAM,KAAK,aAAa,KAAK,OAAO;AAEpE,4BAAwB,KAAK,kBAAkB;AAC/C,4BAAwB,KAAK,yBAAyB;AAEtD,WAAO;AAAA,MACN,GAAG;AAAA,MACH,MAAM,oCAAuB;AAAA,MAC7B,SAAS,KAAK,QAAQ,IAAI,CAAC,WAAW,OAAO,OAAO,CAAC;AAAA,IACtD;AAAA,EACD;AACD;;;ACjKA,IAAAC,eAAyF;;;ACOlF,IAAe,+BAAf,cAAoD,yBAAyB;AAAA,EAPpF,OAOoF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWnE,WAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO7B,YAAY,UAAmB;AAErC,qBAAiB,QAAQ;AAEzB,YAAQ,IAAI,MAAM,YAAY,QAAQ;AAEtC,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAcU,yBAAyB;AAClC,IAAAC,4BAA2B,KAAK,MAAM,KAAK,aAAa,CAAC,CAAC;AAG1D,4BAAwB,KAAK,kBAAkB;AAC/C,4BAAwB,KAAK,yBAAyB;AAGtD,qBAAiB,KAAK,QAAQ;AAAA,EAC/B;AACD;;;ADlDO,IAAM,+BAAN,cAA2C,6BAA6B;AAAA,EAN/E,OAM+E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAIrD,OAAO,0CAA6B;AAAA;AAAA;AAAA;AAAA,EAKtD,SAAgD;AACtD,SAAK,uBAAuB;AAE5B,WAAO,EAAE,GAAG,KAAK;AAAA,EAClB;AACD;;;AEpBA,IAAAC,eAAsF;AAM/E,IAAM,4BAAN,cAAwC,6BAA6B;AAAA,EAN5E,OAM4E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAI3D,OAAO,0CAA6B;AAAA;AAAA;AAAA;AAAA,EAK7C,SAA6C;AACnD,SAAK,uBAAuB;AAE5B,WAAO,EAAE,GAAG,KAAK;AAAA,EAClB;AACD;;;ACpBA,IAAAC,eAAsF;AACtF,sBAAoB;;;ACDpB,IAAAC,qBAAkB;AAClB,IAAAC,eAA4B;AAS5B,IAAM,sBAAsB;AAAA,EAC3B,yBAAY;AAAA,EACZ,yBAAY;AAAA,EACZ,yBAAY;AAAA,EACZ,yBAAY;AAAA,EACZ,yBAAY;AAAA,EACZ,yBAAY;AAAA,EACZ,yBAAY;AAAA,EACZ,yBAAY;AAAA,EACZ,yBAAY;AAAA,EACZ,yBAAY;AACb;AAOA,IAAM,wBAAwB,qBAAE,MAAM,qBAAE,MAAM,oBAAoB,IAAI,CAAC,SAAS,qBAAE,QAAQ,IAAI,CAAC,CAAC,CAAC;AAK1F,IAAM,4CAAN,MAAgD;AAAA,EAjCvD,OAiCuD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAItC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,mBAAmB,cAAwE;AACjG,QAAI,KAAK,kBAAkB,QAAW;AACrC,cAAQ,IAAI,MAAM,iBAAiB,CAAC,CAAC;AAAA,IACtC;AAEA,SAAK,cAAe,KAAK,GAAG,sBAAsB,MAAM,eAAe,YAAY,CAAC,CAAC;AAErF,WAAO;AAAA,EACR;AACD;;;AD5CO,IAAM,4BAAN,cAAwC,6BAA6B;AAAA;AAAA;AAAA;AAAA,EAIlD,OAAO,0CAA6B;AAAA;AAAA;AAAA;AAAA,EAKtD,SAA6C;AACnD,SAAK,uBAAuB;AAE5B,WAAO,EAAE,GAAG,KAAK;AAAA,EAClB;AACD;AAd4E;AAA/D,4BAAN;AAAA,MADN,qBAAI,yCAAyC;AAAA,GACjC;;;AETb,IAAAC,sBAAkB;AAClB,IAAAC,eAAsF;AACtF,IAAAC,mBAAoB;;;ACCb,IAAe,kDAAf,MAA+D;AAAA,EAHtE,OAGsE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAIrD;AAAA;AAAA;AAAA;AAAA,EAKA;AAejB;;;AC3BA,IAAAC,qBAAkB;AAGlB,IAAMC,oBAAmB,qBAAE,QAAQ;AAK5B,IAAM,gDAAN,MAAoD;AAAA,EAR3D,OAQ2D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAI1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,gBAAgB,cAA6B;AAEnD,IAAAA,kBAAiB,MAAM,YAAY;AAEnC,QAAI,gBAAgB,aAAa,QAAQ,MAAM,QAAQ,KAAK,OAAO,KAAK,KAAK,QAAQ,SAAS,GAAG;AAChG,YAAM,IAAI,WAAW,gEAAgE;AAAA,IACtF;AAEA,YAAQ,IAAI,MAAM,gBAAgB,YAAY;AAE9C,WAAO;AAAA,EACR;AACD;;;ACtCA,IAAAC,qBAAkB;AAClB,IAAAC,eAAqF;AAIrF,IAAM,kBAAkB,qBAAE,OAAO,EAAE,yBAAyB,CAAC,EAAE,sBAAsB,GAAG;AACxF,IAAM,kBAAkB,qBAAE,OAAO,EAAE,YAAY,OAAO,iBAAiB,EAAE,SAAS,OAAO,iBAAiB;AAC1G,IAAM,mBAAmB,qBACvB,OAAO;AAAA,EACP,MAAM;AAAA,EACN,oBAAoB;AAAA,EACpB,OAAO,qBAAE,MAAM,CAAC,iBAAiB,eAAe,CAAC;AAClD,CAAC,EACA,MAAM;AAKD,IAAM,2CAAN,MAAmF;AAAA,EAlB1F,OAkB0F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAIzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,cAAc,SAA2E;AAC/F,UAAM,oBAAoB,eAAe,OAAO;AAChD,QAAI,kBAAkB,SAAS,KAAK,kBAAkB,QAAQ,KAAK,cAAc;AAChF,YAAM,IAAI,WAAW,gEAAgE;AAAA,IACtF;AAEA,qBAAiB,MAAM,iBAAiB;AAExC,QAAI,KAAK,YAAY,QAAW;AAC/B,cAAQ,IAAI,MAAM,WAAW,CAAC,CAAC;AAAA,IAChC;AAEA,0BAAsB,kBAAkB,QAAQ,KAAK,OAAO;AAE5D,eAAW,EAAE,MAAM,oBAAoB,MAAM,KAAK,mBAAmB;AAEpE,UAAI,KAAK,SAAS,0CAA6B,QAAQ;AACtD,wBAAgB,MAAM,KAAK;AAAA,MAC5B,OAAO;AACN,wBAAgB,MAAM,KAAK;AAAA,MAC5B;AAEA,WAAK,QAAS,KAAK,EAAE,MAAM,oBAAoB,MAAM,CAAC;AAAA,IACvD;AAEA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,cAA2E,SAAmC;AACpH,UAAM,oBAAoB,eAAe,OAAO;AAChD,QAAI,kBAAkB,SAAS,KAAK,kBAAkB,QAAQ,KAAK,cAAc;AAChF,YAAM,IAAI,WAAW,gEAAgE;AAAA,IACtF;AAEA,qBAAiB,MAAM,iBAAiB;AAExC,YAAQ,IAAI,MAAM,WAAW,CAAC,CAAC;AAC/B,SAAK,WAAW,iBAAiB;AAEjC,WAAO;AAAA,EACR;AACD;;;AH1EA,IAAM,kBAAkB,sBAAE,OAAO,EAAE,IAAI;AAUhC,IAAM,4BAAN,cACE,6BAET;AAAA;AAAA;AAAA;AAAA,EAIiB,OAAO,0CAA6B;AAAA;AAAA;AAAA;AAAA,EAK7C,YAAY,KAAmB;AACrC,oBAAgB,MAAM,GAAG;AAEzB,YAAQ,IAAI,MAAM,aAAa,GAAG;AAElC,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,YAAY,KAAmB;AACrC,oBAAgB,MAAM,GAAG;AAEzB,YAAQ,IAAI,MAAM,aAAa,GAAG;AAElC,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,SAA6C;AACnD,SAAK,uBAAuB;AAE5B,QAAI,KAAK,gBAAgB,MAAM,QAAQ,KAAK,OAAO,KAAK,KAAK,QAAQ,SAAS,GAAG;AAChF,YAAM,IAAI,WAAW,gEAAgE;AAAA,IACtF;AAEA,WAAO,EAAE,GAAG,KAAK;AAAA,EAClB;AACD;AAxCA;AAHa,4BAAN;AAAA,MALN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,GACa;;;AIlBb,IAAAC,eAA0F;AAMnF,IAAM,gCAAN,cAA4C,6BAA6B;AAAA,EANhF,OAMgF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAI/D,OAAO,0CAA6B;AAAA;AAAA;AAAA;AAAA,EAK7C,SAAiD;AACvD,SAAK,uBAAuB;AAE5B,WAAO,EAAE,GAAG,KAAK;AAAA,EAClB;AACD;;;ACpBA,IAAAC,sBAAkB;AAClB,IAAAC,eAAqF;AACrF,IAAAC,mBAAoB;AAMpB,IAAMC,mBAAkB,sBAAE,OAAO;AAU1B,IAAM,2BAAN,cACE,6BAET;AAAA;AAAA;AAAA;AAAA,EAIiB,OAAO,0CAA6B;AAAA;AAAA;AAAA;AAAA,EAK7C,YAAY,KAAmB;AACrC,IAAAA,iBAAgB,MAAM,GAAG;AAEzB,YAAQ,IAAI,MAAM,aAAa,GAAG;AAElC,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,YAAY,KAAmB;AACrC,IAAAA,iBAAgB,MAAM,GAAG;AAEzB,YAAQ,IAAI,MAAM,aAAa,GAAG;AAElC,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,SAA4C;AAClD,SAAK,uBAAuB;AAE5B,QAAI,KAAK,gBAAgB,MAAM,QAAQ,KAAK,OAAO,KAAK,KAAK,QAAQ,SAAS,GAAG;AAChF,YAAM,IAAI,WAAW,gEAAgE;AAAA,IACtF;AAEA,WAAO,EAAE,GAAG,KAAK;AAAA,EAClB;AACD;AAxCA;AAHa,2BAAN;AAAA,MALN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,GACa;;;AClBb,IAAAC,eAAmF;AAM5E,IAAM,yBAAN,cAAqC,6BAA6B;AAAA,EANzE,OAMyE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAI/C,OAAO,0CAA6B;AAAA;AAAA;AAAA;AAAA,EAKtD,SAA0C;AAChD,SAAK,uBAAuB;AAE5B,WAAO,EAAE,GAAG,KAAK;AAAA,EAClB;AACD;;;ACpBA,IAAAC,sBAAkB;AAClB,IAAAC,eAAqF;AACrF,IAAAC,mBAAoB;AAKpB,IAAMC,sBAAqB,sBAAE,OAAO,EAAE,mBAAmB,CAAC,EAAE,gBAAgB,GAAK;AACjF,IAAMC,sBAAqB,sBAAE,OAAO,EAAE,mBAAmB,CAAC,EAAE,gBAAgB,GAAK;AAM1E,IAAM,2BAAN,cAAuC,6BAA6B;AAAA;AAAA;AAAA;AAAA,EAI1D,OAAO,0CAA6B;AAAA;AAAA;AAAA;AAAA,EAKpC;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,aAAa,KAAmB;AACtC,IAAAA,oBAAmB,MAAM,GAAG;AAE5B,YAAQ,IAAI,MAAM,cAAc,GAAG;AAEnC,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,aAAa,KAAmB;AACtC,IAAAD,oBAAmB,MAAM,GAAG;AAE5B,YAAQ,IAAI,MAAM,cAAc,GAAG;AAEnC,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,SAA4C;AAClD,SAAK,uBAAuB;AAE5B,QAAI,KAAK,gBAAgB,MAAM,QAAQ,KAAK,OAAO,KAAK,KAAK,QAAQ,SAAS,GAAG;AAChF,YAAM,IAAI,WAAW,gEAAgE;AAAA,IACtF;AAEA,WAAO,EAAE,GAAG,KAAK;AAAA,EAClB;AACD;AAtD2E;AAA9D,2BAAN;AAAA,MADN,sBAAI,+CAA+C,wCAAwC;AAAA,GAC/E;;;ACdb,IAAAE,eAAmF;AAM5E,IAAM,yBAAN,cAAqC,6BAA6B;AAAA,EANzE,OAMyE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAIxD,OAAO,0CAA6B;AAAA;AAAA;AAAA;AAAA,EAK7C,SAA0C;AAChD,SAAK,uBAAuB;AAE5B,WAAO,EAAE,GAAG,KAAK;AAAA,EAClB;AACD;;;ACFO,IAAM,4BAAN,MAEL;AAAA,EApBF,OAoBE;AAAA;AAAA;AAAA,EACe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,iBACN,OACC;AACD,WAAO,KAAK,uBAAuB,OAAO,yBAAyB;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,cAAc,OAA+F;AACnH,WAAO,KAAK,uBAAuB,OAAO,sBAAsB;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,iBACN,OACC;AACD,WAAO,KAAK,uBAAuB,OAAO,yBAAyB;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,cAAc,OAA+F;AACnH,WAAO,KAAK,uBAAuB,OAAO,sBAAsB;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,oBACN,OACC;AACD,WAAO,KAAK,uBAAuB,OAAO,4BAA4B;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,qBACN,OACC;AACD,WAAO,KAAK,uBAAuB,OAAO,6BAA6B;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,gBACN,OACC;AACD,WAAO,KAAK,uBAAuB,OAAO,wBAAwB;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,iBACN,OACC;AACD,WAAO,KAAK,uBAAuB,OAAO,yBAAyB;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,gBACN,OACC;AACD,WAAO,KAAK,uBAAuB,OAAO,wBAAwB;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,uBACP,OACA,UACyB;AACzB,UAAM,EAAE,QAAQ,IAAI;AAGpB,6BAAyB,OAAO;AAGhC,UAAM,SAAS,OAAO,UAAU,aAAa,MAAM,IAAI,SAAS,CAAC,IAAI;AAErE,IAAAC,uBAAsB,QAAQ,QAAQ;AAGtC,YAAQ,KAAK,MAAM;AAEnB,WAAO;AAAA,EACR;AACD;;;AChJA,IAAAC,eAIO;AACP,IAAAC,mBAAoB;AAab,IAAM,qCAAN,MAAmF;AAAA;AAAA;AAAA;AAAA,EAIzE,OAAe;AAAA;AAAA;AAAA;AAAA,EAKf,cAAsB;AAAA;AAAA;AAAA;AAAA,EAKtB,UAA2C,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOrD,cACN,OAGC;AACD,UAAM,EAAE,QAAQ,IAAI;AAGpB,6BAAyB,OAAO;AAIhC,UAAM,SAAS,OAAO,UAAU,aAAa,MAAM,IAAI,8BAA8B,CAAC,IAAI;AAG1F,IAAAC,uBAAsB,QAAQ,6BAA6B;AAG3D,YAAQ,KAAK,MAAM;AAEnB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,SAAqD;AAC3D,IAAAC,4BAA2B,KAAK,MAAM,KAAK,aAAa,KAAK,OAAO;AAEpE,WAAO;AAAA,MACN,MAAM,0CAA6B;AAAA,MACnC,MAAM,KAAK;AAAA,MACX,oBAAoB,KAAK;AAAA,MACzB,aAAa,KAAK;AAAA,MAClB,2BAA2B,KAAK;AAAA,MAChC,SAAS,KAAK,QAAQ,IAAI,CAAC,WAAW,OAAO,OAAO,CAAC;AAAA,IACtD;AAAA,EACD;AACD;AA/D0F;AAA7E,qCAAN;AAAA,MADN,sBAAI,wBAAwB;AAAA,GAChB;AAyEN,IAAM,gCAAN,MAA8E;AAAA;AAAA;AAAA;AAAA,EAIpE,OAAe;AAAA;AAAA;AAAA;AAAA,EAKf,cAAsB;AAAA;AAAA;AAAA;AAAA,EAKtB,UAA0C,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASpD,SAAgD;AACtD,IAAAA,4BAA2B,KAAK,MAAM,KAAK,aAAa,KAAK,OAAO;AAEpE,WAAO;AAAA,MACN,MAAM,0CAA6B;AAAA,MACnC,MAAM,KAAK;AAAA,MACX,oBAAoB,KAAK;AAAA,MACzB,aAAa,KAAK;AAAA,MAClB,2BAA2B,KAAK;AAAA,MAChC,SAAS,KAAK,QAAQ,IAAI,CAAC,WAAW,OAAO,OAAO,CAAC;AAAA,IACtD;AAAA,EACD;AACD;AAnCqF;AAAxE,gCAAN;AAAA,MADN,sBAAI,0BAA0B,yBAAyB;AAAA,GAC3C;;;AClFN,IAAM,gCAAN,MAEL;AAAA,EAXF,OAWE;AAAA;AAAA;AAAA,EACe,UAA4C,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOtD,mBACN,OAG6B;AAC7B,UAAM,EAAE,QAAQ,IAAI;AAGpB,6BAAyB,OAAO;AAGhC,UAAM,SAAS,OAAO,UAAU,aAAa,MAAM,IAAI,mCAAmC,CAAC,IAAI;AAE/F,IAAAC,uBAAsB,QAAQ,kCAAkC;AAGhE,YAAQ,KAAK,MAAM;AAEnB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,cACN,OAG6B;AAC7B,UAAM,EAAE,QAAQ,IAAI;AAGpB,6BAAyB,OAAO;AAGhC,UAAM,SAAS,OAAO,UAAU,aAAa,MAAM,IAAI,8BAA8B,CAAC,IAAI;AAE1F,IAAAA,uBAAsB,QAAQ,6BAA6B;AAG3D,YAAQ,KAAK,MAAM;AAEnB,WAAO;AAAA,EACR;AACD;;;AnBhDO,IAAM,sBAAN,MAA0B;AAAA;AAAA;AAAA;AAAA,EAIhB,OAAe;AAAA;AAAA;AAAA;AAAA,EAKf;AAAA;AAAA;AAAA;AAAA,EAKA,cAAsB;AAAA;AAAA;AAAA;AAAA,EAKtB;AAAA;AAAA;AAAA;AAAA,EAKA,UAA4C,CAAC;AAAA;AAAA;AAAA;AAAA,EAK7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,qBAA0C;AAAA;AAAA;AAAA;AAAA,EAK1C,6BAA6D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAU7D,gBAAqC;AAAA;AAAA;AAAA;AAAA,EAKrC;AAAA;AAAA;AAAA;AAAA,EAKA,OAA4B;AAC7C;AA9DiC;AAApB,sBAAN;AAAA,MADN,sBAAI,2BAA2B,0BAA0B,+BAA+B,kBAAkB;AAAA,GAC9F;;;AoBjBb,IAAAC,sBAAA;AAAA,SAAAA,qBAAA;AAAA,2BAAAC;AAAA,EAAA,iCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,iCAAAC;AAAA,EAAA,oBAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA;AAAA;AAAA,IAAAC,sBAAkB;AAClB,IAAAC,eAA2F;AAI3F,IAAMC,iBAAgB,sBACpB,OAAO,EACP,yBAAyB,CAAC,EAC1B,sBAAsB,EAAE,EAExB,MAAM,0DAA0D,EAChE,qBAAqB,mBAAmB;AAC1C,IAAM,gBAAgB,sBACpB,MAAM,CAAC,sBAAE,QAAQ,oCAAuB,IAAI,GAAG,sBAAE,QAAQ,oCAAuB,OAAO,CAAC,CAAC,EACzF,qBAAqB,mBAAmB;AAC1C,IAAMC,oBAAmB,sBAAE,QAAQ;AAE5B,SAASC,2BAA0B,OAA0C;AACnF,EAAAD,kBAAiB,MAAM,KAAK;AAC7B;AAFgB,OAAAC,4BAAA;AAIT,SAASC,cAAa,MAAuC;AACnE,EAAAH,eAAc,MAAM,IAAI;AACzB;AAFgB,OAAAG,eAAA;AAIT,SAAS,aAAa,MAAuD;AACnF,gBAAc,MAAM,IAAI;AACzB;AAFgB;AAIT,SAASC,4BAA2B,MAAc,MAAc;AAEtE,EAAAD,cAAa,IAAI;AAGjB,eAAa,IAAI;AAClB;AANgB,OAAAC,6BAAA;AAQhB,IAAMC,yBAAwB,sBAAE,QAAQ,EAAE,QAAQ;AAE3C,SAASC,sBAAqB,OAA6D;AACjG,EAAAD,uBAAsB,MAAM,KAAK;AAClC;AAFgB,OAAAC,uBAAA;AAIhB,IAAMC,6BAA4B,sBAChC,MAAM;AAAA,EACN,sBAAE,OAAO,EAAE,UAAU,CAAC,UAAU,MAAM,SAAS,CAAC;AAAA,EAChD,sBACE,OAAO,EACP,QAAQ,EACR,UAAU,CAAC,UAAU,MAAM,SAAS,CAAC;AAAA,EACvC,sBAAE,OAAO,EAAE,MAAM,OAAO;AACzB,CAAC,EACA,QAAQ;AAEH,SAASC,kCAAiC,aAAsB;AACtE,SAAOD,2BAA0B,MAAM,WAAW;AACnD;AAFgB,OAAAC,mCAAA;AAIT,IAAMC,qBAAoB,sBAAE;AAAA,EAClC,sBAAE,WAAW,mCAAsB,EAAE,qBAAqB,mBAAmB;AAC9E;AAEO,IAAMC,6BAA4B,sBAAE;AAAA,EAC1C,sBAAE,WAAW,uCAA0B,EAAE,qBAAqB,mBAAmB;AAClF;;;ACjCO,IAAM,4BAAN,MAAgC;AAAA,EA/BvC,OA+BuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAItB,OAAe;AAAA;AAAA;AAAA;AAAA,EAKf;AAAA;AAAA;AAAA;AAAA,EAKA,OAA+B;AAAA;AAAA;AAAA;AAAA,EAK/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,qBAA0C;AAAA;AAAA;AAAA;AAAA,EAK1C,6BAA6D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAU7D,gBAAqC;AAAA;AAAA;AAAA;AAAA,EAKrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOT,eAAe,UAA+C;AACpE,YAAQ,IAAI,MAAM,YAAYC,mBAAkB,MAAM,eAAe,QAAQ,CAAC,CAAC;AAE/E,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,uBAAuB,kBAA2D;AACxF,YAAQ,IAAI,MAAM,qBAAqBC,2BAA0B,MAAM,eAAe,gBAAgB,CAAC,CAAC;AAExG,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,QAAQ,MAAc;AAE5B,IAAAC,cAAa,IAAI;AAEjB,YAAQ,IAAI,MAAM,QAAQ,IAAI;AAE9B,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,QAAQ,MAA8B;AAE5C,iBAAa,IAAI;AAEjB,YAAQ,IAAI,MAAM,QAAQ,IAAI;AAE9B,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWO,qBAAqB,OAAgB;AAE3C,IAAAC,2BAA0B,KAAK;AAE/B,YAAQ,IAAI,MAAM,sBAAsB,KAAK;AAE7C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUO,4BAA4B,aAA+D;AAEjG,UAAM,kBAAkBC,kCAAiC,WAAW;AAEpE,YAAQ,IAAI,MAAM,8BAA8B,eAAe;AAE/D,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWO,gBAAgB,SAAqC;AAE3D,IAAAC,sBAAqB,OAAO;AAE5B,YAAQ,IAAI,MAAM,iBAAiB,OAAO;AAE1C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,oBAAoB,QAAsB,eAA8B;AAC9E,QAAI,CAAC,KAAK,oBAAoB;AAC7B,cAAQ,IAAI,MAAM,sBAAsB,CAAC,CAAC;AAAA,IAC3C;AAEA,UAAM,eAAe,eAAe,MAAM;AAE1C,QAAI,kBAAkB,MAAM;AAC3B,WAAK,mBAAoB,YAAY,IAAI;AACzC,aAAO;AAAA,IACR;AAEA,IAAAH,cAAa,aAAa;AAE1B,SAAK,mBAAoB,YAAY,IAAI;AACzC,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,qBAAqB,gBAAwC;AACnE,QAAI,mBAAmB,MAAM;AAC5B,cAAQ,IAAI,MAAM,sBAAsB,IAAI;AAC5C,aAAO;AAAA,IACR;AAEA,YAAQ,IAAI,MAAM,sBAAsB,CAAC,CAAC;AAE1C,eAAW,QAAQ,OAAO,QAAQ,cAAc;AAC/C,WAAK,oBAAoB,GAAI,IAAsC;AACpE,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,SAA4D;AAClE,IAAAI,4BAA2B,KAAK,MAAM,KAAK,IAAI;AAE/C,4BAAwB,KAAK,kBAAkB;AAE/C,WAAO,EAAE,GAAG,KAAK;AAAA,EAClB;AACD;;;ACvOO,SAAS,YAAY,MAAgB;AAC3C,UACE,KAAK,OAAO,UAAU,MACtB,KAAK,aAAa,UAAU,MAC5B,KAAK,QAAQ,OAAO,CAAC,MAAM,SAAS,OAAO,KAAK,KAAK,SAAS,KAAK,MAAM,QAAQ,CAAC,KAAK,MACvF,KAAK,QAAQ,KAAK,UAAU,MAC5B,KAAK,QAAQ,KAAK,UAAU;AAE/B;AARgB;;;ArD0ET,IAAM,UAAU;","names":["Assertions_exports","Assertions_exports","import_shapeshift","import_v10","import_v10","import_v10","import_v10","import_v10","import_v10","import_v10","import_v10","import_v10","Assertions_exports","placeholderValidator","import_shapeshift","import_v10","placeholderValidator","placeholderValidator","isEqual","import_v10","Assertions_exports","descriptionPredicate","import_shapeshift","import_v10","import_v10","descriptionPredicate","descriptionPredicate","import_v10","import_v10","import_v10","import_v10","descriptionPredicate","import_v10","Assertions_exports","validateRequiredParameters","import_shapeshift","validateRequiredParameters","validateRequiredParameters","Assertions_exports","assertReturnOfBuilder","validateRequiredParameters","import_shapeshift","import_v10","descriptionPredicate","validateRequiredParameters","assertReturnOfBuilder","import_ts_mixer","import_v10","validateRequiredParameters","import_v10","validateRequiredParameters","import_v10","import_v10","import_shapeshift","import_v10","import_shapeshift","import_v10","import_ts_mixer","import_shapeshift","booleanPredicate","import_shapeshift","import_v10","import_v10","import_shapeshift","import_v10","import_ts_mixer","numberValidator","import_v10","import_shapeshift","import_v10","import_ts_mixer","minLengthValidator","maxLengthValidator","import_v10","assertReturnOfBuilder","import_v10","import_ts_mixer","assertReturnOfBuilder","validateRequiredParameters","assertReturnOfBuilder","Assertions_exports","contextsPredicate","integrationTypesPredicate","validateDMPermission","validateDefaultMemberPermissions","validateDefaultPermission","validateName","validateRequiredParameters","import_shapeshift","import_v10","namePredicate","booleanPredicate","validateDefaultPermission","validateName","validateRequiredParameters","dmPermissionPredicate","validateDMPermission","memberPermissionPredicate","validateDefaultMemberPermissions","contextsPredicate","integrationTypesPredicate","contextsPredicate","integrationTypesPredicate","validateName","validateDefaultPermission","validateDefaultMemberPermissions","validateDMPermission","validateRequiredParameters"]} \ No newline at end of file diff --git a/node_modules/@discordjs/builders/dist/index.mjs b/node_modules/@discordjs/builders/dist/index.mjs index 1ae27c5..2e95a5f 100644 --- a/node_modules/@discordjs/builders/dist/index.mjs +++ b/node_modules/@discordjs/builders/dist/index.mjs @@ -326,6 +326,7 @@ __export(Assertions_exports2, { defaultValidator: () => defaultValidator, disabledValidator: () => disabledValidator, emojiValidator: () => emojiValidator, + idValidator: () => idValidator, jsonOptionValidator: () => jsonOptionValidator, labelValueDescriptionValidator: () => labelValueDescriptionValidator, minMaxValidator: () => minMaxValidator, @@ -428,6 +429,7 @@ var StringSelectMenuOptionBuilder = class { }; // src/components/Assertions.ts +var idValidator = s2.number().safeInt().greaterThanOrEqual(1).lessThan(4294967296).setValidationEnabled(isValidationEnabled); var customIdValidator = s2.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); var emojiValidator = s2.object({ id: s2.string(), @@ -496,7 +498,7 @@ __name(validateRequiredButtonParameters, "validateRequiredButtonParameters"); // src/components/ActionRow.ts import { - ComponentType as ComponentType9 + ComponentType as ComponentType16 } from "discord-api-types/v10"; // src/components/Component.ts @@ -516,10 +518,26 @@ var ComponentBuilder = class { constructor(data) { this.data = data; } + /** + * Sets the id (not the custom id) for this component. + * + * @param id - The id for this component + */ + setId(id) { + this.data.id = idValidator.parse(id); + return this; + } + /** + * Clears the id of this component, defaulting to a default incremented id. + */ + clearId() { + this.data.id = void 0; + return this; + } }; // src/components/Components.ts -import { ComponentType as ComponentType8 } from "discord-api-types/v10"; +import { ComponentType as ComponentType15 } from "discord-api-types/v10"; // src/components/button/Button.ts import { @@ -1314,33 +1332,827 @@ var TextInputBuilder = class extends ComponentBuilder { } }; +// src/components/v2/Container.ts +import { ComponentType as ComponentType12 } from "discord-api-types/v10"; + +// src/components/v2/Assertions.ts +var Assertions_exports4 = {}; +__export(Assertions_exports4, { + accessoryPredicate: () => accessoryPredicate, + assertReturnOfBuilder: () => assertReturnOfBuilder, + containerColorPredicate: () => containerColorPredicate, + descriptionPredicate: () => descriptionPredicate2, + dividerPredicate: () => dividerPredicate, + filePredicate: () => filePredicate, + spacingPredicate: () => spacingPredicate, + spoilerPredicate: () => spoilerPredicate, + textDisplayContentPredicate: () => textDisplayContentPredicate, + unfurledMediaItemPredicate: () => unfurledMediaItemPredicate, + validateComponentArray: () => validateComponentArray +}); +import { s as s4 } from "@sapphire/shapeshift"; +import { SeparatorSpacingSize } from "discord-api-types/v10"; + +// src/components/v2/Thumbnail.ts +import { ComponentType as ComponentType8 } from "discord-api-types/v10"; +var ThumbnailBuilder = class extends ComponentBuilder { + static { + __name(this, "ThumbnailBuilder"); + } + /** + * Creates a new thumbnail from API data. + * + * @param data - The API data to create this thumbnail with + * @example + * Creating a thumbnail from an API data object: + * ```ts + * const thumbnail = new ThumbnailBuilder({ + * description: 'some text', + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/4.png', + * }, + * }); + * ``` + * @example + * Creating a thumbnail using setters and API data: + * ```ts + * const thumbnail = new ThumbnailBuilder({ + * media: { + * url: 'attachment://image.png', + * }, + * }) + * .setDescription('alt text'); + * ``` + */ + constructor(data = {}) { + super({ + type: ComponentType8.Thumbnail, + ...data, + media: data.media ? { url: data.media.url } : void 0 + }); + } + /** + * Sets the description of this thumbnail. + * + * @param description - The description to use + */ + setDescription(description) { + this.data.description = descriptionPredicate2.parse(description); + return this; + } + /** + * Clears the description of this thumbnail. + */ + clearDescription() { + this.data.description = void 0; + return this; + } + /** + * Sets the spoiler status of this thumbnail. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler = true) { + this.data.spoiler = spoilerPredicate.parse(spoiler); + return this; + } + /** + * Sets the media URL of this thumbnail. + * + * @param url - The URL to use + */ + setURL(url) { + this.data.media = unfurledMediaItemPredicate.parse({ url }); + return this; + } + /** + * {@inheritdoc ComponentBuilder.toJSON} + */ + toJSON() { + unfurledMediaItemPredicate.parse(this.data.media); + return { ...this.data }; + } +}; + +// src/components/v2/Assertions.ts +var unfurledMediaItemPredicate = s4.object({ + url: s4.string().url( + { allowedProtocols: ["http:", "https:", "attachment:"] }, + { message: "Invalid protocol for media URL. Must be http:, https:, or attachment:" } + ) +}).setValidationEnabled(isValidationEnabled); +var descriptionPredicate2 = s4.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(1024).setValidationEnabled(isValidationEnabled); +var filePredicate = s4.object({ + url: s4.string().url({ allowedProtocols: ["attachment:"] }, { message: "Invalid protocol for file URL. Must be attachment:" }) +}).setValidationEnabled(isValidationEnabled); +var spoilerPredicate = s4.boolean(); +var dividerPredicate = s4.boolean(); +var spacingPredicate = s4.nativeEnum(SeparatorSpacingSize); +var textDisplayContentPredicate = s4.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(4e3).setValidationEnabled(isValidationEnabled); +var accessoryPredicate = s4.instance(ButtonBuilder).or(s4.instance(ThumbnailBuilder)).setValidationEnabled(isValidationEnabled); +var containerColorPredicate = colorPredicate.nullish(); +function assertReturnOfBuilder(input, ExpectedInstanceOf) { + s4.instance(ExpectedInstanceOf).setValidationEnabled(isValidationEnabled).parse(input); +} +__name(assertReturnOfBuilder, "assertReturnOfBuilder"); +function validateComponentArray(input, min, max, ExpectedInstanceOf) { + (ExpectedInstanceOf ? s4.instance(ExpectedInstanceOf) : s4.instance(ComponentBuilder)).array().lengthGreaterThanOrEqual(min).lengthLessThanOrEqual(max).setValidationEnabled(isValidationEnabled).parse(input); +} +__name(validateComponentArray, "validateComponentArray"); + +// src/components/v2/File.ts +import { ComponentType as ComponentType9 } from "discord-api-types/v10"; +var FileBuilder = class extends ComponentBuilder { + static { + __name(this, "FileBuilder"); + } + /** + * Creates a new file from API data. + * + * @param data - The API data to create this file with + * @example + * Creating a file from an API data object: + * ```ts + * const file = new FileBuilder({ + * spoiler: true, + * file: { + * url: 'attachment://file.png', + * }, + * }); + * ``` + * @example + * Creating a file using setters and API data: + * ```ts + * const file = new FileBuilder({ + * file: { + * url: 'attachment://image.jpg', + * }, + * }) + * .setSpoiler(false); + * ``` + */ + constructor(data = {}) { + super({ type: ComponentType9.File, ...data, file: data.file ? { url: data.file.url } : void 0 }); + } + /** + * Sets the spoiler status of this file. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler = true) { + this.data.spoiler = spoilerPredicate.parse(spoiler); + return this; + } + /** + * Sets the media URL of this file. + * + * @param url - The URL to use + */ + setURL(url) { + this.data.file = filePredicate.parse({ url }); + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + filePredicate.parse(this.data.file); + return { ...this.data, file: { ...this.data.file } }; + } +}; + +// src/components/v2/Separator.ts +import { ComponentType as ComponentType10 } from "discord-api-types/v10"; +var SeparatorBuilder = class extends ComponentBuilder { + static { + __name(this, "SeparatorBuilder"); + } + /** + * Creates a new separator from API data. + * + * @param data - The API data to create this separator with + * @example + * Creating a separator from an API data object: + * ```ts + * const separator = new SeparatorBuilder({ + * spacing: SeparatorSpacingSize.Small, + * divider: true, + * }); + * ``` + * @example + * Creating a separator using setters and API data: + * ```ts + * const separator = new SeparatorBuilder({ + * spacing: SeparatorSpacingSize.Large, + * }) + * .setDivider(false); + * ``` + */ + constructor(data = {}) { + super({ + type: ComponentType10.Separator, + ...data + }); + } + /** + * Sets whether this separator should show a divider line. + * + * @param divider - Whether to show a divider line + */ + setDivider(divider = true) { + this.data.divider = dividerPredicate.parse(divider); + return this; + } + /** + * Sets the spacing of this separator. + * + * @param spacing - The spacing to use + */ + setSpacing(spacing) { + this.data.spacing = spacingPredicate.parse(spacing); + return this; + } + /** + * Clears the spacing of this separator. + */ + clearSpacing() { + this.data.spacing = void 0; + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + return { ...this.data }; + } +}; + +// src/components/v2/TextDisplay.ts +import { ComponentType as ComponentType11 } from "discord-api-types/v10"; +var TextDisplayBuilder = class extends ComponentBuilder { + static { + __name(this, "TextDisplayBuilder"); + } + /** + * Creates a new text display from API data. + * + * @param data - The API data to create this text display with + * @example + * Creating a text display from an API data object: + * ```ts + * const textDisplay = new TextDisplayBuilder({ + * content: 'some text', + * }); + * ``` + * @example + * Creating a text display using setters and API data: + * ```ts + * const textDisplay = new TextDisplayBuilder({ + * content: 'old text', + * }) + * .setContent('new text'); + * ``` + */ + constructor(data = {}) { + super({ + type: ComponentType11.TextDisplay, + ...data + }); + } + /** + * Sets the text of this text display. + * + * @param content - The text to use + */ + setContent(content) { + this.data.content = textDisplayContentPredicate.parse(content); + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + textDisplayContentPredicate.parse(this.data.content); + return { ...this.data }; + } +}; + +// src/components/v2/Container.ts +var ContainerBuilder = class extends ComponentBuilder { + static { + __name(this, "ContainerBuilder"); + } + /** + * The components within this container. + */ + components; + /** + * Creates a new container from API data. + * + * @param data - The API data to create this container with + * @example + * Creating a container from an API data object: + * ```ts + * const container = new ContainerBuilder({ + * components: [ + * { + * content: "Some text here", + * type: ComponentType.TextDisplay, + * }, + * ], + * }); + * ``` + * @example + * Creating a container using setters and API data: + * ```ts + * const container = new ContainerBuilder({ + * components: [ + * { + * content: "# Heading", + * type: ComponentType.TextDisplay, + * }, + * ], + * }) + * .addComponents(separator, section); + * ``` + */ + constructor({ components, ...data } = {}) { + super({ type: ComponentType12.Container, ...data }); + this.components = components?.map((component) => createComponentBuilder(component)) ?? []; + } + /** + * Sets the accent color of this container. + * + * @param color - The color to use + */ + setAccentColor(color) { + containerColorPredicate.parse(color); + if (Array.isArray(color)) { + const [red, green, blue] = color; + this.data.accent_color = (red << 16) + (green << 8) + blue; + return this; + } + this.data.accent_color = color; + return this; + } + /** + * Clears the accent color of this container. + */ + clearAccentColor() { + this.data.accent_color = void 0; + return this; + } + /** + * Adds action row components to this container. + * + * @param components - The action row components to add + */ + addActionRowComponents(...components) { + this.components.push( + ...normalizeArray(components).map((component) => resolveBuilder(component, ActionRowBuilder)) + ); + return this; + } + /** + * Adds file components to this container. + * + * @param components - The file components to add + */ + addFileComponents(...components) { + this.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, FileBuilder))); + return this; + } + /** + * Adds media gallery components to this container. + * + * @param components - The media gallery components to add + */ + addMediaGalleryComponents(...components) { + this.components.push( + ...normalizeArray(components).map((component) => resolveBuilder(component, MediaGalleryBuilder)) + ); + return this; + } + /** + * Adds section components to this container. + * + * @param components - The section components to add + */ + addSectionComponents(...components) { + this.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SectionBuilder))); + return this; + } + /** + * Adds separator components to this container. + * + * @param components - The separator components to add + */ + addSeparatorComponents(...components) { + this.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SeparatorBuilder))); + return this; + } + /** + * Adds text display components to this container. + * + * @param components - The text display components to add + */ + addTextDisplayComponents(...components) { + this.components.push( + ...normalizeArray(components).map((component) => resolveBuilder(component, TextDisplayBuilder)) + ); + return this; + } + /** + * Removes, replaces, or inserts components for this container. + * + * @param index - The index to start removing, replacing or inserting components + * @param deleteCount - The amount of components to remove + * @param components - The components to set + */ + spliceComponents(index, deleteCount, ...components) { + this.components.splice( + index, + deleteCount, + ...normalizeArray(components).map( + (component) => component instanceof ComponentBuilder ? component : createComponentBuilder(component) + ) + ); + return this; + } + /** + * Sets the spoiler status of this container. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler = true) { + this.data.spoiler = spoilerPredicate.parse(spoiler); + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + return { + ...this.data, + components: this.components.map((component) => component.toJSON()) + }; + } +}; + +// src/components/v2/MediaGallery.ts +import { ComponentType as ComponentType13 } from "discord-api-types/v10"; + +// src/components/v2/MediaGalleryItem.ts +var MediaGalleryItemBuilder = class { + static { + __name(this, "MediaGalleryItemBuilder"); + } + /** + * The API data associated with this media gallery item. + */ + data; + /** + * Creates a new media gallery item from API data. + * + * @param data - The API data to create this media gallery item with + * @example + * Creating a media gallery item from an API data object: + * ```ts + * const item = new MediaGalleryItemBuilder({ + * description: "Some text here", + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/2.png', + * }, + * }); + * ``` + * @example + * Creating a media gallery item using setters and API data: + * ```ts + * const item = new MediaGalleryItemBuilder({ + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/5.png', + * }, + * }) + * .setDescription("alt text"); + * ``` + */ + constructor(data = {}) { + this.data = data; + } + /** + * Sets the description of this media gallery item. + * + * @param description - The description to use + */ + setDescription(description) { + this.data.description = descriptionPredicate2.parse(description); + return this; + } + /** + * Clears the description of this media gallery item. + */ + clearDescription() { + this.data.description = void 0; + return this; + } + /** + * Sets the spoiler status of this media gallery item. + * + * @param spoiler - The spoiler status to use + */ + setSpoiler(spoiler = true) { + this.data.spoiler = spoilerPredicate.parse(spoiler); + return this; + } + /** + * Sets the media URL of this media gallery item. + * + * @param url - The URL to use + */ + setURL(url) { + this.data.media = unfurledMediaItemPredicate.parse({ url }); + return this; + } + /** + * Serializes this builder to API-compatible JSON data. + * + * @remarks + * This method runs validations on the data before serializing it. + * As such, it may throw an error if the data is invalid. + */ + toJSON() { + unfurledMediaItemPredicate.parse(this.data.media); + return { ...this.data }; + } +}; + +// src/components/v2/MediaGallery.ts +var MediaGalleryBuilder = class extends ComponentBuilder { + static { + __name(this, "MediaGalleryBuilder"); + } + /** + * The components within this container. + */ + items; + /** + * Creates a new media gallery from API data. + * + * @param data - The API data to create this media gallery with + * @example + * Creating a media gallery from an API data object: + * ```ts + * const mediaGallery = new MediaGalleryBuilder({ + * items: [ + * { + * description: "Some text here", + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/2.png', + * }, + * }, + * ], + * }); + * ``` + * @example + * Creating a media gallery using setters and API data: + * ```ts + * const mediaGallery = new MediaGalleryBuilder({ + * items: [ + * { + * description: "alt text", + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/5.png', + * }, + * }, + * ], + * }) + * .addItems(item2, item3); + * ``` + */ + constructor({ items, ...data } = {}) { + super({ type: ComponentType13.MediaGallery, ...data }); + this.items = items?.map((item) => new MediaGalleryItemBuilder(item)) ?? []; + } + /** + * Adds items to this media gallery. + * + * @param items - The items to add + */ + addItems(...items) { + this.items.push( + ...normalizeArray(items).map((input) => { + const result = resolveBuilder(input, MediaGalleryItemBuilder); + assertReturnOfBuilder(result, MediaGalleryItemBuilder); + return result; + }) + ); + return this; + } + /** + * Removes, replaces, or inserts media gallery items for this media gallery. + * + * @param index - The index to start removing, replacing or inserting items + * @param deleteCount - The amount of items to remove + * @param items - The items to insert + */ + spliceItems(index, deleteCount, ...items) { + this.items.splice( + index, + deleteCount, + ...normalizeArray(items).map((input) => { + const result = resolveBuilder(input, MediaGalleryItemBuilder); + assertReturnOfBuilder(result, MediaGalleryItemBuilder); + return result; + }) + ); + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + validateComponentArray(this.items, 1, 10, MediaGalleryItemBuilder); + return { + ...this.data, + items: this.items.map((item) => item.toJSON()) + }; + } +}; + +// src/components/v2/Section.ts +import { ComponentType as ComponentType14 } from "discord-api-types/v10"; +var SectionBuilder = class extends ComponentBuilder { + static { + __name(this, "SectionBuilder"); + } + /** + * The components within this section. + */ + components; + /** + * The accessory of this section. + */ + accessory; + /** + * Creates a new section from API data. + * + * @param data - The API data to create this section with + * @example + * Creating a section from an API data object: + * ```ts + * const section = new SectionBuilder({ + * components: [ + * { + * content: "Some text here", + * type: ComponentType.TextDisplay, + * }, + * ], + * accessory: { + * media: { + * url: 'https://cdn.discordapp.com/embed/avatars/3.png', + * }, + * } + * }); + * ``` + * @example + * Creating a section using setters and API data: + * ```ts + * const section = new SectionBuilder({ + * components: [ + * { + * content: "# Heading", + * type: ComponentType.TextDisplay, + * }, + * ], + * }) + * .setPrimaryButtonAccessory(button); + * ``` + */ + constructor({ components, accessory, ...data } = {}) { + super({ type: ComponentType14.Section, ...data }); + this.components = components?.map((component) => createComponentBuilder(component)) ?? []; + this.accessory = accessory ? createComponentBuilder(accessory) : void 0; + } + /** + * Sets the accessory of this section to a button. + * + * @param accessory - The accessory to use + */ + setButtonAccessory(accessory) { + Reflect.set(this, "accessory", accessoryPredicate.parse(resolveBuilder(accessory, ButtonBuilder))); + return this; + } + /** + * Sets the accessory of this section to a thumbnail. + * + * @param accessory - The accessory to use + */ + setThumbnailAccessory(accessory) { + Reflect.set(this, "accessory", accessoryPredicate.parse(resolveBuilder(accessory, ThumbnailBuilder))); + return this; + } + /** + * Adds text display components to this section. + * + * @param components - The text display components to add + */ + addTextDisplayComponents(...components) { + this.components.push( + ...normalizeArray(components).map((input) => { + const result = resolveBuilder(input, TextDisplayBuilder); + assertReturnOfBuilder(result, TextDisplayBuilder); + return result; + }) + ); + return this; + } + /** + * Removes, replaces, or inserts text display components for this section. + * + * @param index - The index to start removing, replacing or inserting text display components + * @param deleteCount - The amount of text display components to remove + * @param components - The text display components to insert + */ + spliceTextDisplayComponents(index, deleteCount, ...components) { + this.components.splice( + index, + deleteCount, + ...normalizeArray(components).map((input) => { + const result = resolveBuilder(input, TextDisplayBuilder); + assertReturnOfBuilder(result, TextDisplayBuilder); + return result; + }) + ); + return this; + } + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + toJSON() { + validateComponentArray(this.components, 1, 3, TextDisplayBuilder); + return { + ...this.data, + components: this.components.map((component) => component.toJSON()), + accessory: accessoryPredicate.parse(this.accessory).toJSON() + }; + } +}; + // src/components/Components.ts function createComponentBuilder(data) { if (data instanceof ComponentBuilder) { return data; } switch (data.type) { - case ComponentType8.ActionRow: + case ComponentType15.ActionRow: return new ActionRowBuilder(data); - case ComponentType8.Button: + case ComponentType15.Button: return new ButtonBuilder(data); - case ComponentType8.StringSelect: + case ComponentType15.StringSelect: return new StringSelectMenuBuilder(data); - case ComponentType8.TextInput: + case ComponentType15.TextInput: return new TextInputBuilder(data); - case ComponentType8.UserSelect: + case ComponentType15.UserSelect: return new UserSelectMenuBuilder(data); - case ComponentType8.RoleSelect: + case ComponentType15.RoleSelect: return new RoleSelectMenuBuilder(data); - case ComponentType8.MentionableSelect: + case ComponentType15.MentionableSelect: return new MentionableSelectMenuBuilder(data); - case ComponentType8.ChannelSelect: + case ComponentType15.ChannelSelect: return new ChannelSelectMenuBuilder(data); + case ComponentType15.File: + return new FileBuilder(data); + case ComponentType15.Container: + return new ContainerBuilder(data); + case ComponentType15.Section: + return new SectionBuilder(data); + case ComponentType15.Separator: + return new SeparatorBuilder(data); + case ComponentType15.TextDisplay: + return new TextDisplayBuilder(data); + case ComponentType15.Thumbnail: + return new ThumbnailBuilder(data); + case ComponentType15.MediaGallery: + return new MediaGalleryBuilder(data); default: throw new Error(`Cannot properly serialize component type: ${data.type}`); } } __name(createComponentBuilder, "createComponentBuilder"); +function isBuilder(builder, Constructor) { + return builder instanceof Constructor; +} +__name(isBuilder, "isBuilder"); +function resolveBuilder(builder, Constructor) { + if (isBuilder(builder, Constructor)) { + return builder; + } + if (typeof builder === "function") { + return builder(new Constructor()); + } + return new Constructor(builder); +} +__name(resolveBuilder, "resolveBuilder"); // src/components/ActionRow.ts var ActionRowBuilder = class extends ComponentBuilder { @@ -1386,7 +2198,7 @@ var ActionRowBuilder = class extends ComponentBuilder { * ``` */ constructor({ components, ...data } = {}) { - super({ type: ComponentType9.ActionRow, ...data }); + super({ type: ComponentType16.ActionRow, ...data }); this.components = components?.map((component) => createComponentBuilder(component)) ?? []; } /** @@ -1419,15 +2231,15 @@ var ActionRowBuilder = class extends ComponentBuilder { }; // src/interactions/modals/Assertions.ts -var Assertions_exports4 = {}; -__export(Assertions_exports4, { +var Assertions_exports5 = {}; +__export(Assertions_exports5, { componentsValidator: () => componentsValidator, titleValidator: () => titleValidator, validateRequiredParameters: () => validateRequiredParameters2 }); -import { s as s4 } from "@sapphire/shapeshift"; -var titleValidator = s4.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45).setValidationEnabled(isValidationEnabled); -var componentsValidator = s4.instance(ActionRowBuilder).array().lengthGreaterThanOrEqual(1).setValidationEnabled(isValidationEnabled); +import { s as s5 } from "@sapphire/shapeshift"; +var titleValidator = s5.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(45).setValidationEnabled(isValidationEnabled); +var componentsValidator = s5.instance(ActionRowBuilder).array().lengthGreaterThanOrEqual(1).setValidationEnabled(isValidationEnabled); function validateRequiredParameters2(customId, title, components) { customIdValidator.parse(customId); titleValidator.parse(title); @@ -1510,9 +2322,9 @@ var ModalBuilder = class { }; // src/interactions/slashCommands/Assertions.ts -var Assertions_exports5 = {}; -__export(Assertions_exports5, { - assertReturnOfBuilder: () => assertReturnOfBuilder, +var Assertions_exports6 = {}; +__export(Assertions_exports6, { + assertReturnOfBuilder: () => assertReturnOfBuilder2, contextsPredicate: () => contextsPredicate, integrationTypesPredicate: () => integrationTypesPredicate, localizationMapPredicate: () => localizationMapPredicate, @@ -1529,24 +2341,24 @@ __export(Assertions_exports5, { validateRequired: () => validateRequired, validateRequiredParameters: () => validateRequiredParameters3 }); -import { s as s5 } from "@sapphire/shapeshift"; +import { s as s6 } from "@sapphire/shapeshift"; import { ApplicationIntegrationType, InteractionContextType, Locale } from "discord-api-types/v10"; -var namePredicate = s5.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/^[\p{Ll}\p{Lm}\p{Lo}\p{N}\p{sc=Devanagari}\p{sc=Thai}_-]+$/u).setValidationEnabled(isValidationEnabled); +var namePredicate = s6.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/^[\p{Ll}\p{Lm}\p{Lo}\p{N}\p{sc=Devanagari}\p{sc=Thai}_-]+$/u).setValidationEnabled(isValidationEnabled); function validateName(name) { namePredicate.parse(name); } __name(validateName, "validateName"); -var descriptionPredicate2 = s5.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); -var localePredicate = s5.nativeEnum(Locale); +var descriptionPredicate3 = s6.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); +var localePredicate = s6.nativeEnum(Locale); function validateDescription(description) { - descriptionPredicate2.parse(description); + descriptionPredicate3.parse(description); } __name(validateDescription, "validateDescription"); -var maxArrayLengthPredicate = s5.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled); +var maxArrayLengthPredicate = s6.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled); function validateLocale(locale) { return localePredicate.parse(locale); } @@ -1561,7 +2373,7 @@ function validateRequiredParameters3(name, description, options) { validateMaxOptionsLength(options); } __name(validateRequiredParameters3, "validateRequiredParameters"); -var booleanPredicate = s5.boolean(); +var booleanPredicate = s6.boolean(); function validateDefaultPermission(value) { booleanPredicate.parse(value); } @@ -1570,29 +2382,29 @@ function validateRequired(required) { booleanPredicate.parse(required); } __name(validateRequired, "validateRequired"); -var choicesLengthPredicate = s5.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled); +var choicesLengthPredicate = s6.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled); function validateChoicesLength(amountAdding, choices) { choicesLengthPredicate.parse((choices?.length ?? 0) + amountAdding); } __name(validateChoicesLength, "validateChoicesLength"); -function assertReturnOfBuilder(input, ExpectedInstanceOf) { - s5.instance(ExpectedInstanceOf).parse(input); +function assertReturnOfBuilder2(input, ExpectedInstanceOf) { + s6.instance(ExpectedInstanceOf).parse(input); } -__name(assertReturnOfBuilder, "assertReturnOfBuilder"); -var localizationMapPredicate = s5.object(Object.fromEntries(Object.values(Locale).map((locale) => [locale, s5.string().nullish()]))).strict().nullish().setValidationEnabled(isValidationEnabled); +__name(assertReturnOfBuilder2, "assertReturnOfBuilder"); +var localizationMapPredicate = s6.object(Object.fromEntries(Object.values(Locale).map((locale) => [locale, s6.string().nullish()]))).strict().nullish().setValidationEnabled(isValidationEnabled); function validateLocalizationMap(value) { localizationMapPredicate.parse(value); } __name(validateLocalizationMap, "validateLocalizationMap"); -var dmPermissionPredicate = s5.boolean().nullish(); +var dmPermissionPredicate = s6.boolean().nullish(); function validateDMPermission(value) { dmPermissionPredicate.parse(value); } __name(validateDMPermission, "validateDMPermission"); -var memberPermissionPredicate = s5.union([ - s5.bigint().transform((value) => value.toString()), - s5.number().safeInt().transform((value) => value.toString()), - s5.string().regex(/^\d+$/) +var memberPermissionPredicate = s6.union([ + s6.bigint().transform((value) => value.toString()), + s6.number().safeInt().transform((value) => value.toString()), + s6.string().regex(/^\d+$/) ]).nullish(); function validateDefaultMemberPermissions(permissions) { return memberPermissionPredicate.parse(permissions); @@ -1602,11 +2414,11 @@ function validateNSFW(value) { booleanPredicate.parse(value); } __name(validateNSFW, "validateNSFW"); -var contextsPredicate = s5.array( - s5.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled) +var contextsPredicate = s6.array( + s6.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled) ); -var integrationTypesPredicate = s5.array( - s5.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled) +var integrationTypesPredicate = s6.array( + s6.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled) ); // src/interactions/slashCommands/SlashCommandBuilder.ts @@ -1916,7 +2728,7 @@ import { ApplicationCommandOptionType as ApplicationCommandOptionType3 } from "d import { mix } from "ts-mixer"; // src/interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.ts -import { s as s6 } from "@sapphire/shapeshift"; +import { s as s7 } from "@sapphire/shapeshift"; import { ChannelType as ChannelType2 } from "discord-api-types/v10"; var allowedChannelTypes = [ ChannelType2.GuildText, @@ -1930,7 +2742,7 @@ var allowedChannelTypes = [ ChannelType2.GuildForum, ChannelType2.GuildMedia ]; -var channelTypesPredicate = s6.array(s6.union(allowedChannelTypes.map((type) => s6.literal(type)))); +var channelTypesPredicate = s7.array(s7.union(allowedChannelTypes.map((type) => s7.literal(type)))); var ApplicationCommandOptionChannelTypesMixin = class { static { __name(this, "ApplicationCommandOptionChannelTypesMixin"); @@ -1973,7 +2785,7 @@ SlashCommandChannelOption = __decorateClass([ ], SlashCommandChannelOption); // src/interactions/slashCommands/options/integer.ts -import { s as s9 } from "@sapphire/shapeshift"; +import { s as s10 } from "@sapphire/shapeshift"; import { ApplicationCommandOptionType as ApplicationCommandOptionType5 } from "discord-api-types/v10"; import { mix as mix2 } from "ts-mixer"; @@ -1993,8 +2805,8 @@ var ApplicationCommandNumericOptionMinMaxValueMixin = class { }; // src/interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts -import { s as s7 } from "@sapphire/shapeshift"; -var booleanPredicate2 = s7.boolean(); +import { s as s8 } from "@sapphire/shapeshift"; +var booleanPredicate2 = s8.boolean(); var ApplicationCommandOptionWithAutocompleteMixin = class { static { __name(this, "ApplicationCommandOptionWithAutocompleteMixin"); @@ -2025,14 +2837,14 @@ var ApplicationCommandOptionWithAutocompleteMixin = class { }; // src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.ts -import { s as s8 } from "@sapphire/shapeshift"; +import { s as s9 } from "@sapphire/shapeshift"; import { ApplicationCommandOptionType as ApplicationCommandOptionType4 } from "discord-api-types/v10"; -var stringPredicate = s8.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100); -var numberPredicate = s8.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY); -var choicesPredicate = s8.object({ +var stringPredicate = s9.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100); +var numberPredicate = s9.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY); +var choicesPredicate = s9.object({ name: stringPredicate, name_localizations: localizationMapPredicate, - value: s8.union([stringPredicate, numberPredicate]) + value: s9.union([stringPredicate, numberPredicate]) }).array(); var ApplicationCommandOptionWithChoicesMixin = class { static { @@ -2091,7 +2903,7 @@ var ApplicationCommandOptionWithChoicesMixin = class { }; // src/interactions/slashCommands/options/integer.ts -var numberValidator = s9.number().int(); +var numberValidator = s10.number().int(); var SlashCommandIntegerOption = class extends ApplicationCommandOptionBase { /** * The type of this option. @@ -2153,10 +2965,10 @@ var SlashCommandMentionableOption = class extends ApplicationCommandOptionBase { }; // src/interactions/slashCommands/options/number.ts -import { s as s10 } from "@sapphire/shapeshift"; +import { s as s11 } from "@sapphire/shapeshift"; import { ApplicationCommandOptionType as ApplicationCommandOptionType7 } from "discord-api-types/v10"; import { mix as mix3 } from "ts-mixer"; -var numberValidator2 = s10.number(); +var numberValidator2 = s11.number(); var SlashCommandNumberOption = class extends ApplicationCommandOptionBase { /** * The type of this option. @@ -2218,11 +3030,11 @@ var SlashCommandRoleOption = class extends ApplicationCommandOptionBase { }; // src/interactions/slashCommands/options/string.ts -import { s as s11 } from "@sapphire/shapeshift"; +import { s as s12 } from "@sapphire/shapeshift"; import { ApplicationCommandOptionType as ApplicationCommandOptionType9 } from "discord-api-types/v10"; import { mix as mix4 } from "ts-mixer"; -var minLengthValidator2 = s11.number().greaterThanOrEqual(0).lessThanOrEqual(6e3); -var maxLengthValidator2 = s11.number().greaterThanOrEqual(1).lessThanOrEqual(6e3); +var minLengthValidator2 = s12.number().greaterThanOrEqual(0).lessThanOrEqual(6e3); +var maxLengthValidator2 = s12.number().greaterThanOrEqual(1).lessThanOrEqual(6e3); var SlashCommandStringOption = class extends ApplicationCommandOptionBase { /** * The type of this option. @@ -2380,7 +3192,7 @@ var SharedSlashCommandOptions = class { const { options } = this; validateMaxOptionsLength(options); const result = typeof input === "function" ? input(new Instance()) : input; - assertReturnOfBuilder(result, Instance); + assertReturnOfBuilder2(result, Instance); options.push(result); return this; } @@ -2413,7 +3225,7 @@ var SlashCommandSubcommandGroupBuilder = class { const { options } = this; validateMaxOptionsLength(options); const result = typeof input === "function" ? input(new SlashCommandSubcommandBuilder()) : input; - assertReturnOfBuilder(result, SlashCommandSubcommandBuilder); + assertReturnOfBuilder2(result, SlashCommandSubcommandBuilder); options.push(result); return this; } @@ -2492,7 +3304,7 @@ var SharedSlashCommandSubcommands = class { const { options } = this; validateMaxOptionsLength(options); const result = typeof input === "function" ? input(new SlashCommandSubcommandGroupBuilder()) : input; - assertReturnOfBuilder(result, SlashCommandSubcommandGroupBuilder); + assertReturnOfBuilder2(result, SlashCommandSubcommandGroupBuilder); options.push(result); return this; } @@ -2505,7 +3317,7 @@ var SharedSlashCommandSubcommands = class { const { options } = this; validateMaxOptionsLength(options); const result = typeof input === "function" ? input(new SlashCommandSubcommandBuilder()) : input; - assertReturnOfBuilder(result, SlashCommandSubcommandBuilder); + assertReturnOfBuilder2(result, SlashCommandSubcommandBuilder); options.push(result); return this; } @@ -2571,8 +3383,8 @@ SlashCommandBuilder = __decorateClass([ ], SlashCommandBuilder); // src/interactions/contextMenuCommands/Assertions.ts -var Assertions_exports6 = {}; -__export(Assertions_exports6, { +var Assertions_exports7 = {}; +__export(Assertions_exports7, { contextsPredicate: () => contextsPredicate2, integrationTypesPredicate: () => integrationTypesPredicate2, validateDMPermission: () => validateDMPermission2, @@ -2582,11 +3394,11 @@ __export(Assertions_exports6, { validateRequiredParameters: () => validateRequiredParameters4, validateType: () => validateType }); -import { s as s12 } from "@sapphire/shapeshift"; +import { s as s13 } from "@sapphire/shapeshift"; import { ApplicationCommandType as ApplicationCommandType2, ApplicationIntegrationType as ApplicationIntegrationType2, InteractionContextType as InteractionContextType2 } from "discord-api-types/v10"; -var namePredicate2 = s12.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/^( *[\p{P}\p{L}\p{N}\p{sc=Devanagari}\p{sc=Thai}]+ *)+$/u).setValidationEnabled(isValidationEnabled); -var typePredicate = s12.union([s12.literal(ApplicationCommandType2.User), s12.literal(ApplicationCommandType2.Message)]).setValidationEnabled(isValidationEnabled); -var booleanPredicate3 = s12.boolean(); +var namePredicate2 = s13.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(32).regex(/^( *[\p{P}\p{L}\p{N}\p{sc=Devanagari}\p{sc=Thai}]+ *)+$/u).setValidationEnabled(isValidationEnabled); +var typePredicate = s13.union([s13.literal(ApplicationCommandType2.User), s13.literal(ApplicationCommandType2.Message)]).setValidationEnabled(isValidationEnabled); +var booleanPredicate3 = s13.boolean(); function validateDefaultPermission2(value) { booleanPredicate3.parse(value); } @@ -2604,25 +3416,25 @@ function validateRequiredParameters4(name, type) { validateType(type); } __name(validateRequiredParameters4, "validateRequiredParameters"); -var dmPermissionPredicate2 = s12.boolean().nullish(); +var dmPermissionPredicate2 = s13.boolean().nullish(); function validateDMPermission2(value) { dmPermissionPredicate2.parse(value); } __name(validateDMPermission2, "validateDMPermission"); -var memberPermissionPredicate2 = s12.union([ - s12.bigint().transform((value) => value.toString()), - s12.number().safeInt().transform((value) => value.toString()), - s12.string().regex(/^\d+$/) +var memberPermissionPredicate2 = s13.union([ + s13.bigint().transform((value) => value.toString()), + s13.number().safeInt().transform((value) => value.toString()), + s13.string().regex(/^\d+$/) ]).nullish(); function validateDefaultMemberPermissions2(permissions) { return memberPermissionPredicate2.parse(permissions); } __name(validateDefaultMemberPermissions2, "validateDefaultMemberPermissions"); -var contextsPredicate2 = s12.array( - s12.nativeEnum(InteractionContextType2).setValidationEnabled(isValidationEnabled) +var contextsPredicate2 = s13.array( + s13.nativeEnum(InteractionContextType2).setValidationEnabled(isValidationEnabled) ); -var integrationTypesPredicate2 = s12.array( - s12.nativeEnum(ApplicationIntegrationType2).setValidationEnabled(isValidationEnabled) +var integrationTypesPredicate2 = s13.array( + s13.nativeEnum(ApplicationIntegrationType2).setValidationEnabled(isValidationEnabled) ); // src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts @@ -2803,7 +3615,7 @@ function embedLength(data) { __name(embedLength, "embedLength"); // src/index.ts -var version = "1.10.1"; +var version = "1.11.2"; export { ActionRowBuilder, ApplicationCommandNumericOptionMinMaxValueMixin, @@ -2816,21 +3628,28 @@ export { ChannelSelectMenuBuilder, Assertions_exports2 as ComponentAssertions, ComponentBuilder, - Assertions_exports6 as ContextMenuCommandAssertions, + Assertions_exports4 as ComponentsV2Assertions, + ContainerBuilder, + Assertions_exports7 as ContextMenuCommandAssertions, ContextMenuCommandBuilder, Assertions_exports as EmbedAssertions, EmbedBuilder, + FileBuilder, + MediaGalleryBuilder, + MediaGalleryItemBuilder, MentionableSelectMenuBuilder, - Assertions_exports4 as ModalAssertions, + Assertions_exports5 as ModalAssertions, ModalBuilder, RoleSelectMenuBuilder, + SectionBuilder, StringSelectMenuBuilder as SelectMenuBuilder, StringSelectMenuOptionBuilder as SelectMenuOptionBuilder, + SeparatorBuilder, SharedNameAndDescription, SharedSlashCommand, SharedSlashCommandOptions, SharedSlashCommandSubcommands, - Assertions_exports5 as SlashCommandAssertions, + Assertions_exports6 as SlashCommandAssertions, SlashCommandAttachmentOption, SlashCommandBooleanOption, SlashCommandBuilder, @@ -2845,8 +3664,10 @@ export { SlashCommandUserOption, StringSelectMenuBuilder, StringSelectMenuOptionBuilder, + TextDisplayBuilder, Assertions_exports3 as TextInputAssertions, TextInputBuilder, + ThumbnailBuilder, UserSelectMenuBuilder, createComponentBuilder, disableValidators, @@ -2854,6 +3675,7 @@ export { enableValidators, isValidationEnabled, normalizeArray, + resolveBuilder, version }; //# sourceMappingURL=index.mjs.map \ No newline at end of file diff --git a/node_modules/@discordjs/builders/dist/index.mjs.map b/node_modules/@discordjs/builders/dist/index.mjs.map index 6900d59..783ba10 100644 --- a/node_modules/@discordjs/builders/dist/index.mjs.map +++ b/node_modules/@discordjs/builders/dist/index.mjs.map @@ -1 +1 @@ -{"version":3,"sources":["../src/messages/embed/Assertions.ts","../src/util/validation.ts","../src/util/normalizeArray.ts","../src/messages/embed/Embed.ts","../src/index.ts","../src/components/Assertions.ts","../src/components/selectMenu/StringSelectMenuOption.ts","../src/components/ActionRow.ts","../src/components/Component.ts","../src/components/Components.ts","../src/components/button/Button.ts","../src/components/selectMenu/ChannelSelectMenu.ts","../src/components/selectMenu/BaseSelectMenu.ts","../src/components/selectMenu/MentionableSelectMenu.ts","../src/components/selectMenu/RoleSelectMenu.ts","../src/components/selectMenu/StringSelectMenu.ts","../src/components/selectMenu/UserSelectMenu.ts","../src/components/textInput/TextInput.ts","../src/components/textInput/Assertions.ts","../src/interactions/modals/Assertions.ts","../src/interactions/modals/Modal.ts","../src/interactions/slashCommands/Assertions.ts","../src/interactions/slashCommands/SlashCommandBuilder.ts","../src/interactions/slashCommands/mixins/NameAndDescription.ts","../src/interactions/slashCommands/mixins/SharedSlashCommand.ts","../src/interactions/slashCommands/options/attachment.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts","../src/interactions/slashCommands/options/boolean.ts","../src/interactions/slashCommands/options/channel.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.ts","../src/interactions/slashCommands/options/integer.ts","../src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.ts","../src/interactions/slashCommands/options/mentionable.ts","../src/interactions/slashCommands/options/number.ts","../src/interactions/slashCommands/options/role.ts","../src/interactions/slashCommands/options/string.ts","../src/interactions/slashCommands/options/user.ts","../src/interactions/slashCommands/mixins/SharedSlashCommandOptions.ts","../src/interactions/slashCommands/SlashCommandSubcommands.ts","../src/interactions/slashCommands/mixins/SharedSubcommands.ts","../src/interactions/contextMenuCommands/Assertions.ts","../src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts","../src/util/componentUtil.ts"],"sourcesContent":["import { s } from '@sapphire/shapeshift';\nimport type { APIEmbedField } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const fieldNamePredicate = s.string().lengthLessThanOrEqual(256).setValidationEnabled(isValidationEnabled);\n\nexport const fieldValuePredicate = s.string().lengthLessThanOrEqual(1_024).setValidationEnabled(isValidationEnabled);\n\nexport const fieldInlinePredicate = s.boolean().optional();\n\nexport const embedFieldPredicate = s\n\t.object({\n\t\tname: fieldNamePredicate,\n\t\tvalue: fieldValuePredicate,\n\t\tinline: fieldInlinePredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFieldsArrayPredicate = embedFieldPredicate.array().setValidationEnabled(isValidationEnabled);\n\nexport const fieldLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateFieldLength(amountAdding: number, fields?: APIEmbedField[]): void {\n\tfieldLengthPredicate.parse((fields?.length ?? 0) + amountAdding);\n}\n\nexport const authorNamePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const imageURLPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'attachment:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const urlPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedAuthorPredicate = s\n\t.object({\n\t\tname: authorNamePredicate,\n\t\ticonURL: imageURLPredicate,\n\t\turl: urlPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const RGBPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(255)\n\t.setValidationEnabled(isValidationEnabled);\nexport const colorPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(0xffffff)\n\t.or(s.tuple([RGBPredicate, RGBPredicate, RGBPredicate]))\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(4_096)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const footerTextPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(2_048)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFooterPredicate = s\n\t.object({\n\t\ttext: footerTextPredicate,\n\t\ticonURL: imageURLPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const timestampPredicate = s.union([s.number(), s.date()]).nullable().setValidationEnabled(isValidationEnabled);\n\nexport const titlePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n","let validate = true;\n\n/**\n * Enables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function enableValidators() {\n\treturn (validate = true);\n}\n\n/**\n * Disables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function disableValidators() {\n\treturn (validate = false);\n}\n\n/**\n * Checks whether validation is occurring.\n */\nexport function isValidationEnabled() {\n\treturn validate;\n}\n","/**\n * Normalizes data that is a rest parameter or an array into an array with a depth of 1.\n *\n * @typeParam ItemType - The data that must satisfy {@link RestOrArray}.\n * @param arr - The (possibly variadic) data to normalize\n */\nexport function normalizeArray(arr: RestOrArray): ItemType[] {\n\tif (Array.isArray(arr[0])) return [...arr[0]];\n\treturn arr as ItemType[];\n}\n\n/**\n * Represents data that may be an array or came from a rest parameter.\n *\n * @remarks\n * This type is used throughout builders to ensure both an array and variadic arguments\n * may be used. It is normalized with {@link normalizeArray}.\n */\nexport type RestOrArray = Type[] | [Type[]];\n","import type { APIEmbed, APIEmbedAuthor, APIEmbedField, APIEmbedFooter, APIEmbedImage } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport {\n\tcolorPredicate,\n\tdescriptionPredicate,\n\tembedAuthorPredicate,\n\tembedFieldsArrayPredicate,\n\tembedFooterPredicate,\n\timageURLPredicate,\n\ttimestampPredicate,\n\ttitlePredicate,\n\turlPredicate,\n\tvalidateFieldLength,\n} from './Assertions.js';\n\n/**\n * A tuple satisfying the RGB color model.\n *\n * @see {@link https://developer.mozilla.org/docs/Glossary/RGB}\n */\nexport type RGBTuple = [red: number, green: number, blue: number];\n\n/**\n * The base icon data typically used in payloads.\n */\nexport interface IconData {\n\t/**\n\t * The URL of the icon.\n\t */\n\ticonURL?: string;\n\t/**\n\t * The proxy URL of the icon.\n\t */\n\tproxyIconURL?: string;\n}\n\n/**\n * Represents the author data of an embed.\n */\nexport interface EmbedAuthorData extends IconData, Omit {}\n\n/**\n * Represents the author options of an embed.\n */\nexport interface EmbedAuthorOptions extends Omit {}\n\n/**\n * Represents the footer data of an embed.\n */\nexport interface EmbedFooterData extends IconData, Omit {}\n\n/**\n * Represents the footer options of an embed.\n */\nexport interface EmbedFooterOptions extends Omit {}\n\n/**\n * Represents the image data of an embed.\n */\nexport interface EmbedImageData extends Omit {\n\t/**\n\t * The proxy URL for the image.\n\t */\n\tproxyURL?: string;\n}\n\n/**\n * A builder that creates API-compatible JSON data for embeds.\n */\nexport class EmbedBuilder {\n\t/**\n\t * The API data associated with this embed.\n\t */\n\tpublic readonly data: APIEmbed;\n\n\t/**\n\t * Creates a new embed from API data.\n\t *\n\t * @param data - The API data to create this embed with\n\t */\n\tpublic constructor(data: APIEmbed = {}) {\n\t\tthis.data = { ...data };\n\t\tif (data.timestamp) this.data.timestamp = new Date(data.timestamp).toISOString();\n\t}\n\n\t/**\n\t * Appends fields to the embed.\n\t *\n\t * @remarks\n\t * This method accepts either an array of fields or a variable number of field parameters.\n\t * The maximum amount of fields that can be added is 25.\n\t * @example\n\t * Using an array:\n\t * ```ts\n\t * const fields: APIEmbedField[] = ...;\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(fields);\n\t * ```\n\t * @example\n\t * Using rest parameters (variadic):\n\t * ```ts\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(\n\t * \t\t{ name: 'Field 1', value: 'Value 1' },\n\t * \t\t{ name: 'Field 2', value: 'Value 2' },\n\t * \t);\n\t * ```\n\t * @param fields - The fields to add\n\t */\n\tpublic addFields(...fields: RestOrArray): this {\n\t\tconst normalizedFields = normalizeArray(fields);\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(normalizedFields.length, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(normalizedFields);\n\n\t\tif (this.data.fields) this.data.fields.push(...normalizedFields);\n\t\telse this.data.fields = normalizedFields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts fields for this embed.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}.\n\t * The maximum amount of fields that can be added is 25.\n\t *\n\t * It's useful for modifying and adjusting order of the already-existing fields of an embed.\n\t * @example\n\t * Remove the first field:\n\t * ```ts\n\t * embed.spliceFields(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n fields:\n\t * ```ts\n\t * const n = 4;\n\t * embed.spliceFields(0, n);\n\t * ```\n\t * @example\n\t * Remove the last field:\n\t * ```ts\n\t * embed.spliceFields(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of fields to remove\n\t * @param fields - The replacing field objects\n\t */\n\tpublic spliceFields(index: number, deleteCount: number, ...fields: APIEmbedField[]): this {\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(fields.length - deleteCount, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(fields);\n\t\tif (this.data.fields) this.data.fields.splice(index, deleteCount, ...fields);\n\t\telse this.data.fields = fields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the fields for this embed.\n\t *\n\t * @remarks\n\t * This method is an alias for {@link EmbedBuilder.spliceFields}. More specifically,\n\t * it splices the entire array of fields, replacing them with the provided fields.\n\t *\n\t * You can set a maximum of 25 fields.\n\t * @param fields - The fields to set\n\t */\n\tpublic setFields(...fields: RestOrArray): this {\n\t\tthis.spliceFields(0, this.data.fields?.length ?? 0, ...normalizeArray(fields));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the author of this embed.\n\t *\n\t * @param options - The options to use\n\t */\n\n\tpublic setAuthor(options: EmbedAuthorOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.author = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedAuthorPredicate.parse(options);\n\n\t\tthis.data.author = { name: options.name, url: options.url, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the color of this embed.\n\t *\n\t * @param color - The color to use\n\t */\n\tpublic setColor(color: RGBTuple | number | null): this {\n\t\t// Data assertions\n\t\tcolorPredicate.parse(color);\n\n\t\tif (Array.isArray(color)) {\n\t\t\tconst [red, green, blue] = color;\n\t\t\tthis.data.color = (red << 16) + (green << 8) + blue;\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.data.color = color ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this embed.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string | null): this {\n\t\t// Data assertions\n\t\tdescriptionPredicate.parse(description);\n\n\t\tthis.data.description = description ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the footer of this embed.\n\t *\n\t * @param options - The footer to use\n\t */\n\tpublic setFooter(options: EmbedFooterOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.footer = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedFooterPredicate.parse(options);\n\n\t\tthis.data.footer = { text: options.text, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the image of this embed.\n\t *\n\t * @param url - The image URL to use\n\t */\n\tpublic setImage(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.image = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the thumbnail of this embed.\n\t *\n\t * @param url - The thumbnail URL to use\n\t */\n\tpublic setThumbnail(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.thumbnail = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the timestamp of this embed.\n\t *\n\t * @param timestamp - The timestamp or date to use\n\t */\n\tpublic setTimestamp(timestamp: Date | number | null = Date.now()): this {\n\t\t// Data assertions\n\t\ttimestampPredicate.parse(timestamp);\n\n\t\tthis.data.timestamp = timestamp ? new Date(timestamp).toISOString() : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the title for this embed.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string | null): this {\n\t\t// Data assertions\n\t\ttitlePredicate.parse(title);\n\n\t\tthis.data.title = title ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL of this embed.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string | null): this {\n\t\t// Data assertions\n\t\turlPredicate.parse(url);\n\n\t\tthis.data.url = url ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIEmbed {\n\t\treturn { ...this.data };\n\t}\n}\n","export * as EmbedAssertions from './messages/embed/Assertions.js';\nexport * from './messages/embed/Embed.js';\n// TODO: Consider removing this dep in the next major version\nexport * from '@discordjs/formatters';\n\nexport * as ComponentAssertions from './components/Assertions.js';\nexport * from './components/ActionRow.js';\nexport * from './components/button/Button.js';\nexport * from './components/Component.js';\nexport * from './components/Components.js';\nexport * from './components/textInput/TextInput.js';\nexport * as TextInputAssertions from './components/textInput/Assertions.js';\nexport * from './interactions/modals/Modal.js';\nexport * as ModalAssertions from './interactions/modals/Assertions.js';\n\nexport * from './components/selectMenu/BaseSelectMenu.js';\nexport * from './components/selectMenu/ChannelSelectMenu.js';\nexport * from './components/selectMenu/MentionableSelectMenu.js';\nexport * from './components/selectMenu/RoleSelectMenu.js';\nexport * from './components/selectMenu/StringSelectMenu.js';\n// TODO: Remove those aliases in v2\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuBuilder} instead.\n\t */\n\tStringSelectMenuBuilder as SelectMenuBuilder,\n} from './components/selectMenu/StringSelectMenu.js';\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuOptionBuilder} instead.\n\t */\n\tStringSelectMenuOptionBuilder as SelectMenuOptionBuilder,\n} from './components/selectMenu/StringSelectMenuOption.js';\nexport * from './components/selectMenu/StringSelectMenuOption.js';\nexport * from './components/selectMenu/UserSelectMenu.js';\n\nexport * as SlashCommandAssertions from './interactions/slashCommands/Assertions.js';\nexport * from './interactions/slashCommands/SlashCommandBuilder.js';\nexport * from './interactions/slashCommands/SlashCommandSubcommands.js';\nexport * from './interactions/slashCommands/options/boolean.js';\nexport * from './interactions/slashCommands/options/channel.js';\nexport * from './interactions/slashCommands/options/integer.js';\nexport * from './interactions/slashCommands/options/mentionable.js';\nexport * from './interactions/slashCommands/options/number.js';\nexport * from './interactions/slashCommands/options/role.js';\nexport * from './interactions/slashCommands/options/attachment.js';\nexport * from './interactions/slashCommands/options/string.js';\nexport * from './interactions/slashCommands/options/user.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionBase.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.js';\nexport * from './interactions/slashCommands/mixins/NameAndDescription.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommandOptions.js';\nexport * from './interactions/slashCommands/mixins/SharedSubcommands.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommand.js';\n\nexport * as ContextMenuCommandAssertions from './interactions/contextMenuCommands/Assertions.js';\nexport * from './interactions/contextMenuCommands/ContextMenuCommandBuilder.js';\n\nexport * from './util/componentUtil.js';\nexport * from './util/normalizeArray.js';\nexport * from './util/validation.js';\n\n/**\n * The {@link https://github.com/discordjs/discord.js/blob/main/packages/builders#readme | @discordjs/builders} version\n * that you are currently using.\n *\n * @privateRemarks This needs to explicitly be `string` so it is not typed as a \"const string\" that gets injected by esbuild.\n */\nexport const version = '1.10.1' as string;\n","import { s } from '@sapphire/shapeshift';\nimport { ButtonStyle, ChannelType, type APIMessageComponentEmoji } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../util/validation.js';\nimport { StringSelectMenuOptionBuilder } from './selectMenu/StringSelectMenuOption.js';\n\nexport const customIdValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const emojiValidator = s\n\t.object({\n\t\tid: s.string(),\n\t\tname: s.string(),\n\t\tanimated: s.boolean(),\n\t})\n\t.partial()\n\t.strict()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const disabledValidator = s.boolean();\n\nexport const buttonLabelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(80)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const buttonStyleValidator = s.nativeEnum(ButtonStyle);\n\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(150).setValidationEnabled(isValidationEnabled);\nexport const minMaxValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const labelValueDescriptionValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const jsonOptionValidator = s\n\t.object({\n\t\tlabel: labelValueDescriptionValidator,\n\t\tvalue: labelValueDescriptionValidator,\n\t\tdescription: labelValueDescriptionValidator.optional(),\n\t\temoji: emojiValidator.optional(),\n\t\tdefault: s.boolean().optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const optionValidator = s.instance(StringSelectMenuOptionBuilder).setValidationEnabled(isValidationEnabled);\n\nexport const optionsValidator = optionValidator\n\t.array()\n\t.lengthGreaterThanOrEqual(0)\n\t.setValidationEnabled(isValidationEnabled);\nexport const optionsLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredSelectMenuParameters(options: StringSelectMenuOptionBuilder[], customId?: string) {\n\tcustomIdValidator.parse(customId);\n\toptionsValidator.parse(options);\n}\n\nexport const defaultValidator = s.boolean();\n\nexport function validateRequiredSelectMenuOptionParameters(label?: string, value?: string) {\n\tlabelValueDescriptionValidator.parse(label);\n\tlabelValueDescriptionValidator.parse(value);\n}\n\nexport const channelTypesValidator = s.nativeEnum(ChannelType).array().setValidationEnabled(isValidationEnabled);\n\nexport const urlValidator = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'discord:'],\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredButtonParameters(\n\tstyle?: ButtonStyle,\n\tlabel?: string,\n\temoji?: APIMessageComponentEmoji,\n\tcustomId?: string,\n\tskuId?: string,\n\turl?: string,\n) {\n\tif (style === ButtonStyle.Premium) {\n\t\tif (!skuId) {\n\t\t\tthrow new RangeError('Premium buttons must have an SKU id.');\n\t\t}\n\n\t\tif (customId || label || url || emoji) {\n\t\t\tthrow new RangeError('Premium buttons cannot have a custom id, label, URL, or emoji.');\n\t\t}\n\t} else {\n\t\tif (skuId) {\n\t\t\tthrow new RangeError('Non-premium buttons must not have an SKU id.');\n\t\t}\n\n\t\tif (url && customId) {\n\t\t\tthrow new RangeError('URL and custom id are mutually exclusive.');\n\t\t}\n\n\t\tif (!label && !emoji) {\n\t\t\tthrow new RangeError('Non-premium buttons must have a label and/or an emoji.');\n\t\t}\n\n\t\tif (style === ButtonStyle.Link) {\n\t\t\tif (!url) {\n\t\t\t\tthrow new RangeError('Link buttons must have a URL.');\n\t\t\t}\n\t\t} else if (url) {\n\t\t\tthrow new RangeError('Non-premium and non-link buttons cannot have a URL.');\n\t\t}\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type { APIMessageComponentEmoji, APISelectMenuOption } from 'discord-api-types/v10';\nimport {\n\tdefaultValidator,\n\temojiValidator,\n\tlabelValueDescriptionValidator,\n\tvalidateRequiredSelectMenuOptionParameters,\n} from '../Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menu options.\n */\nexport class StringSelectMenuOptionBuilder implements JSONEncodable {\n\t/**\n\t * Creates a new string select menu option from API data.\n\t *\n\t * @param data - The API data to create this string select menu option with\n\t * @example\n\t * Creating a string select menu option from an API data object:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tlabel: 'catchy label',\n\t * \tvalue: '1',\n\t * });\n\t * ```\n\t * @example\n\t * Creating a string select menu option using setters and API data:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tdefault: true,\n\t * \tvalue: '1',\n\t * })\n\t * \t.setLabel('woah');\n\t * ```\n\t */\n\tpublic constructor(public data: Partial = {}) {}\n\n\t/**\n\t * Sets the label for this option.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValueDescriptionValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this option.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = labelValueDescriptionValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description for this option.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = labelValueDescriptionValidator.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this option is selected by default.\n\t *\n\t * @param isDefault - Whether this option is selected by default\n\t */\n\tpublic setDefault(isDefault = true) {\n\t\tthis.data.default = defaultValidator.parse(isDefault);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display for this option.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\tthis.data.emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic toJSON(): APISelectMenuOption {\n\t\tvalidateRequiredSelectMenuOptionParameters(this.data.label, this.data.value);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APISelectMenuOption;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport {\n\ttype APIActionRowComponent,\n\tComponentType,\n\ttype APIMessageActionRowComponent,\n\ttype APIModalActionRowComponent,\n\ttype APIActionRowComponentTypes,\n} from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../util/normalizeArray.js';\nimport { ComponentBuilder } from './Component.js';\nimport { createComponentBuilder } from './Components.js';\nimport type { ButtonBuilder } from './button/Button.js';\nimport type { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport type { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport type { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport type { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport type { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport type { TextInputBuilder } from './textInput/TextInput.js';\n\n/**\n * The builders that may be used for messages.\n */\nexport type MessageComponentBuilder =\n\t| ActionRowBuilder\n\t| MessageActionRowComponentBuilder;\n\n/**\n * The builders that may be used for modals.\n */\nexport type ModalComponentBuilder = ActionRowBuilder | ModalActionRowComponentBuilder;\n\n/**\n * The builders that may be used within an action row for messages.\n */\nexport type MessageActionRowComponentBuilder =\n\t| ButtonBuilder\n\t| ChannelSelectMenuBuilder\n\t| MentionableSelectMenuBuilder\n\t| RoleSelectMenuBuilder\n\t| StringSelectMenuBuilder\n\t| UserSelectMenuBuilder;\n\n/**\n * The builders that may be used within an action row for modals.\n */\nexport type ModalActionRowComponentBuilder = TextInputBuilder;\n\n/**\n * Any builder.\n */\nexport type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalActionRowComponentBuilder;\n\n/**\n * A builder that creates API-compatible JSON data for action rows.\n *\n * @typeParam ComponentType - The types of components this action row holds\n */\nexport class ActionRowBuilder extends ComponentBuilder<\n\tAPIActionRowComponent\n> {\n\t/**\n\t * The components within this action row.\n\t */\n\tpublic readonly components: ComponentType[];\n\n\t/**\n\t * Creates a new action row from API data.\n\t *\n\t * @param data - The API data to create this action row with\n\t * @example\n\t * Creating an action row from an API data object:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Type something\",\n\t * \t\t\tstyle: TextInputStyle.Short,\n\t * \t\t\ttype: ComponentType.TextInput,\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating an action row using setters and API data:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Click me\",\n\t * \t\t\tstyle: ButtonStyle.Primary,\n\t * \t\t\ttype: ComponentType.Button,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addComponents(button2, button3);\n\t * ```\n\t */\n\tpublic constructor({ components, ...data }: Partial> = {}) {\n\t\tsuper({ type: ComponentType.ActionRow, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ComponentType[];\n\t}\n\n\t/**\n\t * Adds components to this action row.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addComponents(...components: RestOrArray) {\n\t\tthis.components.push(...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this action row.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setComponents(...components: RestOrArray) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIActionRowComponent> {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIActionRowComponent>;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPIActionRowComponent,\n\tAPIActionRowComponentTypes,\n\tAPIBaseComponent,\n\tComponentType,\n} from 'discord-api-types/v10';\n\n/**\n * Any action row component data represented as an object.\n */\nexport type AnyAPIActionRowComponent = APIActionRowComponent | APIActionRowComponentTypes;\n\n/**\n * The base component builder that contains common symbols for all sorts of components.\n *\n * @typeParam DataType - The type of internal API data that is stored within the component\n */\nexport abstract class ComponentBuilder<\n\tDataType extends Partial> = APIBaseComponent,\n> implements JSONEncodable\n{\n\t/**\n\t * The API data associated with this component.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): AnyAPIActionRowComponent;\n\n\t/**\n\t * Constructs a new kind of component.\n\t *\n\t * @param data - The data to construct a component out of\n\t */\n\tpublic constructor(data: Partial) {\n\t\tthis.data = data;\n\t}\n}\n","import { ComponentType, type APIMessageComponent, type APIModalComponent } from 'discord-api-types/v10';\nimport {\n\tActionRowBuilder,\n\ttype AnyComponentBuilder,\n\ttype MessageComponentBuilder,\n\ttype ModalComponentBuilder,\n} from './ActionRow.js';\nimport { ComponentBuilder } from './Component.js';\nimport { ButtonBuilder } from './button/Button.js';\nimport { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport { TextInputBuilder } from './textInput/TextInput.js';\n\n/**\n * Components here are mapped to their respective builder.\n */\nexport interface MappedComponentTypes {\n\t/**\n\t * The action row component type is associated with an {@link ActionRowBuilder}.\n\t */\n\t[ComponentType.ActionRow]: ActionRowBuilder;\n\t/**\n\t * The button component type is associated with a {@link ButtonBuilder}.\n\t */\n\t[ComponentType.Button]: ButtonBuilder;\n\t/**\n\t * The string select component type is associated with a {@link StringSelectMenuBuilder}.\n\t */\n\t[ComponentType.StringSelect]: StringSelectMenuBuilder;\n\t/**\n\t * The text input component type is associated with a {@link TextInputBuilder}.\n\t */\n\t[ComponentType.TextInput]: TextInputBuilder;\n\t/**\n\t * The user select component type is associated with a {@link UserSelectMenuBuilder}.\n\t */\n\t[ComponentType.UserSelect]: UserSelectMenuBuilder;\n\t/**\n\t * The role select component type is associated with a {@link RoleSelectMenuBuilder}.\n\t */\n\t[ComponentType.RoleSelect]: RoleSelectMenuBuilder;\n\t/**\n\t * The mentionable select component type is associated with a {@link MentionableSelectMenuBuilder}.\n\t */\n\t[ComponentType.MentionableSelect]: MentionableSelectMenuBuilder;\n\t/**\n\t * The channel select component type is associated with a {@link ChannelSelectMenuBuilder}.\n\t */\n\t[ComponentType.ChannelSelect]: ChannelSelectMenuBuilder;\n}\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentType - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\t// eslint-disable-next-line @typescript-eslint/sort-type-constituents\n\tdata: (APIModalComponent | APIMessageComponent) & { type: ComponentType },\n): MappedComponentTypes[ComponentType];\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentBuilder - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\tdata: ComponentBuilder,\n): ComponentBuilder;\n\nexport function createComponentBuilder(\n\tdata: APIMessageComponent | APIModalComponent | MessageComponentBuilder,\n): ComponentBuilder {\n\tif (data instanceof ComponentBuilder) {\n\t\treturn data;\n\t}\n\n\tswitch (data.type) {\n\t\tcase ComponentType.ActionRow:\n\t\t\treturn new ActionRowBuilder(data);\n\t\tcase ComponentType.Button:\n\t\t\treturn new ButtonBuilder(data);\n\t\tcase ComponentType.StringSelect:\n\t\t\treturn new StringSelectMenuBuilder(data);\n\t\tcase ComponentType.TextInput:\n\t\t\treturn new TextInputBuilder(data);\n\t\tcase ComponentType.UserSelect:\n\t\t\treturn new UserSelectMenuBuilder(data);\n\t\tcase ComponentType.RoleSelect:\n\t\t\treturn new RoleSelectMenuBuilder(data);\n\t\tcase ComponentType.MentionableSelect:\n\t\t\treturn new MentionableSelectMenuBuilder(data);\n\t\tcase ComponentType.ChannelSelect:\n\t\t\treturn new ChannelSelectMenuBuilder(data);\n\t\tdefault:\n\t\t\t// @ts-expect-error This case can still occur if we get a newer unsupported component type\n\t\t\tthrow new Error(`Cannot properly serialize component type: ${data.type}`);\n\t}\n}\n","import {\n\tComponentType,\n\ttype APIButtonComponent,\n\ttype APIButtonComponentWithCustomId,\n\ttype APIButtonComponentWithSKUId,\n\ttype APIButtonComponentWithURL,\n\ttype APIMessageComponentEmoji,\n\ttype ButtonStyle,\n\ttype Snowflake,\n} from 'discord-api-types/v10';\nimport {\n\tbuttonLabelValidator,\n\tbuttonStyleValidator,\n\tcustomIdValidator,\n\tdisabledValidator,\n\temojiValidator,\n\turlValidator,\n\tvalidateRequiredButtonParameters,\n} from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\n\n/**\n * A builder that creates API-compatible JSON data for buttons.\n */\nexport class ButtonBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new button from API data.\n\t *\n\t * @param data - The API data to create this button with\n\t * @example\n\t * Creating a button from an API data object:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tcustom_id: 'a cool button',\n\t * \tstyle: ButtonStyle.Primary,\n\t * \tlabel: 'Click Me',\n\t * \temoji: {\n\t * \t\tname: 'smile',\n\t * \t\tid: '123456789012345678',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a button using setters and API data:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tstyle: ButtonStyle.Secondary,\n\t * \tlabel: 'Click Me',\n\t * })\n\t * \t.setEmoji({ name: '🙂' })\n\t * \t.setCustomId('another cool button');\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ type: ComponentType.Button, ...data });\n\t}\n\n\t/**\n\t * Sets the style of this button.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: ButtonStyle) {\n\t\tthis.data.style = buttonStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL for this button.\n\t *\n\t * @remarks\n\t * This method is only available to buttons using the `Link` button style.\n\t * Only three types of URL schemes are currently supported: `https://`, `http://`, and `discord://`.\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\t(this.data as APIButtonComponentWithURL).url = urlValidator.parse(url);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this button.\n\t *\n\t * @remarks\n\t * This method is only applicable to buttons that are not using the `Link` button style.\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\t(this.data as APIButtonComponentWithCustomId).custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the SKU id that represents a purchasable SKU for this button.\n\t *\n\t * @remarks Only available when using premium-style buttons.\n\t * @param skuId - The SKU id to use\n\t */\n\tpublic setSKUId(skuId: Snowflake) {\n\t\t(this.data as APIButtonComponentWithSKUId).sku_id = skuId;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display on this button.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\t(this.data as Exclude).emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this button is disabled.\n\t *\n\t * @param disabled - Whether to disable this button\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this button.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\t(this.data as Exclude).label = buttonLabelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIButtonComponent {\n\t\tvalidateRequiredButtonParameters(\n\t\t\tthis.data.style,\n\t\t\t(this.data as Exclude).label,\n\t\t\t(this.data as Exclude).emoji,\n\t\t\t(this.data as APIButtonComponentWithCustomId).custom_id,\n\t\t\t(this.data as APIButtonComponentWithSKUId).sku_id,\n\t\t\t(this.data as APIButtonComponentWithURL).url,\n\t\t);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIButtonComponent;\n\t}\n}\n","import {\n\ttype APIChannelSelectComponent,\n\ttype ChannelType,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { channelTypesValidator, customIdValidator, optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for channel select menus.\n */\nexport class ChannelSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement)\n\t * \t.setMinValues(2);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.ChannelSelect });\n\t}\n\n\t/**\n\t * Adds channel types to this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic addChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.push(...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets channel types for this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic setChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.splice(0, this.data.channel_types.length, ...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default channels to this auto populated select menu.\n\t *\n\t * @param channels - The channels to add\n\t */\n\tpublic addDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default channels for this auto populated select menu.\n\t *\n\t * @param channels - The channels to set\n\t */\n\tpublic setDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIChannelSelectComponent {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIChannelSelectComponent;\n\t}\n}\n","import type { APISelectMenuComponent } from 'discord-api-types/v10';\nimport { customIdValidator, disabledValidator, minMaxValidator, placeholderValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\n\n/**\n * The base select menu builder that contains common symbols for select menu builders.\n *\n * @typeParam SelectMenuType - The type of select menu this would be instantiated for.\n */\nexport abstract class BaseSelectMenuBuilder<\n\tSelectMenuType extends APISelectMenuComponent,\n> extends ComponentBuilder {\n\t/**\n\t * Sets the placeholder for this select menu.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum values that must be selected in the select menu.\n\t *\n\t * @param minValues - The minimum values that must be selected\n\t */\n\tpublic setMinValues(minValues: number) {\n\t\tthis.data.min_values = minMaxValidator.parse(minValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum values that must be selected in the select menu.\n\t *\n\t * @param maxValues - The maximum values that must be selected\n\t */\n\tpublic setMaxValues(maxValues: number) {\n\t\tthis.data.max_values = minMaxValidator.parse(maxValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this select menu.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this select menu is disabled.\n\t *\n\t * @param disabled - Whether this select menu is disabled\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): SelectMenuType {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as SelectMenuType;\n\t}\n}\n","import {\n\ttype APIMentionableSelectComponent,\n\ttype APISelectMenuDefaultValue,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for mentionable select menus.\n */\nexport class MentionableSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.MentionableSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default values to this auto populated select menu.\n\t *\n\t * @param values - The values to add\n\t */\n\tpublic addDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\t\tthis.data.default_values.push(...normalizedValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default values for this auto populated select menu.\n\t *\n\t * @param values - The values to set\n\t */\n\tpublic setDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\t\tthis.data.default_values = normalizedValues;\n\t\treturn this;\n\t}\n}\n","import {\n\ttype APIRoleSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for role select menus.\n */\nexport class RoleSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.RoleSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default roles for this auto populated select menu.\n\t *\n\t * @param roles - The roles to set\n\t */\n\tpublic setDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { ComponentType } from 'discord-api-types/v10';\nimport type { APIStringSelectComponent, APISelectMenuOption } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { jsonOptionValidator, optionsLengthValidator, validateRequiredSelectMenuParameters } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\nimport { StringSelectMenuOptionBuilder } from './StringSelectMenuOption.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menus.\n */\nexport class StringSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * The options within this select menu.\n\t */\n\tpublic readonly options: StringSelectMenuOptionBuilder[];\n\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * \toptions: [\n\t * \t\t{ label: 'option 1', value: '1' },\n\t * \t\t{ label: 'option 2', value: '2' },\n\t * \t\t{ label: 'option 3', value: '3' },\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1)\n\t * \t.addOptions({\n\t * \t\tlabel: 'Catchy',\n\t * \t\tvalue: 'catch',\n\t * \t});\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tconst { options, ...initData } = data ?? {};\n\t\tsuper({ ...initData, type: ComponentType.StringSelect });\n\t\tthis.options = options?.map((option: APISelectMenuOption) => new StringSelectMenuOptionBuilder(option)) ?? [];\n\t}\n\n\t/**\n\t * Adds options to this select menu.\n\t *\n\t * @param options - The options to add\n\t */\n\tpublic addOptions(...options: RestOrArray) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\t\toptionsLengthValidator.parse(this.options.length + normalizedOptions.length);\n\t\tthis.options.push(\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the options for this select menu.\n\t *\n\t * @param options - The options to set\n\t */\n\tpublic setOptions(...options: RestOrArray) {\n\t\treturn this.spliceOptions(0, this.options.length, ...options);\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts options for this select menu.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice | Array.prototype.splice()}.\n\t * It's useful for modifying and adjusting the order of existing options.\n\t * @example\n\t * Remove the first option:\n\t * ```ts\n\t * selectMenu.spliceOptions(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n option:\n\t * ```ts\n\t * const n = 4;\n\t * selectMenu.spliceOptions(0, n);\n\t * ```\n\t * @example\n\t * Remove the last option:\n\t * ```ts\n\t * selectMenu.spliceOptions(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of options to remove\n\t * @param options - The replacing option objects or builders\n\t */\n\tpublic spliceOptions(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...options: RestOrArray\n\t) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\n\t\tconst clone = [...this.options];\n\n\t\tclone.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\n\t\toptionsLengthValidator.parse(clone.length);\n\t\tthis.options.splice(0, this.options.length, ...clone);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIStringSelectComponent {\n\t\tvalidateRequiredSelectMenuParameters(this.options, this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t} as APIStringSelectComponent;\n\t}\n}\n","import {\n\ttype APIUserSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for user select menus.\n */\nexport class UserSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.UserSelect });\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default users for this auto populated select menu.\n\t *\n\t * @param users - The users to set\n\t */\n\tpublic setDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { isJSONEncodable, type Equatable, type JSONEncodable } from '@discordjs/util';\nimport { ComponentType, type TextInputStyle, type APITextInputComponent } from 'discord-api-types/v10';\nimport isEqual from 'fast-deep-equal';\nimport { customIdValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\nimport {\n\tmaxLengthValidator,\n\tminLengthValidator,\n\tplaceholderValidator,\n\trequiredValidator,\n\tvalueValidator,\n\tvalidateRequiredParameters,\n\tlabelValidator,\n\ttextInputStyleValidator,\n} from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for text inputs.\n */\nexport class TextInputBuilder\n\textends ComponentBuilder\n\timplements Equatable>\n{\n\t/**\n\t * Creates a new text input from API data.\n\t *\n\t * @param data - The API data to create this text input with\n\t * @example\n\t * Creating a text input from an API data object:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tcustom_id: 'a cool text input',\n\t * \tlabel: 'Type something',\n\t * \tstyle: TextInputStyle.Short,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a text input using setters and API data:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tlabel: 'Type something else',\n\t * })\n\t * \t.setCustomId('woah')\n\t * \t.setStyle(TextInputStyle.Paragraph);\n\t * ```\n\t */\n\tpublic constructor(data?: APITextInputComponent & { type?: ComponentType.TextInput }) {\n\t\tsuper({ type: ComponentType.TextInput, ...data });\n\t}\n\n\t/**\n\t * Sets the custom id for this text input.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this text input.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the style for this text input.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: TextInputStyle) {\n\t\tthis.data.style = textInputStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of text for this text input.\n\t *\n\t * @param minLength - The minimum length of text for this text input\n\t */\n\tpublic setMinLength(minLength: number) {\n\t\tthis.data.min_length = minLengthValidator.parse(minLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum length of text for this text input.\n\t *\n\t * @param maxLength - The maximum length of text for this text input\n\t */\n\tpublic setMaxLength(maxLength: number) {\n\t\tthis.data.max_length = maxLengthValidator.parse(maxLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the placeholder for this text input.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this text input.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = valueValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this text input is required.\n\t *\n\t * @param required - Whether this text input is required\n\t */\n\tpublic setRequired(required = true) {\n\t\tthis.data.required = requiredValidator.parse(required);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APITextInputComponent {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.style, this.data.label);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APITextInputComponent;\n\t}\n\n\t/**\n\t * Whether this is equal to another structure.\n\t */\n\tpublic equals(other: APITextInputComponent | JSONEncodable): boolean {\n\t\tif (isJSONEncodable(other)) {\n\t\t\treturn isEqual(other.toJSON(), this.data);\n\t\t}\n\n\t\treturn isEqual(other, this.data);\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { TextInputStyle } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport { customIdValidator } from '../Assertions.js';\n\nexport const textInputStyleValidator = s.nativeEnum(TextInputStyle);\nexport const minLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const maxLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(1)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const requiredValidator = s.boolean();\nexport const valueValidator = s.string().lengthLessThanOrEqual(4_000).setValidationEnabled(isValidationEnabled);\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled);\nexport const labelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(customId?: string, style?: TextInputStyle, label?: string) {\n\tcustomIdValidator.parse(customId);\n\ttextInputStyleValidator.parse(style);\n\tlabelValidator.parse(label);\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const titleValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\nexport const componentsValidator = s\n\t.instance(ActionRowBuilder)\n\t.array()\n\t.lengthGreaterThanOrEqual(1)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(\n\tcustomId?: string,\n\ttitle?: string,\n\tcomponents?: ActionRowBuilder[],\n) {\n\tcustomIdValidator.parse(customId);\n\ttitleValidator.parse(title);\n\tcomponentsValidator.parse(components);\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPIActionRowComponent,\n\tAPIModalActionRowComponent,\n\tAPIModalInteractionResponseCallbackData,\n} from 'discord-api-types/v10';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { createComponentBuilder } from '../../components/Components.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { titleValidator, validateRequiredParameters } from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for modals.\n */\nexport class ModalBuilder implements JSONEncodable {\n\t/**\n\t * The API data associated with this modal.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * The components within this modal.\n\t */\n\tpublic readonly components: ActionRowBuilder[] = [];\n\n\t/**\n\t * Creates a new modal from API data.\n\t *\n\t * @param data - The API data to create this modal with\n\t */\n\tpublic constructor({ components, ...data }: Partial = {}) {\n\t\tthis.data = { ...data };\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ??\n\t\t\t[]) as ActionRowBuilder[];\n\t}\n\n\t/**\n\t * Sets the title of this modal.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string) {\n\t\tthis.data.title = titleValidator.parse(title);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id of this modal.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds components to this modal.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addComponents(\n\t\t...components: RestOrArray<\n\t\t\tActionRowBuilder | APIActionRowComponent\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) =>\n\t\t\t\tcomponent instanceof ActionRowBuilder\n\t\t\t\t\t? component\n\t\t\t\t\t: new ActionRowBuilder(component),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this modal.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setComponents(...components: RestOrArray>) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIModalInteractionResponseCallbackData {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.title, this.components);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIModalInteractionResponseCallbackData;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport {\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocale,\n\ttype APIApplicationCommandOptionChoice,\n\ttype LocalizationMap,\n} from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t.regex(/^[\\p{Ll}\\p{Lm}\\p{Lo}\\p{N}\\p{sc=Devanagari}\\p{sc=Thai}_-]+$/u)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nconst descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\nconst localePredicate = s.nativeEnum(Locale);\n\nexport function validateDescription(description: unknown): asserts description is string {\n\tdescriptionPredicate.parse(description);\n}\n\nconst maxArrayLengthPredicate = s.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\nexport function validateLocale(locale: unknown) {\n\treturn localePredicate.parse(locale);\n}\n\nexport function validateMaxOptionsLength(options: unknown): asserts options is ToAPIApplicationCommandOptions[] {\n\tmaxArrayLengthPredicate.parse(options);\n}\n\nexport function validateRequiredParameters(\n\tname: string,\n\tdescription: string,\n\toptions: ToAPIApplicationCommandOptions[],\n) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert description conditions\n\tvalidateDescription(description);\n\n\t// Assert options conditions\n\tvalidateMaxOptionsLength(options);\n}\n\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateRequired(required: unknown): asserts required is boolean {\n\tbooleanPredicate.parse(required);\n}\n\nconst choicesLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateChoicesLength(amountAdding: number, choices?: APIApplicationCommandOptionChoice[]): void {\n\tchoicesLengthPredicate.parse((choices?.length ?? 0) + amountAdding);\n}\n\nexport function assertReturnOfBuilder<\n\tReturnType extends ApplicationCommandOptionBase | SlashCommandSubcommandBuilder | SlashCommandSubcommandGroupBuilder,\n>(input: unknown, ExpectedInstanceOf: new () => ReturnType): asserts input is ReturnType {\n\ts.instance(ExpectedInstanceOf).parse(input);\n}\n\nexport const localizationMapPredicate = s\n\t.object(Object.fromEntries(Object.values(Locale).map((locale) => [locale, s.string().nullish()])))\n\t.strict()\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateLocalizationMap(value: unknown): asserts value is LocalizationMap {\n\tlocalizationMapPredicate.parse(value);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport function validateNSFW(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tAPIApplicationCommandOption,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocalizationMap,\n\tPermissions,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommand } from './mixins/SharedSlashCommand.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\nimport { SharedSlashCommandSubcommands } from './mixins/SharedSubcommands.js';\n\n/**\n * A builder that creates API-compatible JSON data for slash commands.\n */\n@mix(SharedSlashCommandOptions, SharedNameAndDescription, SharedSlashCommandSubcommands, SharedSlashCommand)\nexport class SlashCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * The options of this command.\n\t */\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link SlashCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Whether this command is NSFW.\n\t */\n\tpublic readonly nsfw: boolean | undefined = undefined;\n}\n\nexport interface SlashCommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command subcommands.\n */\nexport interface SlashCommandSubcommandsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command options.\n */\nexport interface SlashCommandOptionsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface that ensures the `toJSON()` call will return something\n * that can be serialized into API-compatible data.\n */\nexport interface ToAPIApplicationCommandOptions {\n\ttoJSON(): APIApplicationCommandOption;\n}\n","import type { LocaleString, LocalizationMap } from 'discord-api-types/v10';\nimport { validateDescription, validateLocale, validateName } from '../Assertions.js';\n\n/**\n * This mixin holds name and description symbols for slash commands.\n */\nexport class SharedNameAndDescription {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name!: string;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description!: string;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string): this {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this command.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\t// Assert the description matches the conditions\n\t\tvalidateDescription(description);\n\n\t\tReflect.set(this, 'description', description);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames)) {\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a description localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedDescription - The localized description for the given locale\n\t */\n\tpublic setDescriptionLocalization(locale: LocaleString, localizedDescription: string | null) {\n\t\tif (!this.description_localizations) {\n\t\t\tReflect.set(this, 'description_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedDescription === null) {\n\t\t\tthis.description_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateDescription(localizedDescription);\n\n\t\tthis.description_localizations![parsedLocale] = localizedDescription;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description localizations for this command.\n\t *\n\t * @param localizedDescriptions - The object of localized descriptions to set\n\t */\n\tpublic setDescriptionLocalizations(localizedDescriptions: LocalizationMap | null) {\n\t\tif (localizedDescriptions === null) {\n\t\t\tReflect.set(this, 'description_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'description_localizations', {});\n\t\tfor (const args of Object.entries(localizedDescriptions)) {\n\t\t\tthis.setDescriptionLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n}\n","import {\n\tApplicationCommandType,\n\ttype ApplicationIntegrationType,\n\ttype InteractionContextType,\n\ttype LocalizationMap,\n\ttype Permissions,\n\ttype RESTPostAPIChatInputApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../../util/normalizeArray.js';\nimport { normalizeArray } from '../../../util/normalizeArray.js';\nimport {\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n\tvalidateDMPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDefaultPermission,\n\tvalidateLocalizationMap,\n\tvalidateNSFW,\n\tvalidateRequiredParameters,\n} from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\n\n/**\n * This mixin holds symbols that can be shared in slashcommands independent of options or subcommands.\n */\nexport class SharedSlashCommand {\n\tpublic readonly name: string = undefined!;\n\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\tpublic readonly description: string = undefined!;\n\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\tpublic readonly nsfw: boolean | undefined = undefined;\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether or not to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run the command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated\n\t * Use {@link SharedSlashCommand.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this command is NSFW.\n\t *\n\t * @param nsfw - Whether this command is NSFW\n\t */\n\tpublic setNSFW(nsfw = true) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateNSFW(nsfw);\n\t\tReflect.set(this, 'nsfw', nsfw);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIChatInputApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\treturn {\n\t\t\t...this,\n\t\t\ttype: ApplicationCommandType.ChatInput,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandAttachmentOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command attachment option.\n */\nexport class SlashCommandAttachmentOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Attachment as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandAttachmentOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIApplicationCommandBasicOption, ApplicationCommandOptionType } from 'discord-api-types/v10';\nimport { validateRequiredParameters, validateRequired, validateLocalizationMap } from '../Assertions.js';\nimport { SharedNameAndDescription } from './NameAndDescription.js';\n\n/**\n * The base application command option builder that contains common symbols for application command builders.\n */\nexport abstract class ApplicationCommandOptionBase extends SharedNameAndDescription {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic abstract readonly type: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option is required.\n\t *\n\t * @defaultValue `false`\n\t */\n\tpublic readonly required: boolean = false;\n\n\t/**\n\t * Sets whether this option is required.\n\t *\n\t * @param required - Whether this option should be required\n\t */\n\tpublic setRequired(required: boolean) {\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(required);\n\n\t\tReflect.set(this, 'required', required);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): APIApplicationCommandBasicOption;\n\n\t/**\n\t * This method runs required validators on this builder.\n\t */\n\tprotected runRequiredValidations() {\n\t\tvalidateRequiredParameters(this.name, this.description, []);\n\n\t\t// Validate localizations\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(this.required);\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandBooleanOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command boolean option.\n */\nexport class SlashCommandBooleanOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Boolean as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandBooleanOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandChannelOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionChannelTypesMixin } from '../mixins/ApplicationCommandOptionChannelTypesMixin.js';\n\n/**\n * A slash command channel option.\n */\n@mix(ApplicationCommandOptionChannelTypesMixin)\nexport class SlashCommandChannelOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Channel as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandChannelOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n\nexport interface SlashCommandChannelOption extends ApplicationCommandOptionChannelTypesMixin {}\n","import { s } from '@sapphire/shapeshift';\nimport { ChannelType } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray';\n\n/**\n * The allowed channel types used for a channel option in a slash command builder.\n *\n * @privateRemarks This can't be dynamic because const enums are erased at runtime.\n * @internal\n */\nconst allowedChannelTypes = [\n\tChannelType.GuildText,\n\tChannelType.GuildVoice,\n\tChannelType.GuildCategory,\n\tChannelType.GuildAnnouncement,\n\tChannelType.AnnouncementThread,\n\tChannelType.PublicThread,\n\tChannelType.PrivateThread,\n\tChannelType.GuildStageVoice,\n\tChannelType.GuildForum,\n\tChannelType.GuildMedia,\n] as const;\n\n/**\n * The type of allowed channel types used for a channel option.\n */\nexport type ApplicationCommandOptionAllowedChannelTypes = (typeof allowedChannelTypes)[number];\n\nconst channelTypesPredicate = s.array(s.union(allowedChannelTypes.map((type) => s.literal(type))));\n\n/**\n * This mixin holds channel type symbols used for options.\n */\nexport class ApplicationCommandOptionChannelTypesMixin {\n\t/**\n\t * The channel types of this option.\n\t */\n\tpublic readonly channel_types?: ApplicationCommandOptionAllowedChannelTypes[];\n\n\t/**\n\t * Adds channel types to this option.\n\t *\n\t * @param channelTypes - The channel types\n\t */\n\tpublic addChannelTypes(...channelTypes: RestOrArray) {\n\t\tif (this.channel_types === undefined) {\n\t\t\tReflect.set(this, 'channel_types', []);\n\t\t}\n\n\t\tthis.channel_types!.push(...channelTypesPredicate.parse(normalizeArray(channelTypes)));\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandIntegerOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number().int();\n\n/**\n * A slash command integer option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandIntegerOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Integer as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandIntegerOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandIntegerOption;\n\t}\n}\n\nexport interface SlashCommandIntegerOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","/**\n * This mixin holds minimum and maximum symbols used for options.\n */\nexport abstract class ApplicationCommandNumericOptionMinMaxValueMixin {\n\t/**\n\t * The maximum value of this option.\n\t */\n\tpublic readonly max_value?: number;\n\n\t/**\n\t * The minimum value of this option.\n\t */\n\tpublic readonly min_value?: number;\n\n\t/**\n\t * Sets the maximum number value of this option.\n\t *\n\t * @param max - The maximum value this option can be\n\t */\n\tpublic abstract setMaxValue(max: number): this;\n\n\t/**\n\t * Sets the minimum number value of this option.\n\t *\n\t * @param min - The minimum value this option can be\n\t */\n\tpublic abstract setMinValue(min: number): this;\n}\n","import { s } from '@sapphire/shapeshift';\nimport type { ApplicationCommandOptionType } from 'discord-api-types/v10';\n\nconst booleanPredicate = s.boolean();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithAutocompleteMixin {\n\t/**\n\t * Whether this option utilizes autocomplete.\n\t */\n\tpublic readonly autocomplete?: boolean;\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option uses autocomplete.\n\t *\n\t * @param autocomplete - Whether this option should use autocomplete\n\t */\n\tpublic setAutocomplete(autocomplete: boolean): this {\n\t\t// Assert that you actually passed a boolean\n\t\tbooleanPredicate.parse(autocomplete);\n\n\t\tif (autocomplete && 'choices' in this && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tReflect.set(this, 'autocomplete', autocomplete);\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandOptionChoice } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray.js';\nimport { localizationMapPredicate, validateChoicesLength } from '../Assertions.js';\n\nconst stringPredicate = s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100);\nconst numberPredicate = s.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY);\nconst choicesPredicate = s\n\t.object({\n\t\tname: stringPredicate,\n\t\tname_localizations: localizationMapPredicate,\n\t\tvalue: s.union([stringPredicate, numberPredicate]),\n\t})\n\t.array();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithChoicesMixin {\n\t/**\n\t * The choices of this option.\n\t */\n\tpublic readonly choices?: APIApplicationCommandOptionChoice[];\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Adds multiple choices to this option.\n\t *\n\t * @param choices - The choices to add\n\t */\n\tpublic addChoices(...choices: RestOrArray>): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tif (this.choices === undefined) {\n\t\t\tReflect.set(this, 'choices', []);\n\t\t}\n\n\t\tvalidateChoicesLength(normalizedChoices.length, this.choices);\n\n\t\tfor (const { name, name_localizations, value } of normalizedChoices) {\n\t\t\t// Validate the value\n\t\t\tif (this.type === ApplicationCommandOptionType.String) {\n\t\t\t\tstringPredicate.parse(value);\n\t\t\t} else {\n\t\t\t\tnumberPredicate.parse(value);\n\t\t\t}\n\n\t\t\tthis.choices!.push({ name, name_localizations, value });\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets multiple choices for this option.\n\t *\n\t * @param choices - The choices to set\n\t */\n\tpublic setChoices>(...choices: RestOrArray): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tReflect.set(this, 'choices', []);\n\t\tthis.addChoices(normalizedChoices);\n\n\t\treturn this;\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandMentionableOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command mentionable option.\n */\nexport class SlashCommandMentionableOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Mentionable as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandMentionableOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandNumberOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number();\n\n/**\n * A slash command number option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandNumberOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Number as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandNumberOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandNumberOption;\n\t}\n}\n\nexport interface SlashCommandNumberOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandRoleOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command role option.\n */\nexport class SlashCommandRoleOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Role as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandRoleOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandStringOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst minLengthValidator = s.number().greaterThanOrEqual(0).lessThanOrEqual(6_000);\nconst maxLengthValidator = s.number().greaterThanOrEqual(1).lessThanOrEqual(6_000);\n\n/**\n * A slash command string option.\n */\n@mix(ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin)\nexport class SlashCommandStringOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.String as const;\n\n\t/**\n\t * The maximum length of this option.\n\t */\n\tpublic readonly max_length?: number;\n\n\t/**\n\t * The minimum length of this option.\n\t */\n\tpublic readonly min_length?: number;\n\n\t/**\n\t * Sets the maximum length of this string option.\n\t *\n\t * @param max - The maximum length this option can be\n\t */\n\tpublic setMaxLength(max: number): this {\n\t\tmaxLengthValidator.parse(max);\n\n\t\tReflect.set(this, 'max_length', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of this string option.\n\t *\n\t * @param min - The minimum length this option can be\n\t */\n\tpublic setMinLength(min: number): this {\n\t\tminLengthValidator.parse(min);\n\n\t\tReflect.set(this, 'min_length', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandStringOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandStringOption;\n\t}\n}\n\nexport interface SlashCommandStringOption\n\textends ApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandUserOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command user option.\n */\nexport class SlashCommandUserOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.User as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandUserOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder';\nimport { SlashCommandAttachmentOption } from '../options/attachment.js';\nimport { SlashCommandBooleanOption } from '../options/boolean.js';\nimport { SlashCommandChannelOption } from '../options/channel.js';\nimport { SlashCommandIntegerOption } from '../options/integer.js';\nimport { SlashCommandMentionableOption } from '../options/mentionable.js';\nimport { SlashCommandNumberOption } from '../options/number.js';\nimport { SlashCommandRoleOption } from '../options/role.js';\nimport { SlashCommandStringOption } from '../options/string.js';\nimport { SlashCommandUserOption } from '../options/user.js';\nimport type { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js';\n\n/**\n * This mixin holds symbols that can be shared in slash command options.\n *\n * @typeParam TypeAfterAddingOptions - The type this class should return after adding an option.\n */\nexport class SharedSlashCommandOptions<\n\tTypeAfterAddingOptions extends SharedSlashCommandOptions,\n> {\n\tpublic readonly options!: ToAPIApplicationCommandOptions[];\n\n\t/**\n\t * Adds a boolean option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addBooleanOption(\n\t\tinput: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandBooleanOption);\n\t}\n\n\t/**\n\t * Adds a user option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandUserOption);\n\t}\n\n\t/**\n\t * Adds a channel option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addChannelOption(\n\t\tinput: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandChannelOption);\n\t}\n\n\t/**\n\t * Adds a role option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandRoleOption);\n\t}\n\n\t/**\n\t * Adds an attachment option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addAttachmentOption(\n\t\tinput: SlashCommandAttachmentOption | ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandAttachmentOption);\n\t}\n\n\t/**\n\t * Adds a mentionable option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addMentionableOption(\n\t\tinput: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandMentionableOption);\n\t}\n\n\t/**\n\t * Adds a string option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addStringOption(\n\t\tinput: SlashCommandStringOption | ((builder: SlashCommandStringOption) => SlashCommandStringOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandStringOption);\n\t}\n\n\t/**\n\t * Adds an integer option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addIntegerOption(\n\t\tinput: SlashCommandIntegerOption | ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandIntegerOption);\n\t}\n\n\t/**\n\t * Adds a number option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addNumberOption(\n\t\tinput: SlashCommandNumberOption | ((builder: SlashCommandNumberOption) => SlashCommandNumberOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandNumberOption);\n\t}\n\n\t/**\n\t * Where the actual adding magic happens. ✨\n\t *\n\t * @param input - The input. What else?\n\t * @param Instance - The instance of whatever is being added\n\t * @internal\n\t */\n\tprivate _sharedAddOptionMethod(\n\t\tinput: OptionBuilder | ((builder: OptionBuilder) => OptionBuilder),\n\t\tInstance: new () => OptionBuilder,\n\t): TypeAfterAddingOptions {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new Instance()) : input;\n\n\t\tassertReturnOfBuilder(result, Instance);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingOptions;\n\t}\n}\n","import {\n\tApplicationCommandOptionType,\n\ttype APIApplicationCommandSubcommandGroupOption,\n\ttype APIApplicationCommandSubcommandOption,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { assertReturnOfBuilder, validateMaxOptionsLength, validateRequiredParameters } from './Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\n\n/**\n * Represents a folder for subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription)\nexport class SlashCommandSubcommandGroupBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand group.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand group.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The subcommands within this subcommand group.\n\t */\n\tpublic readonly options: SlashCommandSubcommandBuilder[] = [];\n\n\t/**\n\t * Adds a new subcommand to this group.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t) {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandGroupOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.SubcommandGroup,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandGroupBuilder extends SharedNameAndDescription {}\n\n/**\n * A builder that creates API-compatible JSON data for slash command subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription, SharedSlashCommandOptions)\nexport class SlashCommandSubcommandBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The options within this subcommand.\n\t */\n\tpublic readonly options: ApplicationCommandOptionBase[] = [];\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.Subcommand,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions {}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\nimport { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from '../SlashCommandSubcommands.js';\n\n/**\n * This mixin holds symbols that can be shared in slash subcommands.\n *\n * @typeParam TypeAfterAddingSubcommands - The type this class should return after adding a subcommand or subcommand group.\n */\nexport class SharedSlashCommandSubcommands<\n\tTypeAfterAddingSubcommands extends SharedSlashCommandSubcommands,\n> {\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * Adds a new subcommand group to this command.\n\t *\n\t * @param input - A function that returns a subcommand group builder or an already built builder\n\t */\n\tpublic addSubcommandGroup(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandGroupBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandGroupBuilder) => SlashCommandSubcommandGroupBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandGroupBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandGroupBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n\n\t/**\n\t * Adds a new subcommand to this command.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandType, ApplicationIntegrationType, InteractionContextType } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ContextMenuCommandType } from './ContextMenuCommandBuilder.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t// eslint-disable-next-line prefer-named-capture-group\n\t.regex(/^( *[\\p{P}\\p{L}\\p{N}\\p{sc=Devanagari}\\p{sc=Thai}]+ *)+$/u)\n\t.setValidationEnabled(isValidationEnabled);\nconst typePredicate = s\n\t.union([s.literal(ApplicationCommandType.User), s.literal(ApplicationCommandType.Message)])\n\t.setValidationEnabled(isValidationEnabled);\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nexport function validateType(type: unknown): asserts type is ContextMenuCommandType {\n\ttypePredicate.parse(type);\n}\n\nexport function validateRequiredParameters(name: string, type: number) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert type is valid\n\tvalidateType(type);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tApplicationCommandType,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocaleString,\n\tLocalizationMap,\n\tPermissions,\n\tRESTPostAPIContextMenuApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../util/normalizeArray.js';\nimport { normalizeArray } from '../../util/normalizeArray.js';\nimport { validateLocale, validateLocalizationMap } from '../slashCommands/Assertions.js';\nimport {\n\tvalidateRequiredParameters,\n\tvalidateName,\n\tvalidateType,\n\tvalidateDefaultPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDMPermission,\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n} from './Assertions.js';\n\n/**\n * The type a context menu command can be.\n */\nexport type ContextMenuCommandType = ApplicationCommandType.Message | ApplicationCommandType.User;\n\n/**\n * A builder that creates API-compatible JSON data for context menu commands.\n */\nexport class ContextMenuCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The type of this command.\n\t */\n\tpublic readonly type: ContextMenuCommandType = undefined!;\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link ContextMenuCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string) {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the type of this command.\n\t *\n\t * @param type - The type to use\n\t */\n\tpublic setType(type: ContextMenuCommandType) {\n\t\t// Assert the type is valid\n\t\tvalidateType(type);\n\n\t\tReflect.set(this, 'type', type);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run this command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames))\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIContextMenuApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.type);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIEmbed } from 'discord-api-types/v10';\n\n/**\n * Calculates the length of the embed.\n *\n * @param data - The embed data to check\n */\nexport function embedLength(data: APIEmbed) {\n\treturn (\n\t\t(data.title?.length ?? 0) +\n\t\t(data.description?.length ?? 0) +\n\t\t(data.fields?.reduce((prev, curr) => prev + curr.name.length + curr.value.length, 0) ?? 0) +\n\t\t(data.footer?.text.length ?? 0) +\n\t\t(data.author?.name.length ?? 0)\n\t);\n}\n"],"mappings":"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","names":["Assertions_exports","s","s","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","ComponentType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","Assertions_exports","placeholderValidator","s","s","placeholderValidator","ComponentType","placeholderValidator","ComponentType","ComponentType","Assertions_exports","validateRequiredParameters","s","s","validateRequiredParameters","validateRequiredParameters","Assertions_exports","validateRequiredParameters","s","s","descriptionPredicate","validateRequiredParameters","mix","validateRequiredParameters","validateRequiredParameters","ApplicationCommandOptionType","ApplicationCommandOptionType","ApplicationCommandOptionType","s","ChannelType","ChannelType","s","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","s","booleanPredicate","s","s","ApplicationCommandOptionType","s","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","ApplicationCommandOptionType","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","numberValidator","s","ApplicationCommandOptionType","mix","ApplicationCommandOptionType","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","minLengthValidator","s","maxLengthValidator","ApplicationCommandOptionType","mix","ApplicationCommandOptionType","ApplicationCommandOptionType","ApplicationCommandOptionType","mix","validateRequiredParameters","ApplicationCommandOptionType","mix","mix","Assertions_exports","contextsPredicate","integrationTypesPredicate","validateDMPermission","validateDefaultMemberPermissions","validateDefaultPermission","validateName","validateRequiredParameters","s","ApplicationCommandType","ApplicationIntegrationType","InteractionContextType","namePredicate","s","ApplicationCommandType","booleanPredicate","validateDefaultPermission","validateName","validateRequiredParameters","dmPermissionPredicate","validateDMPermission","memberPermissionPredicate","validateDefaultMemberPermissions","contextsPredicate","InteractionContextType","integrationTypesPredicate","ApplicationIntegrationType","contextsPredicate","integrationTypesPredicate","validateName","validateDefaultPermission","validateDefaultMemberPermissions","validateDMPermission","validateRequiredParameters"]} \ No newline at end of file +{"version":3,"sources":["../src/messages/embed/Assertions.ts","../src/util/validation.ts","../src/util/normalizeArray.ts","../src/messages/embed/Embed.ts","../src/index.ts","../src/components/Assertions.ts","../src/components/selectMenu/StringSelectMenuOption.ts","../src/components/ActionRow.ts","../src/components/Component.ts","../src/components/Components.ts","../src/components/button/Button.ts","../src/components/selectMenu/ChannelSelectMenu.ts","../src/components/selectMenu/BaseSelectMenu.ts","../src/components/selectMenu/MentionableSelectMenu.ts","../src/components/selectMenu/RoleSelectMenu.ts","../src/components/selectMenu/StringSelectMenu.ts","../src/components/selectMenu/UserSelectMenu.ts","../src/components/textInput/TextInput.ts","../src/components/textInput/Assertions.ts","../src/components/v2/Container.ts","../src/components/v2/Assertions.ts","../src/components/v2/Thumbnail.ts","../src/components/v2/File.ts","../src/components/v2/Separator.ts","../src/components/v2/TextDisplay.ts","../src/components/v2/MediaGallery.ts","../src/components/v2/MediaGalleryItem.ts","../src/components/v2/Section.ts","../src/interactions/modals/Assertions.ts","../src/interactions/modals/Modal.ts","../src/interactions/slashCommands/Assertions.ts","../src/interactions/slashCommands/SlashCommandBuilder.ts","../src/interactions/slashCommands/mixins/NameAndDescription.ts","../src/interactions/slashCommands/mixins/SharedSlashCommand.ts","../src/interactions/slashCommands/options/attachment.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts","../src/interactions/slashCommands/options/boolean.ts","../src/interactions/slashCommands/options/channel.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.ts","../src/interactions/slashCommands/options/integer.ts","../src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.ts","../src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.ts","../src/interactions/slashCommands/options/mentionable.ts","../src/interactions/slashCommands/options/number.ts","../src/interactions/slashCommands/options/role.ts","../src/interactions/slashCommands/options/string.ts","../src/interactions/slashCommands/options/user.ts","../src/interactions/slashCommands/mixins/SharedSlashCommandOptions.ts","../src/interactions/slashCommands/SlashCommandSubcommands.ts","../src/interactions/slashCommands/mixins/SharedSubcommands.ts","../src/interactions/contextMenuCommands/Assertions.ts","../src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts","../src/util/componentUtil.ts"],"sourcesContent":["import { s } from '@sapphire/shapeshift';\nimport type { APIEmbedField } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const fieldNamePredicate = s.string().lengthLessThanOrEqual(256).setValidationEnabled(isValidationEnabled);\n\nexport const fieldValuePredicate = s.string().lengthLessThanOrEqual(1_024).setValidationEnabled(isValidationEnabled);\n\nexport const fieldInlinePredicate = s.boolean().optional();\n\nexport const embedFieldPredicate = s\n\t.object({\n\t\tname: fieldNamePredicate,\n\t\tvalue: fieldValuePredicate,\n\t\tinline: fieldInlinePredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFieldsArrayPredicate = embedFieldPredicate.array().setValidationEnabled(isValidationEnabled);\n\nexport const fieldLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateFieldLength(amountAdding: number, fields?: APIEmbedField[]): void {\n\tfieldLengthPredicate.parse((fields?.length ?? 0) + amountAdding);\n}\n\nexport const authorNamePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const imageURLPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'attachment:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const urlPredicate = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:'],\n\t})\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedAuthorPredicate = s\n\t.object({\n\t\tname: authorNamePredicate,\n\t\ticonURL: imageURLPredicate,\n\t\turl: urlPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const RGBPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(255)\n\t.setValidationEnabled(isValidationEnabled);\nexport const colorPredicate = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(0xffffff)\n\t.or(s.tuple([RGBPredicate, RGBPredicate, RGBPredicate]))\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(4_096)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const footerTextPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(2_048)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const embedFooterPredicate = s\n\t.object({\n\t\ttext: footerTextPredicate,\n\t\ticonURL: imageURLPredicate,\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const timestampPredicate = s.union([s.number(), s.date()]).nullable().setValidationEnabled(isValidationEnabled);\n\nexport const titlePredicate = fieldNamePredicate\n\t.lengthGreaterThanOrEqual(1)\n\t.nullable()\n\t.setValidationEnabled(isValidationEnabled);\n","let validate = true;\n\n/**\n * Enables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function enableValidators() {\n\treturn (validate = true);\n}\n\n/**\n * Disables validators.\n *\n * @returns Whether validation is occurring.\n */\nexport function disableValidators() {\n\treturn (validate = false);\n}\n\n/**\n * Checks whether validation is occurring.\n */\nexport function isValidationEnabled() {\n\treturn validate;\n}\n","/**\n * Normalizes data that is a rest parameter or an array into an array with a depth of 1.\n *\n * @typeParam ItemType - The data that must satisfy {@link RestOrArray}.\n * @param arr - The (possibly variadic) data to normalize\n */\nexport function normalizeArray(arr: RestOrArray): ItemType[] {\n\tif (Array.isArray(arr[0])) return [...arr[0]];\n\treturn arr as ItemType[];\n}\n\n/**\n * Represents data that may be an array or came from a rest parameter.\n *\n * @remarks\n * This type is used throughout builders to ensure both an array and variadic arguments\n * may be used. It is normalized with {@link normalizeArray}.\n */\nexport type RestOrArray = Type[] | [Type[]];\n","import type { APIEmbed, APIEmbedAuthor, APIEmbedField, APIEmbedFooter, APIEmbedImage } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport {\n\tcolorPredicate,\n\tdescriptionPredicate,\n\tembedAuthorPredicate,\n\tembedFieldsArrayPredicate,\n\tembedFooterPredicate,\n\timageURLPredicate,\n\ttimestampPredicate,\n\ttitlePredicate,\n\turlPredicate,\n\tvalidateFieldLength,\n} from './Assertions.js';\n\n/**\n * A tuple satisfying the RGB color model.\n *\n * @see {@link https://developer.mozilla.org/docs/Glossary/RGB}\n */\nexport type RGBTuple = [red: number, green: number, blue: number];\n\n/**\n * The base icon data typically used in payloads.\n */\nexport interface IconData {\n\t/**\n\t * The URL of the icon.\n\t */\n\ticonURL?: string;\n\t/**\n\t * The proxy URL of the icon.\n\t */\n\tproxyIconURL?: string;\n}\n\n/**\n * Represents the author data of an embed.\n */\nexport interface EmbedAuthorData extends IconData, Omit {}\n\n/**\n * Represents the author options of an embed.\n */\nexport interface EmbedAuthorOptions extends Omit {}\n\n/**\n * Represents the footer data of an embed.\n */\nexport interface EmbedFooterData extends IconData, Omit {}\n\n/**\n * Represents the footer options of an embed.\n */\nexport interface EmbedFooterOptions extends Omit {}\n\n/**\n * Represents the image data of an embed.\n */\nexport interface EmbedImageData extends Omit {\n\t/**\n\t * The proxy URL for the image.\n\t */\n\tproxyURL?: string;\n}\n\n/**\n * A builder that creates API-compatible JSON data for embeds.\n */\nexport class EmbedBuilder {\n\t/**\n\t * The API data associated with this embed.\n\t */\n\tpublic readonly data: APIEmbed;\n\n\t/**\n\t * Creates a new embed from API data.\n\t *\n\t * @param data - The API data to create this embed with\n\t */\n\tpublic constructor(data: APIEmbed = {}) {\n\t\tthis.data = { ...data };\n\t\tif (data.timestamp) this.data.timestamp = new Date(data.timestamp).toISOString();\n\t}\n\n\t/**\n\t * Appends fields to the embed.\n\t *\n\t * @remarks\n\t * This method accepts either an array of fields or a variable number of field parameters.\n\t * The maximum amount of fields that can be added is 25.\n\t * @example\n\t * Using an array:\n\t * ```ts\n\t * const fields: APIEmbedField[] = ...;\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(fields);\n\t * ```\n\t * @example\n\t * Using rest parameters (variadic):\n\t * ```ts\n\t * const embed = new EmbedBuilder()\n\t * \t.addFields(\n\t * \t\t{ name: 'Field 1', value: 'Value 1' },\n\t * \t\t{ name: 'Field 2', value: 'Value 2' },\n\t * \t);\n\t * ```\n\t * @param fields - The fields to add\n\t */\n\tpublic addFields(...fields: RestOrArray): this {\n\t\tconst normalizedFields = normalizeArray(fields);\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(normalizedFields.length, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(normalizedFields);\n\n\t\tif (this.data.fields) this.data.fields.push(...normalizedFields);\n\t\telse this.data.fields = normalizedFields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts fields for this embed.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice | Array.prototype.splice()}.\n\t * The maximum amount of fields that can be added is 25.\n\t *\n\t * It's useful for modifying and adjusting order of the already-existing fields of an embed.\n\t * @example\n\t * Remove the first field:\n\t * ```ts\n\t * embed.spliceFields(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n fields:\n\t * ```ts\n\t * const n = 4;\n\t * embed.spliceFields(0, n);\n\t * ```\n\t * @example\n\t * Remove the last field:\n\t * ```ts\n\t * embed.spliceFields(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of fields to remove\n\t * @param fields - The replacing field objects\n\t */\n\tpublic spliceFields(index: number, deleteCount: number, ...fields: APIEmbedField[]): this {\n\t\t// Ensure adding these fields won't exceed the 25 field limit\n\t\tvalidateFieldLength(fields.length - deleteCount, this.data.fields);\n\n\t\t// Data assertions\n\t\tembedFieldsArrayPredicate.parse(fields);\n\t\tif (this.data.fields) this.data.fields.splice(index, deleteCount, ...fields);\n\t\telse this.data.fields = fields;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the fields for this embed.\n\t *\n\t * @remarks\n\t * This method is an alias for {@link EmbedBuilder.spliceFields}. More specifically,\n\t * it splices the entire array of fields, replacing them with the provided fields.\n\t *\n\t * You can set a maximum of 25 fields.\n\t * @param fields - The fields to set\n\t */\n\tpublic setFields(...fields: RestOrArray): this {\n\t\tthis.spliceFields(0, this.data.fields?.length ?? 0, ...normalizeArray(fields));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the author of this embed.\n\t *\n\t * @param options - The options to use\n\t */\n\n\tpublic setAuthor(options: EmbedAuthorOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.author = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedAuthorPredicate.parse(options);\n\n\t\tthis.data.author = { name: options.name, url: options.url, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the color of this embed.\n\t *\n\t * @param color - The color to use\n\t */\n\tpublic setColor(color: RGBTuple | number | null): this {\n\t\t// Data assertions\n\t\tcolorPredicate.parse(color);\n\n\t\tif (Array.isArray(color)) {\n\t\t\tconst [red, green, blue] = color;\n\t\t\tthis.data.color = (red << 16) + (green << 8) + blue;\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.data.color = color ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this embed.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string | null): this {\n\t\t// Data assertions\n\t\tdescriptionPredicate.parse(description);\n\n\t\tthis.data.description = description ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the footer of this embed.\n\t *\n\t * @param options - The footer to use\n\t */\n\tpublic setFooter(options: EmbedFooterOptions | null): this {\n\t\tif (options === null) {\n\t\t\tthis.data.footer = undefined;\n\t\t\treturn this;\n\t\t}\n\n\t\t// Data assertions\n\t\tembedFooterPredicate.parse(options);\n\n\t\tthis.data.footer = { text: options.text, icon_url: options.iconURL };\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the image of this embed.\n\t *\n\t * @param url - The image URL to use\n\t */\n\tpublic setImage(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.image = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the thumbnail of this embed.\n\t *\n\t * @param url - The thumbnail URL to use\n\t */\n\tpublic setThumbnail(url: string | null): this {\n\t\t// Data assertions\n\t\timageURLPredicate.parse(url);\n\n\t\tthis.data.thumbnail = url ? { url } : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the timestamp of this embed.\n\t *\n\t * @param timestamp - The timestamp or date to use\n\t */\n\tpublic setTimestamp(timestamp: Date | number | null = Date.now()): this {\n\t\t// Data assertions\n\t\ttimestampPredicate.parse(timestamp);\n\n\t\tthis.data.timestamp = timestamp ? new Date(timestamp).toISOString() : undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the title for this embed.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string | null): this {\n\t\t// Data assertions\n\t\ttitlePredicate.parse(title);\n\n\t\tthis.data.title = title ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL of this embed.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string | null): this {\n\t\t// Data assertions\n\t\turlPredicate.parse(url);\n\n\t\tthis.data.url = url ?? undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIEmbed {\n\t\treturn { ...this.data };\n\t}\n}\n","export * as EmbedAssertions from './messages/embed/Assertions.js';\nexport * from './messages/embed/Embed.js';\n// TODO: Consider removing this dep in the next major version\nexport * from '@discordjs/formatters';\n\nexport * as ComponentAssertions from './components/Assertions.js';\nexport * from './components/ActionRow.js';\nexport * from './components/button/Button.js';\nexport * from './components/Component.js';\nexport * from './components/Components.js';\nexport * from './components/textInput/TextInput.js';\nexport * as TextInputAssertions from './components/textInput/Assertions.js';\nexport * from './interactions/modals/Modal.js';\nexport * as ModalAssertions from './interactions/modals/Assertions.js';\n\nexport * from './components/selectMenu/BaseSelectMenu.js';\nexport * from './components/selectMenu/ChannelSelectMenu.js';\nexport * from './components/selectMenu/MentionableSelectMenu.js';\nexport * from './components/selectMenu/RoleSelectMenu.js';\nexport * from './components/selectMenu/StringSelectMenu.js';\n// TODO: Remove those aliases in v2\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuBuilder} instead.\n\t */\n\tStringSelectMenuBuilder as SelectMenuBuilder,\n} from './components/selectMenu/StringSelectMenu.js';\nexport {\n\t/**\n\t * @deprecated Will be removed in the next major version, use {@link StringSelectMenuOptionBuilder} instead.\n\t */\n\tStringSelectMenuOptionBuilder as SelectMenuOptionBuilder,\n} from './components/selectMenu/StringSelectMenuOption.js';\nexport * from './components/selectMenu/StringSelectMenuOption.js';\nexport * from './components/selectMenu/UserSelectMenu.js';\n\nexport * as ComponentsV2Assertions from './components/v2/Assertions.js';\nexport * from './components/v2/Container.js';\nexport * from './components/v2/File.js';\nexport * from './components/v2/MediaGallery.js';\nexport * from './components/v2/MediaGalleryItem.js';\nexport * from './components/v2/Section.js';\nexport * from './components/v2/Separator.js';\nexport * from './components/v2/TextDisplay.js';\nexport * from './components/v2/Thumbnail.js';\n\nexport * as SlashCommandAssertions from './interactions/slashCommands/Assertions.js';\nexport * from './interactions/slashCommands/SlashCommandBuilder.js';\nexport * from './interactions/slashCommands/SlashCommandSubcommands.js';\nexport * from './interactions/slashCommands/options/boolean.js';\nexport * from './interactions/slashCommands/options/channel.js';\nexport * from './interactions/slashCommands/options/integer.js';\nexport * from './interactions/slashCommands/options/mentionable.js';\nexport * from './interactions/slashCommands/options/number.js';\nexport * from './interactions/slashCommands/options/role.js';\nexport * from './interactions/slashCommands/options/attachment.js';\nexport * from './interactions/slashCommands/options/string.js';\nexport * from './interactions/slashCommands/options/user.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionBase.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nexport * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesMixin.js';\nexport * from './interactions/slashCommands/mixins/NameAndDescription.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommandOptions.js';\nexport * from './interactions/slashCommands/mixins/SharedSubcommands.js';\nexport * from './interactions/slashCommands/mixins/SharedSlashCommand.js';\n\nexport * as ContextMenuCommandAssertions from './interactions/contextMenuCommands/Assertions.js';\nexport * from './interactions/contextMenuCommands/ContextMenuCommandBuilder.js';\n\nexport * from './util/componentUtil.js';\nexport * from './util/normalizeArray.js';\nexport * from './util/validation.js';\n\n/**\n * The {@link https://github.com/discordjs/discord.js/blob/main/packages/builders#readme | @discordjs/builders} version\n * that you are currently using.\n *\n * @privateRemarks This needs to explicitly be `string` so it is not typed as a \"const string\" that gets injected by esbuild.\n */\nexport const version = '1.11.2' as string;\n","import { s } from '@sapphire/shapeshift';\nimport { ButtonStyle, ChannelType, type APIMessageComponentEmoji } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../util/validation.js';\nimport { StringSelectMenuOptionBuilder } from './selectMenu/StringSelectMenuOption.js';\n\nexport const idValidator = s\n\t.number()\n\t.safeInt()\n\t.greaterThanOrEqual(1)\n\t.lessThan(4_294_967_296) // 2^32 - 1\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const customIdValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const emojiValidator = s\n\t.object({\n\t\tid: s.string(),\n\t\tname: s.string(),\n\t\tanimated: s.boolean(),\n\t})\n\t.partial()\n\t.strict()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const disabledValidator = s.boolean();\n\nexport const buttonLabelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(80)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const buttonStyleValidator = s.nativeEnum(ButtonStyle);\n\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(150).setValidationEnabled(isValidationEnabled);\nexport const minMaxValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const labelValueDescriptionValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const jsonOptionValidator = s\n\t.object({\n\t\tlabel: labelValueDescriptionValidator,\n\t\tvalue: labelValueDescriptionValidator,\n\t\tdescription: labelValueDescriptionValidator.optional(),\n\t\temoji: emojiValidator.optional(),\n\t\tdefault: s.boolean().optional(),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const optionValidator = s.instance(StringSelectMenuOptionBuilder).setValidationEnabled(isValidationEnabled);\n\nexport const optionsValidator = optionValidator\n\t.array()\n\t.lengthGreaterThanOrEqual(0)\n\t.setValidationEnabled(isValidationEnabled);\nexport const optionsLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(25)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredSelectMenuParameters(options: StringSelectMenuOptionBuilder[], customId?: string) {\n\tcustomIdValidator.parse(customId);\n\toptionsValidator.parse(options);\n}\n\nexport const defaultValidator = s.boolean();\n\nexport function validateRequiredSelectMenuOptionParameters(label?: string, value?: string) {\n\tlabelValueDescriptionValidator.parse(label);\n\tlabelValueDescriptionValidator.parse(value);\n}\n\nexport const channelTypesValidator = s.nativeEnum(ChannelType).array().setValidationEnabled(isValidationEnabled);\n\nexport const urlValidator = s\n\t.string()\n\t.url({\n\t\tallowedProtocols: ['http:', 'https:', 'discord:'],\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredButtonParameters(\n\tstyle?: ButtonStyle,\n\tlabel?: string,\n\temoji?: APIMessageComponentEmoji,\n\tcustomId?: string,\n\tskuId?: string,\n\turl?: string,\n) {\n\tif (style === ButtonStyle.Premium) {\n\t\tif (!skuId) {\n\t\t\tthrow new RangeError('Premium buttons must have an SKU id.');\n\t\t}\n\n\t\tif (customId || label || url || emoji) {\n\t\t\tthrow new RangeError('Premium buttons cannot have a custom id, label, URL, or emoji.');\n\t\t}\n\t} else {\n\t\tif (skuId) {\n\t\t\tthrow new RangeError('Non-premium buttons must not have an SKU id.');\n\t\t}\n\n\t\tif (url && customId) {\n\t\t\tthrow new RangeError('URL and custom id are mutually exclusive.');\n\t\t}\n\n\t\tif (!label && !emoji) {\n\t\t\tthrow new RangeError('Non-premium buttons must have a label and/or an emoji.');\n\t\t}\n\n\t\tif (style === ButtonStyle.Link) {\n\t\t\tif (!url) {\n\t\t\t\tthrow new RangeError('Link buttons must have a URL.');\n\t\t\t}\n\t\t} else if (url) {\n\t\t\tthrow new RangeError('Non-premium and non-link buttons cannot have a URL.');\n\t\t}\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type { APIMessageComponentEmoji, APISelectMenuOption } from 'discord-api-types/v10';\nimport {\n\tdefaultValidator,\n\temojiValidator,\n\tlabelValueDescriptionValidator,\n\tvalidateRequiredSelectMenuOptionParameters,\n} from '../Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menu options.\n */\nexport class StringSelectMenuOptionBuilder implements JSONEncodable {\n\t/**\n\t * Creates a new string select menu option from API data.\n\t *\n\t * @param data - The API data to create this string select menu option with\n\t * @example\n\t * Creating a string select menu option from an API data object:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tlabel: 'catchy label',\n\t * \tvalue: '1',\n\t * });\n\t * ```\n\t * @example\n\t * Creating a string select menu option using setters and API data:\n\t * ```ts\n\t * const selectMenuOption = new SelectMenuOptionBuilder({\n\t * \tdefault: true,\n\t * \tvalue: '1',\n\t * })\n\t * \t.setLabel('woah');\n\t * ```\n\t */\n\tpublic constructor(public data: Partial = {}) {}\n\n\t/**\n\t * Sets the label for this option.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValueDescriptionValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this option.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = labelValueDescriptionValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description for this option.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = labelValueDescriptionValidator.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this option is selected by default.\n\t *\n\t * @param isDefault - Whether this option is selected by default\n\t */\n\tpublic setDefault(isDefault = true) {\n\t\tthis.data.default = defaultValidator.parse(isDefault);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display for this option.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\tthis.data.emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic toJSON(): APISelectMenuOption {\n\t\tvalidateRequiredSelectMenuOptionParameters(this.data.label, this.data.value);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APISelectMenuOption;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport {\n\ttype APIActionRowComponent,\n\tComponentType,\n\ttype APIComponentInMessageActionRow,\n\ttype APIComponentInModalActionRow,\n\ttype APIComponentInActionRow,\n} from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../util/normalizeArray.js';\nimport { ComponentBuilder } from './Component.js';\nimport { createComponentBuilder } from './Components.js';\nimport type { ButtonBuilder } from './button/Button.js';\nimport type { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport type { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport type { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport type { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport type { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport type { TextInputBuilder } from './textInput/TextInput.js';\n\n/**\n * The builders that may be used for modals.\n */\nexport type ModalComponentBuilder = ActionRowBuilder | ModalActionRowComponentBuilder;\n\n/**\n * The builders that may be used within an action row for messages.\n */\nexport type MessageActionRowComponentBuilder =\n\t| ButtonBuilder\n\t| ChannelSelectMenuBuilder\n\t| MentionableSelectMenuBuilder\n\t| RoleSelectMenuBuilder\n\t| StringSelectMenuBuilder\n\t| UserSelectMenuBuilder;\n\n/**\n * The builders that may be used within an action row for modals.\n */\nexport type ModalActionRowComponentBuilder = TextInputBuilder;\n\n/**\n * Any builder.\n */\nexport type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalActionRowComponentBuilder;\n\n/**\n * A builder that creates API-compatible JSON data for action rows.\n *\n * @typeParam ComponentType - The types of components this action row holds\n */\nexport class ActionRowBuilder extends ComponentBuilder<\n\tAPIActionRowComponent\n> {\n\t/**\n\t * The components within this action row.\n\t */\n\tpublic readonly components: ComponentType[];\n\n\t/**\n\t * Creates a new action row from API data.\n\t *\n\t * @param data - The API data to create this action row with\n\t * @example\n\t * Creating an action row from an API data object:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Type something\",\n\t * \t\t\tstyle: TextInputStyle.Short,\n\t * \t\t\ttype: ComponentType.TextInput,\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating an action row using setters and API data:\n\t * ```ts\n\t * const actionRow = new ActionRowBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcustom_id: \"custom id\",\n\t * \t\t\tlabel: \"Click me\",\n\t * \t\t\tstyle: ButtonStyle.Primary,\n\t * \t\t\ttype: ComponentType.Button,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addComponents(button2, button3);\n\t * ```\n\t */\n\tpublic constructor({ components, ...data }: Partial> = {}) {\n\t\tsuper({ type: ComponentType.ActionRow, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ComponentType[];\n\t}\n\n\t/**\n\t * Adds components to this action row.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addComponents(...components: RestOrArray) {\n\t\tthis.components.push(...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this action row.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setComponents(...components: RestOrArray) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIActionRowComponent> {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIActionRowComponent>;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInActionRow,\n\tAPIBaseComponent,\n\tComponentType,\n\tAPIMessageComponent,\n} from 'discord-api-types/v10';\nimport { idValidator } from './Assertions';\n\n/**\n * Any action row component data represented as an object.\n */\nexport type AnyAPIActionRowComponent =\n\t| APIActionRowComponent\n\t| APIComponentInActionRow\n\t| APIMessageComponent;\n\n/**\n * The base component builder that contains common symbols for all sorts of components.\n *\n * @typeParam DataType - The type of internal API data that is stored within the component\n */\nexport abstract class ComponentBuilder<\n\tDataType extends Partial> = APIBaseComponent,\n> implements JSONEncodable\n{\n\t/**\n\t * The API data associated with this component.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): AnyAPIActionRowComponent;\n\n\t/**\n\t * Constructs a new kind of component.\n\t *\n\t * @param data - The data to construct a component out of\n\t */\n\tpublic constructor(data: Partial) {\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Sets the id (not the custom id) for this component.\n\t *\n\t * @param id - The id for this component\n\t */\n\tpublic setId(id: number) {\n\t\tthis.data.id = idValidator.parse(id);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the id of this component, defaulting to a default incremented id.\n\t */\n\tpublic clearId() {\n\t\tthis.data.id = undefined;\n\t\treturn this;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport { ComponentType, type APIMessageComponent, type APIModalComponent } from 'discord-api-types/v10';\nimport {\n\tActionRowBuilder,\n\ttype MessageActionRowComponentBuilder,\n\ttype AnyComponentBuilder,\n\ttype ModalComponentBuilder,\n} from './ActionRow.js';\nimport { ComponentBuilder } from './Component.js';\nimport { ButtonBuilder } from './button/Button.js';\nimport { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js';\nimport { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js';\nimport { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js';\nimport { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js';\nimport { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js';\nimport { TextInputBuilder } from './textInput/TextInput.js';\nimport { ContainerBuilder } from './v2/Container.js';\nimport { FileBuilder } from './v2/File.js';\nimport { MediaGalleryBuilder } from './v2/MediaGallery.js';\nimport { SectionBuilder } from './v2/Section.js';\nimport { SeparatorBuilder } from './v2/Separator.js';\nimport { TextDisplayBuilder } from './v2/TextDisplay.js';\nimport { ThumbnailBuilder } from './v2/Thumbnail.js';\n\n/**\n * The builders that may be used for messages.\n */\nexport type MessageComponentBuilder =\n\t| ActionRowBuilder\n\t| ContainerBuilder\n\t| FileBuilder\n\t| MediaGalleryBuilder\n\t| MessageActionRowComponentBuilder\n\t| SectionBuilder\n\t| SeparatorBuilder\n\t| TextDisplayBuilder\n\t| ThumbnailBuilder;\n\n/**\n * Components here are mapped to their respective builder.\n */\nexport interface MappedComponentTypes {\n\t/**\n\t * The action row component type is associated with an {@link ActionRowBuilder}.\n\t */\n\t[ComponentType.ActionRow]: ActionRowBuilder;\n\t/**\n\t * The button component type is associated with a {@link ButtonBuilder}.\n\t */\n\t[ComponentType.Button]: ButtonBuilder;\n\t/**\n\t * The string select component type is associated with a {@link StringSelectMenuBuilder}.\n\t */\n\t[ComponentType.StringSelect]: StringSelectMenuBuilder;\n\t/**\n\t * The text input component type is associated with a {@link TextInputBuilder}.\n\t */\n\t[ComponentType.TextInput]: TextInputBuilder;\n\t/**\n\t * The user select component type is associated with a {@link UserSelectMenuBuilder}.\n\t */\n\t[ComponentType.UserSelect]: UserSelectMenuBuilder;\n\t/**\n\t * The role select component type is associated with a {@link RoleSelectMenuBuilder}.\n\t */\n\t[ComponentType.RoleSelect]: RoleSelectMenuBuilder;\n\t/**\n\t * The mentionable select component type is associated with a {@link MentionableSelectMenuBuilder}.\n\t */\n\t[ComponentType.MentionableSelect]: MentionableSelectMenuBuilder;\n\t/**\n\t * The channel select component type is associated with a {@link ChannelSelectMenuBuilder}.\n\t */\n\t[ComponentType.ChannelSelect]: ChannelSelectMenuBuilder;\n\t/**\n\t * The file component type is associated with a {@link FileBuilder}.\n\t */\n\t[ComponentType.File]: FileBuilder;\n\t/**\n\t * The separator component type is associated with a {@link SeparatorBuilder}.\n\t */\n\t[ComponentType.Separator]: SeparatorBuilder;\n\t/**\n\t * The container component type is associated with a {@link ContainerBuilder}.\n\t */\n\t[ComponentType.Container]: ContainerBuilder;\n\t/**\n\t * The text display component type is associated with a {@link TextDisplayBuilder}.\n\t */\n\t[ComponentType.TextDisplay]: TextDisplayBuilder;\n\t/**\n\t * The thumbnail component type is associated with a {@link ThumbnailBuilder}.\n\t */\n\t[ComponentType.Thumbnail]: ThumbnailBuilder;\n\t/**\n\t * The section component type is associated with a {@link SectionBuilder}.\n\t */\n\t[ComponentType.Section]: SectionBuilder;\n\t/**\n\t * The media gallery component type is associated with a {@link MediaGalleryBuilder}.\n\t */\n\t[ComponentType.MediaGallery]: MediaGalleryBuilder;\n}\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentType - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\t// eslint-disable-next-line @typescript-eslint/sort-type-constituents\n\tdata: (APIModalComponent | APIMessageComponent) & { type: ComponentType },\n): MappedComponentTypes[ComponentType];\n\n/**\n * Factory for creating components from API data.\n *\n * @typeParam ComponentBuilder - The type of component to use\n * @param data - The API data to transform to a component class\n */\nexport function createComponentBuilder(\n\tdata: ComponentBuilder,\n): ComponentBuilder;\n\nexport function createComponentBuilder(\n\tdata: APIMessageComponent | APIModalComponent | MessageComponentBuilder,\n): ComponentBuilder {\n\tif (data instanceof ComponentBuilder) {\n\t\treturn data;\n\t}\n\n\tswitch (data.type) {\n\t\tcase ComponentType.ActionRow:\n\t\t\treturn new ActionRowBuilder(data);\n\t\tcase ComponentType.Button:\n\t\t\treturn new ButtonBuilder(data);\n\t\tcase ComponentType.StringSelect:\n\t\t\treturn new StringSelectMenuBuilder(data);\n\t\tcase ComponentType.TextInput:\n\t\t\treturn new TextInputBuilder(data);\n\t\tcase ComponentType.UserSelect:\n\t\t\treturn new UserSelectMenuBuilder(data);\n\t\tcase ComponentType.RoleSelect:\n\t\t\treturn new RoleSelectMenuBuilder(data);\n\t\tcase ComponentType.MentionableSelect:\n\t\t\treturn new MentionableSelectMenuBuilder(data);\n\t\tcase ComponentType.ChannelSelect:\n\t\t\treturn new ChannelSelectMenuBuilder(data);\n\t\tcase ComponentType.File:\n\t\t\treturn new FileBuilder(data);\n\t\tcase ComponentType.Container:\n\t\t\treturn new ContainerBuilder(data);\n\t\tcase ComponentType.Section:\n\t\t\treturn new SectionBuilder(data);\n\t\tcase ComponentType.Separator:\n\t\t\treturn new SeparatorBuilder(data);\n\t\tcase ComponentType.TextDisplay:\n\t\t\treturn new TextDisplayBuilder(data);\n\t\tcase ComponentType.Thumbnail:\n\t\t\treturn new ThumbnailBuilder(data);\n\t\tcase ComponentType.MediaGallery:\n\t\t\treturn new MediaGalleryBuilder(data);\n\t\tdefault:\n\t\t\t// @ts-expect-error This case can still occur if we get a newer unsupported component type\n\t\t\tthrow new Error(`Cannot properly serialize component type: ${data.type}`);\n\t}\n}\n\nfunction isBuilder>(\n\tbuilder: unknown,\n\tConstructor: new () => Builder,\n): builder is Builder {\n\treturn builder instanceof Constructor;\n}\n\nexport function resolveBuilder, Builder extends JSONEncodable>(\n\tbuilder: Builder | ComponentType | ((builder: Builder) => Builder),\n\tConstructor: new (data?: ComponentType) => Builder,\n) {\n\tif (isBuilder(builder, Constructor)) {\n\t\treturn builder;\n\t}\n\n\tif (typeof builder === 'function') {\n\t\treturn builder(new Constructor());\n\t}\n\n\treturn new Constructor(builder);\n}\n","import {\n\tComponentType,\n\ttype APIButtonComponent,\n\ttype APIButtonComponentWithCustomId,\n\ttype APIButtonComponentWithSKUId,\n\ttype APIButtonComponentWithURL,\n\ttype APIMessageComponentEmoji,\n\ttype ButtonStyle,\n\ttype Snowflake,\n} from 'discord-api-types/v10';\nimport {\n\tbuttonLabelValidator,\n\tbuttonStyleValidator,\n\tcustomIdValidator,\n\tdisabledValidator,\n\temojiValidator,\n\turlValidator,\n\tvalidateRequiredButtonParameters,\n} from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\n\n/**\n * A builder that creates API-compatible JSON data for buttons.\n */\nexport class ButtonBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new button from API data.\n\t *\n\t * @param data - The API data to create this button with\n\t * @example\n\t * Creating a button from an API data object:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tcustom_id: 'a cool button',\n\t * \tstyle: ButtonStyle.Primary,\n\t * \tlabel: 'Click Me',\n\t * \temoji: {\n\t * \t\tname: 'smile',\n\t * \t\tid: '123456789012345678',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a button using setters and API data:\n\t * ```ts\n\t * const button = new ButtonBuilder({\n\t * \tstyle: ButtonStyle.Secondary,\n\t * \tlabel: 'Click Me',\n\t * })\n\t * \t.setEmoji({ name: '🙂' })\n\t * \t.setCustomId('another cool button');\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ type: ComponentType.Button, ...data });\n\t}\n\n\t/**\n\t * Sets the style of this button.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: ButtonStyle) {\n\t\tthis.data.style = buttonStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the URL for this button.\n\t *\n\t * @remarks\n\t * This method is only available to buttons using the `Link` button style.\n\t * Only three types of URL schemes are currently supported: `https://`, `http://`, and `discord://`.\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\t(this.data as APIButtonComponentWithURL).url = urlValidator.parse(url);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this button.\n\t *\n\t * @remarks\n\t * This method is only applicable to buttons that are not using the `Link` button style.\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\t(this.data as APIButtonComponentWithCustomId).custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the SKU id that represents a purchasable SKU for this button.\n\t *\n\t * @remarks Only available when using premium-style buttons.\n\t * @param skuId - The SKU id to use\n\t */\n\tpublic setSKUId(skuId: Snowflake) {\n\t\t(this.data as APIButtonComponentWithSKUId).sku_id = skuId;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the emoji to display on this button.\n\t *\n\t * @param emoji - The emoji to use\n\t */\n\tpublic setEmoji(emoji: APIMessageComponentEmoji) {\n\t\t(this.data as Exclude).emoji = emojiValidator.parse(emoji);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this button is disabled.\n\t *\n\t * @param disabled - Whether to disable this button\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this button.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\t(this.data as Exclude).label = buttonLabelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIButtonComponent {\n\t\tvalidateRequiredButtonParameters(\n\t\t\tthis.data.style,\n\t\t\t(this.data as Exclude).label,\n\t\t\t(this.data as Exclude).emoji,\n\t\t\t(this.data as APIButtonComponentWithCustomId).custom_id,\n\t\t\t(this.data as APIButtonComponentWithSKUId).sku_id,\n\t\t\t(this.data as APIButtonComponentWithURL).url,\n\t\t);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIButtonComponent;\n\t}\n}\n","import {\n\ttype APIChannelSelectComponent,\n\ttype ChannelType,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { channelTypesValidator, customIdValidator, optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for channel select menus.\n */\nexport class ChannelSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new ChannelSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement)\n\t * \t.setMinValues(2);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.ChannelSelect });\n\t}\n\n\t/**\n\t * Adds channel types to this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic addChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.push(...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets channel types for this select menu.\n\t *\n\t * @param types - The channel types to use\n\t */\n\tpublic setChannelTypes(...types: RestOrArray) {\n\t\tconst normalizedTypes = normalizeArray(types);\n\t\tthis.data.channel_types ??= [];\n\t\tthis.data.channel_types.splice(0, this.data.channel_types.length, ...channelTypesValidator.parse(normalizedTypes));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default channels to this auto populated select menu.\n\t *\n\t * @param channels - The channels to add\n\t */\n\tpublic addDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default channels for this auto populated select menu.\n\t *\n\t * @param channels - The channels to set\n\t */\n\tpublic setDefaultChannels(...channels: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(channels);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Channel as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIChannelSelectComponent {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APIChannelSelectComponent;\n\t}\n}\n","import type { APISelectMenuComponent } from 'discord-api-types/v10';\nimport { customIdValidator, disabledValidator, minMaxValidator, placeholderValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\n\n/**\n * The base select menu builder that contains common symbols for select menu builders.\n *\n * @typeParam SelectMenuType - The type of select menu this would be instantiated for.\n */\nexport abstract class BaseSelectMenuBuilder<\n\tSelectMenuType extends APISelectMenuComponent,\n> extends ComponentBuilder {\n\t/**\n\t * Sets the placeholder for this select menu.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum values that must be selected in the select menu.\n\t *\n\t * @param minValues - The minimum values that must be selected\n\t */\n\tpublic setMinValues(minValues: number) {\n\t\tthis.data.min_values = minMaxValidator.parse(minValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum values that must be selected in the select menu.\n\t *\n\t * @param maxValues - The maximum values that must be selected\n\t */\n\tpublic setMaxValues(maxValues: number) {\n\t\tthis.data.max_values = minMaxValidator.parse(maxValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id for this select menu.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this select menu is disabled.\n\t *\n\t * @param disabled - Whether this select menu is disabled\n\t */\n\tpublic setDisabled(disabled = true) {\n\t\tthis.data.disabled = disabledValidator.parse(disabled);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): SelectMenuType {\n\t\tcustomIdValidator.parse(this.data.custom_id);\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as SelectMenuType;\n\t}\n}\n","import {\n\ttype APIMentionableSelectComponent,\n\ttype APISelectMenuDefaultValue,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for mentionable select menus.\n */\nexport class MentionableSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new MentionableSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.MentionableSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds default values to this auto populated select menu.\n\t *\n\t * @param values - The values to add\n\t */\n\tpublic addDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\t\tthis.data.default_values.push(...normalizedValues);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default values for this auto populated select menu.\n\t *\n\t * @param values - The values to set\n\t */\n\tpublic setDefaultValues(\n\t\t...values: RestOrArray<\n\t\t\t| APISelectMenuDefaultValue\n\t\t\t| APISelectMenuDefaultValue\n\t\t>\n\t) {\n\t\tconst normalizedValues = normalizeArray(values);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\t\tthis.data.default_values = normalizedValues;\n\t\treturn this;\n\t}\n}\n","import {\n\ttype APIRoleSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for role select menus.\n */\nexport class RoleSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new RoleSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.RoleSelect });\n\t}\n\n\t/**\n\t * Adds default roles to this auto populated select menu.\n\t *\n\t * @param roles - The roles to add\n\t */\n\tpublic addDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default roles for this auto populated select menu.\n\t *\n\t * @param roles - The roles to set\n\t */\n\tpublic setDefaultRoles(...roles: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(roles);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.Role as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { ComponentType } from 'discord-api-types/v10';\nimport type { APIStringSelectComponent, APISelectMenuOption } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { jsonOptionValidator, optionsLengthValidator, validateRequiredSelectMenuParameters } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\nimport { StringSelectMenuOptionBuilder } from './StringSelectMenuOption.js';\n\n/**\n * A builder that creates API-compatible JSON data for string select menus.\n */\nexport class StringSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * The options within this select menu.\n\t */\n\tpublic readonly options: StringSelectMenuOptionBuilder[];\n\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * \toptions: [\n\t * \t\t{ label: 'option 1', value: '1' },\n\t * \t\t{ label: 'option 2', value: '2' },\n\t * \t\t{ label: 'option 3', value: '3' },\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new StringSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1)\n\t * \t.addOptions({\n\t * \t\tlabel: 'Catchy',\n\t * \t\tvalue: 'catch',\n\t * \t});\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tconst { options, ...initData } = data ?? {};\n\t\tsuper({ ...initData, type: ComponentType.StringSelect });\n\t\tthis.options = options?.map((option: APISelectMenuOption) => new StringSelectMenuOptionBuilder(option)) ?? [];\n\t}\n\n\t/**\n\t * Adds options to this select menu.\n\t *\n\t * @param options - The options to add\n\t */\n\tpublic addOptions(...options: RestOrArray) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\t\toptionsLengthValidator.parse(this.options.length + normalizedOptions.length);\n\t\tthis.options.push(\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the options for this select menu.\n\t *\n\t * @param options - The options to set\n\t */\n\tpublic setOptions(...options: RestOrArray) {\n\t\treturn this.spliceOptions(0, this.options.length, ...options);\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts options for this select menu.\n\t *\n\t * @remarks\n\t * This method behaves similarly\n\t * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice | Array.prototype.splice()}.\n\t * It's useful for modifying and adjusting the order of existing options.\n\t * @example\n\t * Remove the first option:\n\t * ```ts\n\t * selectMenu.spliceOptions(0, 1);\n\t * ```\n\t * @example\n\t * Remove the first n option:\n\t * ```ts\n\t * const n = 4;\n\t * selectMenu.spliceOptions(0, n);\n\t * ```\n\t * @example\n\t * Remove the last option:\n\t * ```ts\n\t * selectMenu.spliceOptions(-1, 1);\n\t * ```\n\t * @param index - The index to start at\n\t * @param deleteCount - The number of options to remove\n\t * @param options - The replacing option objects or builders\n\t */\n\tpublic spliceOptions(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...options: RestOrArray\n\t) {\n\t\tconst normalizedOptions = normalizeArray(options);\n\n\t\tconst clone = [...this.options];\n\n\t\tclone.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizedOptions.map((normalizedOption) =>\n\t\t\t\tnormalizedOption instanceof StringSelectMenuOptionBuilder\n\t\t\t\t\t? normalizedOption\n\t\t\t\t\t: new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(normalizedOption)),\n\t\t\t),\n\t\t);\n\n\t\toptionsLengthValidator.parse(clone.length);\n\t\tthis.options.splice(0, this.options.length, ...clone);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc BaseSelectMenuBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIStringSelectComponent {\n\t\tvalidateRequiredSelectMenuParameters(this.options, this.data.custom_id);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t} as APIStringSelectComponent;\n\t}\n}\n","import {\n\ttype APIUserSelectComponent,\n\ttype Snowflake,\n\tComponentType,\n\tSelectMenuDefaultValueType,\n} from 'discord-api-types/v10';\nimport { type RestOrArray, normalizeArray } from '../../util/normalizeArray.js';\nimport { optionsLengthValidator } from '../Assertions.js';\nimport { BaseSelectMenuBuilder } from './BaseSelectMenu.js';\n\n/**\n * A builder that creates API-compatible JSON data for user select menus.\n */\nexport class UserSelectMenuBuilder extends BaseSelectMenuBuilder {\n\t/**\n\t * Creates a new select menu from API data.\n\t *\n\t * @param data - The API data to create this select menu with\n\t * @example\n\t * Creating a select menu from an API data object:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * \tplaceholder: 'select an option',\n\t * \tmax_values: 2,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a select menu using setters and API data:\n\t * ```ts\n\t * const selectMenu = new UserSelectMenuBuilder({\n\t * \tcustom_id: 'a cool select menu',\n\t * })\n\t * \t.setMinValues(1);\n\t * ```\n\t */\n\tpublic constructor(data?: Partial) {\n\t\tsuper({ ...data, type: ComponentType.UserSelect });\n\t}\n\n\t/**\n\t * Adds default users to this auto populated select menu.\n\t *\n\t * @param users - The users to add\n\t */\n\tpublic addDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse((this.data.default_values?.length ?? 0) + normalizedValues.length);\n\t\tthis.data.default_values ??= [];\n\n\t\tthis.data.default_values.push(\n\t\t\t...normalizedValues.map((id) => ({\n\t\t\t\tid,\n\t\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t\t})),\n\t\t);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets default users for this auto populated select menu.\n\t *\n\t * @param users - The users to set\n\t */\n\tpublic setDefaultUsers(...users: RestOrArray) {\n\t\tconst normalizedValues = normalizeArray(users);\n\t\toptionsLengthValidator.parse(normalizedValues.length);\n\n\t\tthis.data.default_values = normalizedValues.map((id) => ({\n\t\t\tid,\n\t\t\ttype: SelectMenuDefaultValueType.User as const,\n\t\t}));\n\n\t\treturn this;\n\t}\n}\n","import { isJSONEncodable, type Equatable, type JSONEncodable } from '@discordjs/util';\nimport { ComponentType, type TextInputStyle, type APITextInputComponent } from 'discord-api-types/v10';\nimport isEqual from 'fast-deep-equal';\nimport { customIdValidator } from '../Assertions.js';\nimport { ComponentBuilder } from '../Component.js';\nimport {\n\tmaxLengthValidator,\n\tminLengthValidator,\n\tplaceholderValidator,\n\trequiredValidator,\n\tvalueValidator,\n\tvalidateRequiredParameters,\n\tlabelValidator,\n\ttextInputStyleValidator,\n} from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for text inputs.\n */\nexport class TextInputBuilder\n\textends ComponentBuilder\n\timplements Equatable>\n{\n\t/**\n\t * Creates a new text input from API data.\n\t *\n\t * @param data - The API data to create this text input with\n\t * @example\n\t * Creating a text input from an API data object:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tcustom_id: 'a cool text input',\n\t * \tlabel: 'Type something',\n\t * \tstyle: TextInputStyle.Short,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a text input using setters and API data:\n\t * ```ts\n\t * const textInput = new TextInputBuilder({\n\t * \tlabel: 'Type something else',\n\t * })\n\t * \t.setCustomId('woah')\n\t * \t.setStyle(TextInputStyle.Paragraph);\n\t * ```\n\t */\n\tpublic constructor(data?: APITextInputComponent & { type?: ComponentType.TextInput }) {\n\t\tsuper({ type: ComponentType.TextInput, ...data });\n\t}\n\n\t/**\n\t * Sets the custom id for this text input.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the label for this text input.\n\t *\n\t * @param label - The label to use\n\t */\n\tpublic setLabel(label: string) {\n\t\tthis.data.label = labelValidator.parse(label);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the style for this text input.\n\t *\n\t * @param style - The style to use\n\t */\n\tpublic setStyle(style: TextInputStyle) {\n\t\tthis.data.style = textInputStyleValidator.parse(style);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of text for this text input.\n\t *\n\t * @param minLength - The minimum length of text for this text input\n\t */\n\tpublic setMinLength(minLength: number) {\n\t\tthis.data.min_length = minLengthValidator.parse(minLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the maximum length of text for this text input.\n\t *\n\t * @param maxLength - The maximum length of text for this text input\n\t */\n\tpublic setMaxLength(maxLength: number) {\n\t\tthis.data.max_length = maxLengthValidator.parse(maxLength);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the placeholder for this text input.\n\t *\n\t * @param placeholder - The placeholder to use\n\t */\n\tpublic setPlaceholder(placeholder: string) {\n\t\tthis.data.placeholder = placeholderValidator.parse(placeholder);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the value for this text input.\n\t *\n\t * @param value - The value to use\n\t */\n\tpublic setValue(value: string) {\n\t\tthis.data.value = valueValidator.parse(value);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this text input is required.\n\t *\n\t * @param required - Whether this text input is required\n\t */\n\tpublic setRequired(required = true) {\n\t\tthis.data.required = requiredValidator.parse(required);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APITextInputComponent {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.style, this.data.label);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t} as APITextInputComponent;\n\t}\n\n\t/**\n\t * Whether this is equal to another structure.\n\t */\n\tpublic equals(other: APITextInputComponent | JSONEncodable): boolean {\n\t\tif (isJSONEncodable(other)) {\n\t\t\treturn isEqual(other.toJSON(), this.data);\n\t\t}\n\n\t\treturn isEqual(other, this.data);\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { TextInputStyle } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport { customIdValidator } from '../Assertions.js';\n\nexport const textInputStyleValidator = s.nativeEnum(TextInputStyle);\nexport const minLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(0)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const maxLengthValidator = s\n\t.number()\n\t.int()\n\t.greaterThanOrEqual(1)\n\t.lessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\nexport const requiredValidator = s.boolean();\nexport const valueValidator = s.string().lengthLessThanOrEqual(4_000).setValidationEnabled(isValidationEnabled);\nexport const placeholderValidator = s.string().lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled);\nexport const labelValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(customId?: string, style?: TextInputStyle, label?: string) {\n\tcustomIdValidator.parse(customId);\n\ttextInputStyleValidator.parse(style);\n\tlabelValidator.parse(label);\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInContainer,\n\tAPIComponentInMessageActionRow,\n\tAPIContainerComponent,\n\tAPIFileComponent,\n\tAPIMediaGalleryComponent,\n\tAPISectionComponent,\n\tAPISeparatorComponent,\n\tAPITextDisplayComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport type { RGBTuple } from '../../index.js';\nimport { MediaGalleryBuilder, SectionBuilder } from '../../index.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport type { AnyComponentBuilder, MessageActionRowComponentBuilder } from '../ActionRow.js';\nimport { ActionRowBuilder } from '../ActionRow.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { createComponentBuilder, resolveBuilder } from '../Components.js';\nimport { containerColorPredicate, spoilerPredicate } from './Assertions.js';\nimport { FileBuilder } from './File.js';\nimport { SeparatorBuilder } from './Separator.js';\nimport { TextDisplayBuilder } from './TextDisplay.js';\n\n/**\n * The builders that may be used within a container.\n */\nexport type ContainerComponentBuilder =\n\t| ActionRowBuilder\n\t| FileBuilder\n\t| MediaGalleryBuilder\n\t| SectionBuilder\n\t| SeparatorBuilder\n\t| TextDisplayBuilder;\n\n/**\n * A builder that creates API-compatible JSON data for a container.\n */\nexport class ContainerBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this container.\n\t */\n\tpublic readonly components: ContainerComponentBuilder[];\n\n\t/**\n\t * Creates a new container from API data.\n\t *\n\t * @param data - The API data to create this container with\n\t * @example\n\t * Creating a container from an API data object:\n\t * ```ts\n\t * const container = new ContainerBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"Some text here\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a container using setters and API data:\n\t * ```ts\n\t * const container = new ContainerBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"# Heading\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addComponents(separator, section);\n\t * ```\n\t */\n\tpublic constructor({ components, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.Container, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ??\n\t\t\t[]) as ContainerComponentBuilder[];\n\t}\n\n\t/**\n\t * Sets the accent color of this container.\n\t *\n\t * @param color - The color to use\n\t */\n\tpublic setAccentColor(color?: RGBTuple | number): this {\n\t\t// Data assertions\n\t\tcontainerColorPredicate.parse(color);\n\n\t\tif (Array.isArray(color)) {\n\t\t\tconst [red, green, blue] = color;\n\t\t\tthis.data.accent_color = (red << 16) + (green << 8) + blue;\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.data.accent_color = color;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the accent color of this container.\n\t */\n\tpublic clearAccentColor() {\n\t\tthis.data.accent_color = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds action row components to this container.\n\t *\n\t * @param components - The action row components to add\n\t */\n\tpublic addActionRowComponents(\n\t\t...components: RestOrArray<\n\t\t\t| ActionRowBuilder\n\t\t\t| APIActionRowComponent\n\t\t\t| ((builder: ActionRowBuilder) => ActionRowBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, ActionRowBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds file components to this container.\n\t *\n\t * @param components - The file components to add\n\t */\n\tpublic addFileComponents(\n\t\t...components: RestOrArray FileBuilder)>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, FileBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds media gallery components to this container.\n\t *\n\t * @param components - The media gallery components to add\n\t */\n\tpublic addMediaGalleryComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPIMediaGalleryComponent | MediaGalleryBuilder | ((builder: MediaGalleryBuilder) => MediaGalleryBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, MediaGalleryBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds section components to this container.\n\t *\n\t * @param components - The section components to add\n\t */\n\tpublic addSectionComponents(\n\t\t...components: RestOrArray SectionBuilder)>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SectionBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds separator components to this container.\n\t *\n\t * @param components - The separator components to add\n\t */\n\tpublic addSeparatorComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPISeparatorComponent | SeparatorBuilder | ((builder: SeparatorBuilder) => SeparatorBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(...normalizeArray(components).map((component) => resolveBuilder(component, SeparatorBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds text display components to this container.\n\t *\n\t * @param components - The text display components to add\n\t */\n\tpublic addTextDisplayComponents(\n\t\t...components: RestOrArray<\n\t\t\tAPITextDisplayComponent | TextDisplayBuilder | ((builder: TextDisplayBuilder) => TextDisplayBuilder)\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) => resolveBuilder(component, TextDisplayBuilder)),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts components for this container.\n\t *\n\t * @param index - The index to start removing, replacing or inserting components\n\t * @param deleteCount - The amount of components to remove\n\t * @param components - The components to set\n\t */\n\tpublic spliceComponents(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...components: RestOrArray\n\t) {\n\t\tthis.components.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(components).map((component) =>\n\t\t\t\tcomponent instanceof ComponentBuilder ? component : createComponentBuilder(component),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this container.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIContainerComponent {\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIContainerComponent;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { SeparatorSpacingSize } from 'discord-api-types/v10';\nimport { colorPredicate } from '../../messages/embed/Assertions';\nimport { isValidationEnabled } from '../../util/validation';\nimport { ComponentBuilder } from '../Component';\nimport { ButtonBuilder } from '../button/Button';\nimport type { ContainerComponentBuilder } from './Container';\nimport type { MediaGalleryItemBuilder } from './MediaGalleryItem';\nimport type { TextDisplayBuilder } from './TextDisplay';\nimport { ThumbnailBuilder } from './Thumbnail';\n\nexport const unfurledMediaItemPredicate = s\n\t.object({\n\t\turl: s\n\t\t\t.string()\n\t\t\t.url(\n\t\t\t\t{ allowedProtocols: ['http:', 'https:', 'attachment:'] },\n\t\t\t\t{ message: 'Invalid protocol for media URL. Must be http:, https:, or attachment:' },\n\t\t\t),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(1_024)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const filePredicate = s\n\t.object({\n\t\turl: s\n\t\t\t.string()\n\t\t\t.url({ allowedProtocols: ['attachment:'] }, { message: 'Invalid protocol for file URL. Must be attachment:' }),\n\t})\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const spoilerPredicate = s.boolean();\n\nexport const dividerPredicate = s.boolean();\n\nexport const spacingPredicate = s.nativeEnum(SeparatorSpacingSize);\n\nexport const textDisplayContentPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(4_000)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const accessoryPredicate = s\n\t.instance(ButtonBuilder)\n\t.or(s.instance(ThumbnailBuilder))\n\t.setValidationEnabled(isValidationEnabled);\n\nexport const containerColorPredicate = colorPredicate.nullish();\n\nexport function assertReturnOfBuilder(\n\tinput: unknown,\n\tExpectedInstanceOf: new () => ReturnType,\n): asserts input is ReturnType {\n\ts.instance(ExpectedInstanceOf).setValidationEnabled(isValidationEnabled).parse(input);\n}\n\nexport function validateComponentArray<\n\tReturnType extends ContainerComponentBuilder | MediaGalleryItemBuilder = ContainerComponentBuilder,\n>(input: unknown, min: number, max: number, ExpectedInstanceOf?: new () => ReturnType): asserts input is ReturnType[] {\n\t(ExpectedInstanceOf ? s.instance(ExpectedInstanceOf) : s.instance(ComponentBuilder))\n\t\t.array()\n\t\t.lengthGreaterThanOrEqual(min)\n\t\t.lengthLessThanOrEqual(max)\n\t\t.setValidationEnabled(isValidationEnabled)\n\t\t.parse(input);\n}\n","import type { APIThumbnailComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { descriptionPredicate, spoilerPredicate, unfurledMediaItemPredicate } from './Assertions';\n\nexport class ThumbnailBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new thumbnail from API data.\n\t *\n\t * @param data - The API data to create this thumbnail with\n\t * @example\n\t * Creating a thumbnail from an API data object:\n\t * ```ts\n\t * const thumbnail = new ThumbnailBuilder({\n\t * \tdescription: 'some text',\n\t * media: {\n\t * url: 'https://cdn.discordapp.com/embed/avatars/4.png',\n\t * },\n\t * });\n\t * ```\n\t * @example\n\t * Creating a thumbnail using setters and API data:\n\t * ```ts\n\t * const thumbnail = new ThumbnailBuilder({\n\t * \tmedia: {\n\t * url: 'attachment://image.png',\n\t * },\n\t * })\n\t * \t.setDescription('alt text');\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.Thumbnail,\n\t\t\t...data,\n\t\t\tmedia: data.media ? { url: data.media.url } : undefined,\n\t\t});\n\t}\n\n\t/**\n\t * Sets the description of this thumbnail.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = descriptionPredicate.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the description of this thumbnail.\n\t */\n\tpublic clearDescription() {\n\t\tthis.data.description = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this thumbnail.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this thumbnail.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.media = unfurledMediaItemPredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritdoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIThumbnailComponent {\n\t\tunfurledMediaItemPredicate.parse(this.data.media);\n\n\t\treturn { ...this.data } as APIThumbnailComponent;\n\t}\n}\n","import { ComponentType, type APIFileComponent } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { filePredicate, spoilerPredicate } from './Assertions';\n\nexport class FileBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new file from API data.\n\t *\n\t * @param data - The API data to create this file with\n\t * @example\n\t * Creating a file from an API data object:\n\t * ```ts\n\t * const file = new FileBuilder({\n\t * \tspoiler: true,\n\t * \tfile: {\n\t * \t\turl: 'attachment://file.png',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a file using setters and API data:\n\t * ```ts\n\t * const file = new FileBuilder({\n\t * \tfile: {\n\t * \t\turl: 'attachment://image.jpg',\n\t * \t},\n\t * })\n\t * \t.setSpoiler(false);\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({ type: ComponentType.File, ...data, file: data.file ? { url: data.file.url } : undefined });\n\t}\n\n\t/**\n\t * Sets the spoiler status of this file.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this file.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.file = filePredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APIFileComponent {\n\t\tfilePredicate.parse(this.data.file);\n\n\t\treturn { ...this.data, file: { ...this.data.file } } as APIFileComponent;\n\t}\n}\n","import type { SeparatorSpacingSize, APISeparatorComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { dividerPredicate, spacingPredicate } from './Assertions';\n\nexport class SeparatorBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new separator from API data.\n\t *\n\t * @param data - The API data to create this separator with\n\t * @example\n\t * Creating a separator from an API data object:\n\t * ```ts\n\t * const separator = new SeparatorBuilder({\n\t * \tspacing: SeparatorSpacingSize.Small,\n\t * divider: true,\n\t * });\n\t * ```\n\t * @example\n\t * Creating a separator using setters and API data:\n\t * ```ts\n\t * const separator = new SeparatorBuilder({\n\t * \tspacing: SeparatorSpacingSize.Large,\n\t * })\n\t * \t.setDivider(false);\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.Separator,\n\t\t\t...data,\n\t\t});\n\t}\n\n\t/**\n\t * Sets whether this separator should show a divider line.\n\t *\n\t * @param divider - Whether to show a divider line\n\t */\n\tpublic setDivider(divider = true) {\n\t\tthis.data.divider = dividerPredicate.parse(divider);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spacing of this separator.\n\t *\n\t * @param spacing - The spacing to use\n\t */\n\tpublic setSpacing(spacing: SeparatorSpacingSize) {\n\t\tthis.data.spacing = spacingPredicate.parse(spacing);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the spacing of this separator.\n\t */\n\tpublic clearSpacing() {\n\t\tthis.data.spacing = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APISeparatorComponent {\n\t\treturn { ...this.data } as APISeparatorComponent;\n\t}\n}\n","import type { APITextDisplayComponent } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ComponentBuilder } from '../Component';\nimport { textDisplayContentPredicate } from './Assertions';\n\nexport class TextDisplayBuilder extends ComponentBuilder {\n\t/**\n\t * Creates a new text display from API data.\n\t *\n\t * @param data - The API data to create this text display with\n\t * @example\n\t * Creating a text display from an API data object:\n\t * ```ts\n\t * const textDisplay = new TextDisplayBuilder({\n\t * \tcontent: 'some text',\n\t * });\n\t * ```\n\t * @example\n\t * Creating a text display using setters and API data:\n\t * ```ts\n\t * const textDisplay = new TextDisplayBuilder({\n\t * \tcontent: 'old text',\n\t * })\n\t * \t.setContent('new text');\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tsuper({\n\t\t\ttype: ComponentType.TextDisplay,\n\t\t\t...data,\n\t\t});\n\t}\n\n\t/**\n\t * Sets the text of this text display.\n\t *\n\t * @param content - The text to use\n\t */\n\tpublic setContent(content: string) {\n\t\tthis.data.content = textDisplayContentPredicate.parse(content);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic override toJSON(): APITextDisplayComponent {\n\t\ttextDisplayContentPredicate.parse(this.data.content);\n\n\t\treturn { ...this.data } as APITextDisplayComponent;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type { APIMediaGalleryComponent, APIMediaGalleryItem } from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { resolveBuilder } from '../Components.js';\nimport { assertReturnOfBuilder, validateComponentArray } from './Assertions.js';\nimport { MediaGalleryItemBuilder } from './MediaGalleryItem.js';\n\n/**\n * A builder that creates API-compatible JSON data for a container.\n */\nexport class MediaGalleryBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this container.\n\t */\n\tpublic readonly items: MediaGalleryItemBuilder[];\n\n\t/**\n\t * Creates a new media gallery from API data.\n\t *\n\t * @param data - The API data to create this media gallery with\n\t * @example\n\t * Creating a media gallery from an API data object:\n\t * ```ts\n\t * const mediaGallery = new MediaGalleryBuilder({\n\t * \titems: [\n\t * \t\t{\n\t * \t\t\tdescription: \"Some text here\",\n\t * \t\t\tmedia: {\n\t * \t\t\t\turl: 'https://cdn.discordapp.com/embed/avatars/2.png',\n\t * \t\t\t},\n\t * \t\t},\n\t * \t],\n\t * });\n\t * ```\n\t * @example\n\t * Creating a media gallery using setters and API data:\n\t * ```ts\n\t * const mediaGallery = new MediaGalleryBuilder({\n\t * \titems: [\n\t * \t\t{\n\t * \t\t\tdescription: \"alt text\",\n\t * \t\t\tmedia: {\n\t * \t\t\t\turl: 'https://cdn.discordapp.com/embed/avatars/5.png',\n\t * \t\t\t},\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.addItems(item2, item3);\n\t * ```\n\t */\n\tpublic constructor({ items, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.MediaGallery, ...data });\n\t\tthis.items = items?.map((item) => new MediaGalleryItemBuilder(item)) ?? [];\n\t}\n\n\t/**\n\t * Adds items to this media gallery.\n\t *\n\t * @param items - The items to add\n\t */\n\tpublic addItems(\n\t\t...items: RestOrArray<\n\t\t\tAPIMediaGalleryItem | MediaGalleryItemBuilder | ((builder: MediaGalleryItemBuilder) => MediaGalleryItemBuilder)\n\t\t>\n\t) {\n\t\tthis.items.push(\n\t\t\t...normalizeArray(items).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, MediaGalleryItemBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, MediaGalleryItemBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts media gallery items for this media gallery.\n\t *\n\t * @param index - The index to start removing, replacing or inserting items\n\t * @param deleteCount - The amount of items to remove\n\t * @param items - The items to insert\n\t */\n\tpublic spliceItems(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...items: RestOrArray<\n\t\t\tAPIMediaGalleryItem | MediaGalleryItemBuilder | ((builder: MediaGalleryItemBuilder) => MediaGalleryItemBuilder)\n\t\t>\n\t) {\n\t\tthis.items.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(items).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, MediaGalleryItemBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, MediaGalleryItemBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIMediaGalleryComponent {\n\t\tvalidateComponentArray(this.items, 1, 10, MediaGalleryItemBuilder);\n\t\treturn {\n\t\t\t...this.data,\n\t\t\titems: this.items.map((item) => item.toJSON()),\n\t\t} as APIMediaGalleryComponent;\n\t}\n}\n","import type { JSONEncodable } from '@discordjs/util';\nimport type { APIMediaGalleryItem } from 'discord-api-types/v10';\nimport { descriptionPredicate, spoilerPredicate, unfurledMediaItemPredicate } from './Assertions';\n\nexport class MediaGalleryItemBuilder implements JSONEncodable {\n\t/**\n\t * The API data associated with this media gallery item.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * Creates a new media gallery item from API data.\n\t *\n\t * @param data - The API data to create this media gallery item with\n\t * @example\n\t * Creating a media gallery item from an API data object:\n\t * ```ts\n\t * const item = new MediaGalleryItemBuilder({\n\t * \tdescription: \"Some text here\",\n\t * \tmedia: {\n\t * \t\turl: 'https://cdn.discordapp.com/embed/avatars/2.png',\n\t * \t},\n\t * });\n\t * ```\n\t * @example\n\t * Creating a media gallery item using setters and API data:\n\t * ```ts\n\t * const item = new MediaGalleryItemBuilder({\n\t * \tmedia: {\n\t * \t\turl: 'https://cdn.discordapp.com/embed/avatars/5.png',\n\t * \t},\n\t * })\n\t * \t.setDescription(\"alt text\");\n\t * ```\n\t */\n\tpublic constructor(data: Partial = {}) {\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Sets the description of this media gallery item.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\tthis.data.description = descriptionPredicate.parse(description);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Clears the description of this media gallery item.\n\t */\n\tpublic clearDescription() {\n\t\tthis.data.description = undefined;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the spoiler status of this media gallery item.\n\t *\n\t * @param spoiler - The spoiler status to use\n\t */\n\tpublic setSpoiler(spoiler = true) {\n\t\tthis.data.spoiler = spoilerPredicate.parse(spoiler);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the media URL of this media gallery item.\n\t *\n\t * @param url - The URL to use\n\t */\n\tpublic setURL(url: string) {\n\t\tthis.data.media = unfurledMediaItemPredicate.parse({ url });\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIMediaGalleryItem {\n\t\tunfurledMediaItemPredicate.parse(this.data.media);\n\n\t\treturn { ...this.data } as APIMediaGalleryItem;\n\t}\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type {\n\tAPIButtonComponent,\n\tAPISectionComponent,\n\tAPITextDisplayComponent,\n\tAPIThumbnailComponent,\n} from 'discord-api-types/v10';\nimport { ComponentType } from 'discord-api-types/v10';\nimport { ButtonBuilder, ThumbnailBuilder } from '../../index.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { ComponentBuilder } from '../Component.js';\nimport { createComponentBuilder, resolveBuilder } from '../Components.js';\nimport { accessoryPredicate, assertReturnOfBuilder, validateComponentArray } from './Assertions.js';\nimport { TextDisplayBuilder } from './TextDisplay.js';\n\n/**\n * A builder that creates API-compatible JSON data for a section.\n */\nexport class SectionBuilder extends ComponentBuilder {\n\t/**\n\t * The components within this section.\n\t */\n\tpublic readonly components: ComponentBuilder[];\n\n\t/**\n\t * The accessory of this section.\n\t */\n\tpublic readonly accessory?: ButtonBuilder | ThumbnailBuilder;\n\n\t/**\n\t * Creates a new section from API data.\n\t *\n\t * @param data - The API data to create this section with\n\t * @example\n\t * Creating a section from an API data object:\n\t * ```ts\n\t * const section = new SectionBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"Some text here\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * accessory: {\n\t * media: {\n\t * url: 'https://cdn.discordapp.com/embed/avatars/3.png',\n\t * },\n\t * }\n\t * });\n\t * ```\n\t * @example\n\t * Creating a section using setters and API data:\n\t * ```ts\n\t * const section = new SectionBuilder({\n\t * \tcomponents: [\n\t * \t\t{\n\t * \t\t\tcontent: \"# Heading\",\n\t * \t\t\ttype: ComponentType.TextDisplay,\n\t * \t\t},\n\t * \t],\n\t * })\n\t * \t.setPrimaryButtonAccessory(button);\n\t * ```\n\t */\n\tpublic constructor({ components, accessory, ...data }: Partial = {}) {\n\t\tsuper({ type: ComponentType.Section, ...data });\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ComponentBuilder[];\n\t\tthis.accessory = accessory ? createComponentBuilder(accessory) : undefined;\n\t}\n\n\t/**\n\t * Sets the accessory of this section to a button.\n\t *\n\t * @param accessory - The accessory to use\n\t */\n\tpublic setButtonAccessory(\n\t\taccessory: APIButtonComponent | ButtonBuilder | ((builder: ButtonBuilder) => ButtonBuilder),\n\t): this {\n\t\tReflect.set(this, 'accessory', accessoryPredicate.parse(resolveBuilder(accessory, ButtonBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the accessory of this section to a thumbnail.\n\t *\n\t * @param accessory - The accessory to use\n\t */\n\tpublic setThumbnailAccessory(\n\t\taccessory: APIThumbnailComponent | ThumbnailBuilder | ((builder: ThumbnailBuilder) => ThumbnailBuilder),\n\t): this {\n\t\tReflect.set(this, 'accessory', accessoryPredicate.parse(resolveBuilder(accessory, ThumbnailBuilder)));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds text display components to this section.\n\t *\n\t * @param components - The text display components to add\n\t */\n\tpublic addTextDisplayComponents(\n\t\t...components: RestOrArray TextDisplayBuilder)>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, TextDisplayBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, TextDisplayBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Removes, replaces, or inserts text display components for this section.\n\t *\n\t * @param index - The index to start removing, replacing or inserting text display components\n\t * @param deleteCount - The amount of text display components to remove\n\t * @param components - The text display components to insert\n\t */\n\tpublic spliceTextDisplayComponents(\n\t\tindex: number,\n\t\tdeleteCount: number,\n\t\t...components: RestOrArray<\n\t\t\tAPITextDisplayComponent | TextDisplayBuilder | ((builder: TextDisplayBuilder) => TextDisplayBuilder)\n\t\t>\n\t) {\n\t\tthis.components.splice(\n\t\t\tindex,\n\t\t\tdeleteCount,\n\t\t\t...normalizeArray(components).map((input) => {\n\t\t\t\tconst result = resolveBuilder(input, TextDisplayBuilder);\n\n\t\t\t\tassertReturnOfBuilder(result, TextDisplayBuilder);\n\t\t\t\treturn result;\n\t\t\t}),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APISectionComponent {\n\t\tvalidateComponentArray(this.components, 1, 3, TextDisplayBuilder);\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t\taccessory: accessoryPredicate.parse(this.accessory).toJSON(),\n\t\t} as APISectionComponent;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { isValidationEnabled } from '../../util/validation.js';\n\nexport const titleValidator = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(45)\n\t.setValidationEnabled(isValidationEnabled);\nexport const componentsValidator = s\n\t.instance(ActionRowBuilder)\n\t.array()\n\t.lengthGreaterThanOrEqual(1)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateRequiredParameters(\n\tcustomId?: string,\n\ttitle?: string,\n\tcomponents?: ActionRowBuilder[],\n) {\n\tcustomIdValidator.parse(customId);\n\ttitleValidator.parse(title);\n\tcomponentsValidator.parse(components);\n}\n","/* eslint-disable jsdoc/check-param-names */\n\nimport type { JSONEncodable } from '@discordjs/util';\nimport type {\n\tAPIActionRowComponent,\n\tAPIComponentInModalActionRow,\n\tAPIModalInteractionResponseCallbackData,\n} from 'discord-api-types/v10';\nimport { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js';\nimport { customIdValidator } from '../../components/Assertions.js';\nimport { createComponentBuilder } from '../../components/Components.js';\nimport { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js';\nimport { titleValidator, validateRequiredParameters } from './Assertions.js';\n\n/**\n * A builder that creates API-compatible JSON data for modals.\n */\nexport class ModalBuilder implements JSONEncodable {\n\t/**\n\t * The API data associated with this modal.\n\t */\n\tpublic readonly data: Partial;\n\n\t/**\n\t * The components within this modal.\n\t */\n\tpublic readonly components: ActionRowBuilder[] = [];\n\n\t/**\n\t * Creates a new modal from API data.\n\t *\n\t * @param data - The API data to create this modal with\n\t */\n\tpublic constructor({ components, ...data }: Partial = {}) {\n\t\tthis.data = { ...data };\n\t\tthis.components = (components?.map((component) => createComponentBuilder(component)) ??\n\t\t\t[]) as ActionRowBuilder[];\n\t}\n\n\t/**\n\t * Sets the title of this modal.\n\t *\n\t * @param title - The title to use\n\t */\n\tpublic setTitle(title: string) {\n\t\tthis.data.title = titleValidator.parse(title);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the custom id of this modal.\n\t *\n\t * @param customId - The custom id to use\n\t */\n\tpublic setCustomId(customId: string) {\n\t\tthis.data.custom_id = customIdValidator.parse(customId);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds components to this modal.\n\t *\n\t * @param components - The components to add\n\t */\n\tpublic addComponents(\n\t\t...components: RestOrArray<\n\t\t\tActionRowBuilder | APIActionRowComponent\n\t\t>\n\t) {\n\t\tthis.components.push(\n\t\t\t...normalizeArray(components).map((component) =>\n\t\t\t\tcomponent instanceof ActionRowBuilder\n\t\t\t\t\t? component\n\t\t\t\t\t: new ActionRowBuilder(component),\n\t\t\t),\n\t\t);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets components for this modal.\n\t *\n\t * @param components - The components to set\n\t */\n\tpublic setComponents(...components: RestOrArray>) {\n\t\tthis.components.splice(0, this.components.length, ...normalizeArray(components));\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ComponentBuilder.toJSON}\n\t */\n\tpublic toJSON(): APIModalInteractionResponseCallbackData {\n\t\tvalidateRequiredParameters(this.data.custom_id, this.data.title, this.components);\n\n\t\treturn {\n\t\t\t...this.data,\n\t\t\tcomponents: this.components.map((component) => component.toJSON()),\n\t\t} as APIModalInteractionResponseCallbackData;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport {\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocale,\n\ttype APIApplicationCommandOptionChoice,\n\ttype LocalizationMap,\n} from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t.regex(/^[\\p{Ll}\\p{Lm}\\p{Lo}\\p{N}\\p{sc=Devanagari}\\p{sc=Thai}_-]+$/u)\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nconst descriptionPredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(100)\n\t.setValidationEnabled(isValidationEnabled);\nconst localePredicate = s.nativeEnum(Locale);\n\nexport function validateDescription(description: unknown): asserts description is string {\n\tdescriptionPredicate.parse(description);\n}\n\nconst maxArrayLengthPredicate = s.unknown().array().lengthLessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\nexport function validateLocale(locale: unknown) {\n\treturn localePredicate.parse(locale);\n}\n\nexport function validateMaxOptionsLength(options: unknown): asserts options is ToAPIApplicationCommandOptions[] {\n\tmaxArrayLengthPredicate.parse(options);\n}\n\nexport function validateRequiredParameters(\n\tname: string,\n\tdescription: string,\n\toptions: ToAPIApplicationCommandOptions[],\n) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert description conditions\n\tvalidateDescription(description);\n\n\t// Assert options conditions\n\tvalidateMaxOptionsLength(options);\n}\n\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateRequired(required: unknown): asserts required is boolean {\n\tbooleanPredicate.parse(required);\n}\n\nconst choicesLengthPredicate = s.number().lessThanOrEqual(25).setValidationEnabled(isValidationEnabled);\n\nexport function validateChoicesLength(amountAdding: number, choices?: APIApplicationCommandOptionChoice[]): void {\n\tchoicesLengthPredicate.parse((choices?.length ?? 0) + amountAdding);\n}\n\nexport function assertReturnOfBuilder<\n\tReturnType extends ApplicationCommandOptionBase | SlashCommandSubcommandBuilder | SlashCommandSubcommandGroupBuilder,\n>(input: unknown, ExpectedInstanceOf: new () => ReturnType): asserts input is ReturnType {\n\ts.instance(ExpectedInstanceOf).parse(input);\n}\n\nexport const localizationMapPredicate = s\n\t.object(Object.fromEntries(Object.values(Locale).map((locale) => [locale, s.string().nullish()])))\n\t.strict()\n\t.nullish()\n\t.setValidationEnabled(isValidationEnabled);\n\nexport function validateLocalizationMap(value: unknown): asserts value is LocalizationMap {\n\tlocalizationMapPredicate.parse(value);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport function validateNSFW(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tAPIApplicationCommandOption,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocalizationMap,\n\tPermissions,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommand } from './mixins/SharedSlashCommand.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\nimport { SharedSlashCommandSubcommands } from './mixins/SharedSubcommands.js';\n\n/**\n * A builder that creates API-compatible JSON data for slash commands.\n */\n@mix(SharedSlashCommandOptions, SharedNameAndDescription, SharedSlashCommandSubcommands, SharedSlashCommand)\nexport class SlashCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * The options of this command.\n\t */\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link SlashCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Whether this command is NSFW.\n\t */\n\tpublic readonly nsfw: boolean | undefined = undefined;\n}\n\nexport interface SlashCommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command subcommands.\n */\nexport interface SlashCommandSubcommandsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandSubcommands,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface specifically for slash command options.\n */\nexport interface SlashCommandOptionsOnlyBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions,\n\t\tSharedSlashCommand {}\n\n/**\n * An interface that ensures the `toJSON()` call will return something\n * that can be serialized into API-compatible data.\n */\nexport interface ToAPIApplicationCommandOptions {\n\ttoJSON(): APIApplicationCommandOption;\n}\n","import type { LocaleString, LocalizationMap } from 'discord-api-types/v10';\nimport { validateDescription, validateLocale, validateName } from '../Assertions.js';\n\n/**\n * This mixin holds name and description symbols for slash commands.\n */\nexport class SharedNameAndDescription {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name!: string;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The description of this command.\n\t */\n\tpublic readonly description!: string;\n\n\t/**\n\t * The description localizations of this command.\n\t */\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string): this {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description of this command.\n\t *\n\t * @param description - The description to use\n\t */\n\tpublic setDescription(description: string) {\n\t\t// Assert the description matches the conditions\n\t\tvalidateDescription(description);\n\n\t\tReflect.set(this, 'description', description);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames)) {\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a description localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedDescription - The localized description for the given locale\n\t */\n\tpublic setDescriptionLocalization(locale: LocaleString, localizedDescription: string | null) {\n\t\tif (!this.description_localizations) {\n\t\t\tReflect.set(this, 'description_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedDescription === null) {\n\t\t\tthis.description_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateDescription(localizedDescription);\n\n\t\tthis.description_localizations![parsedLocale] = localizedDescription;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the description localizations for this command.\n\t *\n\t * @param localizedDescriptions - The object of localized descriptions to set\n\t */\n\tpublic setDescriptionLocalizations(localizedDescriptions: LocalizationMap | null) {\n\t\tif (localizedDescriptions === null) {\n\t\t\tReflect.set(this, 'description_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'description_localizations', {});\n\t\tfor (const args of Object.entries(localizedDescriptions)) {\n\t\t\tthis.setDescriptionLocalization(...(args as [LocaleString, string | null]));\n\t\t}\n\n\t\treturn this;\n\t}\n}\n","import {\n\tApplicationCommandType,\n\ttype ApplicationIntegrationType,\n\ttype InteractionContextType,\n\ttype LocalizationMap,\n\ttype Permissions,\n\ttype RESTPostAPIChatInputApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../../util/normalizeArray.js';\nimport { normalizeArray } from '../../../util/normalizeArray.js';\nimport {\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n\tvalidateDMPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDefaultPermission,\n\tvalidateLocalizationMap,\n\tvalidateNSFW,\n\tvalidateRequiredParameters,\n} from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\n\n/**\n * This mixin holds symbols that can be shared in slashcommands independent of options or subcommands.\n */\nexport class SharedSlashCommand {\n\tpublic readonly name: string = undefined!;\n\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\tpublic readonly description: string = undefined!;\n\n\tpublic readonly description_localizations?: LocalizationMap;\n\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * @deprecated Use {@link SharedSlashCommand.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\tpublic readonly nsfw: boolean | undefined = undefined;\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether or not to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link SharedSlashCommand.setDefaultMemberPermissions} or {@link SharedSlashCommand.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run the command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated\n\t * Use {@link SharedSlashCommand.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether this command is NSFW.\n\t *\n\t * @param nsfw - Whether this command is NSFW\n\t */\n\tpublic setNSFW(nsfw = true) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateNSFW(nsfw);\n\t\tReflect.set(this, 'nsfw', nsfw);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIChatInputApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\treturn {\n\t\t\t...this,\n\t\t\ttype: ApplicationCommandType.ChatInput,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandAttachmentOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command attachment option.\n */\nexport class SlashCommandAttachmentOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Attachment as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandAttachmentOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIApplicationCommandBasicOption, ApplicationCommandOptionType } from 'discord-api-types/v10';\nimport { validateRequiredParameters, validateRequired, validateLocalizationMap } from '../Assertions.js';\nimport { SharedNameAndDescription } from './NameAndDescription.js';\n\n/**\n * The base application command option builder that contains common symbols for application command builders.\n */\nexport abstract class ApplicationCommandOptionBase extends SharedNameAndDescription {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic abstract readonly type: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option is required.\n\t *\n\t * @defaultValue `false`\n\t */\n\tpublic readonly required: boolean = false;\n\n\t/**\n\t * Sets whether this option is required.\n\t *\n\t * @param required - Whether this option should be required\n\t */\n\tpublic setRequired(required: boolean) {\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(required);\n\n\t\tReflect.set(this, 'required', required);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic abstract toJSON(): APIApplicationCommandBasicOption;\n\n\t/**\n\t * This method runs required validators on this builder.\n\t */\n\tprotected runRequiredValidations() {\n\t\tvalidateRequiredParameters(this.name, this.description, []);\n\n\t\t// Validate localizations\n\t\tvalidateLocalizationMap(this.name_localizations);\n\t\tvalidateLocalizationMap(this.description_localizations);\n\n\t\t// Assert that you actually passed a boolean\n\t\tvalidateRequired(this.required);\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandBooleanOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command boolean option.\n */\nexport class SlashCommandBooleanOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Boolean as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandBooleanOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandChannelOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionChannelTypesMixin } from '../mixins/ApplicationCommandOptionChannelTypesMixin.js';\n\n/**\n * A slash command channel option.\n */\n@mix(ApplicationCommandOptionChannelTypesMixin)\nexport class SlashCommandChannelOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Channel as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandChannelOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n\nexport interface SlashCommandChannelOption extends ApplicationCommandOptionChannelTypesMixin {}\n","import { s } from '@sapphire/shapeshift';\nimport { ChannelType } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray';\n\n/**\n * The allowed channel types used for a channel option in a slash command builder.\n *\n * @privateRemarks This can't be dynamic because const enums are erased at runtime.\n * @internal\n */\nconst allowedChannelTypes = [\n\tChannelType.GuildText,\n\tChannelType.GuildVoice,\n\tChannelType.GuildCategory,\n\tChannelType.GuildAnnouncement,\n\tChannelType.AnnouncementThread,\n\tChannelType.PublicThread,\n\tChannelType.PrivateThread,\n\tChannelType.GuildStageVoice,\n\tChannelType.GuildForum,\n\tChannelType.GuildMedia,\n] as const;\n\n/**\n * The type of allowed channel types used for a channel option.\n */\nexport type ApplicationCommandOptionAllowedChannelTypes = (typeof allowedChannelTypes)[number];\n\nconst channelTypesPredicate = s.array(s.union(allowedChannelTypes.map((type) => s.literal(type))));\n\n/**\n * This mixin holds channel type symbols used for options.\n */\nexport class ApplicationCommandOptionChannelTypesMixin {\n\t/**\n\t * The channel types of this option.\n\t */\n\tpublic readonly channel_types?: ApplicationCommandOptionAllowedChannelTypes[];\n\n\t/**\n\t * Adds channel types to this option.\n\t *\n\t * @param channelTypes - The channel types\n\t */\n\tpublic addChannelTypes(...channelTypes: RestOrArray) {\n\t\tif (this.channel_types === undefined) {\n\t\t\tReflect.set(this, 'channel_types', []);\n\t\t}\n\n\t\tthis.channel_types!.push(...channelTypesPredicate.parse(normalizeArray(channelTypes)));\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandIntegerOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number().int();\n\n/**\n * A slash command integer option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandIntegerOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Integer as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandIntegerOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandIntegerOption;\n\t}\n}\n\nexport interface SlashCommandIntegerOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","/**\n * This mixin holds minimum and maximum symbols used for options.\n */\nexport abstract class ApplicationCommandNumericOptionMinMaxValueMixin {\n\t/**\n\t * The maximum value of this option.\n\t */\n\tpublic readonly max_value?: number;\n\n\t/**\n\t * The minimum value of this option.\n\t */\n\tpublic readonly min_value?: number;\n\n\t/**\n\t * Sets the maximum number value of this option.\n\t *\n\t * @param max - The maximum value this option can be\n\t */\n\tpublic abstract setMaxValue(max: number): this;\n\n\t/**\n\t * Sets the minimum number value of this option.\n\t *\n\t * @param min - The minimum value this option can be\n\t */\n\tpublic abstract setMinValue(min: number): this;\n}\n","import { s } from '@sapphire/shapeshift';\nimport type { ApplicationCommandOptionType } from 'discord-api-types/v10';\n\nconst booleanPredicate = s.boolean();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithAutocompleteMixin {\n\t/**\n\t * Whether this option utilizes autocomplete.\n\t */\n\tpublic readonly autocomplete?: boolean;\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Whether this option uses autocomplete.\n\t *\n\t * @param autocomplete - Whether this option should use autocomplete\n\t */\n\tpublic setAutocomplete(autocomplete: boolean): this {\n\t\t// Assert that you actually passed a boolean\n\t\tbooleanPredicate.parse(autocomplete);\n\n\t\tif (autocomplete && 'choices' in this && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tReflect.set(this, 'autocomplete', autocomplete);\n\n\t\treturn this;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandOptionChoice } from 'discord-api-types/v10';\nimport { normalizeArray, type RestOrArray } from '../../../util/normalizeArray.js';\nimport { localizationMapPredicate, validateChoicesLength } from '../Assertions.js';\n\nconst stringPredicate = s.string().lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100);\nconst numberPredicate = s.number().greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY);\nconst choicesPredicate = s\n\t.object({\n\t\tname: stringPredicate,\n\t\tname_localizations: localizationMapPredicate,\n\t\tvalue: s.union([stringPredicate, numberPredicate]),\n\t})\n\t.array();\n\n/**\n * This mixin holds choices and autocomplete symbols used for options.\n */\nexport class ApplicationCommandOptionWithChoicesMixin {\n\t/**\n\t * The choices of this option.\n\t */\n\tpublic readonly choices?: APIApplicationCommandOptionChoice[];\n\n\t/**\n\t * The type of this option.\n\t *\n\t * @privateRemarks Since this is present and this is a mixin, this is needed.\n\t */\n\tpublic readonly type!: ApplicationCommandOptionType;\n\n\t/**\n\t * Adds multiple choices to this option.\n\t *\n\t * @param choices - The choices to add\n\t */\n\tpublic addChoices(...choices: RestOrArray>): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tif (this.choices === undefined) {\n\t\t\tReflect.set(this, 'choices', []);\n\t\t}\n\n\t\tvalidateChoicesLength(normalizedChoices.length, this.choices);\n\n\t\tfor (const { name, name_localizations, value } of normalizedChoices) {\n\t\t\t// Validate the value\n\t\t\tif (this.type === ApplicationCommandOptionType.String) {\n\t\t\t\tstringPredicate.parse(value);\n\t\t\t} else {\n\t\t\t\tnumberPredicate.parse(value);\n\t\t\t}\n\n\t\t\tthis.choices!.push({ name, name_localizations, value });\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets multiple choices for this option.\n\t *\n\t * @param choices - The choices to set\n\t */\n\tpublic setChoices>(...choices: RestOrArray): this {\n\t\tconst normalizedChoices = normalizeArray(choices);\n\t\tif (normalizedChoices.length > 0 && 'autocomplete' in this && this.autocomplete) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\tchoicesPredicate.parse(normalizedChoices);\n\n\t\tReflect.set(this, 'choices', []);\n\t\tthis.addChoices(normalizedChoices);\n\n\t\treturn this;\n\t}\n}\n","import { ApplicationCommandOptionType, type APIApplicationCommandMentionableOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command mentionable option.\n */\nexport class SlashCommandMentionableOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Mentionable as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandMentionableOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandNumberOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst numberValidator = s.number();\n\n/**\n * A slash command number option.\n */\n@mix(\n\tApplicationCommandNumericOptionMinMaxValueMixin,\n\tApplicationCommandOptionWithAutocompleteMixin,\n\tApplicationCommandOptionWithChoicesMixin,\n)\nexport class SlashCommandNumberOption\n\textends ApplicationCommandOptionBase\n\timplements ApplicationCommandNumericOptionMinMaxValueMixin\n{\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.Number as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMaxValue}\n\t */\n\tpublic setMaxValue(max: number): this {\n\t\tnumberValidator.parse(max);\n\n\t\tReflect.set(this, 'max_value', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandNumericOptionMinMaxValueMixin.setMinValue}\n\t */\n\tpublic setMinValue(min: number): this {\n\t\tnumberValidator.parse(min);\n\n\t\tReflect.set(this, 'min_value', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandNumberOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandNumberOption;\n\t}\n}\n\nexport interface SlashCommandNumberOption\n\textends ApplicationCommandNumericOptionMinMaxValueMixin,\n\t\tApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandRoleOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command role option.\n */\nexport class SlashCommandRoleOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic override readonly type = ApplicationCommandOptionType.Role as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandRoleOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandOptionType, type APIApplicationCommandStringOption } from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\nimport { ApplicationCommandOptionWithAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithAutocompleteMixin.js';\nimport { ApplicationCommandOptionWithChoicesMixin } from '../mixins/ApplicationCommandOptionWithChoicesMixin.js';\n\nconst minLengthValidator = s.number().greaterThanOrEqual(0).lessThanOrEqual(6_000);\nconst maxLengthValidator = s.number().greaterThanOrEqual(1).lessThanOrEqual(6_000);\n\n/**\n * A slash command string option.\n */\n@mix(ApplicationCommandOptionWithAutocompleteMixin, ApplicationCommandOptionWithChoicesMixin)\nexport class SlashCommandStringOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.String as const;\n\n\t/**\n\t * The maximum length of this option.\n\t */\n\tpublic readonly max_length?: number;\n\n\t/**\n\t * The minimum length of this option.\n\t */\n\tpublic readonly min_length?: number;\n\n\t/**\n\t * Sets the maximum length of this string option.\n\t *\n\t * @param max - The maximum length this option can be\n\t */\n\tpublic setMaxLength(max: number): this {\n\t\tmaxLengthValidator.parse(max);\n\n\t\tReflect.set(this, 'max_length', max);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the minimum length of this string option.\n\t *\n\t * @param min - The minimum length this option can be\n\t */\n\tpublic setMinLength(min: number): this {\n\t\tminLengthValidator.parse(min);\n\n\t\tReflect.set(this, 'min_length', min);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandStringOption {\n\t\tthis.runRequiredValidations();\n\n\t\tif (this.autocomplete && Array.isArray(this.choices) && this.choices.length > 0) {\n\t\t\tthrow new RangeError('Autocomplete and choices are mutually exclusive to each other.');\n\t\t}\n\n\t\treturn { ...this } as APIApplicationCommandStringOption;\n\t}\n}\n\nexport interface SlashCommandStringOption\n\textends ApplicationCommandOptionWithChoicesMixin,\n\t\tApplicationCommandOptionWithAutocompleteMixin {}\n","import { ApplicationCommandOptionType, type APIApplicationCommandUserOption } from 'discord-api-types/v10';\nimport { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js';\n\n/**\n * A slash command user option.\n */\nexport class SlashCommandUserOption extends ApplicationCommandOptionBase {\n\t/**\n\t * The type of this option.\n\t */\n\tpublic readonly type = ApplicationCommandOptionType.User as const;\n\n\t/**\n\t * {@inheritDoc ApplicationCommandOptionBase.toJSON}\n\t */\n\tpublic toJSON(): APIApplicationCommandUserOption {\n\t\tthis.runRequiredValidations();\n\n\t\treturn { ...this };\n\t}\n}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder';\nimport { SlashCommandAttachmentOption } from '../options/attachment.js';\nimport { SlashCommandBooleanOption } from '../options/boolean.js';\nimport { SlashCommandChannelOption } from '../options/channel.js';\nimport { SlashCommandIntegerOption } from '../options/integer.js';\nimport { SlashCommandMentionableOption } from '../options/mentionable.js';\nimport { SlashCommandNumberOption } from '../options/number.js';\nimport { SlashCommandRoleOption } from '../options/role.js';\nimport { SlashCommandStringOption } from '../options/string.js';\nimport { SlashCommandUserOption } from '../options/user.js';\nimport type { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js';\n\n/**\n * This mixin holds symbols that can be shared in slash command options.\n *\n * @typeParam TypeAfterAddingOptions - The type this class should return after adding an option.\n */\nexport class SharedSlashCommandOptions<\n\tTypeAfterAddingOptions extends SharedSlashCommandOptions,\n> {\n\tpublic readonly options!: ToAPIApplicationCommandOptions[];\n\n\t/**\n\t * Adds a boolean option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addBooleanOption(\n\t\tinput: SlashCommandBooleanOption | ((builder: SlashCommandBooleanOption) => SlashCommandBooleanOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandBooleanOption);\n\t}\n\n\t/**\n\t * Adds a user option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addUserOption(input: SlashCommandUserOption | ((builder: SlashCommandUserOption) => SlashCommandUserOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandUserOption);\n\t}\n\n\t/**\n\t * Adds a channel option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addChannelOption(\n\t\tinput: SlashCommandChannelOption | ((builder: SlashCommandChannelOption) => SlashCommandChannelOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandChannelOption);\n\t}\n\n\t/**\n\t * Adds a role option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addRoleOption(input: SlashCommandRoleOption | ((builder: SlashCommandRoleOption) => SlashCommandRoleOption)) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandRoleOption);\n\t}\n\n\t/**\n\t * Adds an attachment option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addAttachmentOption(\n\t\tinput: SlashCommandAttachmentOption | ((builder: SlashCommandAttachmentOption) => SlashCommandAttachmentOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandAttachmentOption);\n\t}\n\n\t/**\n\t * Adds a mentionable option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addMentionableOption(\n\t\tinput: SlashCommandMentionableOption | ((builder: SlashCommandMentionableOption) => SlashCommandMentionableOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandMentionableOption);\n\t}\n\n\t/**\n\t * Adds a string option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addStringOption(\n\t\tinput: SlashCommandStringOption | ((builder: SlashCommandStringOption) => SlashCommandStringOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandStringOption);\n\t}\n\n\t/**\n\t * Adds an integer option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addIntegerOption(\n\t\tinput: SlashCommandIntegerOption | ((builder: SlashCommandIntegerOption) => SlashCommandIntegerOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandIntegerOption);\n\t}\n\n\t/**\n\t * Adds a number option.\n\t *\n\t * @param input - A function that returns an option builder or an already built builder\n\t */\n\tpublic addNumberOption(\n\t\tinput: SlashCommandNumberOption | ((builder: SlashCommandNumberOption) => SlashCommandNumberOption),\n\t) {\n\t\treturn this._sharedAddOptionMethod(input, SlashCommandNumberOption);\n\t}\n\n\t/**\n\t * Where the actual adding magic happens. ✨\n\t *\n\t * @param input - The input. What else?\n\t * @param Instance - The instance of whatever is being added\n\t * @internal\n\t */\n\tprivate _sharedAddOptionMethod(\n\t\tinput: OptionBuilder | ((builder: OptionBuilder) => OptionBuilder),\n\t\tInstance: new () => OptionBuilder,\n\t): TypeAfterAddingOptions {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new Instance()) : input;\n\n\t\tassertReturnOfBuilder(result, Instance);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingOptions;\n\t}\n}\n","import {\n\tApplicationCommandOptionType,\n\ttype APIApplicationCommandSubcommandGroupOption,\n\ttype APIApplicationCommandSubcommandOption,\n} from 'discord-api-types/v10';\nimport { mix } from 'ts-mixer';\nimport { assertReturnOfBuilder, validateMaxOptionsLength, validateRequiredParameters } from './Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js';\nimport type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js';\nimport { SharedNameAndDescription } from './mixins/NameAndDescription.js';\nimport { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js';\n\n/**\n * Represents a folder for subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription)\nexport class SlashCommandSubcommandGroupBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand group.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand group.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The subcommands within this subcommand group.\n\t */\n\tpublic readonly options: SlashCommandSubcommandBuilder[] = [];\n\n\t/**\n\t * Adds a new subcommand to this group.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t) {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandGroupOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.SubcommandGroup,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandGroupBuilder extends SharedNameAndDescription {}\n\n/**\n * A builder that creates API-compatible JSON data for slash command subcommands.\n *\n * @see {@link https://discord.com/developers/docs/interactions/application-commands#subcommands-and-subcommand-groups}\n */\n@mix(SharedNameAndDescription, SharedSlashCommandOptions)\nexport class SlashCommandSubcommandBuilder implements ToAPIApplicationCommandOptions {\n\t/**\n\t * The name of this subcommand.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The description of this subcommand.\n\t */\n\tpublic readonly description: string = undefined!;\n\n\t/**\n\t * The options within this subcommand.\n\t */\n\tpublic readonly options: ApplicationCommandOptionBase[] = [];\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): APIApplicationCommandSubcommandOption {\n\t\tvalidateRequiredParameters(this.name, this.description, this.options);\n\n\t\treturn {\n\t\t\ttype: ApplicationCommandOptionType.Subcommand,\n\t\t\tname: this.name,\n\t\t\tname_localizations: this.name_localizations,\n\t\t\tdescription: this.description,\n\t\t\tdescription_localizations: this.description_localizations,\n\t\t\toptions: this.options.map((option) => option.toJSON()),\n\t\t};\n\t}\n}\n\nexport interface SlashCommandSubcommandBuilder\n\textends SharedNameAndDescription,\n\t\tSharedSlashCommandOptions {}\n","import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js';\nimport type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder.js';\nimport { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from '../SlashCommandSubcommands.js';\n\n/**\n * This mixin holds symbols that can be shared in slash subcommands.\n *\n * @typeParam TypeAfterAddingSubcommands - The type this class should return after adding a subcommand or subcommand group.\n */\nexport class SharedSlashCommandSubcommands<\n\tTypeAfterAddingSubcommands extends SharedSlashCommandSubcommands,\n> {\n\tpublic readonly options: ToAPIApplicationCommandOptions[] = [];\n\n\t/**\n\t * Adds a new subcommand group to this command.\n\t *\n\t * @param input - A function that returns a subcommand group builder or an already built builder\n\t */\n\tpublic addSubcommandGroup(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandGroupBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandGroupBuilder) => SlashCommandSubcommandGroupBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandGroupBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandGroupBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n\n\t/**\n\t * Adds a new subcommand to this command.\n\t *\n\t * @param input - A function that returns a subcommand builder or an already built builder\n\t */\n\tpublic addSubcommand(\n\t\tinput:\n\t\t\t| SlashCommandSubcommandBuilder\n\t\t\t| ((subcommandGroup: SlashCommandSubcommandBuilder) => SlashCommandSubcommandBuilder),\n\t): TypeAfterAddingSubcommands {\n\t\tconst { options } = this;\n\n\t\t// First, assert options conditions - we cannot have more than 25 options\n\t\tvalidateMaxOptionsLength(options);\n\n\t\t// Get the final result\n\t\tconst result = typeof input === 'function' ? input(new SlashCommandSubcommandBuilder()) : input;\n\n\t\tassertReturnOfBuilder(result, SlashCommandSubcommandBuilder);\n\n\t\t// Push it\n\t\toptions.push(result);\n\n\t\treturn this as unknown as TypeAfterAddingSubcommands;\n\t}\n}\n","import { s } from '@sapphire/shapeshift';\nimport { ApplicationCommandType, ApplicationIntegrationType, InteractionContextType } from 'discord-api-types/v10';\nimport { isValidationEnabled } from '../../util/validation.js';\nimport type { ContextMenuCommandType } from './ContextMenuCommandBuilder.js';\n\nconst namePredicate = s\n\t.string()\n\t.lengthGreaterThanOrEqual(1)\n\t.lengthLessThanOrEqual(32)\n\t// eslint-disable-next-line prefer-named-capture-group\n\t.regex(/^( *[\\p{P}\\p{L}\\p{N}\\p{sc=Devanagari}\\p{sc=Thai}]+ *)+$/u)\n\t.setValidationEnabled(isValidationEnabled);\nconst typePredicate = s\n\t.union([s.literal(ApplicationCommandType.User), s.literal(ApplicationCommandType.Message)])\n\t.setValidationEnabled(isValidationEnabled);\nconst booleanPredicate = s.boolean();\n\nexport function validateDefaultPermission(value: unknown): asserts value is boolean {\n\tbooleanPredicate.parse(value);\n}\n\nexport function validateName(name: unknown): asserts name is string {\n\tnamePredicate.parse(name);\n}\n\nexport function validateType(type: unknown): asserts type is ContextMenuCommandType {\n\ttypePredicate.parse(type);\n}\n\nexport function validateRequiredParameters(name: string, type: number) {\n\t// Assert name matches all conditions\n\tvalidateName(name);\n\n\t// Assert type is valid\n\tvalidateType(type);\n}\n\nconst dmPermissionPredicate = s.boolean().nullish();\n\nexport function validateDMPermission(value: unknown): asserts value is boolean | null | undefined {\n\tdmPermissionPredicate.parse(value);\n}\n\nconst memberPermissionPredicate = s\n\t.union([\n\t\ts.bigint().transform((value) => value.toString()),\n\t\ts\n\t\t\t.number()\n\t\t\t.safeInt()\n\t\t\t.transform((value) => value.toString()),\n\t\ts.string().regex(/^\\d+$/),\n\t])\n\t.nullish();\n\nexport function validateDefaultMemberPermissions(permissions: unknown) {\n\treturn memberPermissionPredicate.parse(permissions);\n}\n\nexport const contextsPredicate = s.array(\n\ts.nativeEnum(InteractionContextType).setValidationEnabled(isValidationEnabled),\n);\n\nexport const integrationTypesPredicate = s.array(\n\ts.nativeEnum(ApplicationIntegrationType).setValidationEnabled(isValidationEnabled),\n);\n","import type {\n\tApplicationCommandType,\n\tApplicationIntegrationType,\n\tInteractionContextType,\n\tLocaleString,\n\tLocalizationMap,\n\tPermissions,\n\tRESTPostAPIContextMenuApplicationCommandsJSONBody,\n} from 'discord-api-types/v10';\nimport type { RestOrArray } from '../../util/normalizeArray.js';\nimport { normalizeArray } from '../../util/normalizeArray.js';\nimport { validateLocale, validateLocalizationMap } from '../slashCommands/Assertions.js';\nimport {\n\tvalidateRequiredParameters,\n\tvalidateName,\n\tvalidateType,\n\tvalidateDefaultPermission,\n\tvalidateDefaultMemberPermissions,\n\tvalidateDMPermission,\n\tcontextsPredicate,\n\tintegrationTypesPredicate,\n} from './Assertions.js';\n\n/**\n * The type a context menu command can be.\n */\nexport type ContextMenuCommandType = ApplicationCommandType.Message | ApplicationCommandType.User;\n\n/**\n * A builder that creates API-compatible JSON data for context menu commands.\n */\nexport class ContextMenuCommandBuilder {\n\t/**\n\t * The name of this command.\n\t */\n\tpublic readonly name: string = undefined!;\n\n\t/**\n\t * The name localizations of this command.\n\t */\n\tpublic readonly name_localizations?: LocalizationMap;\n\n\t/**\n\t * The type of this command.\n\t */\n\tpublic readonly type: ContextMenuCommandType = undefined!;\n\n\t/**\n\t * The contexts for this command.\n\t */\n\tpublic readonly contexts?: InteractionContextType[];\n\n\t/**\n\t * Whether this command is enabled by default when the application is added to a guild.\n\t *\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic readonly default_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The set of permissions represented as a bit set for the command.\n\t */\n\tpublic readonly default_member_permissions: Permissions | null | undefined = undefined;\n\n\t/**\n\t * Indicates whether the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This property is only for global commands.\n\t * @deprecated\n\t * Use {@link ContextMenuCommandBuilder.contexts} instead.\n\t */\n\tpublic readonly dm_permission: boolean | undefined = undefined;\n\n\t/**\n\t * The integration types for this command.\n\t */\n\tpublic readonly integration_types?: ApplicationIntegrationType[];\n\n\t/**\n\t * Sets the contexts of this command.\n\t *\n\t * @param contexts - The contexts\n\t */\n\tpublic setContexts(...contexts: RestOrArray) {\n\t\tReflect.set(this, 'contexts', contextsPredicate.parse(normalizeArray(contexts)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets integration types of this command.\n\t *\n\t * @param integrationTypes - The integration types\n\t */\n\tpublic setIntegrationTypes(...integrationTypes: RestOrArray) {\n\t\tReflect.set(this, 'integration_types', integrationTypesPredicate.parse(normalizeArray(integrationTypes)));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name of this command.\n\t *\n\t * @param name - The name to use\n\t */\n\tpublic setName(name: string) {\n\t\t// Assert the name matches the conditions\n\t\tvalidateName(name);\n\n\t\tReflect.set(this, 'name', name);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the type of this command.\n\t *\n\t * @param type - The type to use\n\t */\n\tpublic setType(type: ContextMenuCommandType) {\n\t\t// Assert the type is valid\n\t\tvalidateType(type);\n\n\t\tReflect.set(this, 'type', type);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets whether the command is enabled by default when the application is added to a guild.\n\t *\n\t * @remarks\n\t * If set to `false`, you will have to later `PUT` the permissions for this command.\n\t * @param value - Whether to enable this command by default\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead.\n\t */\n\tpublic setDefaultPermission(value: boolean) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDefaultPermission(value);\n\n\t\tReflect.set(this, 'default_permission', value);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the default permissions a member should have in order to run this command.\n\t *\n\t * @remarks\n\t * You can set this to `'0'` to disable the command by default.\n\t * @param permissions - The permissions bit field to set\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t */\n\tpublic setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) {\n\t\t// Assert the value and parse it\n\t\tconst permissionValue = validateDefaultMemberPermissions(permissions);\n\n\t\tReflect.set(this, 'default_member_permissions', permissionValue);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets if the command is available in direct messages with the application.\n\t *\n\t * @remarks\n\t * By default, commands are visible. This method is only for global commands.\n\t * @param enabled - Whether the command should be enabled in direct messages\n\t * @see {@link https://discord.com/developers/docs/interactions/application-commands#permissions}\n\t * @deprecated Use {@link ContextMenuCommandBuilder.setContexts} instead.\n\t */\n\tpublic setDMPermission(enabled: boolean | null | undefined) {\n\t\t// Assert the value matches the conditions\n\t\tvalidateDMPermission(enabled);\n\n\t\tReflect.set(this, 'dm_permission', enabled);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets a name localization for this command.\n\t *\n\t * @param locale - The locale to set\n\t * @param localizedName - The localized name for the given `locale`\n\t */\n\tpublic setNameLocalization(locale: LocaleString, localizedName: string | null) {\n\t\tif (!this.name_localizations) {\n\t\t\tReflect.set(this, 'name_localizations', {});\n\t\t}\n\n\t\tconst parsedLocale = validateLocale(locale);\n\n\t\tif (localizedName === null) {\n\t\t\tthis.name_localizations![parsedLocale] = null;\n\t\t\treturn this;\n\t\t}\n\n\t\tvalidateName(localizedName);\n\n\t\tthis.name_localizations![parsedLocale] = localizedName;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets the name localizations for this command.\n\t *\n\t * @param localizedNames - The object of localized names to set\n\t */\n\tpublic setNameLocalizations(localizedNames: LocalizationMap | null) {\n\t\tif (localizedNames === null) {\n\t\t\tReflect.set(this, 'name_localizations', null);\n\t\t\treturn this;\n\t\t}\n\n\t\tReflect.set(this, 'name_localizations', {});\n\n\t\tfor (const args of Object.entries(localizedNames))\n\t\t\tthis.setNameLocalization(...(args as [LocaleString, string | null]));\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serializes this builder to API-compatible JSON data.\n\t *\n\t * @remarks\n\t * This method runs validations on the data before serializing it.\n\t * As such, it may throw an error if the data is invalid.\n\t */\n\tpublic toJSON(): RESTPostAPIContextMenuApplicationCommandsJSONBody {\n\t\tvalidateRequiredParameters(this.name, this.type);\n\n\t\tvalidateLocalizationMap(this.name_localizations);\n\n\t\treturn { ...this };\n\t}\n}\n","import type { APIEmbed } from 'discord-api-types/v10';\n\n/**\n * Calculates the length of the embed.\n *\n * @param data - The embed data to check\n */\nexport function embedLength(data: APIEmbed) {\n\treturn (\n\t\t(data.title?.length ?? 0) +\n\t\t(data.description?.length ?? 0) +\n\t\t(data.fields?.reduce((prev, curr) => prev + curr.name.length + curr.value.length, 0) ?? 0) +\n\t\t(data.footer?.text.length ?? 0) +\n\t\t(data.author?.name.length ?? 0)\n\t);\n}\n"],"mappings":"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","names":["Assertions_exports","s","s","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","ComponentType","ComponentType","SelectMenuDefaultValueType","ComponentType","SelectMenuDefaultValueType","ComponentType","Assertions_exports","placeholderValidator","s","s","placeholderValidator","ComponentType","placeholderValidator","ComponentType","Assertions_exports","descriptionPredicate","s","ComponentType","ComponentType","descriptionPredicate","s","descriptionPredicate","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","descriptionPredicate","ComponentType","ComponentType","ComponentType","ComponentType","ComponentType","Assertions_exports","validateRequiredParameters","s","s","validateRequiredParameters","validateRequiredParameters","Assertions_exports","assertReturnOfBuilder","validateRequiredParameters","s","s","descriptionPredicate","validateRequiredParameters","assertReturnOfBuilder","mix","validateRequiredParameters","validateRequiredParameters","ApplicationCommandOptionType","ApplicationCommandOptionType","ApplicationCommandOptionType","s","ChannelType","ChannelType","s","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","s","booleanPredicate","s","s","ApplicationCommandOptionType","s","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","ApplicationCommandOptionType","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","numberValidator","s","ApplicationCommandOptionType","mix","ApplicationCommandOptionType","ApplicationCommandOptionType","s","ApplicationCommandOptionType","mix","minLengthValidator","s","maxLengthValidator","ApplicationCommandOptionType","mix","ApplicationCommandOptionType","ApplicationCommandOptionType","assertReturnOfBuilder","ApplicationCommandOptionType","mix","assertReturnOfBuilder","validateRequiredParameters","ApplicationCommandOptionType","mix","assertReturnOfBuilder","mix","Assertions_exports","contextsPredicate","integrationTypesPredicate","validateDMPermission","validateDefaultMemberPermissions","validateDefaultPermission","validateName","validateRequiredParameters","s","ApplicationCommandType","ApplicationIntegrationType","InteractionContextType","namePredicate","s","ApplicationCommandType","booleanPredicate","validateDefaultPermission","validateName","validateRequiredParameters","dmPermissionPredicate","validateDMPermission","memberPermissionPredicate","validateDefaultMemberPermissions","contextsPredicate","InteractionContextType","integrationTypesPredicate","ApplicationIntegrationType","contextsPredicate","integrationTypesPredicate","validateName","validateDefaultPermission","validateDefaultMemberPermissions","validateDMPermission","validateRequiredParameters"]} \ No newline at end of file diff --git a/node_modules/@discordjs/builders/package.json b/node_modules/@discordjs/builders/package.json index 1b92221..e693e4c 100644 --- a/node_modules/@discordjs/builders/package.json +++ b/node_modules/@discordjs/builders/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@discordjs/builders", - "version": "1.10.1", + "version": "1.11.2", "description": "A set of builders that you can use when creating your bot", "exports": { ".": { @@ -54,12 +54,12 @@ "funding": "https://github.com/discordjs/discord.js?sponsor", "dependencies": { "@sapphire/shapeshift": "^4.0.0", - "discord-api-types": "^0.37.119", + "discord-api-types": "^0.38.1", "fast-deep-equal": "^3.1.3", "ts-mixer": "^6.0.4", "tslib": "^2.6.3", - "@discordjs/util": "^1.1.1", - "@discordjs/formatters": "^0.6.0" + "@discordjs/formatters": "^0.6.1", + "@discordjs/util": "^1.1.1" }, "devDependencies": { "@favware/cliff-jumper": "^4.1.0", diff --git a/node_modules/@discordjs/formatters/dist/index.js b/node_modules/@discordjs/formatters/dist/index.js index 479703a..da414da 100644 --- a/node_modules/@discordjs/formatters/dist/index.js +++ b/node_modules/@discordjs/formatters/dist/index.js @@ -402,7 +402,7 @@ var GuildNavigationMentions = /* @__PURE__ */ ((GuildNavigationMentions2) => { })(GuildNavigationMentions || {}); // src/index.ts -var version = "0.6.0"; +var version = "0.6.1"; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { Faces, diff --git a/node_modules/@discordjs/formatters/dist/index.js.map b/node_modules/@discordjs/formatters/dist/index.js.map index 137b7e2..f42dc86 100644 --- a/node_modules/@discordjs/formatters/dist/index.js.map +++ b/node_modules/@discordjs/formatters/dist/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/index.ts","../src/escapers.ts","../src/formatters.ts"],"sourcesContent":["export * from './escapers.js';\nexport * from './formatters.js';\n\n/**\n * The {@link https://github.com/discordjs/discord.js/blob/main/packages/formatters#readme | @discordjs/formatters} version\n * that you are currently using.\n *\n * @privateRemarks This needs to explicitly be `string` so it is not typed as a \"const string\" that gets injected by esbuild.\n */\nexport const version = '0.6.0' as string;\n","/* eslint-disable prefer-named-capture-group */\n\n/**\n * The options that affect what will be escaped.\n */\nexport interface EscapeMarkdownOptions {\n\t/**\n\t * Whether to escape bold text.\n\t *\n\t * @defaultValue `true`\n\t */\n\tbold?: boolean;\n\n\t/**\n\t * Whether to escape bulleted lists.\n\t *\n\t * @defaultValue `false`\n\t */\n\tbulletedList?: boolean;\n\n\t/**\n\t * Whether to escape code blocks.\n\t *\n\t * @defaultValue `true`\n\t */\n\tcodeBlock?: boolean;\n\n\t/**\n\t * Whether to escape text inside code blocks.\n\t *\n\t * @defaultValue `true`\n\t */\n\tcodeBlockContent?: boolean;\n\n\t/**\n\t * Whether to escape `\\`.\n\t *\n\t * @defaultValue `true`\n\t */\n\tescape?: boolean;\n\n\t/**\n\t * Whether to escape headings.\n\t *\n\t * @defaultValue `false`\n\t */\n\theading?: boolean;\n\n\t/**\n\t * Whether to escape inline code.\n\t *\n\t * @defaultValue `true`\n\t */\n\tinlineCode?: boolean;\n\n\t/**\n\t * Whether to escape text inside inline code.\n\t *\n\t * @defaultValue `true`\n\t */\n\tinlineCodeContent?: boolean;\n\t/**\n\t * Whether to escape italics.\n\t *\n\t * @defaultValue `true`\n\t */\n\titalic?: boolean;\n\n\t/**\n\t * Whether to escape masked links.\n\t *\n\t * @defaultValue `false`\n\t */\n\tmaskedLink?: boolean;\n\n\t/**\n\t * Whether to escape numbered lists.\n\t *\n\t * @defaultValue `false`\n\t */\n\tnumberedList?: boolean;\n\n\t/**\n\t * Whether to escape spoilers.\n\t *\n\t * @defaultValue `true`\n\t */\n\tspoiler?: boolean;\n\n\t/**\n\t * Whether to escape strikethroughs.\n\t *\n\t * @defaultValue `true`\n\t */\n\tstrikethrough?: boolean;\n\n\t/**\n\t * Whether to escape underlines.\n\t *\n\t * @defaultValue `true`\n\t */\n\tunderline?: boolean;\n}\n\n/**\n * Escapes any Discord-flavored markdown in a string.\n *\n * @param text - Content to escape\n * @param options - Options for escaping the markdown\n */\nexport function escapeMarkdown(text: string, options: EscapeMarkdownOptions = {}): string {\n\tconst {\n\t\tcodeBlock = true,\n\t\tinlineCode = true,\n\t\tbold = true,\n\t\titalic = true,\n\t\tunderline = true,\n\t\tstrikethrough = true,\n\t\tspoiler = true,\n\t\tcodeBlockContent = true,\n\t\tinlineCodeContent = true,\n\t\tescape = true,\n\t\theading = false,\n\t\tbulletedList = false,\n\t\tnumberedList = false,\n\t\tmaskedLink = false,\n\t} = options;\n\n\tif (!codeBlockContent) {\n\t\treturn text\n\t\t\t.split('```')\n\t\t\t.map((subString, index, array) => {\n\t\t\t\tif (index % 2 && index !== array.length - 1) return subString;\n\t\t\t\treturn escapeMarkdown(subString, {\n\t\t\t\t\tinlineCode,\n\t\t\t\t\tbold,\n\t\t\t\t\titalic,\n\t\t\t\t\tunderline,\n\t\t\t\t\tstrikethrough,\n\t\t\t\t\tspoiler,\n\t\t\t\t\tinlineCodeContent,\n\t\t\t\t\tescape,\n\t\t\t\t\theading,\n\t\t\t\t\tbulletedList,\n\t\t\t\t\tnumberedList,\n\t\t\t\t\tmaskedLink,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.join(codeBlock ? '\\\\`\\\\`\\\\`' : '```');\n\t}\n\n\tif (!inlineCodeContent) {\n\t\treturn text\n\t\t\t.split(/(?<=^|[^`])`(?=[^`]|$)/g)\n\t\t\t.map((subString, index, array) => {\n\t\t\t\tif (index % 2 && index !== array.length - 1) return subString;\n\t\t\t\treturn escapeMarkdown(subString, {\n\t\t\t\t\tcodeBlock,\n\t\t\t\t\tbold,\n\t\t\t\t\titalic,\n\t\t\t\t\tunderline,\n\t\t\t\t\tstrikethrough,\n\t\t\t\t\tspoiler,\n\t\t\t\t\tescape,\n\t\t\t\t\theading,\n\t\t\t\t\tbulletedList,\n\t\t\t\t\tnumberedList,\n\t\t\t\t\tmaskedLink,\n\t\t\t\t});\n\t\t\t})\n\t\t\t.join(inlineCode ? '\\\\`' : '`');\n\t}\n\n\tlet res = text;\n\tif (escape) res = escapeEscape(res);\n\tif (inlineCode) res = escapeInlineCode(res);\n\tif (codeBlock) res = escapeCodeBlock(res);\n\tif (italic) res = escapeItalic(res);\n\tif (bold) res = escapeBold(res);\n\tif (underline) res = escapeUnderline(res);\n\tif (strikethrough) res = escapeStrikethrough(res);\n\tif (spoiler) res = escapeSpoiler(res);\n\tif (heading) res = escapeHeading(res);\n\tif (bulletedList) res = escapeBulletedList(res);\n\tif (numberedList) res = escapeNumberedList(res);\n\tif (maskedLink) res = escapeMaskedLink(res);\n\treturn res;\n}\n\n/**\n * Escapes code block markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeCodeBlock(text: string): string {\n\treturn text.replaceAll('```', '\\\\`\\\\`\\\\`');\n}\n\n/**\n * Escapes inline code markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeInlineCode(text: string): string {\n\treturn text.replaceAll(/(?<=^|[^`])``?(?=[^`]|$)/g, (match) => (match.length === 2 ? '\\\\`\\\\`' : '\\\\`'));\n}\n\n/**\n * Escapes italic markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeItalic(text: string): string {\n\tlet idx = 0;\n\tconst newText = text.replaceAll(/(?<=^|[^*])\\*([^*]|\\*\\*|$)/g, (_, match) => {\n\t\tif (match === '**') return ++idx % 2 ? `\\\\*${match}` : `${match}\\\\*`;\n\t\treturn `\\\\*${match}`;\n\t});\n\tidx = 0;\n\treturn newText.replaceAll(/(?<=^|[^_])(?)([^_]|__|$)/g, (_, match) => {\n\t\tif (match === '__') return ++idx % 2 ? `\\\\_${match}` : `${match}\\\\_`;\n\t\treturn `\\\\_${match}`;\n\t});\n}\n\n/**\n * Escapes bold markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeBold(text: string): string {\n\tlet idx = 0;\n\treturn text.replaceAll(/\\*\\*(\\*)?/g, (_, match) => {\n\t\tif (match) return ++idx % 2 ? `${match}\\\\*\\\\*` : `\\\\*\\\\*${match}`;\n\t\treturn '\\\\*\\\\*';\n\t});\n}\n\n/**\n * Escapes underline markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeUnderline(text: string): string {\n\tlet idx = 0;\n\treturn text.replaceAll(/(?)/g, (_, match) => {\n\t\tif (match) return ++idx % 2 ? `${match}\\\\_\\\\_` : `\\\\_\\\\_${match}`;\n\t\treturn '\\\\_\\\\_';\n\t});\n}\n\n/**\n * Escapes strikethrough markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeStrikethrough(text: string): string {\n\treturn text.replaceAll('~~', '\\\\~\\\\~');\n}\n\n/**\n * Escapes spoiler markdown in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeSpoiler(text: string): string {\n\treturn text.replaceAll('||', '\\\\|\\\\|');\n}\n\n/**\n * Escapes escape characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeEscape(text: string): string {\n\treturn text.replaceAll('\\\\', '\\\\\\\\');\n}\n\n/**\n * Escapes heading characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeHeading(text: string): string {\n\treturn text.replaceAll(/^( {0,2})([*-] )?( *)(#{1,3} )/gm, '$1$2$3\\\\$4');\n}\n\n/**\n * Escapes bulleted list characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeBulletedList(text: string): string {\n\treturn text.replaceAll(/^( *)([*-])( +)/gm, '$1\\\\$2$3');\n}\n\n/**\n * Escapes numbered list characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeNumberedList(text: string): string {\n\treturn text.replaceAll(/^( *\\d+)\\./gm, '$1\\\\.');\n}\n\n/**\n * Escapes masked link characters in a string.\n *\n * @param text - Content to escape\n */\nexport function escapeMaskedLink(text: string): string {\n\treturn text.replaceAll(/\\[.+]\\(.+\\)/gm, '\\\\$&');\n}\n","import type { URL } from 'node:url';\nimport type { Snowflake } from 'discord-api-types/globals';\n\n/**\n * Wraps the content inside a code block with no language.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function codeBlock(content: Content): `\\`\\`\\`\\n${Content}\\n\\`\\`\\``;\n\n/**\n * Wraps the content inside a code block with the specified language.\n *\n * @typeParam Language - This is inferred by the supplied language\n * @typeParam Content - This is inferred by the supplied content\n * @param language - The language for the code block\n * @param content - The content to wrap\n */\nexport function codeBlock(\n\tlanguage: Language,\n\tcontent: Content,\n): `\\`\\`\\`${Language}\\n${Content}\\n\\`\\`\\``;\n\nexport function codeBlock(language: string, content?: string): string {\n\treturn content === undefined ? `\\`\\`\\`\\n${language}\\n\\`\\`\\`` : `\\`\\`\\`${language}\\n${content}\\n\\`\\`\\``;\n}\n\n/**\n * Wraps the content inside \\`backticks\\` which formats it as inline code.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function inlineCode(content: Content): `\\`${Content}\\`` {\n\treturn `\\`${content}\\``;\n}\n\n/**\n * Formats the content into italic text.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function italic(content: Content): `_${Content}_` {\n\treturn `_${content}_`;\n}\n\n/**\n * Formats the content into bold text.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function bold(content: Content): `**${Content}**` {\n\treturn `**${content}**`;\n}\n\n/**\n * Formats the content into underscored text.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n * @deprecated Use {@link underline} instead.\n */\nexport function underscore(content: Content): `__${Content}__` {\n\treturn underline(content);\n}\n\n/**\n * Formats the content into underlined text.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function underline(content: Content): `__${Content}__` {\n\treturn `__${content}__`;\n}\n\n/**\n * Formats the content into strike-through text.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function strikethrough(content: Content): `~~${Content}~~` {\n\treturn `~~${content}~~`;\n}\n\n/**\n * Formats the content into a quote.\n *\n * @remarks This needs to be at the start of the line for Discord to format it.\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function quote(content: Content): `> ${Content}` {\n\treturn `> ${content}`;\n}\n\n/**\n * Formats the content into a block quote.\n *\n * @remarks This needs to be at the start of the line for Discord to format it.\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function blockQuote(content: Content): `>>> ${Content}` {\n\treturn `>>> ${content}`;\n}\n\n/**\n * Wraps the URL into `<>` which stops it from embedding.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param url - The URL to wrap\n */\nexport function hideLinkEmbed(url: Content): `<${Content}>`;\n\n/**\n * Wraps the URL into `<>` which stops it from embedding.\n *\n * @param url - The URL to wrap\n */\nexport function hideLinkEmbed(url: URL): `<${string}>`;\n\nexport function hideLinkEmbed(url: URL | string) {\n\treturn `<${url}>`;\n}\n\n/**\n * Formats the content and the URL into a masked URL.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to display\n * @param url - The URL the content links to\n */\nexport function hyperlink(content: Content, url: URL): `[${Content}](${string})`;\n\n/**\n * Formats the content and the URL into a masked URL.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @typeParam Url - This is inferred by the supplied URL\n * @param content - The content to display\n * @param url - The URL the content links to\n */\nexport function hyperlink(\n\tcontent: Content,\n\turl: Url,\n): `[${Content}](${Url})`;\n\n/**\n * Formats the content and the URL into a masked URL with a custom tooltip.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @typeParam Title - This is inferred by the supplied title\n * @param content - The content to display\n * @param url - The URL the content links to\n * @param title - The title shown when hovering on the masked link\n */\nexport function hyperlink(\n\tcontent: Content,\n\turl: URL,\n\ttitle: Title,\n): `[${Content}](${string} \"${Title}\")`;\n\n/**\n * Formats the content and the URL into a masked URL with a custom tooltip.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @typeParam Url - This is inferred by the supplied URL\n * @typeParam Title - This is inferred by the supplied title\n * @param content - The content to display\n * @param url - The URL the content links to\n * @param title - The title shown when hovering on the masked link\n */\nexport function hyperlink(\n\tcontent: Content,\n\turl: Url,\n\ttitle: Title,\n): `[${Content}](${Url} \"${Title}\")`;\n\nexport function hyperlink(content: string, url: URL | string, title?: string) {\n\treturn title ? `[${content}](${url} \"${title}\")` : `[${content}](${url})`;\n}\n\n/**\n * Formats the content into a spoiler.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function spoiler(content: Content): `||${Content}||` {\n\treturn `||${content}||`;\n}\n\n/**\n * Formats a user id into a user mention.\n *\n * @typeParam UserId - This is inferred by the supplied user id\n * @param userId - The user id to format\n */\nexport function userMention(userId: UserId): `<@${UserId}>` {\n\treturn `<@${userId}>`;\n}\n\n/**\n * Formats a channel id into a channel mention.\n *\n * @typeParam ChannelId - This is inferred by the supplied channel id\n * @param channelId - The channel id to format\n */\nexport function channelMention(channelId: ChannelId): `<#${ChannelId}>` {\n\treturn `<#${channelId}>`;\n}\n\n/**\n * Formats a role id into a role mention.\n *\n * @typeParam RoleId - This is inferred by the supplied role id\n * @param roleId - The role id to format\n */\nexport function roleMention(roleId: RoleId): `<@&${RoleId}>` {\n\treturn `<@&${roleId}>`;\n}\n\n/**\n * Formats an application command name, subcommand group name, subcommand name, and id into an application command mention.\n *\n * @typeParam CommandName - This is inferred by the supplied command name\n * @typeParam SubcommandGroupName - This is inferred by the supplied subcommand group name\n * @typeParam SubcommandName - This is inferred by the supplied subcommand name\n * @typeParam CommandId - This is inferred by the supplied command id\n * @param commandName - The application command name to format\n * @param subcommandGroupName - The subcommand group name to format\n * @param subcommandName - The subcommand name to format\n * @param commandId - The application command id to format\n */\nexport function chatInputApplicationCommandMention<\n\tCommandName extends string,\n\tSubcommandGroupName extends string,\n\tSubcommandName extends string,\n\tCommandId extends Snowflake,\n>(\n\tcommandName: CommandName,\n\tsubcommandGroupName: SubcommandGroupName,\n\tsubcommandName: SubcommandName,\n\tcommandId: CommandId,\n): ``;\n\n/**\n * Formats an application command name, subcommand name, and id into an application command mention.\n *\n * @typeParam CommandName - This is inferred by the supplied command name\n * @typeParam SubcommandName - This is inferred by the supplied subcommand name\n * @typeParam CommandId - This is inferred by the supplied command id\n * @param commandName - The application command name to format\n * @param subcommandName - The subcommand name to format\n * @param commandId - The application command id to format\n */\nexport function chatInputApplicationCommandMention<\n\tCommandName extends string,\n\tSubcommandName extends string,\n\tCommandId extends Snowflake,\n>(\n\tcommandName: CommandName,\n\tsubcommandName: SubcommandName,\n\tcommandId: CommandId,\n): ``;\n\n/**\n * Formats an application command name and id into an application command mention.\n *\n * @typeParam CommandName - This is inferred by the supplied command name\n * @typeParam CommandId - This is inferred by the supplied command id\n * @param commandName - The application command name to format\n * @param commandId - The application command id to format\n */\nexport function chatInputApplicationCommandMention(\n\tcommandName: CommandName,\n\tcommandId: CommandId,\n): ``;\n\nexport function chatInputApplicationCommandMention<\n\tCommandName extends string,\n\tSubcommandGroupName extends Snowflake | string,\n\tSubcommandName extends Snowflake | string,\n\tCommandId extends Snowflake,\n>(\n\tcommandName: CommandName,\n\tsubcommandGroupName: SubcommandGroupName,\n\tsubcommandName?: SubcommandName,\n\tcommandId?: CommandId,\n):\n\t| ``\n\t| ``\n\t| `` {\n\tif (commandId !== undefined) {\n\t\treturn ``;\n\t}\n\n\tif (subcommandName !== undefined) {\n\t\treturn ``;\n\t}\n\n\treturn ``;\n}\n\n/**\n * Formats a non-animated emoji id into a fully qualified emoji identifier.\n *\n * @typeParam EmojiId - This is inferred by the supplied emoji id\n * @param emojiId - The emoji id to format\n */\nexport function formatEmoji(emojiId: EmojiId, animated?: false): `<:_:${EmojiId}>`;\n\n/**\n * Formats an animated emoji id into a fully qualified emoji identifier.\n *\n * @typeParam EmojiId - This is inferred by the supplied emoji id\n * @param emojiId - The emoji id to format\n * @param animated - Whether the emoji is animated\n */\nexport function formatEmoji(emojiId: EmojiId, animated?: true): ``;\n\n/**\n * Formats an emoji id into a fully qualified emoji identifier.\n *\n * @typeParam EmojiId - This is inferred by the supplied emoji id\n * @param emojiId - The emoji id to format\n * @param animated - Whether the emoji is animated\n */\nexport function formatEmoji(\n\temojiId: EmojiId,\n\tanimated?: boolean,\n): `<:_:${EmojiId}>` | ``;\n\n/**\n * Formats a non-animated emoji id and name into a fully qualified emoji identifier.\n *\n * @typeParam EmojiId - This is inferred by the supplied emoji id\n * @typeParam EmojiName - This is inferred by the supplied name\n * @param options - The options for formatting an emoji\n */\nexport function formatEmoji(\n\toptions: FormatEmojiOptions & { animated: true },\n): ``;\n\n/**\n * Formats an animated emoji id and name into a fully qualified emoji identifier.\n *\n * @typeParam EmojiId - This is inferred by the supplied emoji id\n * @typeParam EmojiName - This is inferred by the supplied name\n * @param options - The options for formatting an emoji\n */\nexport function formatEmoji(\n\toptions: FormatEmojiOptions & { animated?: false },\n): `<:${EmojiName}:${EmojiId}>`;\n\n/**\n * Formats an emoji id and name into a fully qualified emoji identifier.\n *\n * @typeParam EmojiId - This is inferred by the supplied emoji id\n * @typeParam EmojiName - This is inferred by the supplied emoji name\n * @param options - The options for formatting an emoji\n */\nexport function formatEmoji(\n\toptions: FormatEmojiOptions,\n): `<:${EmojiName}:${EmojiId}>` | ``;\n\nexport function formatEmoji(\n\temojiIdOrOptions: EmojiId | FormatEmojiOptions,\n\tanimated?: boolean,\n): `<:${string}:${EmojiId}>` | `` {\n\tconst options =\n\t\ttypeof emojiIdOrOptions === 'string'\n\t\t\t? {\n\t\t\t\t\tid: emojiIdOrOptions,\n\t\t\t\t\tanimated: animated ?? false,\n\t\t\t\t}\n\t\t\t: emojiIdOrOptions;\n\n\tconst { id, animated: isAnimated, name: emojiName } = options;\n\n\treturn `<${isAnimated ? 'a' : ''}:${emojiName ?? '_'}:${id}>`;\n}\n\n/**\n * The options for formatting an emoji.\n *\n * @typeParam EmojiId - This is inferred by the supplied emoji id\n * @typeParam EmojiName - This is inferred by the supplied emoji name\n */\nexport interface FormatEmojiOptions {\n\t/**\n\t * Whether the emoji is animated\n\t */\n\tanimated?: boolean;\n\t/**\n\t * The emoji id to format\n\t */\n\tid: EmojiId;\n\t/**\n\t * The name of the emoji\n\t */\n\tname?: EmojiName;\n}\n\n/**\n * Formats a channel link for a direct message channel.\n *\n * @typeParam ChannelId - This is inferred by the supplied channel id\n * @param channelId - The channel's id\n */\nexport function channelLink(\n\tchannelId: ChannelId,\n): `https://discord.com/channels/@me/${ChannelId}`;\n\n/**\n * Formats a channel link for a guild channel.\n *\n * @typeParam ChannelId - This is inferred by the supplied channel id\n * @typeParam GuildId - This is inferred by the supplied guild id\n * @param channelId - The channel's id\n * @param guildId - The guild's id\n */\nexport function channelLink(\n\tchannelId: ChannelId,\n\tguildId: GuildId,\n): `https://discord.com/channels/${GuildId}/${ChannelId}`;\n\nexport function channelLink(\n\tchannelId: ChannelId,\n\tguildId?: GuildId,\n): `https://discord.com/channels/@me/${ChannelId}` | `https://discord.com/channels/${GuildId}/${ChannelId}` {\n\treturn `https://discord.com/channels/${guildId ?? '@me'}/${channelId}`;\n}\n\n/**\n * Formats a message link for a direct message channel.\n *\n * @typeParam ChannelId - This is inferred by the supplied channel id\n * @typeParam MessageId - This is inferred by the supplied message id\n * @param channelId - The channel's id\n * @param messageId - The message's id\n */\nexport function messageLink(\n\tchannelId: ChannelId,\n\tmessageId: MessageId,\n): `https://discord.com/channels/@me/${ChannelId}/${MessageId}`;\n\n/**\n * Formats a message link for a guild channel.\n *\n * @typeParam ChannelId - This is inferred by the supplied channel id\n * @typeParam MessageId - This is inferred by the supplied message id\n * @typeParam GuildId - This is inferred by the supplied guild id\n * @param channelId - The channel's id\n * @param messageId - The message's id\n * @param guildId - The guild's id\n */\nexport function messageLink(\n\tchannelId: ChannelId,\n\tmessageId: MessageId,\n\tguildId: GuildId,\n): `https://discord.com/channels/${GuildId}/${ChannelId}/${MessageId}`;\n\nexport function messageLink(\n\tchannelId: ChannelId,\n\tmessageId: MessageId,\n\tguildId?: GuildId,\n):\n\t| `https://discord.com/channels/@me/${ChannelId}/${MessageId}`\n\t| `https://discord.com/channels/${GuildId}/${ChannelId}/${MessageId}` {\n\treturn `${guildId === undefined ? channelLink(channelId) : channelLink(channelId, guildId)}/${messageId}`;\n}\n\n/**\n * The heading levels for expanded markdown.\n */\nexport enum HeadingLevel {\n\t/**\n\t * The first heading level.\n\t */\n\tOne = 1,\n\t/**\n\t * The second heading level.\n\t */\n\tTwo,\n\t/**\n\t * The third heading level.\n\t */\n\tThree,\n}\n\n/**\n * Formats the content into a heading level.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n * @param level - The heading level\n */\nexport function heading(content: Content, level?: HeadingLevel.One): `# ${Content}`;\n\n/**\n * Formats the content into a heading level.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n * @param level - The heading level\n */\nexport function heading(content: Content, level: HeadingLevel.Two): `## ${Content}`;\n\n/**\n * Formats the content into a heading level.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n * @param level - The heading level\n */\nexport function heading(content: Content, level: HeadingLevel.Three): `### ${Content}`;\n\nexport function heading(content: string, level?: HeadingLevel) {\n\tswitch (level) {\n\t\tcase HeadingLevel.Three:\n\t\t\treturn `### ${content}`;\n\t\tcase HeadingLevel.Two:\n\t\t\treturn `## ${content}`;\n\t\tdefault:\n\t\t\treturn `# ${content}`;\n\t}\n}\n\n/**\n * A type that recursively traverses into arrays.\n */\nexport type RecursiveArray = readonly (ItemType | RecursiveArray)[];\n\n/**\n * Callback function for list formatters.\n *\n * @internal\n */\nfunction listCallback(element: RecursiveArray, startNumber?: number, depth = 0): string {\n\tif (Array.isArray(element)) {\n\t\treturn element.map((element) => listCallback(element, startNumber, depth + 1)).join('\\n');\n\t}\n\n\treturn `${' '.repeat(depth - 1)}${startNumber ? `${startNumber}.` : '-'} ${element}`;\n}\n\n/**\n * Formats the elements in the array to an ordered list.\n *\n * @param list - The array of elements to list\n * @param startNumber - The starting number for the list\n */\nexport function orderedList(list: RecursiveArray, startNumber = 1): string {\n\treturn listCallback(list, Math.max(startNumber, 1));\n}\n\n/**\n * Formats the elements in the array to an unordered list.\n *\n * @param list - The array of elements to list\n */\nexport function unorderedList(list: RecursiveArray): string {\n\treturn listCallback(list);\n}\n\n/**\n * Formats the content into a subtext.\n *\n * @typeParam Content - This is inferred by the supplied content\n * @param content - The content to wrap\n */\nexport function subtext(content: Content): `-# ${Content}` {\n\treturn `-# ${content}`;\n}\n\n/**\n * Formats a date into a short date-time string.\n *\n * @param date - The date to format. Defaults to the current time\n */\nexport function time(date?: Date): ``;\n\n/**\n * Formats a date given a format style.\n *\n * @typeParam Style - This is inferred by the supplied {@link TimestampStylesString}\n * @param date - The date to format\n * @param style - The style to use\n */\nexport function time