{"version":3,"file":"053bf45.js","mappings":"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","sources":["webpack://nuxt-app/./node_modules/linkifyjs/dist/linkify.es.js","webpack://nuxt-app/./node_modules/linkify-string/dist/linkify-string.es.js","webpack://nuxt-app/./node_modules/@bufbuild/protobuf/dist/esm/wkt/timestamp.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} 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) {\n if (token === void 0) {\n token = null;\n }\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) {\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 | 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\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\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 */\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 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} 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} 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\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) {\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 }} 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\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} 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}\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","import { Options, tokenize } from 'linkifyjs';\n\n/**\n\tConvert strings of text into linkable HTML text\n*/\nfunction escapeText(text) {\n return text.replace(/&/g, '&').replace(//g, '>');\n}\nfunction escapeAttr(href) {\n return href.replace(/\"/g, '"');\n}\nfunction attributesToString(attributes) {\n const result = [];\n for (const attr in attributes) {\n let val = attributes[attr] + '';\n result.push(`${attr}=\"${escapeAttr(val)}\"`);\n }\n return result.join(' ');\n}\nfunction defaultRender(_ref) {\n let {\n tagName,\n attributes,\n content\n } = _ref;\n return `<${tagName} ${attributesToString(attributes)}>${escapeText(content)}`;\n}\n\n/**\n * Convert a plan text string to an HTML string with links. Expects that the\n * given strings does not contain any HTML entities. Use the linkify-html\n * interface if you need to parse HTML entities.\n *\n * @param {string} str string to linkify\n * @param {import('linkifyjs').Opts} [opts] overridable options\n * @returns {string}\n */\nfunction linkifyStr(str, opts) {\n if (opts === void 0) {\n opts = {};\n }\n opts = new Options(opts, defaultRender);\n const tokens = tokenize(str);\n const result = [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (token.t === 'nl' && opts.get('nl2br')) {\n result.push('
\\n');\n } else if (!token.isLink || !opts.check(token)) {\n result.push(escapeText(token.toString()));\n } else {\n result.push(opts.render(token));\n }\n }\n return result.join('');\n}\nif (!String.prototype.linkify) {\n Object.defineProperty(String.prototype, 'linkify', {\n writable: false,\n value: function linkify(options) {\n return linkifyStr(this, options);\n }\n });\n}\n\nexport { linkifyStr as default };\n","// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport { TimestampSchema } from \"./gen/google/protobuf/timestamp_pb.js\";\nimport { create } from \"../create.js\";\nimport { protoInt64 } from \"../proto-int64.js\";\n/**\n * Create a google.protobuf.Timestamp for the current time.\n */\nexport function timestampNow() {\n return timestampFromDate(new Date());\n}\n/**\n * Create a google.protobuf.Timestamp message from an ECMAScript Date.\n */\nexport function timestampFromDate(date) {\n return timestampFromMs(date.getTime());\n}\n/**\n * Convert a google.protobuf.Timestamp message to an ECMAScript Date.\n */\nexport function timestampDate(timestamp) {\n return new Date(timestampMs(timestamp));\n}\n/**\n * Create a google.protobuf.Timestamp message from a Unix timestamp in milliseconds.\n */\nexport function timestampFromMs(timestampMs) {\n return create(TimestampSchema, {\n seconds: protoInt64.parse(Math.floor(timestampMs / 1000)),\n nanos: (timestampMs % 1000) * 1000000,\n });\n}\n/**\n * Convert a google.protobuf.Timestamp to a Unix timestamp in milliseconds.\n */\nexport function timestampMs(timestamp) {\n return (Number(timestamp.seconds) * 1000 + Math.ceil(timestamp.nanos / 1000000));\n}\n"],"names":["encodedTlds","encodedUtlds","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","regex","exactOnly","inputs","next","i","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","EMOJI_VARIATION$1","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","options","MultiToken","value","truncate","formatted","protocol","href","formattedHref","tagName","content","attributes","className","rel","attrs","eventListeners","createTokenClass","type","props","Token","p","Email","Text","Nl","Url","multi","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","registerTokenPlugin","plugin","registerPlugin","registerCustomProtocol","optionalSlashSlash","init","tokenize","find","filtered","test","escapeText","text","escapeAttr","attributesToString","attr","linkifyStr","timestampNow","timestampFromDate","date","timestampFromMs","timestampDate","timestamp","timestampMs"],"sourceRoot":""}