{"version":3,"file":"js/9763-cda47d54e66f6e1f5671.js","mappings":"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","sources":["webpack://agra/./node_modules/linkifyjs/dist/linkify.es.js"],"sourcesContent":["// THIS FILE IS AUTOMATICALLY GENERATED DO NOT EDIT DIRECTLY\n// See update-tlds.js for encoding/decoding format\n// https://data.iana.org/TLD/tlds-alpha-by-domain.txt\nconst encodedTlds = 'aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4w0s2x0a2z0ure5ba0by2idu3namex4d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2ntley5rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dad1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6logistics9properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3ncaster6d0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2psy3ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0america6xi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp3ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2';\n// Internationalized domain names containing non-ASCII\nconst encodedUtlds = 'ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2';\n\n/**\n * @template A\n * @template B\n * @param {A} target\n * @param {B} properties\n * @return {A & B}\n */\nconst assign = (target, properties) => {\n for (const key in properties) {\n target[key] = properties[key];\n }\n return target;\n};\n\n/**\n * Finite State Machine generation utilities\n */\n\n/**\n * @template T\n * @typedef {{ [group: string]: T[] }} Collections\n */\n\n/**\n * @typedef {{ [group: string]: true }} Flags\n */\n\n// Keys in scanner Collections instances\nconst numeric = 'numeric';\nconst ascii = 'ascii';\nconst alpha = 'alpha';\nconst asciinumeric = 'asciinumeric';\nconst alphanumeric = 'alphanumeric';\nconst domain = 'domain';\nconst emoji = 'emoji';\nconst scheme = 'scheme';\nconst slashscheme = 'slashscheme';\nconst whitespace = 'whitespace';\n\n/**\n * @template T\n * @param {string} name\n * @param {Collections} groups to register in\n * @returns {T[]} Current list of tokens in the given collection\n */\nfunction registerGroup(name, groups) {\n if (!(name in groups)) {\n groups[name] = [];\n }\n return groups[name];\n}\n\n/**\n * @template T\n * @param {T} t token to add\n * @param {Collections} groups\n * @param {Flags} flags\n */\nfunction addToGroups(t, flags, groups) {\n if (flags[numeric]) {\n flags[asciinumeric] = true;\n flags[alphanumeric] = true;\n }\n if (flags[ascii]) {\n flags[asciinumeric] = true;\n flags[alpha] = true;\n }\n if (flags[asciinumeric]) {\n flags[alphanumeric] = true;\n }\n if (flags[alpha]) {\n flags[alphanumeric] = true;\n }\n if (flags[alphanumeric]) {\n flags[domain] = true;\n }\n if (flags[emoji]) {\n flags[domain] = true;\n }\n for (const k in flags) {\n const group = registerGroup(k, groups);\n if (group.indexOf(t) < 0) {\n group.push(t);\n }\n }\n}\n\n/**\n * @template T\n * @param {T} t token to check\n * @param {Collections} groups\n * @returns {Flags} group flags that contain this token\n */\nfunction flagsForToken(t, groups) {\n const result = {};\n for (const c in groups) {\n if (groups[c].indexOf(t) >= 0) {\n result[c] = true;\n }\n }\n return result;\n}\n\n/**\n * @template T\n * @typedef {null | T } Transition\n */\n\n/**\n * Define a basic state machine state. j is the list of character transitions,\n * jr is the list of regex-match transitions, jd is the default state to\n * transition to t is the accepting token type, if any. If this is the terminal\n * state, then it does not emit a token.\n *\n * The template type T represents the type of the token this state accepts. This\n * should be a string (such as of the token exports in `text.js`) or a\n * MultiToken subclass (from `multi.js`)\n *\n * @template T\n * @param {T} [token] Token that this state emits\n */\nfunction State(token = null) {\n // this.n = null; // DEBUG: State name\n /** @type {{ [input: string]: State }} j */\n this.j = {}; // IMPLEMENTATION 1\n // this.j = []; // IMPLEMENTATION 2\n /** @type {[RegExp, State][]} jr */\n this.jr = [];\n /** @type {?State} jd */\n this.jd = null;\n /** @type {?T} t */\n this.t = token;\n}\n\n/**\n * Scanner token groups\n * @type Collections\n */\nState.groups = {};\nState.prototype = {\n accepts() {\n return !!this.t;\n },\n /**\n * Follow an existing transition from the given input to the next state.\n * Does not mutate.\n * @param {string} input character or token type to transition on\n * @returns {?State} the next state, if any\n */\n go(input) {\n const state = this;\n const nextState = state.j[input];\n if (nextState) {\n return nextState;\n }\n for (let i = 0; i < state.jr.length; i++) {\n const regex = state.jr[i][0];\n const nextState = state.jr[i][1]; // note: might be empty to prevent default jump\n if (nextState && regex.test(input)) {\n return nextState;\n }\n }\n // Nowhere left to jump! Return default, if any\n return state.jd;\n },\n /**\n * Whether the state has a transition for the given input. Set the second\n * argument to true to only look for an exact match (and not a default or\n * regular-expression-based transition)\n * @param {string} input\n * @param {boolean} exactOnly\n */\n has(input, exactOnly = false) {\n return exactOnly ? input in this.j : !!this.go(input);\n },\n /**\n * Short for \"transition all\"; create a transition from the array of items\n * in the given list to the same final resulting state.\n * @param {string | string[]} inputs Group of inputs to transition on\n * @param {Transition | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n */\n ta(inputs, next, flags, groups) {\n for (let i = 0; i < inputs.length; i++) {\n this.tt(inputs[i], next, flags, groups);\n }\n },\n /**\n * Short for \"take regexp transition\"; defines a transition for this state\n * when it encounters a token which matches the given regular expression\n * @param {RegExp} regexp Regular expression transition (populate first)\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n * @returns {State} taken after the given input\n */\n tr(regexp, next, flags, groups) {\n groups = groups || State.groups;\n let nextState;\n if (next && next.j) {\n nextState = next;\n } else {\n // Token with maybe token groups\n nextState = new State(next);\n if (flags && groups) {\n addToGroups(next, flags, groups);\n }\n }\n this.jr.push([regexp, nextState]);\n return nextState;\n },\n /**\n * Short for \"take transitions\", will take as many sequential transitions as\n * the length of the given input and returns the\n * resulting final state.\n * @param {string | string[]} input\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of token groups\n * @returns {State} taken after the given input\n */\n ts(input, next, flags, groups) {\n let state = this;\n const len = input.length;\n if (!len) {\n return state;\n }\n for (let i = 0; i < len - 1; i++) {\n state = state.tt(input[i]);\n }\n return state.tt(input[len - 1], next, flags, groups);\n },\n /**\n * Short for \"take transition\", this is a method for building/working with\n * state machines.\n *\n * If a state already exists for the given input, returns it.\n *\n * If a token is specified, that state will emit that token when reached by\n * the linkify engine.\n *\n * If no state exists, it will be initialized with some default transitions\n * that resemble existing default transitions.\n *\n * If a state is given for the second argument, that state will be\n * transitioned to on the given input regardless of what that input\n * previously did.\n *\n * Specify a token group flags to define groups that this token belongs to.\n * The token will be added to corresponding entires in the given groups\n * object.\n *\n * @param {string} input character, token type to transition on\n * @param {T | State} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections} [groups] Master list of groups\n * @returns {State} taken after the given input\n */\n tt(input, next, flags, groups) {\n groups = groups || State.groups;\n const state = this;\n\n // Check if existing state given, just a basic transition\n if (next && next.j) {\n state.j[input] = next;\n return next;\n }\n const t = next;\n\n // Take the transition with the usual default mechanisms and use that as\n // a template for creating the next state\n let nextState,\n templateState = state.go(input);\n if (templateState) {\n nextState = new State();\n assign(nextState.j, templateState.j);\n nextState.jr.push.apply(nextState.jr, templateState.jr);\n nextState.jd = templateState.jd;\n nextState.t = templateState.t;\n } else {\n nextState = new State();\n }\n if (t) {\n // Ensure newly token is in the same groups as the old token\n if (groups) {\n if (nextState.t && typeof nextState.t === 'string') {\n const allFlags = assign(flagsForToken(nextState.t, groups), flags);\n addToGroups(t, allFlags, groups);\n } else if (flags) {\n addToGroups(t, flags, groups);\n }\n }\n nextState.t = t; // overwrite anything that was previously there\n }\n state.j[input] = nextState;\n return nextState;\n }\n};\n\n// Helper functions to improve minification (not exported outside linkifyjs module)\n\n/**\n * @template T\n * @param {State} state\n * @param {string | string[]} input\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {RegExp} regexp\n * @param {T | State} [next]\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {string | string[]} input\n * @param {T | State} [next]\n * @param {Flags} [flags]\n * @param {Collections} [groups]\n */\nconst ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State} state\n * @param {string} input\n * @param {T | State} [next]\n * @param {Collections} [groups]\n * @param {Flags} [flags]\n */\nconst tt = (state, input, next, flags, groups) => state.tt(input, next, flags, groups);\n\n/******************************************************************************\nText Tokens\nIdentifiers for token outputs from the regexp scanner\n******************************************************************************/\n\n// A valid web domain token\nconst WORD = 'WORD'; // only contains a-z\nconst UWORD = 'UWORD'; // contains letters other than a-z, used for IDN\nconst ASCIINUMERICAL = 'ASCIINUMERICAL'; // contains a-z, 0-9\nconst ALPHANUMERICAL = 'ALPHANUMERICAL'; // contains numbers and letters other than a-z, used for IDN\n\n// Special case of word\nconst LOCALHOST = 'LOCALHOST';\n\n// Valid top-level domain, special case of WORD (see tlds.js)\nconst TLD = 'TLD';\n\n// Valid IDN TLD, special case of UWORD (see tlds.js)\nconst UTLD = 'UTLD';\n\n// The scheme portion of a web URI protocol. Supported types include: `mailto`,\n// `file`, and user-defined custom protocols. Limited to schemes that contain\n// only letters\nconst SCHEME = 'SCHEME';\n\n// Similar to SCHEME, except makes distinction for schemes that must always be\n// followed by `://`, not just `:`. Supported types include `http`, `https`,\n// `ftp`, `ftps`\nconst SLASH_SCHEME = 'SLASH_SCHEME';\n\n// Any sequence of digits 0-9\nconst NUM = 'NUM';\n\n// Any number of consecutive whitespace characters that are not newline\nconst WS = 'WS';\n\n// New line (unix style)\nconst NL = 'NL'; // \\n\n\n// Opening/closing bracket classes\n// TODO: Rename OPEN -> LEFT and CLOSE -> RIGHT in v5 to fit with Unicode names\n// Also rename angle brackes to LESSTHAN and GREATER THAN\nconst OPENBRACE = 'OPENBRACE'; // {\nconst CLOSEBRACE = 'CLOSEBRACE'; // }\nconst OPENBRACKET = 'OPENBRACKET'; // [\nconst CLOSEBRACKET = 'CLOSEBRACKET'; // ]\nconst OPENPAREN = 'OPENPAREN'; // (\nconst CLOSEPAREN = 'CLOSEPAREN'; // )\nconst OPENANGLEBRACKET = 'OPENANGLEBRACKET'; // <\nconst CLOSEANGLEBRACKET = 'CLOSEANGLEBRACKET'; // >\nconst FULLWIDTHLEFTPAREN = 'FULLWIDTHLEFTPAREN'; // (\nconst FULLWIDTHRIGHTPAREN = 'FULLWIDTHRIGHTPAREN'; // )\nconst LEFTCORNERBRACKET = 'LEFTCORNERBRACKET'; // 「\nconst RIGHTCORNERBRACKET = 'RIGHTCORNERBRACKET'; // 」\nconst LEFTWHITECORNERBRACKET = 'LEFTWHITECORNERBRACKET'; // 『\nconst RIGHTWHITECORNERBRACKET = 'RIGHTWHITECORNERBRACKET'; // 』\nconst FULLWIDTHLESSTHAN = 'FULLWIDTHLESSTHAN'; // <\nconst FULLWIDTHGREATERTHAN = 'FULLWIDTHGREATERTHAN'; // >\n\n// Various symbols\nconst AMPERSAND = 'AMPERSAND'; // &\nconst APOSTROPHE = 'APOSTROPHE'; // '\nconst ASTERISK = 'ASTERISK'; // *\nconst AT = 'AT'; // @\nconst BACKSLASH = 'BACKSLASH'; // \\\nconst BACKTICK = 'BACKTICK'; // `\nconst CARET = 'CARET'; // ^\nconst COLON = 'COLON'; // :\nconst COMMA = 'COMMA'; // ,\nconst DOLLAR = 'DOLLAR'; // $\nconst DOT = 'DOT'; // .\nconst EQUALS = 'EQUALS'; // =\nconst EXCLAMATION = 'EXCLAMATION'; // !\nconst HYPHEN = 'HYPHEN'; // -\nconst PERCENT = 'PERCENT'; // %\nconst PIPE = 'PIPE'; // |\nconst PLUS = 'PLUS'; // +\nconst POUND = 'POUND'; // #\nconst QUERY = 'QUERY'; // ?\nconst QUOTE = 'QUOTE'; // \"\nconst FULLWIDTHMIDDLEDOT = 'FULLWIDTHMIDDLEDOT'; // ・\n\nconst SEMI = 'SEMI'; // ;\nconst SLASH = 'SLASH'; // /\nconst TILDE = 'TILDE'; // ~\nconst UNDERSCORE = 'UNDERSCORE'; // _\n\n// Emoji symbol\nconst EMOJI$1 = 'EMOJI';\n\n// Default token - anything that is not one of the above\nconst SYM = 'SYM';\n\nvar tk = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tWORD: WORD,\n\tUWORD: UWORD,\n\tASCIINUMERICAL: ASCIINUMERICAL,\n\tALPHANUMERICAL: ALPHANUMERICAL,\n\tLOCALHOST: LOCALHOST,\n\tTLD: TLD,\n\tUTLD: UTLD,\n\tSCHEME: SCHEME,\n\tSLASH_SCHEME: SLASH_SCHEME,\n\tNUM: NUM,\n\tWS: WS,\n\tNL: NL,\n\tOPENBRACE: OPENBRACE,\n\tCLOSEBRACE: CLOSEBRACE,\n\tOPENBRACKET: OPENBRACKET,\n\tCLOSEBRACKET: CLOSEBRACKET,\n\tOPENPAREN: OPENPAREN,\n\tCLOSEPAREN: CLOSEPAREN,\n\tOPENANGLEBRACKET: OPENANGLEBRACKET,\n\tCLOSEANGLEBRACKET: CLOSEANGLEBRACKET,\n\tFULLWIDTHLEFTPAREN: FULLWIDTHLEFTPAREN,\n\tFULLWIDTHRIGHTPAREN: FULLWIDTHRIGHTPAREN,\n\tLEFTCORNERBRACKET: LEFTCORNERBRACKET,\n\tRIGHTCORNERBRACKET: RIGHTCORNERBRACKET,\n\tLEFTWHITECORNERBRACKET: LEFTWHITECORNERBRACKET,\n\tRIGHTWHITECORNERBRACKET: RIGHTWHITECORNERBRACKET,\n\tFULLWIDTHLESSTHAN: FULLWIDTHLESSTHAN,\n\tFULLWIDTHGREATERTHAN: FULLWIDTHGREATERTHAN,\n\tAMPERSAND: AMPERSAND,\n\tAPOSTROPHE: APOSTROPHE,\n\tASTERISK: ASTERISK,\n\tAT: AT,\n\tBACKSLASH: BACKSLASH,\n\tBACKTICK: BACKTICK,\n\tCARET: CARET,\n\tCOLON: COLON,\n\tCOMMA: COMMA,\n\tDOLLAR: DOLLAR,\n\tDOT: DOT,\n\tEQUALS: EQUALS,\n\tEXCLAMATION: EXCLAMATION,\n\tHYPHEN: HYPHEN,\n\tPERCENT: PERCENT,\n\tPIPE: PIPE,\n\tPLUS: PLUS,\n\tPOUND: POUND,\n\tQUERY: QUERY,\n\tQUOTE: QUOTE,\n\tFULLWIDTHMIDDLEDOT: FULLWIDTHMIDDLEDOT,\n\tSEMI: SEMI,\n\tSLASH: SLASH,\n\tTILDE: TILDE,\n\tUNDERSCORE: UNDERSCORE,\n\tEMOJI: EMOJI$1,\n\tSYM: SYM\n});\n\n// Note that these two Unicode ones expand into a really big one with Babel\nconst ASCII_LETTER = /[a-z]/;\nconst LETTER = /\\p{L}/u; // Any Unicode character with letter data type\nconst EMOJI = /\\p{Emoji}/u; // Any Unicode emoji character\nconst EMOJI_VARIATION$1 = /\\ufe0f/;\nconst DIGIT = /\\d/;\nconst SPACE = /\\s/;\n\nvar regexp = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tASCII_LETTER: ASCII_LETTER,\n\tLETTER: LETTER,\n\tEMOJI: EMOJI,\n\tEMOJI_VARIATION: EMOJI_VARIATION$1,\n\tDIGIT: DIGIT,\n\tSPACE: SPACE\n});\n\n/**\n\tThe scanner provides an interface that takes a string of text as input, and\n\toutputs an array of tokens instances that can be used for easy URL parsing.\n*/\nconst CR = '\\r'; // carriage-return character\nconst LF = '\\n'; // line-feed character\nconst EMOJI_VARIATION = '\\ufe0f'; // Variation selector, follows heart and others\nconst EMOJI_JOINER = '\\u200d'; // zero-width joiner\nconst OBJECT_REPLACEMENT = '\\ufffc'; // whitespace placeholder that sometimes appears in rich text editors\n\nlet tlds = null,\n utlds = null; // don't change so only have to be computed once\n\n/**\n * Scanner output token:\n * - `t` is the token name (e.g., 'NUM', 'EMOJI', 'TLD')\n * - `v` is the value of the token (e.g., '123', '❤️', 'com')\n * - `s` is the start index of the token in the original string\n * - `e` is the end index of the token in the original string\n * @typedef {{t: string, v: string, s: number, e: number}} Token\n */\n\n/**\n * @template T\n * @typedef {{ [collection: string]: T[] }} Collections\n */\n\n/**\n * Initialize the scanner character-based state machine for the given start\n * state\n * @param {[string, boolean][]} customSchemes List of custom schemes, where each\n * item is a length-2 tuple with the first element set to the string scheme, and\n * the second element set to `true` if the `://` after the scheme is optional\n */\nfunction init$2(customSchemes = []) {\n // Frequently used states (name argument removed during minification)\n /** @type Collections */\n const groups = {}; // of tokens\n State.groups = groups;\n /** @type State */\n const Start = new State();\n if (tlds == null) {\n tlds = decodeTlds(encodedTlds);\n }\n if (utlds == null) {\n utlds = decodeTlds(encodedUtlds);\n }\n\n // States for special URL symbols that accept immediately after start\n tt(Start, \"'\", APOSTROPHE);\n tt(Start, '{', OPENBRACE);\n tt(Start, '}', CLOSEBRACE);\n tt(Start, '[', OPENBRACKET);\n tt(Start, ']', CLOSEBRACKET);\n tt(Start, '(', OPENPAREN);\n tt(Start, ')', CLOSEPAREN);\n tt(Start, '<', OPENANGLEBRACKET);\n tt(Start, '>', CLOSEANGLEBRACKET);\n tt(Start, '(', FULLWIDTHLEFTPAREN);\n tt(Start, ')', FULLWIDTHRIGHTPAREN);\n tt(Start, '「', LEFTCORNERBRACKET);\n tt(Start, '」', RIGHTCORNERBRACKET);\n tt(Start, '『', LEFTWHITECORNERBRACKET);\n tt(Start, '』', RIGHTWHITECORNERBRACKET);\n tt(Start, '<', FULLWIDTHLESSTHAN);\n tt(Start, '>', FULLWIDTHGREATERTHAN);\n tt(Start, '&', AMPERSAND);\n tt(Start, '*', ASTERISK);\n tt(Start, '@', AT);\n tt(Start, '`', BACKTICK);\n tt(Start, '^', CARET);\n tt(Start, ':', COLON);\n tt(Start, ',', COMMA);\n tt(Start, '$', DOLLAR);\n tt(Start, '.', DOT);\n tt(Start, '=', EQUALS);\n tt(Start, '!', EXCLAMATION);\n tt(Start, '-', HYPHEN);\n tt(Start, '%', PERCENT);\n tt(Start, '|', PIPE);\n tt(Start, '+', PLUS);\n tt(Start, '#', POUND);\n tt(Start, '?', QUERY);\n tt(Start, '\"', QUOTE);\n tt(Start, '/', SLASH);\n tt(Start, ';', SEMI);\n tt(Start, '~', TILDE);\n tt(Start, '_', UNDERSCORE);\n tt(Start, '\\\\', BACKSLASH);\n tt(Start, '・', FULLWIDTHMIDDLEDOT);\n const Num = tr(Start, DIGIT, NUM, {\n [numeric]: true\n });\n tr(Num, DIGIT, Num);\n const Asciinumeric = tr(Num, ASCII_LETTER, ASCIINUMERICAL, {\n [asciinumeric]: true\n });\n const Alphanumeric = tr(Num, LETTER, ALPHANUMERICAL, {\n [alphanumeric]: true\n });\n\n // State which emits a word token\n const Word = tr(Start, ASCII_LETTER, WORD, {\n [ascii]: true\n });\n tr(Word, DIGIT, Asciinumeric);\n tr(Word, ASCII_LETTER, Word);\n tr(Asciinumeric, DIGIT, Asciinumeric);\n tr(Asciinumeric, ASCII_LETTER, Asciinumeric);\n\n // Same as previous, but specific to non-fsm.ascii alphabet words\n const UWord = tr(Start, LETTER, UWORD, {\n [alpha]: true\n });\n tr(UWord, ASCII_LETTER); // Non-accepting\n tr(UWord, DIGIT, Alphanumeric);\n tr(UWord, LETTER, UWord);\n tr(Alphanumeric, DIGIT, Alphanumeric);\n tr(Alphanumeric, ASCII_LETTER); // Non-accepting\n tr(Alphanumeric, LETTER, Alphanumeric); // Non-accepting\n\n // Whitespace jumps\n // Tokens of only non-newline whitespace are arbitrarily long\n // If any whitespace except newline, more whitespace!\n const Nl = tt(Start, LF, NL, {\n [whitespace]: true\n });\n const Cr = tt(Start, CR, WS, {\n [whitespace]: true\n });\n const Ws = tr(Start, SPACE, WS, {\n [whitespace]: true\n });\n tt(Start, OBJECT_REPLACEMENT, Ws);\n tt(Cr, LF, Nl); // \\r\\n\n tt(Cr, OBJECT_REPLACEMENT, Ws);\n tr(Cr, SPACE, Ws);\n tt(Ws, CR); // non-accepting state to avoid mixing whitespaces\n tt(Ws, LF); // non-accepting state to avoid mixing whitespaces\n tr(Ws, SPACE, Ws);\n tt(Ws, OBJECT_REPLACEMENT, Ws);\n\n // Emoji tokens. They are not grouped by the scanner except in cases where a\n // zero-width joiner is present\n const Emoji = tr(Start, EMOJI, EMOJI$1, {\n [emoji]: true\n });\n tt(Emoji, '#'); // no transition, emoji regex seems to match #\n tr(Emoji, EMOJI, Emoji);\n tt(Emoji, EMOJI_VARIATION, Emoji);\n // tt(Start, EMOJI_VARIATION, Emoji); // This one is sketchy\n\n const EmojiJoiner = tt(Emoji, EMOJI_JOINER);\n tt(EmojiJoiner, '#');\n tr(EmojiJoiner, EMOJI, Emoji);\n // tt(EmojiJoiner, EMOJI_VARIATION, Emoji); // also sketchy\n\n // Generates states for top-level domains\n // Note that this is most accurate when tlds are in alphabetical order\n const wordjr = [[ASCII_LETTER, Word], [DIGIT, Asciinumeric]];\n const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord], [DIGIT, Alphanumeric]];\n for (let i = 0; i < tlds.length; i++) {\n fastts(Start, tlds[i], TLD, WORD, wordjr);\n }\n for (let i = 0; i < utlds.length; i++) {\n fastts(Start, utlds[i], UTLD, UWORD, uwordjr);\n }\n addToGroups(TLD, {\n tld: true,\n ascii: true\n }, groups);\n addToGroups(UTLD, {\n utld: true,\n alpha: true\n }, groups);\n\n // Collect the states generated by different protocols. NOTE: If any new TLDs\n // get added that are also protocols, set the token to be the same as the\n // protocol to ensure parsing works as expected.\n fastts(Start, 'file', SCHEME, WORD, wordjr);\n fastts(Start, 'mailto', SCHEME, WORD, wordjr);\n fastts(Start, 'http', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'https', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'ftp', SLASH_SCHEME, WORD, wordjr);\n fastts(Start, 'ftps', SLASH_SCHEME, WORD, wordjr);\n addToGroups(SCHEME, {\n scheme: true,\n ascii: true\n }, groups);\n addToGroups(SLASH_SCHEME, {\n slashscheme: true,\n ascii: true\n }, groups);\n\n // Register custom schemes. Assumes each scheme is asciinumeric with hyphens\n customSchemes = customSchemes.sort((a, b) => a[0] > b[0] ? 1 : -1);\n for (let i = 0; i < customSchemes.length; i++) {\n const sch = customSchemes[i][0];\n const optionalSlashSlash = customSchemes[i][1];\n const flags = optionalSlashSlash ? {\n [scheme]: true\n } : {\n [slashscheme]: true\n };\n if (sch.indexOf('-') >= 0) {\n flags[domain] = true;\n } else if (!ASCII_LETTER.test(sch)) {\n flags[numeric] = true; // numbers only\n } else if (DIGIT.test(sch)) {\n flags[asciinumeric] = true;\n } else {\n flags[ascii] = true;\n }\n ts(Start, sch, sch, flags);\n }\n\n // Localhost token\n ts(Start, 'localhost', LOCALHOST, {\n ascii: true\n });\n\n // Set default transition for start state (some symbol)\n Start.jd = new State(SYM);\n return {\n start: Start,\n tokens: assign({\n groups\n }, tk)\n };\n}\n\n/**\n\tGiven a string, returns an array of TOKEN instances representing the\n\tcomposition of that string.\n\n\t@method run\n\t@param {State} start scanner starting state\n\t@param {string} str input string to scan\n\t@return {Token[]} list of tokens, each with a type and value\n*/\nfunction run$1(start, str) {\n // State machine is not case sensitive, so input is tokenized in lowercased\n // form (still returns regular case). Uses selective `toLowerCase` because\n // lowercasing the entire string causes the length and character position to\n // vary in some non-English strings with V8-based runtimes.\n const iterable = stringToArray(str.replace(/[A-Z]/g, c => c.toLowerCase()));\n const charCount = iterable.length; // <= len if there are emojis, etc\n const tokens = []; // return value\n\n // cursor through the string itself, accounting for characters that have\n // width with length 2 such as emojis\n let cursor = 0;\n\n // Cursor through the array-representation of the string\n let charCursor = 0;\n\n // Tokenize the string\n while (charCursor < charCount) {\n let state = start;\n let nextState = null;\n let tokenLength = 0;\n let latestAccepting = null;\n let sinceAccepts = -1;\n let charsSinceAccepts = -1;\n while (charCursor < charCount && (nextState = state.go(iterable[charCursor]))) {\n state = nextState;\n\n // Keep track of the latest accepting state\n if (state.accepts()) {\n sinceAccepts = 0;\n charsSinceAccepts = 0;\n latestAccepting = state;\n } else if (sinceAccepts >= 0) {\n sinceAccepts += iterable[charCursor].length;\n charsSinceAccepts++;\n }\n tokenLength += iterable[charCursor].length;\n cursor += iterable[charCursor].length;\n charCursor++;\n }\n\n // Roll back to the latest accepting state\n cursor -= sinceAccepts;\n charCursor -= charsSinceAccepts;\n tokenLength -= sinceAccepts;\n\n // No more jumps, just make a new token from the last accepting one\n tokens.push({\n t: latestAccepting.t,\n // token type/name\n v: str.slice(cursor - tokenLength, cursor),\n // string value\n s: cursor - tokenLength,\n // start index\n e: cursor // end index (excluding)\n });\n }\n return tokens;\n}\n\n/**\n * Convert a String to an Array of characters, taking into account that some\n * characters like emojis take up two string indexes.\n *\n * Adapted from core-js (MIT license)\n * https://github.com/zloirock/core-js/blob/2d69cf5f99ab3ea3463c395df81e5a15b68f49d9/packages/core-js/internals/string-multibyte.js\n *\n * @function stringToArray\n * @param {string} str\n * @returns {string[]}\n */\nfunction stringToArray(str) {\n const result = [];\n const len = str.length;\n let index = 0;\n while (index < len) {\n let first = str.charCodeAt(index);\n let second;\n let char = first < 0xd800 || first > 0xdbff || index + 1 === len || (second = str.charCodeAt(index + 1)) < 0xdc00 || second > 0xdfff ? str[index] // single character\n : str.slice(index, index + 2); // two-index characters\n result.push(char);\n index += char.length;\n }\n return result;\n}\n\n/**\n * Fast version of ts function for when transition defaults are well known\n * @param {State} state\n * @param {string} input\n * @param {string} t\n * @param {string} defaultt\n * @param {[RegExp, State][]} jr\n * @returns {State}\n */\nfunction fastts(state, input, t, defaultt, jr) {\n let next;\n const len = input.length;\n for (let i = 0; i < len - 1; i++) {\n const char = input[i];\n if (state.j[char]) {\n next = state.j[char];\n } else {\n next = new State(defaultt);\n next.jr = jr.slice();\n state.j[char] = next;\n }\n state = next;\n }\n next = new State(t);\n next.jr = jr.slice();\n state.j[input[len - 1]] = next;\n return next;\n}\n\n/**\n * Converts a string of Top-Level Domain names encoded in update-tlds.js back\n * into a list of strings.\n * @param {str} encoded encoded TLDs string\n * @returns {str[]} original TLDs list\n */\nfunction decodeTlds(encoded) {\n const words = [];\n const stack = [];\n let i = 0;\n let digits = '0123456789';\n while (i < encoded.length) {\n let popDigitCount = 0;\n while (digits.indexOf(encoded[i + popDigitCount]) >= 0) {\n popDigitCount++; // encountered some digits, have to pop to go one level up trie\n }\n if (popDigitCount > 0) {\n words.push(stack.join('')); // whatever preceded the pop digits must be a word\n for (let popCount = parseInt(encoded.substring(i, i + popDigitCount), 10); popCount > 0; popCount--) {\n stack.pop();\n }\n i += popDigitCount;\n } else {\n stack.push(encoded[i]); // drop down a level into the trie\n i++;\n }\n }\n return words;\n}\n\n/**\n * An object where each key is a valid DOM Event Name such as `click` or `focus`\n * and each value is an event handler function.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Element#events\n * @typedef {?{ [event: string]: Function }} EventListeners\n */\n\n/**\n * All formatted properties required to render a link, including `tagName`,\n * `attributes`, `content` and `eventListeners`.\n * @typedef {{ tagName: any, attributes: {[attr: string]: any}, content: string,\n * eventListeners: EventListeners }} IntermediateRepresentation\n */\n\n/**\n * Specify either an object described by the template type `O` or a function.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `O`\n * @template O\n * @typedef {O | ((value: string, type: string, token: MultiToken) => O)} OptObj\n */\n\n/**\n * Specify either a function described by template type `F` or an object.\n *\n * Each key in the object should be a link type (`'url'`, `'hashtag`', etc.). Each\n * value should be a function with template type `F` that is called when the\n * corresponding link type is encountered.\n * @template F\n * @typedef {F | { [type: string]: F}} OptFn\n */\n\n/**\n * Specify either a value with template type `V`, a function that returns `V` or\n * an object where each value resolves to `V`.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `V`\n *\n * For the object, each key should be a link type (`'url'`, `'hashtag`', etc.).\n * Each value should either have type `V` or a function that returns V. This\n * function similarly takes a string value and a token.\n *\n * Example valid types for `Opt`:\n *\n * ```js\n * 'hello'\n * (value, type, token) => 'world'\n * { url: 'hello', email: (value, token) => 'world'}\n * ```\n * @template V\n * @typedef {V | ((value: string, type: string, token: MultiToken) => V) | { [type: string]: V | ((value: string, token: MultiToken) => V) }} Opt\n */\n\n/**\n * See available options: https://linkify.js.org/docs/options.html\n * @typedef {{\n * \tdefaultProtocol?: string,\n * events?: OptObj,\n * \tformat?: Opt,\n * \tformatHref?: Opt,\n * \tnl2br?: boolean,\n * \ttagName?: Opt,\n * \ttarget?: Opt,\n * \trel?: Opt,\n * \tvalidate?: Opt,\n * \ttruncate?: Opt,\n * \tclassName?: Opt,\n * \tattributes?: OptObj<({ [attr: string]: any })>,\n * ignoreTags?: string[],\n * \trender?: OptFn<((ir: IntermediateRepresentation) => any)>\n * }} Opts\n */\n\n/**\n * @type Required\n */\nconst defaults = {\n defaultProtocol: 'http',\n events: null,\n format: noop,\n formatHref: noop,\n nl2br: false,\n tagName: 'a',\n target: null,\n rel: null,\n validate: true,\n truncate: Infinity,\n className: null,\n attributes: null,\n ignoreTags: [],\n render: null\n};\n\n/**\n * Utility class for linkify interfaces to apply specified\n * {@link Opts formatting and rendering options}.\n *\n * @param {Opts | Options} [opts] Option value overrides.\n * @param {(ir: IntermediateRepresentation) => any} [defaultRender] (For\n * internal use) default render function that determines how to generate an\n * HTML element based on a link token's derived tagName, attributes and HTML.\n * Similar to render option\n */\nfunction Options(opts, defaultRender = null) {\n let o = assign({}, defaults);\n if (opts) {\n o = assign(o, opts instanceof Options ? opts.o : opts);\n }\n\n // Ensure all ignored tags are uppercase\n const ignoredTags = o.ignoreTags;\n const uppercaseIgnoredTags = [];\n for (let i = 0; i < ignoredTags.length; i++) {\n uppercaseIgnoredTags.push(ignoredTags[i].toUpperCase());\n }\n /** @protected */\n this.o = o;\n if (defaultRender) {\n this.defaultRender = defaultRender;\n }\n this.ignoreTags = uppercaseIgnoredTags;\n}\nOptions.prototype = {\n o: defaults,\n /**\n * @type string[]\n */\n ignoreTags: [],\n /**\n * @param {IntermediateRepresentation} ir\n * @returns {any}\n */\n defaultRender(ir) {\n return ir;\n },\n /**\n * Returns true or false based on whether a token should be displayed as a\n * link based on the user options.\n * @param {MultiToken} token\n * @returns {boolean}\n */\n check(token) {\n return this.get('validate', token.toString(), token);\n },\n // Private methods\n\n /**\n * Resolve an option's value based on the value of the option and the given\n * params. If operator and token are specified and the target option is\n * callable, automatically calls the function with the given argument.\n * @template {keyof Opts} K\n * @param {K} key Name of option to use\n * @param {string} [operator] will be passed to the target option if it's a\n * function. If not specified, RAW function value gets returned\n * @param {MultiToken} [token] The token from linkify.tokenize\n * @returns {Opts[K] | any}\n */\n get(key, operator, token) {\n const isCallable = operator != null;\n let option = this.o[key];\n if (!option) {\n return option;\n }\n if (typeof option === 'object') {\n option = token.t in option ? option[token.t] : defaults[key];\n if (typeof option === 'function' && isCallable) {\n option = option(operator, token);\n }\n } else if (typeof option === 'function' && isCallable) {\n option = option(operator, token.t, token);\n }\n return option;\n },\n /**\n * @template {keyof Opts} L\n * @param {L} key Name of options object to use\n * @param {string} [operator]\n * @param {MultiToken} [token]\n * @returns {Opts[L] | any}\n */\n getObj(key, operator, token) {\n let obj = this.o[key];\n if (typeof obj === 'function' && operator != null) {\n obj = obj(operator, token.t, token);\n }\n return obj;\n },\n /**\n * Convert the given token to a rendered element that may be added to the\n * calling-interface's DOM\n * @param {MultiToken} token Token to render to an HTML element\n * @returns {any} Render result; e.g., HTML string, DOM element, React\n * Component, etc.\n */\n render(token) {\n const ir = token.render(this); // intermediate representation\n const renderFn = this.get('render', null, token) || this.defaultRender;\n return renderFn(ir, token.t, token);\n }\n};\nfunction noop(val) {\n return val;\n}\n\nvar options = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tdefaults: defaults,\n\tOptions: Options,\n\tassign: assign\n});\n\n/******************************************************************************\n\tMulti-Tokens\n\tTokens composed of arrays of TextTokens\n******************************************************************************/\n\n/**\n * @param {string} value\n * @param {Token[]} tokens\n */\nfunction MultiToken(value, tokens) {\n this.t = 'token';\n this.v = value;\n this.tk = tokens;\n}\n\n/**\n * Abstract class used for manufacturing tokens of text tokens. That is rather\n * than the value for a token being a small string of text, it's value an array\n * of text tokens.\n *\n * Used for grouping together URLs, emails, hashtags, and other potential\n * creations.\n * @class MultiToken\n * @property {string} t\n * @property {string} v\n * @property {Token[]} tk\n * @abstract\n */\nMultiToken.prototype = {\n isLink: false,\n /**\n * Return the string this token represents.\n * @return {string}\n */\n toString() {\n return this.v;\n },\n /**\n * What should the value for this token be in the `href` HTML attribute?\n * Returns the `.toString` value by default.\n * @param {string} [scheme]\n * @return {string}\n */\n toHref(scheme) {\n return this.toString();\n },\n /**\n * @param {Options} options Formatting options\n * @returns {string}\n */\n toFormattedString(options) {\n const val = this.toString();\n const truncate = options.get('truncate', val, this);\n const formatted = options.get('format', val, this);\n return truncate && formatted.length > truncate ? formatted.substring(0, truncate) + '…' : formatted;\n },\n /**\n *\n * @param {Options} options\n * @returns {string}\n */\n toFormattedHref(options) {\n return options.get('formatHref', this.toHref(options.get('defaultProtocol')), this);\n },\n /**\n * The start index of this token in the original input string\n * @returns {number}\n */\n startIndex() {\n return this.tk[0].s;\n },\n /**\n * The end index of this token in the original input string (up to this\n * index but not including it)\n * @returns {number}\n */\n endIndex() {\n return this.tk[this.tk.length - 1].e;\n },\n /**\n \tReturns an object of relevant values for this token, which includes keys\n \t* type - Kind of token ('url', 'email', etc.)\n \t* value - Original text\n \t* href - The value that should be added to the anchor tag's href\n \t\tattribute\n \t\t@method toObject\n \t@param {string} [protocol] `'http'` by default\n */\n toObject(protocol = defaults.defaultProtocol) {\n return {\n type: this.t,\n value: this.toString(),\n isLink: this.isLink,\n href: this.toHref(protocol),\n start: this.startIndex(),\n end: this.endIndex()\n };\n },\n /**\n *\n * @param {Options} options Formatting option\n */\n toFormattedObject(options) {\n return {\n type: this.t,\n value: this.toFormattedString(options),\n isLink: this.isLink,\n href: this.toFormattedHref(options),\n start: this.startIndex(),\n end: this.endIndex()\n };\n },\n /**\n * Whether this token should be rendered as a link according to the given options\n * @param {Options} options\n * @returns {boolean}\n */\n validate(options) {\n return options.get('validate', this.toString(), this);\n },\n /**\n * Return an object that represents how this link should be rendered.\n * @param {Options} options Formattinng options\n */\n render(options) {\n const token = this;\n const href = this.toHref(options.get('defaultProtocol'));\n const formattedHref = options.get('formatHref', href, this);\n const tagName = options.get('tagName', href, token);\n const content = this.toFormattedString(options);\n const attributes = {};\n const className = options.get('className', href, token);\n const target = options.get('target', href, token);\n const rel = options.get('rel', href, token);\n const attrs = options.getObj('attributes', href, token);\n const eventListeners = options.getObj('events', href, token);\n attributes.href = formattedHref;\n if (className) {\n attributes.class = className;\n }\n if (target) {\n attributes.target = target;\n }\n if (rel) {\n attributes.rel = rel;\n }\n if (attrs) {\n assign(attributes, attrs);\n }\n return {\n tagName,\n attributes,\n content,\n eventListeners\n };\n }\n};\n\n/**\n * Create a new token that can be emitted by the parser state machine\n * @param {string} type readable type of the token\n * @param {object} props properties to assign or override, including isLink = true or false\n * @returns {new (value: string, tokens: Token[]) => MultiToken} new token class\n */\nfunction createTokenClass(type, props) {\n class Token extends MultiToken {\n constructor(value, tokens) {\n super(value, tokens);\n this.t = type;\n }\n }\n for (const p in props) {\n Token.prototype[p] = props[p];\n }\n Token.t = type;\n return Token;\n}\n\n/**\n\tRepresents a list of tokens making up a valid email address\n*/\nconst Email = createTokenClass('email', {\n isLink: true,\n toHref() {\n return 'mailto:' + this.toString();\n }\n});\n\n/**\n\tRepresents some plain text\n*/\nconst Text = createTokenClass('text');\n\n/**\n\tMulti-linebreak token - represents a line break\n\t@class Nl\n*/\nconst Nl = createTokenClass('nl');\n\n/**\n\tRepresents a list of text tokens making up a valid URL\n\t@class Url\n*/\nconst Url = createTokenClass('url', {\n isLink: true,\n /**\n \tLowercases relevant parts of the domain and adds the protocol if\n \trequired. Note that this will not escape unsafe HTML characters in the\n \tURL.\n \t\t@param {string} [scheme] default scheme (e.g., 'https')\n \t@return {string} the full href\n */\n toHref(scheme = defaults.defaultProtocol) {\n // Check if already has a prefix scheme\n return this.hasProtocol() ? this.v : `${scheme}://${this.v}`;\n },\n /**\n * Check whether this URL token has a protocol\n * @return {boolean}\n */\n hasProtocol() {\n const tokens = this.tk;\n return tokens.length >= 2 && tokens[0].t !== LOCALHOST && tokens[1].t === COLON;\n }\n});\n\nvar multi = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tMultiToken: MultiToken,\n\tBase: MultiToken,\n\tcreateTokenClass: createTokenClass,\n\tEmail: Email,\n\tText: Text,\n\tNl: Nl,\n\tUrl: Url\n});\n\n/**\n\tNot exactly parser, more like the second-stage scanner (although we can\n\ttheoretically hotswap the code here with a real parser in the future... but\n\tfor a little URL-finding utility abstract syntax trees may be a little\n\toverkill).\n\n\tURL format: http://en.wikipedia.org/wiki/URI_scheme\n\tEmail format: http://en.wikipedia.org/wiki/EmailAddress (links to RFC in\n\treference)\n\n\t@module linkify\n\t@submodule parser\n\t@main run\n*/\nconst makeState = arg => new State(arg);\n\n/**\n * Generate the parser multi token-based state machine\n * @param {{ groups: Collections }} tokens\n */\nfunction init$1({\n groups\n}) {\n // Types of characters the URL can definitely end in\n const qsAccepting = groups.domain.concat([AMPERSAND, ASTERISK, AT, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, NUM, PERCENT, PIPE, PLUS, POUND, SLASH, SYM, TILDE, UNDERSCORE]);\n\n // Types of tokens that can follow a URL and be part of the query string\n // but cannot be the very last characters\n // Characters that cannot appear in the URL at all should be excluded\n const qsNonAccepting = [COLON, COMMA, DOT, EXCLAMATION, PERCENT, QUERY, QUOTE, SEMI, OPENANGLEBRACKET, CLOSEANGLEBRACKET, OPENBRACE, CLOSEBRACE, CLOSEBRACKET, OPENBRACKET, OPENPAREN, CLOSEPAREN, FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN, LEFTCORNERBRACKET, RIGHTCORNERBRACKET, LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET, FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN];\n\n // For addresses without the mailto prefix\n // Tokens allowed in the localpart of the email\n const localpartAccepting = [AMPERSAND, APOSTROPHE, ASTERISK, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, OPENBRACE, CLOSEBRACE, PERCENT, PIPE, PLUS, POUND, QUERY, SLASH, SYM, TILDE, UNDERSCORE];\n\n // The universal starting state.\n /**\n * @type State\n */\n const Start = makeState();\n const Localpart = tt(Start, TILDE); // Local part of the email address\n ta(Localpart, localpartAccepting, Localpart);\n ta(Localpart, groups.domain, Localpart);\n const Domain = makeState(),\n Scheme = makeState(),\n SlashScheme = makeState();\n ta(Start, groups.domain, Domain); // parsed string ends with a potential domain name (A)\n ta(Start, groups.scheme, Scheme); // e.g., 'mailto'\n ta(Start, groups.slashscheme, SlashScheme); // e.g., 'http'\n\n ta(Domain, localpartAccepting, Localpart);\n ta(Domain, groups.domain, Domain);\n const LocalpartAt = tt(Domain, AT); // Local part of the email address plus @\n\n tt(Localpart, AT, LocalpartAt); // close to an email address now\n\n // Local part of an email address can be e.g. 'http' or 'mailto'\n tt(Scheme, AT, LocalpartAt);\n tt(SlashScheme, AT, LocalpartAt);\n const LocalpartDot = tt(Localpart, DOT); // Local part of the email address plus '.' (localpart cannot end in .)\n ta(LocalpartDot, localpartAccepting, Localpart);\n ta(LocalpartDot, groups.domain, Localpart);\n const EmailDomain = makeState();\n ta(LocalpartAt, groups.domain, EmailDomain); // parsed string starts with local email info + @ with a potential domain name\n ta(EmailDomain, groups.domain, EmailDomain);\n const EmailDomainDot = tt(EmailDomain, DOT); // domain followed by DOT\n ta(EmailDomainDot, groups.domain, EmailDomain);\n const Email$1 = makeState(Email); // Possible email address (could have more tlds)\n ta(EmailDomainDot, groups.tld, Email$1);\n ta(EmailDomainDot, groups.utld, Email$1);\n tt(LocalpartAt, LOCALHOST, Email$1);\n\n // Hyphen can jump back to a domain name\n const EmailDomainHyphen = tt(EmailDomain, HYPHEN); // parsed string starts with local email info + @ with a potential domain name\n tt(EmailDomainHyphen, HYPHEN, EmailDomainHyphen);\n ta(EmailDomainHyphen, groups.domain, EmailDomain);\n ta(Email$1, groups.domain, EmailDomain);\n tt(Email$1, DOT, EmailDomainDot);\n tt(Email$1, HYPHEN, EmailDomainHyphen);\n\n // Final possible email states\n const EmailColon = tt(Email$1, COLON); // URL followed by colon (potential port number here)\n /*const EmailColonPort = */\n ta(EmailColon, groups.numeric, Email); // URL followed by colon and port number\n\n // Account for dots and hyphens. Hyphens are usually parts of domain names\n // (but not TLDs)\n const DomainHyphen = tt(Domain, HYPHEN); // domain followed by hyphen\n const DomainDot = tt(Domain, DOT); // domain followed by DOT\n tt(DomainHyphen, HYPHEN, DomainHyphen);\n ta(DomainHyphen, groups.domain, Domain);\n ta(DomainDot, localpartAccepting, Localpart);\n ta(DomainDot, groups.domain, Domain);\n const DomainDotTld = makeState(Url); // Simplest possible URL with no query string\n ta(DomainDot, groups.tld, DomainDotTld);\n ta(DomainDot, groups.utld, DomainDotTld);\n ta(DomainDotTld, groups.domain, Domain);\n ta(DomainDotTld, localpartAccepting, Localpart);\n tt(DomainDotTld, DOT, DomainDot);\n tt(DomainDotTld, HYPHEN, DomainHyphen);\n tt(DomainDotTld, AT, LocalpartAt);\n const DomainDotTldColon = tt(DomainDotTld, COLON); // URL followed by colon (potential port number here)\n const DomainDotTldColonPort = makeState(Url); // TLD followed by a port number\n ta(DomainDotTldColon, groups.numeric, DomainDotTldColonPort);\n\n // Long URL with optional port and maybe query string\n const Url$1 = makeState(Url);\n\n // URL with extra symbols at the end, followed by an opening bracket\n const UrlNonaccept = makeState(); // URL followed by some symbols (will not be part of the final URL)\n\n // Query strings\n ta(Url$1, qsAccepting, Url$1);\n ta(Url$1, qsNonAccepting, UrlNonaccept);\n ta(UrlNonaccept, qsAccepting, Url$1);\n ta(UrlNonaccept, qsNonAccepting, UrlNonaccept);\n\n // Become real URLs after `SLASH` or `COLON NUM SLASH`\n // Here works with or without scheme:// prefix\n tt(DomainDotTld, SLASH, Url$1);\n tt(DomainDotTldColonPort, SLASH, Url$1);\n\n // Note that domains that begin with schemes are treated slighly differently\n const SchemeColon = tt(Scheme, COLON); // e.g., 'mailto:'\n const SlashSchemeColon = tt(SlashScheme, COLON); // e.g., 'http:'\n const SlashSchemeColonSlash = tt(SlashSchemeColon, SLASH); // e.g., 'http:/'\n\n const UriPrefix = tt(SlashSchemeColonSlash, SLASH); // e.g., 'http://'\n\n // Scheme states can transition to domain states\n ta(Scheme, groups.domain, Domain);\n tt(Scheme, DOT, DomainDot);\n tt(Scheme, HYPHEN, DomainHyphen);\n ta(SlashScheme, groups.domain, Domain);\n tt(SlashScheme, DOT, DomainDot);\n tt(SlashScheme, HYPHEN, DomainHyphen);\n\n // Force URL with scheme prefix followed by anything sane\n ta(SchemeColon, groups.domain, Url$1);\n tt(SchemeColon, SLASH, Url$1);\n tt(SchemeColon, QUERY, Url$1);\n ta(UriPrefix, groups.domain, Url$1);\n ta(UriPrefix, qsAccepting, Url$1);\n tt(UriPrefix, SLASH, Url$1);\n const bracketPairs = [[OPENBRACE, CLOSEBRACE],\n // {}\n [OPENBRACKET, CLOSEBRACKET],\n // []\n [OPENPAREN, CLOSEPAREN],\n // ()\n [OPENANGLEBRACKET, CLOSEANGLEBRACKET],\n // <>\n [FULLWIDTHLEFTPAREN, FULLWIDTHRIGHTPAREN],\n // ()\n [LEFTCORNERBRACKET, RIGHTCORNERBRACKET],\n // 「」\n [LEFTWHITECORNERBRACKET, RIGHTWHITECORNERBRACKET],\n // 『』\n [FULLWIDTHLESSTHAN, FULLWIDTHGREATERTHAN] // <>\n ];\n for (let i = 0; i < bracketPairs.length; i++) {\n const [OPEN, CLOSE] = bracketPairs[i];\n const UrlOpen = tt(Url$1, OPEN); // URL followed by open bracket\n\n // Continue not accepting for open brackets\n tt(UrlNonaccept, OPEN, UrlOpen);\n\n // Closing bracket component. This character WILL be included in the URL\n tt(UrlOpen, CLOSE, Url$1);\n\n // URL that beings with an opening bracket, followed by a symbols.\n // Note that the final state can still be `UrlOpen` (if the URL has a\n // single opening bracket for some reason).\n const UrlOpenQ = makeState(Url);\n ta(UrlOpen, qsAccepting, UrlOpenQ);\n const UrlOpenSyms = makeState(); // UrlOpen followed by some symbols it cannot end it\n ta(UrlOpen, qsNonAccepting);\n\n // URL that begins with an opening bracket, followed by some symbols\n ta(UrlOpenQ, qsAccepting, UrlOpenQ);\n ta(UrlOpenQ, qsNonAccepting, UrlOpenSyms);\n ta(UrlOpenSyms, qsAccepting, UrlOpenQ);\n ta(UrlOpenSyms, qsNonAccepting, UrlOpenSyms);\n\n // Close brace/bracket to become regular URL\n tt(UrlOpenQ, CLOSE, Url$1);\n tt(UrlOpenSyms, CLOSE, Url$1);\n }\n tt(Start, LOCALHOST, DomainDotTld); // localhost is a valid URL state\n tt(Start, NL, Nl); // single new line\n\n return {\n start: Start,\n tokens: tk\n };\n}\n\n/**\n * Run the parser state machine on a list of scanned string-based tokens to\n * create a list of multi tokens, each of which represents a URL, email address,\n * plain text, etc.\n *\n * @param {State} start parser start state\n * @param {string} input the original input used to generate the given tokens\n * @param {Token[]} tokens list of scanned tokens\n * @returns {MultiToken[]}\n */\nfunction run(start, input, tokens) {\n let len = tokens.length;\n let cursor = 0;\n let multis = [];\n let textTokens = [];\n while (cursor < len) {\n let state = start;\n let secondState = null;\n let nextState = null;\n let multiLength = 0;\n let latestAccepting = null;\n let sinceAccepts = -1;\n while (cursor < len && !(secondState = state.go(tokens[cursor].t))) {\n // Starting tokens with nowhere to jump to.\n // Consider these to be just plain text\n textTokens.push(tokens[cursor++]);\n }\n while (cursor < len && (nextState = secondState || state.go(tokens[cursor].t))) {\n // Get the next state\n secondState = null;\n state = nextState;\n\n // Keep track of the latest accepting state\n if (state.accepts()) {\n sinceAccepts = 0;\n latestAccepting = state;\n } else if (sinceAccepts >= 0) {\n sinceAccepts++;\n }\n cursor++;\n multiLength++;\n }\n if (sinceAccepts < 0) {\n // No accepting state was found, part of a regular text token add\n // the first text token to the text tokens array and try again from\n // the next\n cursor -= multiLength;\n if (cursor < len) {\n textTokens.push(tokens[cursor]);\n cursor++;\n }\n } else {\n // Accepting state!\n // First close off the textTokens (if available)\n if (textTokens.length > 0) {\n multis.push(initMultiToken(Text, input, textTokens));\n textTokens = [];\n }\n\n // Roll back to the latest accepting state\n cursor -= sinceAccepts;\n multiLength -= sinceAccepts;\n\n // Create a new multitoken\n const Multi = latestAccepting.t;\n const subtokens = tokens.slice(cursor - multiLength, cursor);\n multis.push(initMultiToken(Multi, input, subtokens));\n }\n }\n\n // Finally close off the textTokens (if available)\n if (textTokens.length > 0) {\n multis.push(initMultiToken(Text, input, textTokens));\n }\n return multis;\n}\n\n/**\n * Utility function for instantiating a new multitoken with all the relevant\n * fields during parsing.\n * @param {new (value: string, tokens: Token[]) => MultiToken} Multi class to instantiate\n * @param {string} input original input string\n * @param {Token[]} tokens consecutive tokens scanned from input string\n * @returns {MultiToken}\n */\nfunction initMultiToken(Multi, input, tokens) {\n const startIdx = tokens[0].s;\n const endIdx = tokens[tokens.length - 1].e;\n const value = input.slice(startIdx, endIdx);\n return new Multi(value, tokens);\n}\n\nconst warn = typeof console !== 'undefined' && console && console.warn || (() => {});\nconst warnAdvice = 'until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.';\n\n// Side-effect initialization state\nconst INIT = {\n scanner: null,\n parser: null,\n tokenQueue: [],\n pluginQueue: [],\n customSchemes: [],\n initialized: false\n};\n\n/**\n * @typedef {{\n * \tstart: State,\n * \ttokens: { groups: Collections } & typeof tk\n * }} ScannerInit\n */\n\n/**\n * @typedef {{\n * \tstart: State,\n * \ttokens: typeof multi\n * }} ParserInit\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit }) => void} TokenPlugin\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit, parser: ParserInit }) => void} Plugin\n */\n\n/**\n * De-register all plugins and reset the internal state-machine. Used for\n * testing; not required in practice.\n * @private\n */\nfunction reset() {\n State.groups = {};\n INIT.scanner = null;\n INIT.parser = null;\n INIT.tokenQueue = [];\n INIT.pluginQueue = [];\n INIT.customSchemes = [];\n INIT.initialized = false;\n return INIT;\n}\n\n/**\n * Register a token plugin to allow the scanner to recognize additional token\n * types before the parser state machine is constructed from the results.\n * @param {string} name of plugin to register\n * @param {TokenPlugin} plugin function that accepts the scanner state machine\n * and available scanner tokens and collections and extends the state machine to\n * recognize additional tokens or groups.\n */\nfunction registerTokenPlugin(name, plugin) {\n if (typeof plugin !== 'function') {\n throw new Error(`linkifyjs: Invalid token plugin ${plugin} (expects function)`);\n }\n for (let i = 0; i < INIT.tokenQueue.length; i++) {\n if (name === INIT.tokenQueue[i][0]) {\n warn(`linkifyjs: token plugin \"${name}\" already registered - will be overwritten`);\n INIT.tokenQueue[i] = [name, plugin];\n return;\n }\n }\n INIT.tokenQueue.push([name, plugin]);\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register token plugin \"${name}\" ${warnAdvice}`);\n }\n}\n\n/**\n * Register a linkify plugin\n * @param {string} name of plugin to register\n * @param {Plugin} plugin function that accepts the parser state machine and\n * extends the parser to recognize additional link types\n */\nfunction registerPlugin(name, plugin) {\n if (typeof plugin !== 'function') {\n throw new Error(`linkifyjs: Invalid plugin ${plugin} (expects function)`);\n }\n for (let i = 0; i < INIT.pluginQueue.length; i++) {\n if (name === INIT.pluginQueue[i][0]) {\n warn(`linkifyjs: plugin \"${name}\" already registered - will be overwritten`);\n INIT.pluginQueue[i] = [name, plugin];\n return;\n }\n }\n INIT.pluginQueue.push([name, plugin]);\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register plugin \"${name}\" ${warnAdvice}`);\n }\n}\n\n/**\n * Detect URLs with the following additional protocol. Anything with format\n * \"protocol://...\" will be considered a link. If `optionalSlashSlash` is set to\n * `true`, anything with format \"protocol:...\" will be considered a link.\n * @param {string} scheme\n * @param {boolean} [optionalSlashSlash]\n */\nfunction registerCustomProtocol(scheme, optionalSlashSlash = false) {\n if (INIT.initialized) {\n warn(`linkifyjs: already initialized - will not register custom scheme \"${scheme}\" ${warnAdvice}`);\n }\n if (!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(scheme)) {\n throw new Error(`linkifyjs: incorrect scheme format.\n1. Must only contain digits, lowercase ASCII letters or \"-\"\n2. Cannot start or end with \"-\"\n3. \"-\" cannot repeat`);\n }\n INIT.customSchemes.push([scheme, optionalSlashSlash]);\n}\n\n/**\n * Initialize the linkify state machine. Called automatically the first time\n * linkify is called on a string, but may be called manually as well.\n */\nfunction init() {\n // Initialize scanner state machine and plugins\n INIT.scanner = init$2(INIT.customSchemes);\n for (let i = 0; i < INIT.tokenQueue.length; i++) {\n INIT.tokenQueue[i][1]({\n scanner: INIT.scanner\n });\n }\n\n // Initialize parser state machine and plugins\n INIT.parser = init$1(INIT.scanner.tokens);\n for (let i = 0; i < INIT.pluginQueue.length; i++) {\n INIT.pluginQueue[i][1]({\n scanner: INIT.scanner,\n parser: INIT.parser\n });\n }\n INIT.initialized = true;\n return INIT;\n}\n\n/**\n * Parse a string into tokens that represent linkable and non-linkable sub-components\n * @param {string} str\n * @return {MultiToken[]} tokens\n */\nfunction tokenize(str) {\n if (!INIT.initialized) {\n init();\n }\n return run(INIT.parser.start, str, run$1(INIT.scanner.start, str));\n}\ntokenize.scan = run$1; // for testing\n\n/**\n * Find a list of linkable items in the given string.\n * @param {string} str string to find links in\n * @param {string | Opts} [type] either formatting options or specific type of\n * links to find, e.g., 'url' or 'email'\n * @param {Opts} [opts] formatting options for final output. Cannot be specified\n * if opts already provided in `type` argument\n */\nfunction find(str, type = null, opts = null) {\n if (type && typeof type === 'object') {\n if (opts) {\n throw Error(`linkifyjs: Invalid link type ${type}; must be a string`);\n }\n opts = type;\n type = null;\n }\n const options = new Options(opts);\n const tokens = tokenize(str);\n const filtered = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.isLink && (!type || token.t === type) && options.check(token)) {\n filtered.push(token.toFormattedObject(options));\n }\n }\n return filtered;\n}\n\n/**\n * Is the given string valid linkable text of some sort. Note that this does not\n * trim the text for you.\n *\n * Optionally pass in a second `type` param, which is the type of link to test\n * for.\n *\n * For example,\n *\n * linkify.test(str, 'email');\n *\n * Returns `true` if str is a valid email.\n * @param {string} str string to test for links\n * @param {string} [type] optional specific link type to look for\n * @returns boolean true/false\n */\nfunction test(str, type = null) {\n const tokens = tokenize(str);\n return tokens.length === 1 && tokens[0].isLink && (!type || tokens[0].t === type);\n}\n\nexport { MultiToken, Options, State, createTokenClass, find, init, multi, options, regexp, registerCustomProtocol, registerPlugin, registerTokenPlugin, reset, stringToArray, test, multi as text, tokenize };\n"],"names":["encodedTlds","encodedUtlds","assign","target","properties","key","numeric","ascii","alpha","asciinumeric","alphanumeric","domain","emoji","scheme","slashscheme","whitespace","registerGroup","name","groups","addToGroups","t","flags","k","group","indexOf","push","State","token","this","j","jr","jd","prototype","accepts","go","input","state","nextState","i","length","regex","test","has","exactOnly","ta","inputs","next","tt","tr","regexp","ts","len","templateState","apply","allFlags","result","c","flagsForToken","WORD","UWORD","ASCIINUMERICAL","ALPHANUMERICAL","LOCALHOST","TLD","UTLD","SCHEME","SLASH_SCHEME","NUM","WS","NL","OPENBRACE","CLOSEBRACE","OPENBRACKET","CLOSEBRACKET","OPENPAREN","CLOSEPAREN","OPENANGLEBRACKET","CLOSEANGLEBRACKET","FULLWIDTHLEFTPAREN","FULLWIDTHRIGHTPAREN","LEFTCORNERBRACKET","RIGHTCORNERBRACKET","LEFTWHITECORNERBRACKET","RIGHTWHITECORNERBRACKET","FULLWIDTHLESSTHAN","FULLWIDTHGREATERTHAN","AMPERSAND","APOSTROPHE","ASTERISK","AT","BACKSLASH","BACKTICK","CARET","COLON","COMMA","DOLLAR","DOT","EQUALS","EXCLAMATION","HYPHEN","PERCENT","PIPE","PLUS","POUND","QUERY","QUOTE","FULLWIDTHMIDDLEDOT","SEMI","SLASH","TILDE","UNDERSCORE","EMOJI$1","SYM","tk","Object","freeze","__proto__","EMOJI","ASCII_LETTER","LETTER","DIGIT","SPACE","CR","LF","EMOJI_VARIATION","EMOJI_JOINER","OBJECT_REPLACEMENT","tlds","utlds","run$1","start","str","iterable","index","second","first","charCodeAt","char","slice","stringToArray","replace","toLowerCase","charCount","tokens","cursor","charCursor","tokenLength","latestAccepting","sinceAccepts","charsSinceAccepts","v","s","e","fastts","defaultt","decodeTlds","encoded","words","stack","popDigitCount","join","popCount","parseInt","substring","pop","defaults","defaultProtocol","events","format","noop","formatHref","nl2br","tagName","rel","validate","truncate","Infinity","className","attributes","ignoreTags","render","Options","opts","defaultRender","o","ignoredTags","uppercaseIgnoredTags","toUpperCase","val","ir","check","get","toString","operator","isCallable","option","getObj","obj","MultiToken","value","createTokenClass","type","props","Token","constructor","super","p","isLink","toHref","toFormattedString","options","formatted","toFormattedHref","startIndex","endIndex","toObject","protocol","href","end","toFormattedObject","formattedHref","content","attrs","eventListeners","class","Email","Text","Nl","Url","hasProtocol","makeState","arg","initMultiToken","Multi","startIdx","endIdx","console","warn","INIT","scanner","parser","tokenQueue","pluginQueue","customSchemes","initialized","init","Start","Num","Asciinumeric","Alphanumeric","Word","UWord","Cr","Ws","Emoji","EmojiJoiner","wordjr","uwordjr","tld","utld","sort","a","b","sch","init$2","qsAccepting","concat","qsNonAccepting","localpartAccepting","Localpart","Domain","Scheme","SlashScheme","LocalpartAt","LocalpartDot","EmailDomain","EmailDomainDot","Email$1","EmailDomainHyphen","EmailColon","DomainHyphen","DomainDot","DomainDotTld","DomainDotTldColon","DomainDotTldColonPort","Url$1","UrlNonaccept","SchemeColon","SlashSchemeColon","SlashSchemeColonSlash","UriPrefix","bracketPairs","OPEN","CLOSE","UrlOpen","UrlOpenQ","UrlOpenSyms","init$1","tokenize","multis","textTokens","secondState","multiLength","subtokens","run","scan"],"sourceRoot":""}