{"version":3,"file":"linkify.es-2810ab8e.js","sources":["../../../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 = 'aaa1rp3bb0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4vianca6w0s2x0a2z0ure5ba0by2idu3namex3narepublic11d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2ntley5rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re3c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y3k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0cast4mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking4l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dabur3d1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t1u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d1tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0ardian6cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0els3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6logistics9properties14fh2g1h1i0a1ds2m1ndle4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3ncaster6d0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4k2psy3ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic4v1w1x1y1z2na0b1goya4me2tura4vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rton4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9dnavy5lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0america6xi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0a1b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp2w2ell3ia1ksha5oes2p0ping5uji3w3i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4finity6ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2';\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<T>} 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<T>} 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<T>} 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) {\n if (token === void 0) {\n token = null;\n }\n // this.n = null; // DEBUG: State name\n /** @type {{ [input: string]: State<T> }} j */\n this.j = {}; // IMPLEMENTATION 1\n // this.j = []; // IMPLEMENTATION 2\n /** @type {[RegExp, State<T>][]} jr */\n this.jr = [];\n /** @type {?State<T>} jd */\n this.jd = null;\n /** @type {?T} t */\n this.t = token;\n}\n\n/**\n * Scanner token groups\n * @type Collections<string>\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<T>} 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) {\n if (exactOnly === void 0) {\n exactOnly = false;\n }\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<T> | State<T>} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections<T>} [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<T>} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections<T>} [groups] Master list of token groups\n * @returns {State<T>} 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<T>} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections<T>} [groups] Master list of token groups\n * @returns {State<T>} 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<T>} [next] Transition options\n * @param {Flags} [flags] Collections flags to add token to\n * @param {Collections<T>} [groups] Master list of groups\n * @returns {State<T>} 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\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<T>} state\n * @param {string | string[]} input\n * @param {Flags} [flags]\n * @param {Collections<T>} [groups]\n */\nconst ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {RegExp} regexp\n * @param {T | State<T>} [next]\n * @param {Flags} [flags]\n * @param {Collections<T>} [groups]\n */\nconst tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups);\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {string | string[]} input\n * @param {T | State<T>} [next]\n * @param {Flags} [flags]\n * @param {Collections<T>} [groups]\n */\nconst ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {string} input\n * @param {T | State<T>} [next]\n * @param {Collections<T>} [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\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$1 = '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'; // \"\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\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$1,\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\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 NL = '\\n'; // New line character\nconst EMOJI_VARIATION = '\\ufe0f'; // Variation selector, follows heart and others\nconst EMOJI_JOINER = '\\u200d'; // zero-width joiner\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 if (customSchemes === void 0) {\n customSchemes = [];\n }\n // Frequently used states (name argument removed during minification)\n /** @type Collections<string> */\n const groups = {}; // of tokens\n State.groups = groups;\n /** @type State<string> */\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 const Num = tr(Start, DIGIT, NUM, {\n [numeric]: true\n });\n tr(Num, DIGIT, Num);\n\n // State which emits a word token\n const Word = tr(Start, ASCII_LETTER, WORD, {\n [ascii]: true\n });\n tr(Word, ASCII_LETTER, Word);\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, LETTER, UWord);\n\n // Whitespace jumps\n // Tokens of only non-newline whitespace are arbitrarily long\n // If any whitespace except newline, more whitespace!\n const Ws = tr(Start, SPACE, WS, {\n [whitespace]: true\n });\n tt(Start, NL, NL$1, {\n [whitespace]: true\n });\n tt(Ws, NL); // non-accepting state to avoid mixing whitespaces\n tr(Ws, SPACE, 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 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 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]];\n const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord]];\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<string>} 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\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<string>} state\n * @param {string} input\n * @param {string} t\n * @param {string} defaultt\n * @param {[RegExp, State<string>][]} jr\n * @returns {State<string>}\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\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<string>`:\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<EventListeners>,\n * \tformat?: Opt<string>,\n * \tformatHref?: Opt<string>,\n * \tnl2br?: boolean,\n * \ttagName?: Opt<any>,\n * \ttarget?: Opt<string>,\n * \trel?: Opt<string>,\n * \tvalidate?: Opt<boolean>,\n * \ttruncate?: Opt<number>,\n * \tclassName?: Opt<string>,\n * \tattributes?: OptObj<({ [attr: string]: any })>,\n * ignoreTags?: string[],\n * \trender?: OptFn<((ir: IntermediateRepresentation) => any)>\n * }} Opts\n */\n\n/**\n * @type Required<Opts>\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) {\n if (defaultRender === void 0) {\n defaultRender = null;\n }\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) {\n if (protocol === void 0) {\n protocol = defaults.defaultProtocol;\n }\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) {\n if (scheme === void 0) {\n scheme = defaults.defaultProtocol;\n }\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<string> }} tokens\n */\nfunction init$1(_ref) {\n let {\n groups\n } = _ref;\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 = [APOSTROPHE, COLON, COMMA, DOT, EXCLAMATION, 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<Token>\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 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 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 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\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$1, 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<MultiToken>} 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<string>,\n * \ttokens: { groups: Collections<string> } & typeof tk\n * }} ScannerInit\n */\n\n/**\n * @typedef {{\n * \tstart: State<MultiToken>,\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}\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} protocol\n * @param {boolean} [optionalSlashSlash]\n */\nfunction registerCustomProtocol(scheme, optionalSlashSlash) {\n if (optionalSlashSlash === void 0) {\n optionalSlashSlash = false;\n }\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}\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}\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, opts) {\n if (type === void 0) {\n type = null;\n }\n if (opts === void 0) {\n opts = null;\n }\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) {\n if (type === void 0) {\n type = null;\n }\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, 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","flagsForToken","result","c","State","token","input","state","nextState","i","regex","exactOnly","inputs","next","regexp","len","templateState","allFlags","ta","tr","ts","tt","WORD","UWORD","LOCALHOST","TLD","UTLD","SCHEME","SLASH_SCHEME","NUM","WS","NL$1","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","SEMI","SLASH","TILDE","UNDERSCORE","EMOJI$1","SYM","tk","ASCII_LETTER","LETTER","EMOJI","DIGIT","SPACE","NL","EMOJI_VARIATION","EMOJI_JOINER","tlds","utlds","init$2","customSchemes","Start","decodeTlds","Num","Word","UWord","Ws","Emoji","EmojiJoiner","wordjr","uwordjr","fastts","a","b","sch","run$1","start","str","iterable","stringToArray","charCount","tokens","cursor","charCursor","tokenLength","latestAccepting","sinceAccepts","charsSinceAccepts","index","first","second","char","defaultt","jr","encoded","words","stack","digits","popDigitCount","popCount","defaults","noop","Options","opts","defaultRender","o","ignoredTags","uppercaseIgnoredTags","ir","operator","isCallable","option","obj","val","MultiToken","value","options","truncate","formatted","protocol","href","formattedHref","tagName","content","attributes","className","rel","attrs","eventListeners","createTokenClass","type","props","Token","p","Email","Text","Nl","Url","makeState","arg","init$1","_ref","qsAccepting","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","run","multis","textTokens","secondState","multiLength","initMultiToken","Multi","subtokens","startIdx","endIdx","warn","warnAdvice","INIT","reset","registerCustomProtocol","optionalSlashSlash","init","tokenize","find","filtered"],"mappings":"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","x_google_ignoreList":[0]}