{"version":3,"file":"guest-DXRYQidj.js","sources":["../../../node_modules/linkifyjs/dist/linkify.module.js","../../../node_modules/linkify-html/dist/linkify-html.module.js","../../../node_modules/cssfilter/lib/default.js","../../../node_modules/cssfilter/lib/util.js","../../../node_modules/cssfilter/lib/parser.js","../../../node_modules/cssfilter/lib/css.js","../../../node_modules/cssfilter/lib/index.js","../../../node_modules/xss/lib/util.js","../../../node_modules/xss/lib/default.js","../../../node_modules/xss/lib/parser.js","../../../node_modules/xss/lib/xss.js","../../../node_modules/xss/lib/index.js","../../../node_modules/vue-3-linkify/lib/main.js","../../../components/planner/app/javascript/guestStore.js","../../../components/planner/app/javascript/components/page/templates/GlobalTemplate0.vue","../../../components/planner/app/javascript/components/page/templates/GlobalTemplate1.vue","../../../components/planner/app/javascript/components/page/templates/GlobalTemplate2.vue","../../../components/planner/app/javascript/components/page/templates/GlobalTemplate3.vue","../../../components/planner/app/javascript/components/page/templates/GlobalTemplate4.vue","../../../components/planner/app/javascript/components/page/templates/GlobalTemplate5.vue","../../../components/planner/app/javascript/mixins/imageExists.js","../../../components/planner/app/javascript/components/page/templates/dates.js","../../../components/planner/app/javascript/components/page/ThemeImage.vue","../../../components/planner/app/javascript/components/page/templates/PageTemplate1.vue","../../../components/planner/app/javascript/components/page/templates/PageTemplate2.vue","../../../components/planner/app/javascript/components/page/templates/PageTemplate3.vue","../../../components/planner/app/javascript/components/page/templates/PageTemplate4.vue","../../../components/planner/app/javascript/components/page/templates/PageTemplate5.vue","../../../app/assets/images/papierlogo.svg?url","../../../components/planner/app/javascript/components/page/ResponseConfirmation.vue","../../../components/planner/app/javascript/api/guestSide.js","../../../components/planner/app/javascript/components/page/blocks/RsvpQuestion.vue","../../../components/planner/app/javascript/components/page/blocks/TextQuestion.vue","../../../components/planner/app/javascript/components/page/blocks/MultiQuestion.vue","../../../components/planner/app/javascript/components/page/blocks/AddressQuestion.vue","../../../components/planner/app/javascript/components/page/blocks/PlusOneNameQuestion.vue","../../../components/planner/app/javascript/components/page/PlusOneResponse.vue","../../../components/planner/app/javascript/components/page/Page.vue","../../../components/planner/app/javascript/components/page/ContactOrganiser.vue","../../../components/planner/app/javascript/components/page/GuestId.vue","../../../components/planner/app/javascript/pages/Guest.vue","../../../components/planner/app/javascript/guest.js"],"sourcesContent":["/**\n * Finite State Machine generation utilities\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 * @param {string|class} token to emit\n */\nfunction State(token) {\n  this.j = {}; // IMPLEMENTATION 1\n  // this.j = []; // IMPLEMENTATION 2\n\n  this.jr = [];\n  this.jd = null;\n  this.t = token;\n}\n/**\n * Take the transition from this state to the next one on the given input.\n * If this state does not exist deterministically, will create it.\n *\n * @param {string} input character or token to transition on\n * @param {string|class} [token] token or multi-token to emit when reaching\n * this state\n */\n\nState.prototype = {\n  /**\n   * @param {State} state\n   */\n  accepts: function accepts() {\n    return !!this.t;\n  },\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   * @param {string} input character or token to transition on\n   * @param {Token|State} tokenOrState transition to a matching state\n   * @returns State taken after the given input\n   */\n  tt: function tt(input, tokenOrState) {\n    if (tokenOrState && tokenOrState.j) {\n      // State, default a basic transition\n      this.j[input] = tokenOrState;\n      return tokenOrState;\n    } // See if there's a direct state transition (not regex or default)\n\n\n    var token = tokenOrState;\n    var nextState = this.j[input];\n\n    if (nextState) {\n      if (token) {\n        nextState.t = token;\n      } // overrwites previous token\n\n\n      return nextState;\n    } // Create a new state for this input\n\n\n    nextState = makeState(); // Take the transition using the usual default mechanisms\n\n    var templateState = takeT(this, input);\n\n    if (templateState) {\n      // Some default state transition, make a prime state based on this one\n      Object.assign(nextState.j, templateState.j);\n      nextState.jr.append(templateState.jr);\n      nextState.jr = templateState.jd;\n      nextState.t = token || templateState.t;\n    } else {\n      nextState.t = token;\n    }\n\n    this.j[input] = nextState;\n    return nextState;\n  }\n};\n/**\n * Utility function to create state without using new keyword (reduced file size\n * when minified)\n */\n\nvar makeState = function makeState() {\n  return new State();\n};\n/**\n * Similar to previous except it is an accepting state that emits a token\n * @param {Token} token\n */\n\nvar makeAcceptingState = function makeAcceptingState(token) {\n  return new State(token);\n};\n/**\n * Create a transition from startState to nextState via the given character\n * @param {State} startState transition from thie starting state\n * @param {Token} input via this input character or other concrete token type\n * @param {State} nextState to this next state\n */\n\nvar makeT = function makeT(startState, input, nextState) {\n  // IMPLEMENTATION 1: Add to object (fast)\n  if (!startState.j[input]) {\n    startState.j[input] = nextState;\n  } // IMPLEMENTATION 2: Add to array (slower)\n  // startState.j.push([input, nextState]);\n\n};\n/**\n *\n * @param {State} startState stransition from this starting state\n * @param {RegExp} regex Regular expression to match on input\n * @param {State} nextState transition to this next state if there's are regex match\n */\n\nvar makeRegexT = function makeRegexT(startState, regex, nextState) {\n  startState.jr.push([regex, nextState]);\n};\n/**\n * Follow the transition from the given character to the next state\n * @param {State} state\n * @param {Token} input character or other concrete token type to transition\n * @returns {?State} the next state, if any\n */\n\nvar takeT = function takeT(state, input) {\n  // IMPLEMENTATION 1: Object key lookup (faster)\n  var nextState = state.j[input];\n\n  if (nextState) {\n    return nextState;\n  } // IMPLEMENTATION 2: List lookup (slower)\n  // Loop through all the state transitions and see if there's a match\n  // for (let i = 0; i < state.j.length; i++) {\n  //\tconst val = state.j[i][0];\n  //\tconst nextState = state.j[i][1];\n  // \tif (input === val) { return nextState; }\n  // }\n\n\n  for (var i = 0; i < state.jr.length; i++) {\n    var regex = state.jr[i][0];\n    var _nextState = state.jr[i][1];\n\n    if (regex.test(input)) {\n      return _nextState;\n    }\n  } // Nowhere left to jump! Return default, if any\n\n\n  return state.jd;\n};\n/**\n * Similar to makeT, but takes a list of characters that all transition to the\n * same nextState startState\n * @param {State} startState\n * @param {Array} chars\n * @param {State} nextState\n */\n\nvar makeMultiT = function makeMultiT(startState, chars, nextState) {\n  for (var i = 0; i < chars.length; i++) {\n    makeT(startState, chars[i], nextState);\n  }\n};\n/**\n * Set up a list of multiple transitions at once. transitions is a list of\n * tuples, where the first element is the transitions character and the second\n * is the state to transition to\n * @param {State} startState\n * @param {Array} transitions\n */\n\nvar makeBatchT = function makeBatchT(startState, transitions) {\n  for (var i = 0; i < transitions.length; i++) {\n    var input = transitions[i][0];\n    var nextState = transitions[i][1];\n    makeT(startState, input, nextState);\n  }\n};\n/**\n * For state machines that transition on characters only; given a non-empty\n * target string, generates states (if required) for each consecutive substring\n * of characters starting from the beginning of the string. The final state will\n * have a special value, as specified in options. All other \"in between\"\n * substrings will have a default end state.\n *\n * This turns the state machine into a Trie-like data structure (rather than a\n * intelligently-designed DFA).\n * @param {State} state\n * @param {string} str\n * @param {Token} endStateFactory\n * @param {Token} defaultStateFactory\n */\n\nvar makeChainT = function makeChainT(state, str, endState, defaultStateFactory) {\n  var i = 0,\n      len = str.length,\n      nextState; // Find the next state without a jump to the next character\n\n  while (i < len && (nextState = state.j[str[i]])) {\n    state = nextState;\n    i++;\n  }\n\n  if (i >= len) {\n    return [];\n  } // no new tokens were added\n\n\n  while (i < len - 1) {\n    nextState = defaultStateFactory();\n    makeT(state, str[i], nextState);\n    state = nextState;\n    i++;\n  }\n\n  makeT(state, str[len - 1], endState);\n};\n\n/******************************************************************************\n\tText Tokens\n\tTokens composed of strings\n******************************************************************************/\n// A valid web domain token\nvar DOMAIN = 'DOMAIN';\nvar LOCALHOST = 'LOCALHOST'; // special case of domain\n// Valid top-level domain (see tlds.js)\n\nvar TLD = 'TLD'; // Any sequence of digits 0-9\n\nvar NUM = 'NUM'; // A web URL protocol. Supported types include\n// - `http:`\n// - `https:`\n// - `ftp:`\n// - `ftps:`\n// - user-defined custom protocols\n\nvar PROTOCOL = 'PROTOCOL'; // Start of the email URI protocol\n\nvar MAILTO = 'MAILTO'; // mailto:\n// Any number of consecutive whitespace characters that are not newline\n\nvar WS = 'WS'; // New line (unix style)\n\nvar NL = 'NL'; // \\n\n// Opening/closing bracket classes\n\nvar OPENBRACE = 'OPENBRACE'; // {\n\nvar OPENBRACKET = 'OPENBRACKET'; // [\n\nvar OPENANGLEBRACKET = 'OPENANGLEBRACKET'; // <\n\nvar OPENPAREN = 'OPENPAREN'; // (\n\nvar CLOSEBRACE = 'CLOSEBRACE'; // }\n\nvar CLOSEBRACKET = 'CLOSEBRACKET'; // ]\n\nvar CLOSEANGLEBRACKET = 'CLOSEANGLEBRACKET'; // >\n\nvar CLOSEPAREN = 'CLOSEPAREN'; // )\n// Various symbols\n\nvar AMPERSAND = 'AMPERSAND'; // &\n\nvar APOSTROPHE = 'APOSTROPHE'; // '\n\nvar ASTERISK = 'ASTERISK'; // *\n\nvar AT = 'AT'; // @\n\nvar BACKSLASH = 'BACKSLASH'; // \\\n\nvar BACKTICK = 'BACKTICK'; // `\n\nvar CARET = 'CARET'; // ^\n\nvar COLON = 'COLON'; // :\n\nvar COMMA = 'COMMA'; // ,\n\nvar DOLLAR = 'DOLLAR'; // $\n\nvar DOT = 'DOT'; // .\n\nvar EQUALS = 'EQUALS'; // =\n\nvar EXCLAMATION = 'EXCLAMATION'; // !\n\nvar HYPHEN = 'HYPHEN'; // -\n\nvar PERCENT = 'PERCENT'; // %\n\nvar PIPE = 'PIPE'; // |\n\nvar PLUS = 'PLUS'; // +\n\nvar POUND = 'POUND'; // #\n\nvar QUERY = 'QUERY'; // ?\n\nvar QUOTE = 'QUOTE'; // \"\n\nvar SEMI = 'SEMI'; // ;\n\nvar SLASH = 'SLASH'; // /\n\nvar TILDE = 'TILDE'; // ~\n\nvar UNDERSCORE = 'UNDERSCORE'; // _\n// Default token - anything that is not one of the above\n\nvar SYM = 'SYM';\n\nvar text = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tDOMAIN: DOMAIN,\n\tLOCALHOST: LOCALHOST,\n\tTLD: TLD,\n\tNUM: NUM,\n\tPROTOCOL: PROTOCOL,\n\tMAILTO: MAILTO,\n\tWS: WS,\n\tNL: NL,\n\tOPENBRACE: OPENBRACE,\n\tOPENBRACKET: OPENBRACKET,\n\tOPENANGLEBRACKET: OPENANGLEBRACKET,\n\tOPENPAREN: OPENPAREN,\n\tCLOSEBRACE: CLOSEBRACE,\n\tCLOSEBRACKET: CLOSEBRACKET,\n\tCLOSEANGLEBRACKET: CLOSEANGLEBRACKET,\n\tCLOSEPAREN: CLOSEPAREN,\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\tSYM: SYM\n});\n\n// NOTE: punycode versions of IDNs are not included here because these will not\n// be as commonly used without the http prefix anyway and linkify will already\n// force-encode those.\n// To be updated with the values in this list\n// http://data.iana.org/TLD/tlds-alpha-by-domain.txt\n// Version 2021022800, Last Updated Sun Feb 28 07:07:01 2021 UTC\nvar tlds = 'aaa \\\naarp \\\nabarth \\\nabb \\\nabbott \\\nabbvie \\\nabc \\\nable \\\nabogado \\\nabudhabi \\\nac \\\nacademy \\\naccenture \\\naccountant \\\naccountants \\\naco \\\nactor \\\nad \\\nadac \\\nads \\\nadult \\\nae \\\naeg \\\naero \\\naetna \\\naf \\\nafamilycompany \\\nafl \\\nafrica \\\nag \\\nagakhan \\\nagency \\\nai \\\naig \\\nairbus \\\nairforce \\\nairtel \\\nakdn \\\nal \\\nalfaromeo \\\nalibaba \\\nalipay \\\nallfinanz \\\nallstate \\\nally \\\nalsace \\\nalstom \\\nam \\\namazon \\\namericanexpress \\\namericanfamily \\\namex \\\namfam \\\namica \\\namsterdam \\\nanalytics \\\nandroid \\\nanquan \\\nanz \\\nao \\\naol \\\napartments \\\napp \\\napple \\\naq \\\naquarelle \\\nar \\\narab \\\naramco \\\narchi \\\narmy \\\narpa \\\nart \\\narte \\\nas \\\nasda \\\nasia \\\nassociates \\\nat \\\nathleta \\\nattorney \\\nau \\\nauction \\\naudi \\\naudible \\\naudio \\\nauspost \\\nauthor \\\nauto \\\nautos \\\navianca \\\naw \\\naws \\\nax \\\naxa \\\naz \\\nazure \\\nba \\\nbaby \\\nbaidu \\\nbanamex \\\nbananarepublic \\\nband \\\nbank \\\nbar \\\nbarcelona \\\nbarclaycard \\\nbarclays \\\nbarefoot \\\nbargains \\\nbaseball \\\nbasketball \\\nbauhaus \\\nbayern \\\nbb \\\nbbc \\\nbbt \\\nbbva \\\nbcg \\\nbcn \\\nbd \\\nbe \\\nbeats \\\nbeauty \\\nbeer \\\nbentley \\\nberlin \\\nbest \\\nbestbuy \\\nbet \\\nbf \\\nbg \\\nbh \\\nbharti \\\nbi \\\nbible \\\nbid \\\nbike \\\nbing \\\nbingo \\\nbio \\\nbiz \\\nbj \\\nblack \\\nblackfriday \\\nblockbuster \\\nblog \\\nbloomberg \\\nblue \\\nbm \\\nbms \\\nbmw \\\nbn \\\nbnpparibas \\\nbo \\\nboats \\\nboehringer \\\nbofa \\\nbom \\\nbond \\\nboo \\\nbook \\\nbooking \\\nbosch \\\nbostik \\\nboston \\\nbot \\\nboutique \\\nbox \\\nbr \\\nbradesco \\\nbridgestone \\\nbroadway \\\nbroker \\\nbrother \\\nbrussels \\\nbs \\\nbt \\\nbudapest \\\nbugatti \\\nbuild \\\nbuilders \\\nbusiness \\\nbuy \\\nbuzz \\\nbv \\\nbw \\\nby \\\nbz \\\nbzh \\\nca \\\ncab \\\ncafe \\\ncal \\\ncall \\\ncalvinklein \\\ncam \\\ncamera \\\ncamp \\\ncancerresearch \\\ncanon \\\ncapetown \\\ncapital \\\ncapitalone \\\ncar \\\ncaravan \\\ncards \\\ncare \\\ncareer \\\ncareers \\\ncars \\\ncasa \\\ncase \\\ncash \\\ncasino \\\ncat \\\ncatering \\\ncatholic \\\ncba \\\ncbn \\\ncbre \\\ncbs \\\ncc \\\ncd \\\ncenter \\\nceo \\\ncern \\\ncf \\\ncfa \\\ncfd \\\ncg \\\nch \\\nchanel \\\nchannel \\\ncharity \\\nchase \\\nchat \\\ncheap \\\nchintai \\\nchristmas \\\nchrome \\\nchurch \\\nci \\\ncipriani \\\ncircle \\\ncisco \\\ncitadel \\\nciti \\\ncitic \\\ncity \\\ncityeats \\\nck \\\ncl \\\nclaims \\\ncleaning \\\nclick \\\nclinic \\\nclinique \\\nclothing \\\ncloud \\\nclub \\\nclubmed \\\ncm \\\ncn \\\nco \\\ncoach \\\ncodes \\\ncoffee \\\ncollege \\\ncologne \\\ncom \\\ncomcast \\\ncommbank \\\ncommunity \\\ncompany \\\ncompare \\\ncomputer \\\ncomsec \\\ncondos \\\nconstruction \\\nconsulting \\\ncontact \\\ncontractors \\\ncooking \\\ncookingchannel \\\ncool \\\ncoop \\\ncorsica \\\ncountry \\\ncoupon \\\ncoupons \\\ncourses \\\ncpa \\\ncr \\\ncredit \\\ncreditcard \\\ncreditunion \\\ncricket \\\ncrown \\\ncrs \\\ncruise \\\ncruises \\\ncsc \\\ncu \\\ncuisinella \\\ncv \\\ncw \\\ncx \\\ncy \\\ncymru \\\ncyou \\\ncz \\\ndabur \\\ndad \\\ndance \\\ndata \\\ndate \\\ndating \\\ndatsun \\\nday \\\ndclk \\\ndds \\\nde \\\ndeal \\\ndealer \\\ndeals \\\ndegree \\\ndelivery \\\ndell \\\ndeloitte \\\ndelta \\\ndemocrat \\\ndental \\\ndentist \\\ndesi \\\ndesign \\\ndev \\\ndhl \\\ndiamonds \\\ndiet \\\ndigital \\\ndirect \\\ndirectory \\\ndiscount \\\ndiscover \\\ndish \\\ndiy \\\ndj \\\ndk \\\ndm \\\ndnp \\\ndo \\\ndocs \\\ndoctor \\\ndog \\\ndomains \\\ndot \\\ndownload \\\ndrive \\\ndtv \\\ndubai \\\nduck \\\ndunlop \\\ndupont \\\ndurban \\\ndvag \\\ndvr \\\ndz \\\nearth \\\neat \\\nec \\\neco \\\nedeka \\\nedu \\\neducation \\\nee \\\neg \\\nemail \\\nemerck \\\nenergy \\\nengineer \\\nengineering \\\nenterprises \\\nepson \\\nequipment \\\ner \\\nericsson \\\nerni \\\nes \\\nesq \\\nestate \\\net \\\netisalat \\\neu \\\neurovision \\\neus \\\nevents \\\nexchange \\\nexpert \\\nexposed \\\nexpress \\\nextraspace \\\nfage \\\nfail \\\nfairwinds \\\nfaith \\\nfamily \\\nfan \\\nfans \\\nfarm \\\nfarmers \\\nfashion \\\nfast \\\nfedex \\\nfeedback \\\nferrari \\\nferrero \\\nfi \\\nfiat \\\nfidelity \\\nfido \\\nfilm \\\nfinal \\\nfinance \\\nfinancial \\\nfire \\\nfirestone \\\nfirmdale \\\nfish \\\nfishing \\\nfit \\\nfitness \\\nfj \\\nfk \\\nflickr \\\nflights \\\nflir \\\nflorist \\\nflowers \\\nfly \\\nfm \\\nfo \\\nfoo \\\nfood \\\nfoodnetwork \\\nfootball \\\nford \\\nforex \\\nforsale \\\nforum \\\nfoundation \\\nfox \\\nfr \\\nfree \\\nfresenius \\\nfrl \\\nfrogans \\\nfrontdoor \\\nfrontier \\\nftr \\\nfujitsu \\\nfujixerox \\\nfun \\\nfund \\\nfurniture \\\nfutbol \\\nfyi \\\nga \\\ngal \\\ngallery \\\ngallo \\\ngallup \\\ngame \\\ngames \\\ngap \\\ngarden \\\ngay \\\ngb \\\ngbiz \\\ngd \\\ngdn \\\nge \\\ngea \\\ngent \\\ngenting \\\ngeorge \\\ngf \\\ngg \\\nggee \\\ngh \\\ngi \\\ngift \\\ngifts \\\ngives \\\ngiving \\\ngl \\\nglade \\\nglass \\\ngle \\\nglobal \\\nglobo \\\ngm \\\ngmail \\\ngmbh \\\ngmo \\\ngmx \\\ngn \\\ngodaddy \\\ngold \\\ngoldpoint \\\ngolf \\\ngoo \\\ngoodyear \\\ngoog \\\ngoogle \\\ngop \\\ngot \\\ngov \\\ngp \\\ngq \\\ngr \\\ngrainger \\\ngraphics \\\ngratis \\\ngreen \\\ngripe \\\ngrocery \\\ngroup \\\ngs \\\ngt \\\ngu \\\nguardian \\\ngucci \\\nguge \\\nguide \\\nguitars \\\nguru \\\ngw \\\ngy \\\nhair \\\nhamburg \\\nhangout \\\nhaus \\\nhbo \\\nhdfc \\\nhdfcbank \\\nhealth \\\nhealthcare \\\nhelp \\\nhelsinki \\\nhere \\\nhermes \\\nhgtv \\\nhiphop \\\nhisamitsu \\\nhitachi \\\nhiv \\\nhk \\\nhkt \\\nhm \\\nhn \\\nhockey \\\nholdings \\\nholiday \\\nhomedepot \\\nhomegoods \\\nhomes \\\nhomesense \\\nhonda \\\nhorse \\\nhospital \\\nhost \\\nhosting \\\nhot \\\nhoteles \\\nhotels \\\nhotmail \\\nhouse \\\nhow \\\nhr \\\nhsbc \\\nht \\\nhu \\\nhughes \\\nhyatt \\\nhyundai \\\nibm \\\nicbc \\\nice \\\nicu \\\nid \\\nie \\\nieee \\\nifm \\\nikano \\\nil \\\nim \\\nimamat \\\nimdb \\\nimmo \\\nimmobilien \\\nin \\\ninc \\\nindustries \\\ninfiniti \\\ninfo \\\ning \\\nink \\\ninstitute \\\ninsurance \\\ninsure \\\nint \\\ninternational \\\nintuit \\\ninvestments \\\nio \\\nipiranga \\\niq \\\nir \\\nirish \\\nis \\\nismaili \\\nist \\\nistanbul \\\nit \\\nitau \\\nitv \\\niveco \\\njaguar \\\njava \\\njcb \\\nje \\\njeep \\\njetzt \\\njewelry \\\njio \\\njll \\\njm \\\njmp \\\njnj \\\njo \\\njobs \\\njoburg \\\njot \\\njoy \\\njp \\\njpmorgan \\\njprs \\\njuegos \\\njuniper \\\nkaufen \\\nkddi \\\nke \\\nkerryhotels \\\nkerrylogistics \\\nkerryproperties \\\nkfh \\\nkg \\\nkh \\\nki \\\nkia \\\nkim \\\nkinder \\\nkindle \\\nkitchen \\\nkiwi \\\nkm \\\nkn \\\nkoeln \\\nkomatsu \\\nkosher \\\nkp \\\nkpmg \\\nkpn \\\nkr \\\nkrd \\\nkred \\\nkuokgroup \\\nkw \\\nky \\\nkyoto \\\nkz \\\nla \\\nlacaixa \\\nlamborghini \\\nlamer \\\nlancaster \\\nlancia \\\nland \\\nlandrover \\\nlanxess \\\nlasalle \\\nlat \\\nlatino \\\nlatrobe \\\nlaw \\\nlawyer \\\nlb \\\nlc \\\nlds \\\nlease \\\nleclerc \\\nlefrak \\\nlegal \\\nlego \\\nlexus \\\nlgbt \\\nli \\\nlidl \\\nlife \\\nlifeinsurance \\\nlifestyle \\\nlighting \\\nlike \\\nlilly \\\nlimited \\\nlimo \\\nlincoln \\\nlinde \\\nlink \\\nlipsy \\\nlive \\\nliving \\\nlixil \\\nlk \\\nllc \\\nllp \\\nloan \\\nloans \\\nlocker \\\nlocus \\\nloft \\\nlol \\\nlondon \\\nlotte \\\nlotto \\\nlove \\\nlpl \\\nlplfinancial \\\nlr \\\nls \\\nlt \\\nltd \\\nltda \\\nlu \\\nlundbeck \\\nluxe \\\nluxury \\\nlv \\\nly \\\nma \\\nmacys \\\nmadrid \\\nmaif \\\nmaison \\\nmakeup \\\nman \\\nmanagement \\\nmango \\\nmap \\\nmarket \\\nmarketing \\\nmarkets \\\nmarriott \\\nmarshalls \\\nmaserati \\\nmattel \\\nmba \\\nmc \\\nmckinsey \\\nmd \\\nme \\\nmed \\\nmedia \\\nmeet \\\nmelbourne \\\nmeme \\\nmemorial \\\nmen \\\nmenu \\\nmerckmsd \\\nmg \\\nmh \\\nmiami \\\nmicrosoft \\\nmil \\\nmini \\\nmint \\\nmit \\\nmitsubishi \\\nmk \\\nml \\\nmlb \\\nmls \\\nmm \\\nmma \\\nmn \\\nmo \\\nmobi \\\nmobile \\\nmoda \\\nmoe \\\nmoi \\\nmom \\\nmonash \\\nmoney \\\nmonster \\\nmormon \\\nmortgage \\\nmoscow \\\nmoto \\\nmotorcycles \\\nmov \\\nmovie \\\nmp \\\nmq \\\nmr \\\nms \\\nmsd \\\nmt \\\nmtn \\\nmtr \\\nmu \\\nmuseum \\\nmutual \\\nmv \\\nmw \\\nmx \\\nmy \\\nmz \\\nna \\\nnab \\\nnagoya \\\nname \\\nnationwide \\\nnatura \\\nnavy \\\nnba \\\nnc \\\nne \\\nnec \\\nnet \\\nnetbank \\\nnetflix \\\nnetwork \\\nneustar \\\nnew \\\nnews \\\nnext \\\nnextdirect \\\nnexus \\\nnf \\\nnfl \\\nng \\\nngo \\\nnhk \\\nni \\\nnico \\\nnike \\\nnikon \\\nninja \\\nnissan \\\nnissay \\\nnl \\\nno \\\nnokia \\\nnorthwesternmutual \\\nnorton \\\nnow \\\nnowruz \\\nnowtv \\\nnp \\\nnr \\\nnra \\\nnrw \\\nntt \\\nnu \\\nnyc \\\nnz \\\nobi \\\nobserver \\\noff \\\noffice \\\nokinawa \\\nolayan \\\nolayangroup \\\noldnavy \\\nollo \\\nom \\\nomega \\\none \\\nong \\\nonl \\\nonline \\\nonyourside \\\nooo \\\nopen \\\noracle \\\norange \\\norg \\\norganic \\\norigins \\\nosaka \\\notsuka \\\nott \\\novh \\\npa \\\npage \\\npanasonic \\\nparis \\\npars \\\npartners \\\nparts \\\nparty \\\npassagens \\\npay \\\npccw \\\npe \\\npet \\\npf \\\npfizer \\\npg \\\nph \\\npharmacy \\\nphd \\\nphilips \\\nphone \\\nphoto \\\nphotography \\\nphotos \\\nphysio \\\npics \\\npictet \\\npictures \\\npid \\\npin \\\nping \\\npink \\\npioneer \\\npizza \\\npk \\\npl \\\nplace \\\nplay \\\nplaystation \\\nplumbing \\\nplus \\\npm \\\npn \\\npnc \\\npohl \\\npoker \\\npolitie \\\nporn \\\npost \\\npr \\\npramerica \\\npraxi \\\npress \\\nprime \\\npro \\\nprod \\\nproductions \\\nprof \\\nprogressive \\\npromo \\\nproperties \\\nproperty \\\nprotection \\\npru \\\nprudential \\\nps \\\npt \\\npub \\\npw \\\npwc \\\npy \\\nqa \\\nqpon \\\nquebec \\\nquest \\\nqvc \\\nracing \\\nradio \\\nraid \\\nre \\\nread \\\nrealestate \\\nrealtor \\\nrealty \\\nrecipes \\\nred \\\nredstone \\\nredumbrella \\\nrehab \\\nreise \\\nreisen \\\nreit \\\nreliance \\\nren \\\nrent \\\nrentals \\\nrepair \\\nreport \\\nrepublican \\\nrest \\\nrestaurant \\\nreview \\\nreviews \\\nrexroth \\\nrich \\\nrichardli \\\nricoh \\\nril \\\nrio \\\nrip \\\nrmit \\\nro \\\nrocher \\\nrocks \\\nrodeo \\\nrogers \\\nroom \\\nrs \\\nrsvp \\\nru \\\nrugby \\\nruhr \\\nrun \\\nrw \\\nrwe \\\nryukyu \\\nsa \\\nsaarland \\\nsafe \\\nsafety \\\nsakura \\\nsale \\\nsalon \\\nsamsclub \\\nsamsung \\\nsandvik \\\nsandvikcoromant \\\nsanofi \\\nsap \\\nsarl \\\nsas \\\nsave \\\nsaxo \\\nsb \\\nsbi \\\nsbs \\\nsc \\\nsca \\\nscb \\\nschaeffler \\\nschmidt \\\nscholarships \\\nschool \\\nschule \\\nschwarz \\\nscience \\\nscjohnson \\\nscot \\\nsd \\\nse \\\nsearch \\\nseat \\\nsecure \\\nsecurity \\\nseek \\\nselect \\\nsener \\\nservices \\\nses \\\nseven \\\nsew \\\nsex \\\nsexy \\\nsfr \\\nsg \\\nsh \\\nshangrila \\\nsharp \\\nshaw \\\nshell \\\nshia \\\nshiksha \\\nshoes \\\nshop \\\nshopping \\\nshouji \\\nshow \\\nshowtime \\\nsi \\\nsilk \\\nsina \\\nsingles \\\nsite \\\nsj \\\nsk \\\nski \\\nskin \\\nsky \\\nskype \\\nsl \\\nsling \\\nsm \\\nsmart \\\nsmile \\\nsn \\\nsncf \\\nso \\\nsoccer \\\nsocial \\\nsoftbank \\\nsoftware \\\nsohu \\\nsolar \\\nsolutions \\\nsong \\\nsony \\\nsoy \\\nspa \\\nspace \\\nsport \\\nspot \\\nspreadbetting \\\nsr \\\nsrl \\\nss \\\nst \\\nstada \\\nstaples \\\nstar \\\nstatebank \\\nstatefarm \\\nstc \\\nstcgroup \\\nstockholm \\\nstorage \\\nstore \\\nstream \\\nstudio \\\nstudy \\\nstyle \\\nsu \\\nsucks \\\nsupplies \\\nsupply \\\nsupport \\\nsurf \\\nsurgery \\\nsuzuki \\\nsv \\\nswatch \\\nswiftcover \\\nswiss \\\nsx \\\nsy \\\nsydney \\\nsystems \\\nsz \\\ntab \\\ntaipei \\\ntalk \\\ntaobao \\\ntarget \\\ntatamotors \\\ntatar \\\ntattoo \\\ntax \\\ntaxi \\\ntc \\\ntci \\\ntd \\\ntdk \\\nteam \\\ntech \\\ntechnology \\\ntel \\\ntemasek \\\ntennis \\\nteva \\\ntf \\\ntg \\\nth \\\nthd \\\ntheater \\\ntheatre \\\ntiaa \\\ntickets \\\ntienda \\\ntiffany \\\ntips \\\ntires \\\ntirol \\\ntj \\\ntjmaxx \\\ntjx \\\ntk \\\ntkmaxx \\\ntl \\\ntm \\\ntmall \\\ntn \\\nto \\\ntoday \\\ntokyo \\\ntools \\\ntop \\\ntoray \\\ntoshiba \\\ntotal \\\ntours \\\ntown \\\ntoyota \\\ntoys \\\ntr \\\ntrade \\\ntrading \\\ntraining \\\ntravel \\\ntravelchannel \\\ntravelers \\\ntravelersinsurance \\\ntrust \\\ntrv \\\ntt \\\ntube \\\ntui \\\ntunes \\\ntushu \\\ntv \\\ntvs \\\ntw \\\ntz \\\nua \\\nubank \\\nubs \\\nug \\\nuk \\\nunicom \\\nuniversity \\\nuno \\\nuol \\\nups \\\nus \\\nuy \\\nuz \\\nva \\\nvacations \\\nvana \\\nvanguard \\\nvc \\\nve \\\nvegas \\\nventures \\\nverisign \\\nversicherung \\\nvet \\\nvg \\\nvi \\\nviajes \\\nvideo \\\nvig \\\nviking \\\nvillas \\\nvin \\\nvip \\\nvirgin \\\nvisa \\\nvision \\\nviva \\\nvivo \\\nvlaanderen \\\nvn \\\nvodka \\\nvolkswagen \\\nvolvo \\\nvote \\\nvoting \\\nvoto \\\nvoyage \\\nvu \\\nvuelos \\\nwales \\\nwalmart \\\nwalter \\\nwang \\\nwanggou \\\nwatch \\\nwatches \\\nweather \\\nweatherchannel \\\nwebcam \\\nweber \\\nwebsite \\\nwed \\\nwedding \\\nweibo \\\nweir \\\nwf \\\nwhoswho \\\nwien \\\nwiki \\\nwilliamhill \\\nwin \\\nwindows \\\nwine \\\nwinners \\\nwme \\\nwolterskluwer \\\nwoodside \\\nwork \\\nworks \\\nworld \\\nwow \\\nws \\\nwtc \\\nwtf \\\nxbox \\\nxerox \\\nxfinity \\\nxihuan \\\nxin \\\nxxx \\\nxyz \\\nyachts \\\nyahoo \\\nyamaxun \\\nyandex \\\nye \\\nyodobashi \\\nyoga \\\nyokohama \\\nyou \\\nyoutube \\\nyt \\\nyun \\\nza \\\nzappos \\\nzara \\\nzero \\\nzip \\\nzm \\\nzone \\\nzuerich \\\nzw \\\nvermögensberater-ctb \\\nvermögensberatung-pwb \\\nελ \\\nευ \\\nбг \\\nбел \\\nдети \\\nею \\\nкатолик \\\nком \\\nқаз \\\nмкд \\\nмон \\\nмосква \\\nонлайн \\\nорг \\\nрус \\\nрф \\\nсайт \\\nсрб \\\nукр \\\nგე \\\nհայ \\\nישראל \\\nקום \\\nابوظبي \\\nاتصالات \\\nارامكو \\\nالاردن \\\nالبحرين \\\nالجزائر \\\nالسعودية \\\nالعليان \\\nالمغرب \\\nامارات \\\nایران \\\nبارت \\\nبازار \\\nبھارت \\\nبيتك \\\nپاکستان \\\nڀارت \\\nتونس \\\nسودان \\\nسورية \\\nشبكة \\\nعراق \\\nعرب \\\nعمان \\\nفلسطين \\\nقطر \\\nكاثوليك \\\nكوم \\\nمصر \\\nمليسيا \\\nموريتانيا \\\nموقع \\\nهمراه \\\nकॉम \\\nनेट \\\nभारत \\\nभारतम् \\\nभारोत \\\nसंगठन \\\nবাংলা \\\nভারত \\\nভাৰত \\\nਭਾਰਤ \\\nભારત \\\nଭାରତ \\\nஇந்தியா \\\nஇலங்கை \\\nசிங்கப்பூர் \\\nభారత్ \\\nಭಾರತ \\\nഭാരതം \\\nලංකා \\\nคอม \\\nไทย \\\nລາວ \\\n닷넷 \\\n닷컴 \\\n삼성 \\\n한국 \\\nアマゾン \\\nグーグル \\\nクラウド \\\nコム \\\nストア \\\nセール \\\nファッション \\\nポイント \\\nみんな \\\n世界 \\\n中信 \\\n中国 \\\n中國 \\\n中文网 \\\n亚马逊 \\\n企业 \\\n佛山 \\\n信息 \\\n健康 \\\n八卦 \\\n公司 \\\n公益 \\\n台湾 \\\n台灣 \\\n商城 \\\n商店 \\\n商标 \\\n嘉里 \\\n嘉里大酒店 \\\n在线 \\\n大众汽车 \\\n大拿 \\\n天主教 \\\n娱乐 \\\n家電 \\\n广东 \\\n微博 \\\n慈善 \\\n我爱你 \\\n手机 \\\n招聘 \\\n政务 \\\n政府 \\\n新加坡 \\\n新闻 \\\n时尚 \\\n書籍 \\\n机构 \\\n淡马锡 \\\n游戏 \\\n澳門 \\\n点看 \\\n移动 \\\n组织机构 \\\n网址 \\\n网店 \\\n网站 \\\n网络 \\\n联通 \\\n诺基亚 \\\n谷歌 \\\n购物 \\\n通販 \\\n集团 \\\n電訊盈科 \\\n飞利浦 \\\n食品 \\\n餐厅 \\\n香格里拉 \\\n香港'.split(' ');\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\n\t@module linkify\n\t@submodule scanner\n\t@main scanner\n*/\n\nvar LETTER = /(?:[A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/; // Any Unicode character with letter data type\n\nvar EMOJI = /(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEDD-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7C\\uDE80-\\uDE86\\uDE90-\\uDEAC\\uDEB0-\\uDEBA\\uDEC0-\\uDEC5\\uDED0-\\uDED9\\uDEE0-\\uDEE7\\uDEF0-\\uDEF6])/; // Any Unicode emoji character\n\nvar EMOJI_VARIATION = /\\uFE0F/; // Variation selector, follows heart and others\n\nvar DIGIT = /\\d/;\nvar SPACE = /\\s/;\n/**\n * Initialize the scanner character-based state machine for the given start state\n * @return {State} scanner starting state\n */\n\nfunction init$2() {\n  var customProtocols = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  // Frequently used states\n  var S_START = makeState();\n  var S_NUM = makeAcceptingState(NUM);\n  var S_DOMAIN = makeAcceptingState(DOMAIN);\n  var S_DOMAIN_HYPHEN = makeState(); // domain followed by 1 or more hyphen characters\n\n  var S_WS = makeAcceptingState(WS);\n  var DOMAIN_REGEX_TRANSITIONS = [[DIGIT, S_DOMAIN], [LETTER, S_DOMAIN], [EMOJI, S_DOMAIN], [EMOJI_VARIATION, S_DOMAIN]]; // Create a state which emits a domain token\n\n  var makeDomainState = function makeDomainState() {\n    var state = makeAcceptingState(DOMAIN);\n    state.j = {\n      '-': S_DOMAIN_HYPHEN\n    };\n    state.jr = [].concat(DOMAIN_REGEX_TRANSITIONS);\n    return state;\n  }; // Create a state which does not emit a domain state but the usual alphanumeric\n  // transitions are domains\n\n\n  var makeNearDomainState = function makeNearDomainState(token) {\n    var state = makeDomainState();\n    state.t = token;\n    return state;\n  }; // States for special URL symbols that accept immediately after start\n\n\n  makeBatchT(S_START, [[\"'\", makeAcceptingState(APOSTROPHE)], ['{', makeAcceptingState(OPENBRACE)], ['[', makeAcceptingState(OPENBRACKET)], ['<', makeAcceptingState(OPENANGLEBRACKET)], ['(', makeAcceptingState(OPENPAREN)], ['}', makeAcceptingState(CLOSEBRACE)], [']', makeAcceptingState(CLOSEBRACKET)], ['>', makeAcceptingState(CLOSEANGLEBRACKET)], [')', makeAcceptingState(CLOSEPAREN)], ['&', makeAcceptingState(AMPERSAND)], ['*', makeAcceptingState(ASTERISK)], ['@', makeAcceptingState(AT)], ['`', makeAcceptingState(BACKTICK)], ['^', makeAcceptingState(CARET)], [':', makeAcceptingState(COLON)], [',', makeAcceptingState(COMMA)], ['$', makeAcceptingState(DOLLAR)], ['.', makeAcceptingState(DOT)], ['=', makeAcceptingState(EQUALS)], ['!', makeAcceptingState(EXCLAMATION)], ['-', makeAcceptingState(HYPHEN)], ['%', makeAcceptingState(PERCENT)], ['|', makeAcceptingState(PIPE)], ['+', makeAcceptingState(PLUS)], ['#', makeAcceptingState(POUND)], ['?', makeAcceptingState(QUERY)], ['\"', makeAcceptingState(QUOTE)], ['/', makeAcceptingState(SLASH)], [';', makeAcceptingState(SEMI)], ['~', makeAcceptingState(TILDE)], ['_', makeAcceptingState(UNDERSCORE)], ['\\\\', makeAcceptingState(BACKSLASH)]]); // Whitespace jumps\n  // Tokens of only non-newline whitespace are arbitrarily long\n\n  makeT(S_START, '\\n', makeAcceptingState(NL));\n  makeRegexT(S_START, SPACE, S_WS); // If any whitespace except newline, more whitespace!\n\n  makeT(S_WS, '\\n', makeState()); // non-accepting state\n\n  makeRegexT(S_WS, SPACE, S_WS); // Generates states for top-level domains\n  // Note that this is most accurate when tlds are in alphabetical order\n\n  for (var i = 0; i < tlds.length; i++) {\n    makeChainT(S_START, tlds[i], makeNearDomainState(TLD), makeDomainState);\n  } // Collect the states generated by different protocls\n\n\n  var S_PROTOCOL_FILE = makeDomainState();\n  var S_PROTOCOL_FTP = makeDomainState();\n  var S_PROTOCOL_HTTP = makeDomainState();\n  var S_MAILTO = makeDomainState();\n  makeChainT(S_START, 'file', S_PROTOCOL_FILE, makeDomainState);\n  makeChainT(S_START, 'ftp', S_PROTOCOL_FTP, makeDomainState);\n  makeChainT(S_START, 'http', S_PROTOCOL_HTTP, makeDomainState);\n  makeChainT(S_START, 'mailto', S_MAILTO, makeDomainState); // Protocol states\n\n  var S_PROTOCOL_SECURE = makeDomainState();\n  var S_FULL_PROTOCOL = makeAcceptingState(PROTOCOL); // Full protocol ends with COLON\n\n  var S_FULL_MAILTO = makeAcceptingState(MAILTO); // Mailto ends with COLON\n  // Secure protocols (end with 's')\n\n  makeT(S_PROTOCOL_FTP, 's', S_PROTOCOL_SECURE);\n  makeT(S_PROTOCOL_FTP, ':', S_FULL_PROTOCOL);\n  makeT(S_PROTOCOL_HTTP, 's', S_PROTOCOL_SECURE);\n  makeT(S_PROTOCOL_HTTP, ':', S_FULL_PROTOCOL); // Become protocol tokens after a COLON\n\n  makeT(S_PROTOCOL_FILE, ':', S_FULL_PROTOCOL);\n  makeT(S_PROTOCOL_SECURE, ':', S_FULL_PROTOCOL);\n  makeT(S_MAILTO, ':', S_FULL_MAILTO); // Register custom protocols\n\n  var S_CUSTOM_PROTOCOL = makeDomainState();\n\n  for (var _i = 0; _i < customProtocols.length; _i++) {\n    makeChainT(S_START, customProtocols[_i], S_CUSTOM_PROTOCOL, makeDomainState);\n  }\n\n  makeT(S_CUSTOM_PROTOCOL, ':', S_FULL_PROTOCOL); // Localhost\n\n  makeChainT(S_START, 'localhost', makeNearDomainState(LOCALHOST), makeDomainState); // Everything else\n  // DOMAINs make more DOMAINs\n  // Number and character transitions\n\n  makeRegexT(S_START, DIGIT, S_NUM);\n  makeRegexT(S_START, LETTER, S_DOMAIN);\n  makeRegexT(S_START, EMOJI, S_DOMAIN);\n  makeRegexT(S_START, EMOJI_VARIATION, S_DOMAIN);\n  makeRegexT(S_NUM, DIGIT, S_NUM);\n  makeRegexT(S_NUM, LETTER, S_DOMAIN); // number becomes DOMAIN\n\n  makeRegexT(S_NUM, EMOJI, S_DOMAIN); // number becomes DOMAIN\n\n  makeRegexT(S_NUM, EMOJI_VARIATION, S_DOMAIN); // number becomes DOMAIN\n\n  makeT(S_NUM, '-', S_DOMAIN_HYPHEN); // Default domain transitions\n\n  makeT(S_DOMAIN, '-', S_DOMAIN_HYPHEN);\n  makeT(S_DOMAIN_HYPHEN, '-', S_DOMAIN_HYPHEN);\n  makeRegexT(S_DOMAIN, DIGIT, S_DOMAIN);\n  makeRegexT(S_DOMAIN, LETTER, S_DOMAIN);\n  makeRegexT(S_DOMAIN, EMOJI, S_DOMAIN);\n  makeRegexT(S_DOMAIN, EMOJI_VARIATION, S_DOMAIN);\n  makeRegexT(S_DOMAIN_HYPHEN, DIGIT, S_DOMAIN);\n  makeRegexT(S_DOMAIN_HYPHEN, LETTER, S_DOMAIN);\n  makeRegexT(S_DOMAIN_HYPHEN, EMOJI, S_DOMAIN);\n  makeRegexT(S_DOMAIN_HYPHEN, EMOJI_VARIATION, S_DOMAIN); // Set default transition for start state (some symbol)\n\n  S_START.jd = makeAcceptingState(SYM);\n  return S_START;\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 {{t: string, v: string, s: number, l: number}[]} list of tokens, each with a type and value\n*/\n\nfunction run$1(start, str) {\n  // State machine is not case sensitive, so input is tokenized in lowercased\n  // form (still returns the regular case though) Uses selective `toLowerCase`\n  // is used because lowercasing the entire string causes the length and\n  // character position to vary in some non-English strings with V8-based\n  // runtimes.\n  var iterable = stringToArray(str.replace(/[A-Z]/g, function (c) {\n    return c.toLowerCase();\n  }));\n  var charCount = iterable.length; // <= len if there are emojis, etc\n\n  var tokens = []; // return value\n  // cursor through the string itself, accounting for characters that have\n  // width with length 2 such as emojis\n\n  var cursor = 0; // Cursor through the array-representation of the string\n\n  var charCursor = 0; // Tokenize the string\n\n  while (charCursor < charCount) {\n    var state = start;\n    var nextState = null;\n    var tokenLength = 0;\n    var latestAccepting = null;\n    var sinceAccepts = -1;\n    var charsSinceAccepts = -1;\n\n    while (charCursor < charCount && (nextState = takeT(state, iterable[charCursor]))) {\n      state = nextState; // Keep track of the latest accepting state\n\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\n      tokenLength += iterable[charCursor].length;\n      cursor += iterable[charCursor].length;\n      charCursor++;\n    } // Roll back to the latest accepting state\n\n\n    cursor -= sinceAccepts;\n    charCursor -= charsSinceAccepts;\n    tokenLength -= sinceAccepts; // No more jumps, just make a new token from the last accepting one\n    // TODO: If possible, don't output v, instead output range where values ocur\n\n    tokens.push({\n      t: latestAccepting.t,\n      // token type/name\n      v: str.substr(cursor - tokenLength, tokenLength),\n      // string value\n      s: cursor - tokenLength,\n      // start index\n      e: cursor // end index (excluding)\n\n    });\n  }\n\n  return tokens;\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 */\n\nfunction stringToArray(str) {\n  var result = [];\n  var len = str.length;\n  var index = 0;\n\n  while (index < len) {\n    var first = str.charCodeAt(index);\n    var second = void 0;\n    var 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\n    result.push(char);\n    index += char.length;\n  }\n\n  return result;\n}\n\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n    _typeof = function (obj) {\n      return typeof obj;\n    };\n  } else {\n    _typeof = function (obj) {\n      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n  }\n\n  return _typeof(obj);\n}\n\n/**\n * @property {string} defaultProtocol\n * @property {{[string]: (event) => void}]} [events]\n */\nvar 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: 0,\n  className: null,\n  attributes: null,\n  ignoreTags: []\n};\n/**\n * @class Options\n * @param {Object} [opts] Set option properties besides the defaults\n */\n\nfunction Options(opts) {\n  opts = opts || {};\n  this.defaultProtocol = 'defaultProtocol' in opts ? opts.defaultProtocol : defaults.defaultProtocol;\n  this.events = 'events' in opts ? opts.events : defaults.events;\n  this.format = 'format' in opts ? opts.format : defaults.format;\n  this.formatHref = 'formatHref' in opts ? opts.formatHref : defaults.formatHref;\n  this.nl2br = 'nl2br' in opts ? opts.nl2br : defaults.nl2br;\n  this.tagName = 'tagName' in opts ? opts.tagName : defaults.tagName;\n  this.target = 'target' in opts ? opts.target : defaults.target;\n  this.rel = 'rel' in opts ? opts.rel : defaults.rel;\n  this.validate = 'validate' in opts ? opts.validate : defaults.validate;\n  this.truncate = 'truncate' in opts ? opts.truncate : defaults.truncate;\n  this.className = 'className' in opts ? opts.className : defaults.className;\n  this.attributes = opts.attributes || defaults.attributes;\n  this.ignoreTags = []; // Make all tags names upper case\n\n  var ignoredTags = 'ignoreTags' in opts ? opts.ignoreTags : defaults.ignoreTags;\n\n  for (var i = 0; i < ignoredTags.length; i++) {\n    this.ignoreTags.push(ignoredTags[i].toUpperCase());\n  }\n}\nOptions.prototype = {\n  /**\n   * Given the token, return all options for how it should be displayed\n   */\n  resolve: function resolve(token) {\n    var href = token.toHref(this.defaultProtocol);\n    return {\n      formatted: this.get('format', token.toString(), token),\n      formattedHref: this.get('formatHref', href, token),\n      tagName: this.get('tagName', href, token),\n      className: this.get('className', href, token),\n      target: this.get('target', href, token),\n      rel: this.get('rel', href, token),\n      events: this.getObject('events', href, token),\n      attributes: this.getObject('attributes', href, token),\n      truncate: this.get('truncate', href, token)\n    };\n  },\n\n  /**\n   * Returns true or false based on whether a token should be displayed as a\n   * link based on the user options. By default,\n   */\n  check: function 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.\n   * @param {string} key Name of option to use\n   * @param operator will be passed to the target option if it's method\n   * @param {MultiToken} token The token from linkify.tokenize\n   */\n  get: function get(key, operator, token) {\n    var option = this[key];\n\n    if (!option) {\n      return option;\n    }\n\n    var optionValue;\n\n    switch (_typeof(option)) {\n      case 'function':\n        return option(operator, token.t);\n\n      case 'object':\n        optionValue = token.t in option ? option[token.t] : defaults[key];\n        return typeof optionValue === 'function' ? optionValue(operator, token.t) : optionValue;\n    }\n\n    return option;\n  },\n  getObject: function getObject(key, operator, token) {\n    var option = this[key];\n    return typeof option === 'function' ? option(operator, token.t) : option;\n  }\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});\n\n/******************************************************************************\n\tMulti-Tokens\n\tTokens composed of arrays of TextTokens\n******************************************************************************/\n\nfunction inherits(parent, child) {\n  var props = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var extended = Object.create(parent.prototype);\n\n  for (var p in props) {\n    extended[p] = props[p];\n  }\n\n  extended.constructor = child;\n  child.prototype = extended;\n  return child;\n}\n/**\n\tAbstract class used for manufacturing tokens of text tokens. That is rather\n\tthan the value for a token being a small string of text, it's value an array\n\tof text tokens.\n\n\tUsed for grouping together URLs, emails, hashtags, and other potential\n\tcreations.\n\n\t@class MultiToken\n\t@param {string} value\n\t@param {{t: string, v: string, s: number, e: number}[]} tokens\n\t@abstract\n*/\n\n\nfunction MultiToken() {}\nMultiToken.prototype = {\n  /**\n  \tString representing the type for this token\n  \t@property t\n  \t@default 'token'\n  */\n  t: 'token',\n\n  /**\n  \tIs this multitoken a link?\n  \t@property isLink\n  \t@default false\n  */\n  isLink: false,\n\n  /**\n  \tReturn the string this token represents.\n  \t@method toString\n  \t@return {string}\n  */\n  toString: function toString() {\n    return this.v;\n  },\n\n  /**\n  \tWhat should the value for this token be in the `href` HTML attribute?\n  \tReturns the `.toString` value by default.\n  \t\t@method toHref\n  \t@return {string}\n  */\n  toHref: function toHref() {\n    return this.toString();\n  },\n\n  /**\n   * The start index of this token in the original input string\n   * @returns {number}\n   */\n  startIndex: function startIndex() {\n    return this.tk[0].s;\n  },\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: function endIndex() {\n    return this.tk[this.tk.length - 1].e;\n  },\n\n  /**\n  \tReturns a hash 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: function toObject() {\n    var protocol = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaults.defaultProtocol;\n    return {\n      type: this.t,\n      value: this.v,\n      isLink: this.isLink,\n      href: this.toHref(protocol),\n      start: this.startIndex(),\n      end: this.endIndex()\n    };\n  }\n}; // Base token\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 {(value: string, tokens: {t: string, v: string, s: number, e: number}) => MultiToken} new token class\n */\n\nfunction createTokenClass(type, props) {\n  function Token(value, tokens) {\n    this.t = type;\n    this.v = value;\n    this.tk = tokens;\n  }\n\n  inherits(MultiToken, Token, props);\n  return Token;\n}\n/**\n\tRepresents an arbitrarily mailto email address with the prefix included\n\t@class MailtoEmail\n\t@extends MultiToken\n*/\n\nvar MailtoEmail = createTokenClass('email', {\n  isLink: true\n});\n/**\n\tRepresents a list of tokens making up a valid email address\n\t@class Email\n\t@extends MultiToken\n*/\n\nvar Email = createTokenClass('email', {\n  isLink: true,\n  toHref: function toHref() {\n    return 'mailto:' + this.toString();\n  }\n});\n/**\n\tRepresents some plain text\n\t@class Text\n\t@extends MultiToken\n*/\n\nvar Text = createTokenClass('text');\n/**\n\tMulti-linebreak token - represents a line break\n\t@class Nl\n\t@extends MultiToken\n*/\n\nvar Nl = createTokenClass('nl');\n/**\n\tRepresents a list of text tokens making up a valid URL\n\t@class Url\n\t@extends MultiToken\n*/\n\nvar Url = createTokenClass('url', {\n  isLink: true,\n\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@method href\n  \t@param {string} protocol\n  \t@return {string}\n  */\n  toHref: function toHref() {\n    var protocol = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaults.defaultProtocol;\n    var tokens = this.tk;\n    var hasProtocol = false;\n    var hasSlashSlash = false;\n    var result = [];\n    var i = 0; // Make the first part of the domain lowercase\n    // Lowercase protocol\n\n    while (tokens[i].t === PROTOCOL) {\n      hasProtocol = true;\n      result.push(tokens[i].v);\n      i++;\n    } // Skip slash-slash\n\n\n    while (tokens[i].t === SLASH) {\n      hasSlashSlash = true;\n      result.push(tokens[i].v);\n      i++;\n    } // Continue pushing characters\n\n\n    for (; i < tokens.length; i++) {\n      result.push(tokens[i].v);\n    }\n\n    result = result.join('');\n\n    if (!(hasProtocol || hasSlashSlash)) {\n      result = \"\".concat(protocol, \"://\").concat(result);\n    }\n\n    return result;\n  },\n  hasProtocol: function hasProtocol() {\n    return this.tk[0].t === PROTOCOL;\n  }\n});\n\nvar multi = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tMultiToken: MultiToken,\n\tBase: MultiToken,\n\tcreateTokenClass: createTokenClass,\n\tMailtoEmail: MailtoEmail,\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/Email_address (links to RFC in\n\treference)\n\n\t@module linkify\n\t@submodule parser\n\t@main run\n*/\n/**\n * Generate the parser multi token-based state machine\n * @returns {State} the starting state\n */\n\nfunction init$1() {\n  // The universal starting state.\n  var S_START = makeState(); // Intermediate states for URLs. Note that domains that begin with a protocol\n  // are treated slighly differently from those that don't.\n\n  var S_PROTOCOL = makeState(); // e.g., 'http:'\n\n  var S_MAILTO = makeState(); // 'mailto:'\n\n  var S_PROTOCOL_SLASH = makeState(); // e.g., 'http:/''\n\n  var S_PROTOCOL_SLASH_SLASH = makeState(); // e.g.,'http://'\n\n  var S_DOMAIN = makeState(); // parsed string ends with a potential domain name (A)\n\n  var S_DOMAIN_DOT = makeState(); // (A) domain followed by DOT\n\n  var S_TLD = makeAcceptingState(Url); // (A) Simplest possible URL with no query string\n\n  var S_TLD_COLON = makeState(); // (A) URL followed by colon (potential port number here)\n\n  var S_TLD_PORT = makeAcceptingState(Url); // TLD followed by a port number\n\n  var S_URL = makeAcceptingState(Url); // Long URL with optional port and maybe query string\n\n  var S_URL_NON_ACCEPTING = makeState(); // URL followed by some symbols (will not be part of the final URL)\n\n  var S_URL_OPENBRACE = makeState(); // URL followed by {\n\n  var S_URL_OPENBRACKET = makeState(); // URL followed by [\n\n  var S_URL_OPENANGLEBRACKET = makeState(); // URL followed by <\n\n  var S_URL_OPENPAREN = makeState(); // URL followed by (\n\n  var S_URL_OPENBRACE_Q = makeAcceptingState(Url); // URL followed by { and some symbols that the URL can end it\n\n  var S_URL_OPENBRACKET_Q = makeAcceptingState(Url); // URL followed by [ and some symbols that the URL can end it\n\n  var S_URL_OPENANGLEBRACKET_Q = makeAcceptingState(Url); // URL followed by < and some symbols that the URL can end it\n\n  var S_URL_OPENPAREN_Q = makeAcceptingState(Url); // URL followed by ( and some symbols that the URL can end it\n\n  var S_URL_OPENBRACE_SYMS = makeState(); // S_URL_OPENBRACE_Q followed by some symbols it cannot end it\n\n  var S_URL_OPENBRACKET_SYMS = makeState(); // S_URL_OPENBRACKET_Q followed by some symbols it cannot end it\n\n  var S_URL_OPENANGLEBRACKET_SYMS = makeState(); // S_URL_OPENANGLEBRACKET_Q followed by some symbols it cannot end it\n\n  var S_URL_OPENPAREN_SYMS = makeState(); // S_URL_OPENPAREN_Q followed by some symbols it cannot end it\n\n  var S_EMAIL_DOMAIN = makeState(); // parsed string starts with local email info + @ with a potential domain name (C)\n\n  var S_EMAIL_DOMAIN_DOT = makeState(); // (C) domain followed by DOT\n\n  var S_EMAIL = makeAcceptingState(Email); // (C) Possible email address (could have more tlds)\n\n  var S_EMAIL_COLON = makeState(); // (C) URL followed by colon (potential port number here)\n\n  var S_EMAIL_PORT = makeAcceptingState(Email); // (C) Email address with a port\n\n  var S_MAILTO_EMAIL = makeAcceptingState(MailtoEmail); // Email that begins with the mailto prefix (D)\n\n  var S_MAILTO_EMAIL_NON_ACCEPTING = makeState(); // (D) Followed by some non-query string chars\n\n  var S_LOCALPART = makeState(); // Local part of the email address\n\n  var S_LOCALPART_AT = makeState(); // Local part of the email address plus @\n\n  var S_LOCALPART_DOT = makeState(); // Local part of the email address plus '.' (localpart cannot end in .)\n\n  var S_NL = makeAcceptingState(Nl); // single new line\n  // Make path from start to protocol (with '//')\n\n  makeT(S_START, NL, S_NL);\n  makeT(S_START, PROTOCOL, S_PROTOCOL);\n  makeT(S_START, MAILTO, S_MAILTO);\n  makeT(S_PROTOCOL, SLASH, S_PROTOCOL_SLASH);\n  makeT(S_PROTOCOL_SLASH, SLASH, S_PROTOCOL_SLASH_SLASH); // The very first potential domain name\n\n  makeT(S_START, TLD, S_DOMAIN);\n  makeT(S_START, DOMAIN, S_DOMAIN);\n  makeT(S_START, LOCALHOST, S_TLD);\n  makeT(S_START, NUM, S_DOMAIN); // Force URL for protocol followed by anything sane\n\n  makeT(S_PROTOCOL_SLASH_SLASH, TLD, S_URL);\n  makeT(S_PROTOCOL_SLASH_SLASH, DOMAIN, S_URL);\n  makeT(S_PROTOCOL_SLASH_SLASH, NUM, S_URL);\n  makeT(S_PROTOCOL_SLASH_SLASH, LOCALHOST, S_URL); // Account for dots and hyphens\n  // hyphens are usually parts of domain names\n\n  makeT(S_DOMAIN, DOT, S_DOMAIN_DOT);\n  makeT(S_EMAIL_DOMAIN, DOT, S_EMAIL_DOMAIN_DOT); // Hyphen can jump back to a domain name\n  // After the first domain and a dot, we can find either a URL or another domain\n\n  makeT(S_DOMAIN_DOT, TLD, S_TLD);\n  makeT(S_DOMAIN_DOT, DOMAIN, S_DOMAIN);\n  makeT(S_DOMAIN_DOT, NUM, S_DOMAIN);\n  makeT(S_DOMAIN_DOT, LOCALHOST, S_DOMAIN);\n  makeT(S_EMAIL_DOMAIN_DOT, TLD, S_EMAIL);\n  makeT(S_EMAIL_DOMAIN_DOT, DOMAIN, S_EMAIL_DOMAIN);\n  makeT(S_EMAIL_DOMAIN_DOT, NUM, S_EMAIL_DOMAIN);\n  makeT(S_EMAIL_DOMAIN_DOT, LOCALHOST, S_EMAIL_DOMAIN); // S_TLD accepts! But the URL could be longer, try to find a match greedily\n  // The `run` function should be able to \"rollback\" to the accepting state\n\n  makeT(S_TLD, DOT, S_DOMAIN_DOT);\n  makeT(S_EMAIL, DOT, S_EMAIL_DOMAIN_DOT); // Become real URLs after `SLASH` or `COLON NUM SLASH`\n  // Here PSS and non-PSS converge\n\n  makeT(S_TLD, COLON, S_TLD_COLON);\n  makeT(S_TLD, SLASH, S_URL);\n  makeT(S_TLD_COLON, NUM, S_TLD_PORT);\n  makeT(S_TLD_PORT, SLASH, S_URL);\n  makeT(S_EMAIL, COLON, S_EMAIL_COLON);\n  makeT(S_EMAIL_COLON, NUM, S_EMAIL_PORT); // Types of characters the URL can definitely end in\n\n  var qsAccepting = [AMPERSAND, ASTERISK, AT, BACKSLASH, BACKTICK, CARET, DOLLAR, DOMAIN, EQUALS, HYPHEN, LOCALHOST, NUM, PERCENT, PIPE, PLUS, POUND, PROTOCOL, SLASH, SYM, TILDE, TLD, UNDERSCORE]; // 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\n  var qsNonAccepting = [APOSTROPHE, CLOSEANGLEBRACKET, CLOSEBRACE, CLOSEBRACKET, CLOSEPAREN, COLON, COMMA, DOT, EXCLAMATION, OPENANGLEBRACKET, OPENBRACE, OPENBRACKET, OPENPAREN, QUERY, QUOTE, SEMI]; // These states are responsible primarily for determining whether or not to\n  // include the final round bracket.\n  // URL, followed by an opening bracket\n\n  makeT(S_URL, OPENBRACE, S_URL_OPENBRACE);\n  makeT(S_URL, OPENBRACKET, S_URL_OPENBRACKET);\n  makeT(S_URL, OPENANGLEBRACKET, S_URL_OPENANGLEBRACKET);\n  makeT(S_URL, OPENPAREN, S_URL_OPENPAREN); // URL with extra symbols at the end, followed by an opening bracket\n\n  makeT(S_URL_NON_ACCEPTING, OPENBRACE, S_URL_OPENBRACE);\n  makeT(S_URL_NON_ACCEPTING, OPENBRACKET, S_URL_OPENBRACKET);\n  makeT(S_URL_NON_ACCEPTING, OPENANGLEBRACKET, S_URL_OPENANGLEBRACKET);\n  makeT(S_URL_NON_ACCEPTING, OPENPAREN, S_URL_OPENPAREN); // Closing bracket component. This character WILL be included in the URL\n\n  makeT(S_URL_OPENBRACE, CLOSEBRACE, S_URL);\n  makeT(S_URL_OPENBRACKET, CLOSEBRACKET, S_URL);\n  makeT(S_URL_OPENANGLEBRACKET, CLOSEANGLEBRACKET, S_URL);\n  makeT(S_URL_OPENPAREN, CLOSEPAREN, S_URL);\n  makeT(S_URL_OPENBRACE_Q, CLOSEBRACE, S_URL);\n  makeT(S_URL_OPENBRACKET_Q, CLOSEBRACKET, S_URL);\n  makeT(S_URL_OPENANGLEBRACKET_Q, CLOSEANGLEBRACKET, S_URL);\n  makeT(S_URL_OPENPAREN_Q, CLOSEPAREN, S_URL);\n  makeT(S_URL_OPENBRACE_SYMS, CLOSEBRACE, S_URL);\n  makeT(S_URL_OPENBRACKET_SYMS, CLOSEBRACKET, S_URL);\n  makeT(S_URL_OPENANGLEBRACKET_SYMS, CLOSEANGLEBRACKET, S_URL);\n  makeT(S_URL_OPENPAREN_SYMS, CLOSEPAREN, S_URL); // URL that beings with an opening bracket, followed by a symbols.\n  // Note that the final state can still be `S_URL_OPENBRACE_Q` (if the URL only\n  // has a single opening bracket for some reason).\n\n  makeMultiT(S_URL_OPENBRACE, qsAccepting, S_URL_OPENBRACE_Q);\n  makeMultiT(S_URL_OPENBRACKET, qsAccepting, S_URL_OPENBRACKET_Q);\n  makeMultiT(S_URL_OPENANGLEBRACKET, qsAccepting, S_URL_OPENANGLEBRACKET_Q);\n  makeMultiT(S_URL_OPENPAREN, qsAccepting, S_URL_OPENPAREN_Q);\n  makeMultiT(S_URL_OPENBRACE, qsNonAccepting, S_URL_OPENBRACE_SYMS);\n  makeMultiT(S_URL_OPENBRACKET, qsNonAccepting, S_URL_OPENBRACKET_SYMS);\n  makeMultiT(S_URL_OPENANGLEBRACKET, qsNonAccepting, S_URL_OPENANGLEBRACKET_SYMS);\n  makeMultiT(S_URL_OPENPAREN, qsNonAccepting, S_URL_OPENPAREN_SYMS); // URL that begins with an opening bracket, followed by some symbols\n\n  makeMultiT(S_URL_OPENBRACE_Q, qsAccepting, S_URL_OPENBRACE_Q);\n  makeMultiT(S_URL_OPENBRACKET_Q, qsAccepting, S_URL_OPENBRACKET_Q);\n  makeMultiT(S_URL_OPENANGLEBRACKET_Q, qsAccepting, S_URL_OPENANGLEBRACKET_Q);\n  makeMultiT(S_URL_OPENPAREN_Q, qsAccepting, S_URL_OPENPAREN_Q);\n  makeMultiT(S_URL_OPENBRACE_Q, qsNonAccepting, S_URL_OPENBRACE_Q);\n  makeMultiT(S_URL_OPENBRACKET_Q, qsNonAccepting, S_URL_OPENBRACKET_Q);\n  makeMultiT(S_URL_OPENANGLEBRACKET_Q, qsNonAccepting, S_URL_OPENANGLEBRACKET_Q);\n  makeMultiT(S_URL_OPENPAREN_Q, qsNonAccepting, S_URL_OPENPAREN_Q);\n  makeMultiT(S_URL_OPENBRACE_SYMS, qsAccepting, S_URL_OPENBRACE_Q);\n  makeMultiT(S_URL_OPENBRACKET_SYMS, qsAccepting, S_URL_OPENBRACKET_Q);\n  makeMultiT(S_URL_OPENANGLEBRACKET_SYMS, qsAccepting, S_URL_OPENANGLEBRACKET_Q);\n  makeMultiT(S_URL_OPENPAREN_SYMS, qsAccepting, S_URL_OPENPAREN_Q);\n  makeMultiT(S_URL_OPENBRACE_SYMS, qsNonAccepting, S_URL_OPENBRACE_SYMS);\n  makeMultiT(S_URL_OPENBRACKET_SYMS, qsNonAccepting, S_URL_OPENBRACKET_SYMS);\n  makeMultiT(S_URL_OPENANGLEBRACKET_SYMS, qsNonAccepting, S_URL_OPENANGLEBRACKET_SYMS);\n  makeMultiT(S_URL_OPENPAREN_SYMS, qsNonAccepting, S_URL_OPENPAREN_SYMS); // Account for the query string\n\n  makeMultiT(S_URL, qsAccepting, S_URL);\n  makeMultiT(S_URL_NON_ACCEPTING, qsAccepting, S_URL);\n  makeMultiT(S_URL, qsNonAccepting, S_URL_NON_ACCEPTING);\n  makeMultiT(S_URL_NON_ACCEPTING, qsNonAccepting, S_URL_NON_ACCEPTING); // Email address-specific state definitions\n  // Note: We are not allowing '/' in email addresses since this would interfere\n  // with real URLs\n  // For addresses with the mailto prefix\n  // 'mailto:' followed by anything sane is a valid email\n\n  makeT(S_MAILTO, TLD, S_MAILTO_EMAIL);\n  makeT(S_MAILTO, DOMAIN, S_MAILTO_EMAIL);\n  makeT(S_MAILTO, NUM, S_MAILTO_EMAIL);\n  makeT(S_MAILTO, LOCALHOST, S_MAILTO_EMAIL); // Greedily get more potential valid email values\n\n  makeMultiT(S_MAILTO_EMAIL, qsAccepting, S_MAILTO_EMAIL);\n  makeMultiT(S_MAILTO_EMAIL, qsNonAccepting, S_MAILTO_EMAIL_NON_ACCEPTING);\n  makeMultiT(S_MAILTO_EMAIL_NON_ACCEPTING, qsAccepting, S_MAILTO_EMAIL);\n  makeMultiT(S_MAILTO_EMAIL_NON_ACCEPTING, qsNonAccepting, S_MAILTO_EMAIL_NON_ACCEPTING); // For addresses without the mailto prefix\n  // Tokens allowed in the localpart of the email\n\n  var localpartAccepting = [AMPERSAND, APOSTROPHE, ASTERISK, BACKSLASH, BACKTICK, CARET, CLOSEBRACE, DOLLAR, DOMAIN, EQUALS, HYPHEN, NUM, OPENBRACE, PERCENT, PIPE, PLUS, POUND, QUERY, SLASH, SYM, TILDE, TLD, UNDERSCORE]; // Some of the tokens in `localpartAccepting` are already accounted for here and\n  // will not be overwritten (don't worry)\n\n  makeMultiT(S_DOMAIN, localpartAccepting, S_LOCALPART);\n  makeT(S_DOMAIN, AT, S_LOCALPART_AT);\n  makeMultiT(S_TLD, localpartAccepting, S_LOCALPART);\n  makeT(S_TLD, AT, S_LOCALPART_AT);\n  makeMultiT(S_DOMAIN_DOT, localpartAccepting, S_LOCALPART); // Now in localpart of address\n  // TODO: IP addresses and what if the email starts with numbers?\n\n  makeMultiT(S_LOCALPART, localpartAccepting, S_LOCALPART);\n  makeT(S_LOCALPART, AT, S_LOCALPART_AT); // close to an email address now\n\n  makeT(S_LOCALPART, DOT, S_LOCALPART_DOT);\n  makeMultiT(S_LOCALPART_DOT, localpartAccepting, S_LOCALPART);\n  makeT(S_LOCALPART_AT, TLD, S_EMAIL_DOMAIN);\n  makeT(S_LOCALPART_AT, DOMAIN, S_EMAIL_DOMAIN);\n  makeT(S_LOCALPART_AT, NUM, S_EMAIL_DOMAIN);\n  makeT(S_LOCALPART_AT, LOCALHOST, S_EMAIL); // States following `@` defined above\n\n  return S_START;\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 {{t: string, v: string, s: number, e: number}[]} tokens list of scanned tokens\n * @returns {MultiToken[]}\n */\n\nfunction run(start, input, tokens) {\n  var len = tokens.length;\n  var cursor = 0;\n  var multis = [];\n  var textTokens = [];\n\n  while (cursor < len) {\n    var state = start;\n    var secondState = null;\n    var nextState = null;\n    var multiLength = 0;\n    var latestAccepting = null;\n    var sinceAccepts = -1;\n\n    while (cursor < len && !(secondState = takeT(state, 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\n    while (cursor < len && (nextState = secondState || takeT(state, tokens[cursor].t))) {\n      // Get the next state\n      secondState = null;\n      state = nextState; // Keep track of the latest accepting state\n\n      if (state.accepts()) {\n        sinceAccepts = 0;\n        latestAccepting = state;\n      } else if (sinceAccepts >= 0) {\n        sinceAccepts++;\n      }\n\n      cursor++;\n      multiLength++;\n    }\n\n    if (sinceAccepts < 0) {\n      // No accepting state was found, part of a regular text token\n      // Add all the tokens we looked at to the text tokens array\n      for (var i = cursor - multiLength; i < cursor; i++) {\n        textTokens.push(tokens[i]);\n      }\n    } else {\n      // Accepting state!\n      // First close off the textTokens (if available)\n      if (textTokens.length > 0) {\n        multis.push(parserCreateMultiToken(Text, input, textTokens));\n        textTokens = [];\n      } // Roll back to the latest accepting state\n\n\n      cursor -= sinceAccepts;\n      multiLength -= sinceAccepts; // Create a new multitoken\n\n      var Multi = latestAccepting.t;\n      var subtokens = tokens.slice(cursor - multiLength, cursor);\n      multis.push(parserCreateMultiToken(Multi, input, subtokens));\n    }\n  } // Finally close off the textTokens (if available)\n\n\n  if (textTokens.length > 0) {\n    multis.push(parserCreateMultiToken(Text, input, textTokens));\n  }\n\n  return multis;\n}\n/**\n * Utility function for instantiating a new multitoken with all the relevant\n * fields during parsing.\n * @param {Class<MultiToken>} Multi class to instantiate\n * @param {string} input original input string\n * @param {{t: string, v: string, s: number, e: number}[]} tokens consecutive tokens scanned from input string\n * @returns {MultiToken}\n */\n\nfunction parserCreateMultiToken(Multi, input, tokens) {\n  var startIdx = tokens[0].s;\n  var endIdx = tokens[tokens.length - 1].e;\n  var value = input.substr(startIdx, endIdx - startIdx);\n  return new Multi(value, tokens);\n}\n\nvar warn = typeof console !== 'undefined' && console && console.warn || function () {}; // Side-effect initialization state\n\n\nvar INIT = {\n  scanner: null,\n  parser: null,\n  pluginQueue: [],\n  customProtocols: [],\n  initialized: false\n};\n/**\n * De-register all plugins and reset the internal state-machine. Used for\n * testing; not required in practice.\n * @private\n */\n\nfunction reset() {\n  INIT.scanner = null;\n  INIT.parser = null;\n  INIT.pluginQueue = [];\n  INIT.customProtocols = [];\n  INIT.initialized = false;\n}\n/**\n * Register a linkify extension plugin\n * @param {string} name of plugin to register\n * @param {Function} plugin function that accepts mutable linkify state\n */\n\nfunction registerPlugin(name, plugin) {\n  for (var i = 0; i < INIT.pluginQueue.length; i++) {\n    if (name === INIT.pluginQueue[i][0]) {\n      warn(\"linkifyjs: plugin \\\"\".concat(name, \"\\\" already registered - will be overwritten\"));\n      INIT.pluginQueue[i] = [name, plugin];\n      return;\n    }\n  }\n\n  INIT.pluginQueue.push([name, plugin]);\n\n  if (INIT.initialized) {\n    warn(\"linkifyjs: already initialized - will not register plugin \\\"\".concat(name, \"\\\" until you manually call linkify.init(). To avoid this warning, please register all plugins before invoking linkify the first time.\"));\n  }\n}\n/**\n * Detect URLs with the following additional protocol. Anything following\n * \"protocol:\" will be considered a link.\n * @param {string} protocol\n */\n\nfunction registerCustomProtocol(protocol) {\n  if (INIT.initialized) {\n    warn(\"linkifyjs: already initialized - will not register custom protocol \\\"\".concat(protocol, \"\\\" until you manually call linkify.init(). To avoid this warning, please register all custom protocols before invoking linkify the first time.\"));\n  }\n\n  if (!/^[a-z-]+$/.test(protocol)) {\n    throw Error('linkifyjs: protocols containing characters other than a-z or - (hyphen) are not supported');\n  }\n\n  INIT.customProtocols.push(protocol);\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 */\n\nfunction init() {\n  // Initialize state machines\n  INIT.scanner = {\n    start: init$2(INIT.customProtocols),\n    tokens: text\n  };\n  INIT.parser = {\n    start: init$1(),\n    tokens: multi\n  };\n  var utils = {\n    createTokenClass: createTokenClass\n  }; // Initialize plugins\n\n  for (var i = 0; i < INIT.pluginQueue.length; i++) {\n    INIT.pluginQueue[i][1]({\n      scanner: INIT.scanner,\n      parser: INIT.parser,\n      utils: utils\n    });\n  }\n\n  INIT.initialized = true;\n}\n/**\n\tParse a string into tokens that represent linkable and non-linkable sub-components\n\t@param {string} str\n\t@return {MultiToken[]} tokens\n*/\n\nfunction tokenize(str) {\n  if (!INIT.initialized) {\n    init();\n  }\n\n  return run(INIT.parser.start, str, run$1(INIT.scanner.start, str));\n}\n/**\n\tFind a list of linkable items in the given string.\n\t@param {string} str string to find links in\n\t@param {string} [type] (optional) only find links of a specific type, e.g.,\n\t'url' or 'email'\n*/\n\nfunction find(str) {\n  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  var tokens = tokenize(str);\n  var filtered = [];\n\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i];\n\n    if (token.isLink && (!type || token.t === type)) {\n      filtered.push(token.toObject());\n    }\n  }\n\n  return filtered;\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 */\n\nfunction test(str) {\n  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n  var tokens = tokenize(str);\n  return tokens.length === 1 && tokens[0].isLink && (!type || tokens[0].t === type);\n}\n\nexport { Options, find, init, options, registerCustomProtocol, registerPlugin, reset, test, tokenize };\n","import * as linkify from 'linkifyjs';\n\n/**\n * generated from https://raw.githubusercontent.com/w3c/html/26b5126f96f736f796b9e29718138919dd513744/entities.json\n * do not edit\n */\nvar HTML5NamedCharRefs = {\n  // We don't need the complete named character reference because linkifyHtml\n  // does not modify the escape sequences. We do need &nbsp; so that\n  // whitespace is parsed properly. Other types of whitespace should already\n  // be accounted for\n  nbsp: \" \"\n};\nvar HEXCHARCODE = /^#[xX]([A-Fa-f0-9]+)$/;\nvar CHARCODE = /^#([0-9]+)$/;\nvar NAMED = /^([A-Za-z0-9]+)$/;\n\nvar EntityParser =\n/** @class */\nfunction () {\n  function EntityParser(named) {\n    this.named = named;\n  }\n\n  EntityParser.prototype.parse = function (entity) {\n    if (!entity) {\n      return;\n    }\n\n    var matches = entity.match(HEXCHARCODE);\n\n    if (matches) {\n      return \"&#x\" + matches[1] + \";\";\n    }\n\n    matches = entity.match(CHARCODE);\n\n    if (matches) {\n      return \"&#\" + matches[1] + \";\";\n    }\n\n    matches = entity.match(NAMED);\n\n    if (matches) {\n      return this.named[matches[1]] || \"&\" + matches[1] + \";\";\n    }\n  };\n\n  return EntityParser;\n}();\n\nvar WSP = /[\\t\\n\\f ]/;\nvar ALPHA = /[A-Za-z]/;\nvar CRLF = /\\r\\n?/g;\n\nfunction isSpace(char) {\n  return WSP.test(char);\n}\n\nfunction isAlpha(char) {\n  return ALPHA.test(char);\n}\n\nfunction preprocessInput(input) {\n  return input.replace(CRLF, '\\n');\n}\n\nvar EventedTokenizer =\n/** @class */\nfunction () {\n  function EventedTokenizer(delegate, entityParser, mode) {\n    if (mode === void 0) {\n      mode = 'precompile';\n    }\n\n    this.delegate = delegate;\n    this.entityParser = entityParser;\n    this.mode = mode;\n    this.state = \"beforeData\"\n    /* beforeData */\n    ;\n    this.line = -1;\n    this.column = -1;\n    this.input = '';\n    this.index = -1;\n    this.tagNameBuffer = '';\n    this.states = {\n      beforeData: function beforeData() {\n        var char = this.peek();\n\n        if (char === '<' && !this.isIgnoredEndTag()) {\n          this.transitionTo(\"tagOpen\"\n          /* tagOpen */\n          );\n          this.markTagStart();\n          this.consume();\n        } else {\n          if (this.mode === 'precompile' && char === '\\n') {\n            var tag = this.tagNameBuffer.toLowerCase();\n\n            if (tag === 'pre' || tag === 'textarea') {\n              this.consume();\n            }\n          }\n\n          this.transitionTo(\"data\"\n          /* data */\n          );\n          this.delegate.beginData();\n        }\n      },\n      data: function data() {\n        var char = this.peek();\n        var tag = this.tagNameBuffer;\n\n        if (char === '<' && !this.isIgnoredEndTag()) {\n          this.delegate.finishData();\n          this.transitionTo(\"tagOpen\"\n          /* tagOpen */\n          );\n          this.markTagStart();\n          this.consume();\n        } else if (char === '&' && tag !== 'script' && tag !== 'style') {\n          this.consume();\n          this.delegate.appendToData(this.consumeCharRef() || '&');\n        } else {\n          this.consume();\n          this.delegate.appendToData(char);\n        }\n      },\n      tagOpen: function tagOpen() {\n        var char = this.consume();\n\n        if (char === '!') {\n          this.transitionTo(\"markupDeclarationOpen\"\n          /* markupDeclarationOpen */\n          );\n        } else if (char === '/') {\n          this.transitionTo(\"endTagOpen\"\n          /* endTagOpen */\n          );\n        } else if (char === '@' || char === ':' || isAlpha(char)) {\n          this.transitionTo(\"tagName\"\n          /* tagName */\n          );\n          this.tagNameBuffer = '';\n          this.delegate.beginStartTag();\n          this.appendToTagName(char);\n        }\n      },\n      markupDeclarationOpen: function markupDeclarationOpen() {\n        var char = this.consume();\n\n        if (char === '-' && this.peek() === '-') {\n          this.consume();\n          this.transitionTo(\"commentStart\"\n          /* commentStart */\n          );\n          this.delegate.beginComment();\n        } else {\n          var maybeDoctype = char.toUpperCase() + this.input.substring(this.index, this.index + 6).toUpperCase();\n\n          if (maybeDoctype === 'DOCTYPE') {\n            this.consume();\n            this.consume();\n            this.consume();\n            this.consume();\n            this.consume();\n            this.consume();\n            this.transitionTo(\"doctype\"\n            /* doctype */\n            );\n            if (this.delegate.beginDoctype) this.delegate.beginDoctype();\n          }\n        }\n      },\n      doctype: function doctype() {\n        var char = this.consume();\n\n        if (isSpace(char)) {\n          this.transitionTo(\"beforeDoctypeName\"\n          /* beforeDoctypeName */\n          );\n        }\n      },\n      beforeDoctypeName: function beforeDoctypeName() {\n        var char = this.consume();\n\n        if (isSpace(char)) {\n          return;\n        } else {\n          this.transitionTo(\"doctypeName\"\n          /* doctypeName */\n          );\n          if (this.delegate.appendToDoctypeName) this.delegate.appendToDoctypeName(char.toLowerCase());\n        }\n      },\n      doctypeName: function doctypeName() {\n        var char = this.consume();\n\n        if (isSpace(char)) {\n          this.transitionTo(\"afterDoctypeName\"\n          /* afterDoctypeName */\n          );\n        } else if (char === '>') {\n          if (this.delegate.endDoctype) this.delegate.endDoctype();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          if (this.delegate.appendToDoctypeName) this.delegate.appendToDoctypeName(char.toLowerCase());\n        }\n      },\n      afterDoctypeName: function afterDoctypeName() {\n        var char = this.consume();\n\n        if (isSpace(char)) {\n          return;\n        } else if (char === '>') {\n          if (this.delegate.endDoctype) this.delegate.endDoctype();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          var nextSixChars = char.toUpperCase() + this.input.substring(this.index, this.index + 5).toUpperCase();\n          var isPublic = nextSixChars.toUpperCase() === 'PUBLIC';\n          var isSystem = nextSixChars.toUpperCase() === 'SYSTEM';\n\n          if (isPublic || isSystem) {\n            this.consume();\n            this.consume();\n            this.consume();\n            this.consume();\n            this.consume();\n            this.consume();\n          }\n\n          if (isPublic) {\n            this.transitionTo(\"afterDoctypePublicKeyword\"\n            /* afterDoctypePublicKeyword */\n            );\n          } else if (isSystem) {\n            this.transitionTo(\"afterDoctypeSystemKeyword\"\n            /* afterDoctypeSystemKeyword */\n            );\n          }\n        }\n      },\n      afterDoctypePublicKeyword: function afterDoctypePublicKeyword() {\n        var char = this.peek();\n\n        if (isSpace(char)) {\n          this.transitionTo(\"beforeDoctypePublicIdentifier\"\n          /* beforeDoctypePublicIdentifier */\n          );\n          this.consume();\n        } else if (char === '\"') {\n          this.transitionTo(\"doctypePublicIdentifierDoubleQuoted\"\n          /* doctypePublicIdentifierDoubleQuoted */\n          );\n          this.consume();\n        } else if (char === \"'\") {\n          this.transitionTo(\"doctypePublicIdentifierSingleQuoted\"\n          /* doctypePublicIdentifierSingleQuoted */\n          );\n          this.consume();\n        } else if (char === '>') {\n          this.consume();\n          if (this.delegate.endDoctype) this.delegate.endDoctype();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        }\n      },\n      doctypePublicIdentifierDoubleQuoted: function doctypePublicIdentifierDoubleQuoted() {\n        var char = this.consume();\n\n        if (char === '\"') {\n          this.transitionTo(\"afterDoctypePublicIdentifier\"\n          /* afterDoctypePublicIdentifier */\n          );\n        } else if (char === '>') {\n          if (this.delegate.endDoctype) this.delegate.endDoctype();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          if (this.delegate.appendToDoctypePublicIdentifier) this.delegate.appendToDoctypePublicIdentifier(char);\n        }\n      },\n      doctypePublicIdentifierSingleQuoted: function doctypePublicIdentifierSingleQuoted() {\n        var char = this.consume();\n\n        if (char === \"'\") {\n          this.transitionTo(\"afterDoctypePublicIdentifier\"\n          /* afterDoctypePublicIdentifier */\n          );\n        } else if (char === '>') {\n          if (this.delegate.endDoctype) this.delegate.endDoctype();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          if (this.delegate.appendToDoctypePublicIdentifier) this.delegate.appendToDoctypePublicIdentifier(char);\n        }\n      },\n      afterDoctypePublicIdentifier: function afterDoctypePublicIdentifier() {\n        var char = this.consume();\n\n        if (isSpace(char)) {\n          this.transitionTo(\"betweenDoctypePublicAndSystemIdentifiers\"\n          /* betweenDoctypePublicAndSystemIdentifiers */\n          );\n        } else if (char === '>') {\n          if (this.delegate.endDoctype) this.delegate.endDoctype();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else if (char === '\"') {\n          this.transitionTo(\"doctypeSystemIdentifierDoubleQuoted\"\n          /* doctypeSystemIdentifierDoubleQuoted */\n          );\n        } else if (char === \"'\") {\n          this.transitionTo(\"doctypeSystemIdentifierSingleQuoted\"\n          /* doctypeSystemIdentifierSingleQuoted */\n          );\n        }\n      },\n      betweenDoctypePublicAndSystemIdentifiers: function betweenDoctypePublicAndSystemIdentifiers() {\n        var char = this.consume();\n\n        if (isSpace(char)) {\n          return;\n        } else if (char === '>') {\n          if (this.delegate.endDoctype) this.delegate.endDoctype();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else if (char === '\"') {\n          this.transitionTo(\"doctypeSystemIdentifierDoubleQuoted\"\n          /* doctypeSystemIdentifierDoubleQuoted */\n          );\n        } else if (char === \"'\") {\n          this.transitionTo(\"doctypeSystemIdentifierSingleQuoted\"\n          /* doctypeSystemIdentifierSingleQuoted */\n          );\n        }\n      },\n      doctypeSystemIdentifierDoubleQuoted: function doctypeSystemIdentifierDoubleQuoted() {\n        var char = this.consume();\n\n        if (char === '\"') {\n          this.transitionTo(\"afterDoctypeSystemIdentifier\"\n          /* afterDoctypeSystemIdentifier */\n          );\n        } else if (char === '>') {\n          if (this.delegate.endDoctype) this.delegate.endDoctype();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          if (this.delegate.appendToDoctypeSystemIdentifier) this.delegate.appendToDoctypeSystemIdentifier(char);\n        }\n      },\n      doctypeSystemIdentifierSingleQuoted: function doctypeSystemIdentifierSingleQuoted() {\n        var char = this.consume();\n\n        if (char === \"'\") {\n          this.transitionTo(\"afterDoctypeSystemIdentifier\"\n          /* afterDoctypeSystemIdentifier */\n          );\n        } else if (char === '>') {\n          if (this.delegate.endDoctype) this.delegate.endDoctype();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          if (this.delegate.appendToDoctypeSystemIdentifier) this.delegate.appendToDoctypeSystemIdentifier(char);\n        }\n      },\n      afterDoctypeSystemIdentifier: function afterDoctypeSystemIdentifier() {\n        var char = this.consume();\n\n        if (isSpace(char)) {\n          return;\n        } else if (char === '>') {\n          if (this.delegate.endDoctype) this.delegate.endDoctype();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        }\n      },\n      commentStart: function commentStart() {\n        var char = this.consume();\n\n        if (char === '-') {\n          this.transitionTo(\"commentStartDash\"\n          /* commentStartDash */\n          );\n        } else if (char === '>') {\n          this.delegate.finishComment();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          this.delegate.appendToCommentData(char);\n          this.transitionTo(\"comment\"\n          /* comment */\n          );\n        }\n      },\n      commentStartDash: function commentStartDash() {\n        var char = this.consume();\n\n        if (char === '-') {\n          this.transitionTo(\"commentEnd\"\n          /* commentEnd */\n          );\n        } else if (char === '>') {\n          this.delegate.finishComment();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          this.delegate.appendToCommentData('-');\n          this.transitionTo(\"comment\"\n          /* comment */\n          );\n        }\n      },\n      comment: function comment() {\n        var char = this.consume();\n\n        if (char === '-') {\n          this.transitionTo(\"commentEndDash\"\n          /* commentEndDash */\n          );\n        } else {\n          this.delegate.appendToCommentData(char);\n        }\n      },\n      commentEndDash: function commentEndDash() {\n        var char = this.consume();\n\n        if (char === '-') {\n          this.transitionTo(\"commentEnd\"\n          /* commentEnd */\n          );\n        } else {\n          this.delegate.appendToCommentData('-' + char);\n          this.transitionTo(\"comment\"\n          /* comment */\n          );\n        }\n      },\n      commentEnd: function commentEnd() {\n        var char = this.consume();\n\n        if (char === '>') {\n          this.delegate.finishComment();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          this.delegate.appendToCommentData('--' + char);\n          this.transitionTo(\"comment\"\n          /* comment */\n          );\n        }\n      },\n      tagName: function tagName() {\n        var char = this.consume();\n\n        if (isSpace(char)) {\n          this.transitionTo(\"beforeAttributeName\"\n          /* beforeAttributeName */\n          );\n        } else if (char === '/') {\n          this.transitionTo(\"selfClosingStartTag\"\n          /* selfClosingStartTag */\n          );\n        } else if (char === '>') {\n          this.delegate.finishTag();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          this.appendToTagName(char);\n        }\n      },\n      endTagName: function endTagName() {\n        var char = this.consume();\n\n        if (isSpace(char)) {\n          this.transitionTo(\"beforeAttributeName\"\n          /* beforeAttributeName */\n          );\n          this.tagNameBuffer = '';\n        } else if (char === '/') {\n          this.transitionTo(\"selfClosingStartTag\"\n          /* selfClosingStartTag */\n          );\n          this.tagNameBuffer = '';\n        } else if (char === '>') {\n          this.delegate.finishTag();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n          this.tagNameBuffer = '';\n        } else {\n          this.appendToTagName(char);\n        }\n      },\n      beforeAttributeName: function beforeAttributeName() {\n        var char = this.peek();\n\n        if (isSpace(char)) {\n          this.consume();\n          return;\n        } else if (char === '/') {\n          this.transitionTo(\"selfClosingStartTag\"\n          /* selfClosingStartTag */\n          );\n          this.consume();\n        } else if (char === '>') {\n          this.consume();\n          this.delegate.finishTag();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else if (char === '=') {\n          this.delegate.reportSyntaxError('attribute name cannot start with equals sign');\n          this.transitionTo(\"attributeName\"\n          /* attributeName */\n          );\n          this.delegate.beginAttribute();\n          this.consume();\n          this.delegate.appendToAttributeName(char);\n        } else {\n          this.transitionTo(\"attributeName\"\n          /* attributeName */\n          );\n          this.delegate.beginAttribute();\n        }\n      },\n      attributeName: function attributeName() {\n        var char = this.peek();\n\n        if (isSpace(char)) {\n          this.transitionTo(\"afterAttributeName\"\n          /* afterAttributeName */\n          );\n          this.consume();\n        } else if (char === '/') {\n          this.delegate.beginAttributeValue(false);\n          this.delegate.finishAttributeValue();\n          this.consume();\n          this.transitionTo(\"selfClosingStartTag\"\n          /* selfClosingStartTag */\n          );\n        } else if (char === '=') {\n          this.transitionTo(\"beforeAttributeValue\"\n          /* beforeAttributeValue */\n          );\n          this.consume();\n        } else if (char === '>') {\n          this.delegate.beginAttributeValue(false);\n          this.delegate.finishAttributeValue();\n          this.consume();\n          this.delegate.finishTag();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else if (char === '\"' || char === \"'\" || char === '<') {\n          this.delegate.reportSyntaxError(char + ' is not a valid character within attribute names');\n          this.consume();\n          this.delegate.appendToAttributeName(char);\n        } else {\n          this.consume();\n          this.delegate.appendToAttributeName(char);\n        }\n      },\n      afterAttributeName: function afterAttributeName() {\n        var char = this.peek();\n\n        if (isSpace(char)) {\n          this.consume();\n          return;\n        } else if (char === '/') {\n          this.delegate.beginAttributeValue(false);\n          this.delegate.finishAttributeValue();\n          this.consume();\n          this.transitionTo(\"selfClosingStartTag\"\n          /* selfClosingStartTag */\n          );\n        } else if (char === '=') {\n          this.consume();\n          this.transitionTo(\"beforeAttributeValue\"\n          /* beforeAttributeValue */\n          );\n        } else if (char === '>') {\n          this.delegate.beginAttributeValue(false);\n          this.delegate.finishAttributeValue();\n          this.consume();\n          this.delegate.finishTag();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          this.delegate.beginAttributeValue(false);\n          this.delegate.finishAttributeValue();\n          this.transitionTo(\"attributeName\"\n          /* attributeName */\n          );\n          this.delegate.beginAttribute();\n          this.consume();\n          this.delegate.appendToAttributeName(char);\n        }\n      },\n      beforeAttributeValue: function beforeAttributeValue() {\n        var char = this.peek();\n\n        if (isSpace(char)) {\n          this.consume();\n        } else if (char === '\"') {\n          this.transitionTo(\"attributeValueDoubleQuoted\"\n          /* attributeValueDoubleQuoted */\n          );\n          this.delegate.beginAttributeValue(true);\n          this.consume();\n        } else if (char === \"'\") {\n          this.transitionTo(\"attributeValueSingleQuoted\"\n          /* attributeValueSingleQuoted */\n          );\n          this.delegate.beginAttributeValue(true);\n          this.consume();\n        } else if (char === '>') {\n          this.delegate.beginAttributeValue(false);\n          this.delegate.finishAttributeValue();\n          this.consume();\n          this.delegate.finishTag();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          this.transitionTo(\"attributeValueUnquoted\"\n          /* attributeValueUnquoted */\n          );\n          this.delegate.beginAttributeValue(false);\n          this.consume();\n          this.delegate.appendToAttributeValue(char);\n        }\n      },\n      attributeValueDoubleQuoted: function attributeValueDoubleQuoted() {\n        var char = this.consume();\n\n        if (char === '\"') {\n          this.delegate.finishAttributeValue();\n          this.transitionTo(\"afterAttributeValueQuoted\"\n          /* afterAttributeValueQuoted */\n          );\n        } else if (char === '&') {\n          this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n        } else {\n          this.delegate.appendToAttributeValue(char);\n        }\n      },\n      attributeValueSingleQuoted: function attributeValueSingleQuoted() {\n        var char = this.consume();\n\n        if (char === \"'\") {\n          this.delegate.finishAttributeValue();\n          this.transitionTo(\"afterAttributeValueQuoted\"\n          /* afterAttributeValueQuoted */\n          );\n        } else if (char === '&') {\n          this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n        } else {\n          this.delegate.appendToAttributeValue(char);\n        }\n      },\n      attributeValueUnquoted: function attributeValueUnquoted() {\n        var char = this.peek();\n\n        if (isSpace(char)) {\n          this.delegate.finishAttributeValue();\n          this.consume();\n          this.transitionTo(\"beforeAttributeName\"\n          /* beforeAttributeName */\n          );\n        } else if (char === '/') {\n          this.delegate.finishAttributeValue();\n          this.consume();\n          this.transitionTo(\"selfClosingStartTag\"\n          /* selfClosingStartTag */\n          );\n        } else if (char === '&') {\n          this.consume();\n          this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n        } else if (char === '>') {\n          this.delegate.finishAttributeValue();\n          this.consume();\n          this.delegate.finishTag();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          this.consume();\n          this.delegate.appendToAttributeValue(char);\n        }\n      },\n      afterAttributeValueQuoted: function afterAttributeValueQuoted() {\n        var char = this.peek();\n\n        if (isSpace(char)) {\n          this.consume();\n          this.transitionTo(\"beforeAttributeName\"\n          /* beforeAttributeName */\n          );\n        } else if (char === '/') {\n          this.consume();\n          this.transitionTo(\"selfClosingStartTag\"\n          /* selfClosingStartTag */\n          );\n        } else if (char === '>') {\n          this.consume();\n          this.delegate.finishTag();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          this.transitionTo(\"beforeAttributeName\"\n          /* beforeAttributeName */\n          );\n        }\n      },\n      selfClosingStartTag: function selfClosingStartTag() {\n        var char = this.peek();\n\n        if (char === '>') {\n          this.consume();\n          this.delegate.markTagAsSelfClosing();\n          this.delegate.finishTag();\n          this.transitionTo(\"beforeData\"\n          /* beforeData */\n          );\n        } else {\n          this.transitionTo(\"beforeAttributeName\"\n          /* beforeAttributeName */\n          );\n        }\n      },\n      endTagOpen: function endTagOpen() {\n        var char = this.consume();\n\n        if (char === '@' || char === ':' || isAlpha(char)) {\n          this.transitionTo(\"endTagName\"\n          /* endTagName */\n          );\n          this.tagNameBuffer = '';\n          this.delegate.beginEndTag();\n          this.appendToTagName(char);\n        }\n      }\n    };\n    this.reset();\n  }\n\n  EventedTokenizer.prototype.reset = function () {\n    this.transitionTo(\"beforeData\"\n    /* beforeData */\n    );\n    this.input = '';\n    this.tagNameBuffer = '';\n    this.index = 0;\n    this.line = 1;\n    this.column = 0;\n    this.delegate.reset();\n  };\n\n  EventedTokenizer.prototype.transitionTo = function (state) {\n    this.state = state;\n  };\n\n  EventedTokenizer.prototype.tokenize = function (input) {\n    this.reset();\n    this.tokenizePart(input);\n    this.tokenizeEOF();\n  };\n\n  EventedTokenizer.prototype.tokenizePart = function (input) {\n    this.input += preprocessInput(input);\n\n    while (this.index < this.input.length) {\n      var handler = this.states[this.state];\n\n      if (handler !== undefined) {\n        handler.call(this);\n      } else {\n        throw new Error(\"unhandled state \" + this.state);\n      }\n    }\n  };\n\n  EventedTokenizer.prototype.tokenizeEOF = function () {\n    this.flushData();\n  };\n\n  EventedTokenizer.prototype.flushData = function () {\n    if (this.state === 'data') {\n      this.delegate.finishData();\n      this.transitionTo(\"beforeData\"\n      /* beforeData */\n      );\n    }\n  };\n\n  EventedTokenizer.prototype.peek = function () {\n    return this.input.charAt(this.index);\n  };\n\n  EventedTokenizer.prototype.consume = function () {\n    var char = this.peek();\n    this.index++;\n\n    if (char === '\\n') {\n      this.line++;\n      this.column = 0;\n    } else {\n      this.column++;\n    }\n\n    return char;\n  };\n\n  EventedTokenizer.prototype.consumeCharRef = function () {\n    var endIndex = this.input.indexOf(';', this.index);\n\n    if (endIndex === -1) {\n      return;\n    }\n\n    var entity = this.input.slice(this.index, endIndex);\n    var chars = this.entityParser.parse(entity);\n\n    if (chars) {\n      var count = entity.length; // consume the entity chars\n\n      while (count) {\n        this.consume();\n        count--;\n      } // consume the `;`\n\n\n      this.consume();\n      return chars;\n    }\n  };\n\n  EventedTokenizer.prototype.markTagStart = function () {\n    this.delegate.tagOpen();\n  };\n\n  EventedTokenizer.prototype.appendToTagName = function (char) {\n    this.tagNameBuffer += char;\n    this.delegate.appendToTagName(char);\n  };\n\n  EventedTokenizer.prototype.isIgnoredEndTag = function () {\n    var tag = this.tagNameBuffer;\n    return tag === 'title' && this.input.substring(this.index, this.index + 8) !== '</title>' || tag === 'style' && this.input.substring(this.index, this.index + 8) !== '</style>' || tag === 'script' && this.input.substring(this.index, this.index + 9) !== '</script>';\n  };\n\n  return EventedTokenizer;\n}();\n\nvar Tokenizer =\n/** @class */\nfunction () {\n  function Tokenizer(entityParser, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    this.options = options;\n    this.token = null;\n    this.startLine = 1;\n    this.startColumn = 0;\n    this.tokens = [];\n    this.tokenizer = new EventedTokenizer(this, entityParser, options.mode);\n    this._currentAttribute = undefined;\n  }\n\n  Tokenizer.prototype.tokenize = function (input) {\n    this.tokens = [];\n    this.tokenizer.tokenize(input);\n    return this.tokens;\n  };\n\n  Tokenizer.prototype.tokenizePart = function (input) {\n    this.tokens = [];\n    this.tokenizer.tokenizePart(input);\n    return this.tokens;\n  };\n\n  Tokenizer.prototype.tokenizeEOF = function () {\n    this.tokens = [];\n    this.tokenizer.tokenizeEOF();\n    return this.tokens[0];\n  };\n\n  Tokenizer.prototype.reset = function () {\n    this.token = null;\n    this.startLine = 1;\n    this.startColumn = 0;\n  };\n\n  Tokenizer.prototype.current = function () {\n    var token = this.token;\n\n    if (token === null) {\n      throw new Error('token was unexpectedly null');\n    }\n\n    if (arguments.length === 0) {\n      return token;\n    }\n\n    for (var i = 0; i < arguments.length; i++) {\n      if (token.type === arguments[i]) {\n        return token;\n      }\n    }\n\n    throw new Error(\"token type was unexpectedly \" + token.type);\n  };\n\n  Tokenizer.prototype.push = function (token) {\n    this.token = token;\n    this.tokens.push(token);\n  };\n\n  Tokenizer.prototype.currentAttribute = function () {\n    return this._currentAttribute;\n  };\n\n  Tokenizer.prototype.addLocInfo = function () {\n    if (this.options.loc) {\n      this.current().loc = {\n        start: {\n          line: this.startLine,\n          column: this.startColumn\n        },\n        end: {\n          line: this.tokenizer.line,\n          column: this.tokenizer.column\n        }\n      };\n    }\n\n    this.startLine = this.tokenizer.line;\n    this.startColumn = this.tokenizer.column;\n  }; // Data\n\n\n  Tokenizer.prototype.beginDoctype = function () {\n    this.push({\n      type: \"Doctype\"\n      /* Doctype */\n      ,\n      name: ''\n    });\n  };\n\n  Tokenizer.prototype.appendToDoctypeName = function (char) {\n    this.current(\"Doctype\"\n    /* Doctype */\n    ).name += char;\n  };\n\n  Tokenizer.prototype.appendToDoctypePublicIdentifier = function (char) {\n    var doctype = this.current(\"Doctype\"\n    /* Doctype */\n    );\n\n    if (doctype.publicIdentifier === undefined) {\n      doctype.publicIdentifier = char;\n    } else {\n      doctype.publicIdentifier += char;\n    }\n  };\n\n  Tokenizer.prototype.appendToDoctypeSystemIdentifier = function (char) {\n    var doctype = this.current(\"Doctype\"\n    /* Doctype */\n    );\n\n    if (doctype.systemIdentifier === undefined) {\n      doctype.systemIdentifier = char;\n    } else {\n      doctype.systemIdentifier += char;\n    }\n  };\n\n  Tokenizer.prototype.endDoctype = function () {\n    this.addLocInfo();\n  };\n\n  Tokenizer.prototype.beginData = function () {\n    this.push({\n      type: \"Chars\"\n      /* Chars */\n      ,\n      chars: ''\n    });\n  };\n\n  Tokenizer.prototype.appendToData = function (char) {\n    this.current(\"Chars\"\n    /* Chars */\n    ).chars += char;\n  };\n\n  Tokenizer.prototype.finishData = function () {\n    this.addLocInfo();\n  }; // Comment\n\n\n  Tokenizer.prototype.beginComment = function () {\n    this.push({\n      type: \"Comment\"\n      /* Comment */\n      ,\n      chars: ''\n    });\n  };\n\n  Tokenizer.prototype.appendToCommentData = function (char) {\n    this.current(\"Comment\"\n    /* Comment */\n    ).chars += char;\n  };\n\n  Tokenizer.prototype.finishComment = function () {\n    this.addLocInfo();\n  }; // Tags - basic\n\n\n  Tokenizer.prototype.tagOpen = function () {};\n\n  Tokenizer.prototype.beginStartTag = function () {\n    this.push({\n      type: \"StartTag\"\n      /* StartTag */\n      ,\n      tagName: '',\n      attributes: [],\n      selfClosing: false\n    });\n  };\n\n  Tokenizer.prototype.beginEndTag = function () {\n    this.push({\n      type: \"EndTag\"\n      /* EndTag */\n      ,\n      tagName: ''\n    });\n  };\n\n  Tokenizer.prototype.finishTag = function () {\n    this.addLocInfo();\n  };\n\n  Tokenizer.prototype.markTagAsSelfClosing = function () {\n    this.current(\"StartTag\"\n    /* StartTag */\n    ).selfClosing = true;\n  }; // Tags - name\n\n\n  Tokenizer.prototype.appendToTagName = function (char) {\n    this.current(\"StartTag\"\n    /* StartTag */\n    , \"EndTag\"\n    /* EndTag */\n    ).tagName += char;\n  }; // Tags - attributes\n\n\n  Tokenizer.prototype.beginAttribute = function () {\n    this._currentAttribute = ['', '', false];\n  };\n\n  Tokenizer.prototype.appendToAttributeName = function (char) {\n    this.currentAttribute()[0] += char;\n  };\n\n  Tokenizer.prototype.beginAttributeValue = function (isQuoted) {\n    this.currentAttribute()[2] = isQuoted;\n  };\n\n  Tokenizer.prototype.appendToAttributeValue = function (char) {\n    this.currentAttribute()[1] += char;\n  };\n\n  Tokenizer.prototype.finishAttributeValue = function () {\n    this.current(\"StartTag\"\n    /* StartTag */\n    ).attributes.push(this._currentAttribute);\n  };\n\n  Tokenizer.prototype.reportSyntaxError = function (message) {\n    this.current().syntaxError = message;\n  };\n\n  return Tokenizer;\n}();\n\nfunction tokenize(input, options) {\n  var tokenizer = new Tokenizer(new EntityParser(HTML5NamedCharRefs), options);\n  return tokenizer.tokenize(input);\n}\n\nvar Options = linkify.Options;\nvar StartTag = 'StartTag';\nvar EndTag = 'EndTag';\nvar Chars = 'Chars';\nvar Comment = 'Comment';\nvar Doctype = 'Doctype';\n/**\n * @param {string} str html string to link\n * @param {object} [opts] linkify options\n * @returns {string} resulting string\n */\n\nfunction linkifyHtml(str) {\n  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  // `tokens` and `token` in this section refer to tokens generated by the\n  // HTML parser, not linkify's parser\n  var tokens = tokenize(str);\n  var linkifiedTokens = [];\n  var linkified = [];\n  opts = new Options(opts); // Linkify the tokens given by the parser\n\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i];\n\n    if (token.type === StartTag) {\n      linkifiedTokens.push(token); // Ignore all the contents of ignored tags\n\n      var tagName = token.tagName.toUpperCase();\n      var isIgnored = tagName === 'A' || opts.ignoreTags.indexOf(tagName) >= 0;\n\n      if (!isIgnored) {\n        continue;\n      }\n\n      var preskipLen = linkifiedTokens.length;\n      skipTagTokens(tagName, tokens, ++i, linkifiedTokens);\n      i += linkifiedTokens.length - preskipLen - 1;\n      continue;\n    } else if (token.type !== Chars) {\n      // Skip this token, it's not important\n      linkifiedTokens.push(token);\n      continue;\n    } // Valid text token, linkify it!\n\n\n    var linkifedChars = linkifyChars(token.chars, opts);\n    linkifiedTokens.push.apply(linkifiedTokens, linkifedChars);\n  } // Convert the tokens back into a string\n\n\n  for (var _i = 0; _i < linkifiedTokens.length; _i++) {\n    var _token = linkifiedTokens[_i];\n\n    switch (_token.type) {\n      case StartTag:\n        {\n          var link = '<' + _token.tagName;\n\n          if (_token.attributes.length > 0) {\n            var attrs = attrsToStrings(_token.attributes);\n            link += ' ' + attrs.join(' ');\n          }\n\n          link += '>';\n          linkified.push(link);\n          break;\n        }\n\n      case EndTag:\n        linkified.push(\"</\".concat(_token.tagName, \">\"));\n        break;\n\n      case Chars:\n        linkified.push(escapeText(_token.chars));\n        break;\n\n      case Comment:\n        linkified.push(\"<!--\".concat(escapeText(_token.chars), \"-->\"));\n        break;\n\n      case Doctype:\n        {\n          var doctype = \"<!DOCTYPE \".concat(_token.name);\n\n          if (_token.publicIdentifier) {\n            doctype += \" PUBLIC \\\"\".concat(_token.publicIdentifier, \"\\\"\");\n          }\n\n          if (_token.systemIdentifier) {\n            doctype += \" \\\"\".concat(_token.systemIdentifier, \"\\\"\");\n          }\n\n          doctype += '>';\n          linkified.push(doctype);\n          break;\n        }\n    }\n  }\n\n  return linkified.join('');\n}\n/**\n\t`tokens` and `token` in this section referes to tokens returned by\n\t`linkify.tokenize`. `linkified` will contain HTML Parser-style tokens\n*/\n\nfunction linkifyChars(str, opts) {\n  var tokens = linkify.tokenize(str);\n  var result = [];\n\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i];\n\n    if (token.t === 'nl' && opts.nl2br) {\n      result.push({\n        type: StartTag,\n        tagName: 'br',\n        attributes: [],\n        selfClosing: true\n      });\n      continue;\n    } else if (!token.isLink || !opts.check(token)) {\n      result.push({\n        type: Chars,\n        chars: token.toString()\n      });\n      continue;\n    }\n\n    var _opts$resolve = opts.resolve(token),\n        formatted = _opts$resolve.formatted,\n        formattedHref = _opts$resolve.formattedHref,\n        tagName = _opts$resolve.tagName,\n        className = _opts$resolve.className,\n        target = _opts$resolve.target,\n        rel = _opts$resolve.rel,\n        attributes = _opts$resolve.attributes,\n        truncate = _opts$resolve.truncate; // Build up attributes\n\n\n    var attributeArray = [['href', formattedHref]];\n\n    if (className) {\n      attributeArray.push(['class', className]);\n    }\n\n    if (target) {\n      attributeArray.push(['target', target]);\n    }\n\n    if (rel) {\n      attributeArray.push(['rel', rel]);\n    }\n\n    if (truncate && formatted.length > truncate) {\n      formatted = formatted.substring(0, truncate) + '…';\n    }\n\n    for (var attr in attributes) {\n      attributeArray.push([attr, attributes[attr]]);\n    } // Add the required tokens\n\n\n    result.push({\n      type: StartTag,\n      tagName: tagName,\n      attributes: attributeArray,\n      selfClosing: false\n    });\n    result.push({\n      type: Chars,\n      chars: formatted\n    });\n    result.push({\n      type: EndTag,\n      tagName: tagName\n    });\n  }\n\n  return result;\n}\n/**\n\tReturns a list of tokens skipped until the closing tag of tagName.\n\n\t* `tagName` is the closing tag which will prompt us to stop skipping\n\t* `tokens` is the array of tokens generated by HTML5Tokenizer which\n\t* `i` is the index immediately after the opening tag to skip\n\t* `skippedTokens` is an array which skipped tokens are being pushed into\n\n\tCaveats\n\n\t* Assumes that i is the first token after the given opening tagName\n\t* The closing tag will be skipped, but nothing after it\n\t* Will track whether there is a nested tag of the same type\n*/\n\n\nfunction skipTagTokens(tagName, tokens, i, skippedTokens) {\n  // number of tokens of this type on the [fictional] stack\n  var stackCount = 1;\n\n  while (i < tokens.length && stackCount > 0) {\n    var token = tokens[i];\n\n    if (token.type === StartTag && token.tagName.toUpperCase() === tagName) {\n      // Nested tag of the same type, \"add to stack\"\n      stackCount++;\n    } else if (token.type === EndTag && token.tagName.toUpperCase() === tagName) {\n      // Closing tag\n      stackCount--;\n    }\n\n    skippedTokens.push(token);\n    i++;\n  } // Note that if stackCount > 0 here, the HTML is probably invalid\n\n\n  return skippedTokens;\n}\n\nfunction escapeText(text) {\n  // Not required, HTML tokenizer ensures this occurs properly\n  return text;\n}\n\nfunction escapeAttr(attr) {\n  return attr.replace(/\"/g, '&quot;');\n}\n\nfunction attrsToStrings(attrs) {\n  var attrStrs = [];\n\n  for (var i = 0; i < attrs.length; i++) {\n    var name = attrs[i][0];\n    var value = attrs[i][1];\n    attrStrs.push(\"\".concat(name, \"=\\\"\").concat(escapeAttr(value), \"\\\"\"));\n  }\n\n  return attrStrs;\n}\n\nexport { linkifyHtml as default };\n","/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nfunction getDefaultWhiteList () {\n  // 白名单值说明:\n  // true: 允许该属性\n  // Function: function (val) { } 返回true表示允许该属性,其他值均表示不允许\n  // RegExp: regexp.test(val) 返回true表示允许该属性,其他值均表示不允许\n  // 除上面列出的值外均表示不允许\n  var whiteList = {};\n\n  whiteList['align-content'] = false; // default: auto\n  whiteList['align-items'] = false; // default: auto\n  whiteList['align-self'] = false; // default: auto\n  whiteList['alignment-adjust'] = false; // default: auto\n  whiteList['alignment-baseline'] = false; // default: baseline\n  whiteList['all'] = false; // default: depending on individual properties\n  whiteList['anchor-point'] = false; // default: none\n  whiteList['animation'] = false; // default: depending on individual properties\n  whiteList['animation-delay'] = false; // default: 0\n  whiteList['animation-direction'] = false; // default: normal\n  whiteList['animation-duration'] = false; // default: 0\n  whiteList['animation-fill-mode'] = false; // default: none\n  whiteList['animation-iteration-count'] = false; // default: 1\n  whiteList['animation-name'] = false; // default: none\n  whiteList['animation-play-state'] = false; // default: running\n  whiteList['animation-timing-function'] = false; // default: ease\n  whiteList['azimuth'] = false; // default: center\n  whiteList['backface-visibility'] = false; // default: visible\n  whiteList['background'] = true; // default: depending on individual properties\n  whiteList['background-attachment'] = true; // default: scroll\n  whiteList['background-clip'] = true; // default: border-box\n  whiteList['background-color'] = true; // default: transparent\n  whiteList['background-image'] = true; // default: none\n  whiteList['background-origin'] = true; // default: padding-box\n  whiteList['background-position'] = true; // default: 0% 0%\n  whiteList['background-repeat'] = true; // default: repeat\n  whiteList['background-size'] = true; // default: auto\n  whiteList['baseline-shift'] = false; // default: baseline\n  whiteList['binding'] = false; // default: none\n  whiteList['bleed'] = false; // default: 6pt\n  whiteList['bookmark-label'] = false; // default: content()\n  whiteList['bookmark-level'] = false; // default: none\n  whiteList['bookmark-state'] = false; // default: open\n  whiteList['border'] = true; // default: depending on individual properties\n  whiteList['border-bottom'] = true; // default: depending on individual properties\n  whiteList['border-bottom-color'] = true; // default: current color\n  whiteList['border-bottom-left-radius'] = true; // default: 0\n  whiteList['border-bottom-right-radius'] = true; // default: 0\n  whiteList['border-bottom-style'] = true; // default: none\n  whiteList['border-bottom-width'] = true; // default: medium\n  whiteList['border-collapse'] = true; // default: separate\n  whiteList['border-color'] = true; // default: depending on individual properties\n  whiteList['border-image'] = true; // default: none\n  whiteList['border-image-outset'] = true; // default: 0\n  whiteList['border-image-repeat'] = true; // default: stretch\n  whiteList['border-image-slice'] = true; // default: 100%\n  whiteList['border-image-source'] = true; // default: none\n  whiteList['border-image-width'] = true; // default: 1\n  whiteList['border-left'] = true; // default: depending on individual properties\n  whiteList['border-left-color'] = true; // default: current color\n  whiteList['border-left-style'] = true; // default: none\n  whiteList['border-left-width'] = true; // default: medium\n  whiteList['border-radius'] = true; // default: 0\n  whiteList['border-right'] = true; // default: depending on individual properties\n  whiteList['border-right-color'] = true; // default: current color\n  whiteList['border-right-style'] = true; // default: none\n  whiteList['border-right-width'] = true; // default: medium\n  whiteList['border-spacing'] = true; // default: 0\n  whiteList['border-style'] = true; // default: depending on individual properties\n  whiteList['border-top'] = true; // default: depending on individual properties\n  whiteList['border-top-color'] = true; // default: current color\n  whiteList['border-top-left-radius'] = true; // default: 0\n  whiteList['border-top-right-radius'] = true; // default: 0\n  whiteList['border-top-style'] = true; // default: none\n  whiteList['border-top-width'] = true; // default: medium\n  whiteList['border-width'] = true; // default: depending on individual properties\n  whiteList['bottom'] = false; // default: auto\n  whiteList['box-decoration-break'] = true; // default: slice\n  whiteList['box-shadow'] = true; // default: none\n  whiteList['box-sizing'] = true; // default: content-box\n  whiteList['box-snap'] = true; // default: none\n  whiteList['box-suppress'] = true; // default: show\n  whiteList['break-after'] = true; // default: auto\n  whiteList['break-before'] = true; // default: auto\n  whiteList['break-inside'] = true; // default: auto\n  whiteList['caption-side'] = false; // default: top\n  whiteList['chains'] = false; // default: none\n  whiteList['clear'] = true; // default: none\n  whiteList['clip'] = false; // default: auto\n  whiteList['clip-path'] = false; // default: none\n  whiteList['clip-rule'] = false; // default: nonzero\n  whiteList['color'] = true; // default: implementation dependent\n  whiteList['color-interpolation-filters'] = true; // default: auto\n  whiteList['column-count'] = false; // default: auto\n  whiteList['column-fill'] = false; // default: balance\n  whiteList['column-gap'] = false; // default: normal\n  whiteList['column-rule'] = false; // default: depending on individual properties\n  whiteList['column-rule-color'] = false; // default: current color\n  whiteList['column-rule-style'] = false; // default: medium\n  whiteList['column-rule-width'] = false; // default: medium\n  whiteList['column-span'] = false; // default: none\n  whiteList['column-width'] = false; // default: auto\n  whiteList['columns'] = false; // default: depending on individual properties\n  whiteList['contain'] = false; // default: none\n  whiteList['content'] = false; // default: normal\n  whiteList['counter-increment'] = false; // default: none\n  whiteList['counter-reset'] = false; // default: none\n  whiteList['counter-set'] = false; // default: none\n  whiteList['crop'] = false; // default: auto\n  whiteList['cue'] = false; // default: depending on individual properties\n  whiteList['cue-after'] = false; // default: none\n  whiteList['cue-before'] = false; // default: none\n  whiteList['cursor'] = false; // default: auto\n  whiteList['direction'] = false; // default: ltr\n  whiteList['display'] = true; // default: depending on individual properties\n  whiteList['display-inside'] = true; // default: auto\n  whiteList['display-list'] = true; // default: none\n  whiteList['display-outside'] = true; // default: inline-level\n  whiteList['dominant-baseline'] = false; // default: auto\n  whiteList['elevation'] = false; // default: level\n  whiteList['empty-cells'] = false; // default: show\n  whiteList['filter'] = false; // default: none\n  whiteList['flex'] = false; // default: depending on individual properties\n  whiteList['flex-basis'] = false; // default: auto\n  whiteList['flex-direction'] = false; // default: row\n  whiteList['flex-flow'] = false; // default: depending on individual properties\n  whiteList['flex-grow'] = false; // default: 0\n  whiteList['flex-shrink'] = false; // default: 1\n  whiteList['flex-wrap'] = false; // default: nowrap\n  whiteList['float'] = false; // default: none\n  whiteList['float-offset'] = false; // default: 0 0\n  whiteList['flood-color'] = false; // default: black\n  whiteList['flood-opacity'] = false; // default: 1\n  whiteList['flow-from'] = false; // default: none\n  whiteList['flow-into'] = false; // default: none\n  whiteList['font'] = true; // default: depending on individual properties\n  whiteList['font-family'] = true; // default: implementation dependent\n  whiteList['font-feature-settings'] = true; // default: normal\n  whiteList['font-kerning'] = true; // default: auto\n  whiteList['font-language-override'] = true; // default: normal\n  whiteList['font-size'] = true; // default: medium\n  whiteList['font-size-adjust'] = true; // default: none\n  whiteList['font-stretch'] = true; // default: normal\n  whiteList['font-style'] = true; // default: normal\n  whiteList['font-synthesis'] = true; // default: weight style\n  whiteList['font-variant'] = true; // default: normal\n  whiteList['font-variant-alternates'] = true; // default: normal\n  whiteList['font-variant-caps'] = true; // default: normal\n  whiteList['font-variant-east-asian'] = true; // default: normal\n  whiteList['font-variant-ligatures'] = true; // default: normal\n  whiteList['font-variant-numeric'] = true; // default: normal\n  whiteList['font-variant-position'] = true; // default: normal\n  whiteList['font-weight'] = true; // default: normal\n  whiteList['grid'] = false; // default: depending on individual properties\n  whiteList['grid-area'] = false; // default: depending on individual properties\n  whiteList['grid-auto-columns'] = false; // default: auto\n  whiteList['grid-auto-flow'] = false; // default: none\n  whiteList['grid-auto-rows'] = false; // default: auto\n  whiteList['grid-column'] = false; // default: depending on individual properties\n  whiteList['grid-column-end'] = false; // default: auto\n  whiteList['grid-column-start'] = false; // default: auto\n  whiteList['grid-row'] = false; // default: depending on individual properties\n  whiteList['grid-row-end'] = false; // default: auto\n  whiteList['grid-row-start'] = false; // default: auto\n  whiteList['grid-template'] = false; // default: depending on individual properties\n  whiteList['grid-template-areas'] = false; // default: none\n  whiteList['grid-template-columns'] = false; // default: none\n  whiteList['grid-template-rows'] = false; // default: none\n  whiteList['hanging-punctuation'] = false; // default: none\n  whiteList['height'] = true; // default: auto\n  whiteList['hyphens'] = false; // default: manual\n  whiteList['icon'] = false; // default: auto\n  whiteList['image-orientation'] = false; // default: auto\n  whiteList['image-resolution'] = false; // default: normal\n  whiteList['ime-mode'] = false; // default: auto\n  whiteList['initial-letters'] = false; // default: normal\n  whiteList['inline-box-align'] = false; // default: last\n  whiteList['justify-content'] = false; // default: auto\n  whiteList['justify-items'] = false; // default: auto\n  whiteList['justify-self'] = false; // default: auto\n  whiteList['left'] = false; // default: auto\n  whiteList['letter-spacing'] = true; // default: normal\n  whiteList['lighting-color'] = true; // default: white\n  whiteList['line-box-contain'] = false; // default: block inline replaced\n  whiteList['line-break'] = false; // default: auto\n  whiteList['line-grid'] = false; // default: match-parent\n  whiteList['line-height'] = false; // default: normal\n  whiteList['line-snap'] = false; // default: none\n  whiteList['line-stacking'] = false; // default: depending on individual properties\n  whiteList['line-stacking-ruby'] = false; // default: exclude-ruby\n  whiteList['line-stacking-shift'] = false; // default: consider-shifts\n  whiteList['line-stacking-strategy'] = false; // default: inline-line-height\n  whiteList['list-style'] = true; // default: depending on individual properties\n  whiteList['list-style-image'] = true; // default: none\n  whiteList['list-style-position'] = true; // default: outside\n  whiteList['list-style-type'] = true; // default: disc\n  whiteList['margin'] = true; // default: depending on individual properties\n  whiteList['margin-bottom'] = true; // default: 0\n  whiteList['margin-left'] = true; // default: 0\n  whiteList['margin-right'] = true; // default: 0\n  whiteList['margin-top'] = true; // default: 0\n  whiteList['marker-offset'] = false; // default: auto\n  whiteList['marker-side'] = false; // default: list-item\n  whiteList['marks'] = false; // default: none\n  whiteList['mask'] = false; // default: border-box\n  whiteList['mask-box'] = false; // default: see individual properties\n  whiteList['mask-box-outset'] = false; // default: 0\n  whiteList['mask-box-repeat'] = false; // default: stretch\n  whiteList['mask-box-slice'] = false; // default: 0 fill\n  whiteList['mask-box-source'] = false; // default: none\n  whiteList['mask-box-width'] = false; // default: auto\n  whiteList['mask-clip'] = false; // default: border-box\n  whiteList['mask-image'] = false; // default: none\n  whiteList['mask-origin'] = false; // default: border-box\n  whiteList['mask-position'] = false; // default: center\n  whiteList['mask-repeat'] = false; // default: no-repeat\n  whiteList['mask-size'] = false; // default: border-box\n  whiteList['mask-source-type'] = false; // default: auto\n  whiteList['mask-type'] = false; // default: luminance\n  whiteList['max-height'] = true; // default: none\n  whiteList['max-lines'] = false; // default: none\n  whiteList['max-width'] = true; // default: none\n  whiteList['min-height'] = true; // default: 0\n  whiteList['min-width'] = true; // default: 0\n  whiteList['move-to'] = false; // default: normal\n  whiteList['nav-down'] = false; // default: auto\n  whiteList['nav-index'] = false; // default: auto\n  whiteList['nav-left'] = false; // default: auto\n  whiteList['nav-right'] = false; // default: auto\n  whiteList['nav-up'] = false; // default: auto\n  whiteList['object-fit'] = false; // default: fill\n  whiteList['object-position'] = false; // default: 50% 50%\n  whiteList['opacity'] = false; // default: 1\n  whiteList['order'] = false; // default: 0\n  whiteList['orphans'] = false; // default: 2\n  whiteList['outline'] = false; // default: depending on individual properties\n  whiteList['outline-color'] = false; // default: invert\n  whiteList['outline-offset'] = false; // default: 0\n  whiteList['outline-style'] = false; // default: none\n  whiteList['outline-width'] = false; // default: medium\n  whiteList['overflow'] = false; // default: depending on individual properties\n  whiteList['overflow-wrap'] = false; // default: normal\n  whiteList['overflow-x'] = false; // default: visible\n  whiteList['overflow-y'] = false; // default: visible\n  whiteList['padding'] = true; // default: depending on individual properties\n  whiteList['padding-bottom'] = true; // default: 0\n  whiteList['padding-left'] = true; // default: 0\n  whiteList['padding-right'] = true; // default: 0\n  whiteList['padding-top'] = true; // default: 0\n  whiteList['page'] = false; // default: auto\n  whiteList['page-break-after'] = false; // default: auto\n  whiteList['page-break-before'] = false; // default: auto\n  whiteList['page-break-inside'] = false; // default: auto\n  whiteList['page-policy'] = false; // default: start\n  whiteList['pause'] = false; // default: implementation dependent\n  whiteList['pause-after'] = false; // default: implementation dependent\n  whiteList['pause-before'] = false; // default: implementation dependent\n  whiteList['perspective'] = false; // default: none\n  whiteList['perspective-origin'] = false; // default: 50% 50%\n  whiteList['pitch'] = false; // default: medium\n  whiteList['pitch-range'] = false; // default: 50\n  whiteList['play-during'] = false; // default: auto\n  whiteList['position'] = false; // default: static\n  whiteList['presentation-level'] = false; // default: 0\n  whiteList['quotes'] = false; // default: text\n  whiteList['region-fragment'] = false; // default: auto\n  whiteList['resize'] = false; // default: none\n  whiteList['rest'] = false; // default: depending on individual properties\n  whiteList['rest-after'] = false; // default: none\n  whiteList['rest-before'] = false; // default: none\n  whiteList['richness'] = false; // default: 50\n  whiteList['right'] = false; // default: auto\n  whiteList['rotation'] = false; // default: 0\n  whiteList['rotation-point'] = false; // default: 50% 50%\n  whiteList['ruby-align'] = false; // default: auto\n  whiteList['ruby-merge'] = false; // default: separate\n  whiteList['ruby-position'] = false; // default: before\n  whiteList['shape-image-threshold'] = false; // default: 0.0\n  whiteList['shape-outside'] = false; // default: none\n  whiteList['shape-margin'] = false; // default: 0\n  whiteList['size'] = false; // default: auto\n  whiteList['speak'] = false; // default: auto\n  whiteList['speak-as'] = false; // default: normal\n  whiteList['speak-header'] = false; // default: once\n  whiteList['speak-numeral'] = false; // default: continuous\n  whiteList['speak-punctuation'] = false; // default: none\n  whiteList['speech-rate'] = false; // default: medium\n  whiteList['stress'] = false; // default: 50\n  whiteList['string-set'] = false; // default: none\n  whiteList['tab-size'] = false; // default: 8\n  whiteList['table-layout'] = false; // default: auto\n  whiteList['text-align'] = true; // default: start\n  whiteList['text-align-last'] = true; // default: auto\n  whiteList['text-combine-upright'] = true; // default: none\n  whiteList['text-decoration'] = true; // default: none\n  whiteList['text-decoration-color'] = true; // default: currentColor\n  whiteList['text-decoration-line'] = true; // default: none\n  whiteList['text-decoration-skip'] = true; // default: objects\n  whiteList['text-decoration-style'] = true; // default: solid\n  whiteList['text-emphasis'] = true; // default: depending on individual properties\n  whiteList['text-emphasis-color'] = true; // default: currentColor\n  whiteList['text-emphasis-position'] = true; // default: over right\n  whiteList['text-emphasis-style'] = true; // default: none\n  whiteList['text-height'] = true; // default: auto\n  whiteList['text-indent'] = true; // default: 0\n  whiteList['text-justify'] = true; // default: auto\n  whiteList['text-orientation'] = true; // default: mixed\n  whiteList['text-overflow'] = true; // default: clip\n  whiteList['text-shadow'] = true; // default: none\n  whiteList['text-space-collapse'] = true; // default: collapse\n  whiteList['text-transform'] = true; // default: none\n  whiteList['text-underline-position'] = true; // default: auto\n  whiteList['text-wrap'] = true; // default: normal\n  whiteList['top'] = false; // default: auto\n  whiteList['transform'] = false; // default: none\n  whiteList['transform-origin'] = false; // default: 50% 50% 0\n  whiteList['transform-style'] = false; // default: flat\n  whiteList['transition'] = false; // default: depending on individual properties\n  whiteList['transition-delay'] = false; // default: 0s\n  whiteList['transition-duration'] = false; // default: 0s\n  whiteList['transition-property'] = false; // default: all\n  whiteList['transition-timing-function'] = false; // default: ease\n  whiteList['unicode-bidi'] = false; // default: normal\n  whiteList['vertical-align'] = false; // default: baseline\n  whiteList['visibility'] = false; // default: visible\n  whiteList['voice-balance'] = false; // default: center\n  whiteList['voice-duration'] = false; // default: auto\n  whiteList['voice-family'] = false; // default: implementation dependent\n  whiteList['voice-pitch'] = false; // default: medium\n  whiteList['voice-range'] = false; // default: medium\n  whiteList['voice-rate'] = false; // default: normal\n  whiteList['voice-stress'] = false; // default: normal\n  whiteList['voice-volume'] = false; // default: medium\n  whiteList['volume'] = false; // default: medium\n  whiteList['white-space'] = false; // default: normal\n  whiteList['widows'] = false; // default: 2\n  whiteList['width'] = true; // default: auto\n  whiteList['will-change'] = false; // default: auto\n  whiteList['word-break'] = true; // default: normal\n  whiteList['word-spacing'] = true; // default: normal\n  whiteList['word-wrap'] = true; // default: normal\n  whiteList['wrap-flow'] = false; // default: auto\n  whiteList['wrap-through'] = false; // default: wrap\n  whiteList['writing-mode'] = false; // default: horizontal-tb\n  whiteList['z-index'] = false; // default: auto\n\n  return whiteList;\n}\n\n\n/**\n * 匹配到白名单上的一个属性时\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {String}\n */\nfunction onAttr (name, value, options) {\n  // do nothing\n}\n\n/**\n * 匹配到不在白名单上的一个属性时\n *\n * @param {String} name\n * @param {String} value\n * @param {Object} options\n * @return {String}\n */\nfunction onIgnoreAttr (name, value, options) {\n  // do nothing\n}\n\nvar REGEXP_URL_JAVASCRIPT = /javascript\\s*\\:/img;\n\n/**\n * 过滤属性值\n *\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction safeAttrValue(name, value) {\n  if (REGEXP_URL_JAVASCRIPT.test(value)) return '';\n  return value;\n}\n\n\nexports.whiteList = getDefaultWhiteList();\nexports.getDefaultWhiteList = getDefaultWhiteList;\nexports.onAttr = onAttr;\nexports.onIgnoreAttr = onIgnoreAttr;\nexports.safeAttrValue = safeAttrValue;\n","module.exports = {\n  indexOf: function (arr, item) {\n    var i, j;\n    if (Array.prototype.indexOf) {\n      return arr.indexOf(item);\n    }\n    for (i = 0, j = arr.length; i < j; i++) {\n      if (arr[i] === item) {\n        return i;\n      }\n    }\n    return -1;\n  },\n  forEach: function (arr, fn, scope) {\n    var i, j;\n    if (Array.prototype.forEach) {\n      return arr.forEach(fn, scope);\n    }\n    for (i = 0, j = arr.length; i < j; i++) {\n      fn.call(scope, arr[i], i, arr);\n    }\n  },\n  trim: function (str) {\n    if (String.prototype.trim) {\n      return str.trim();\n    }\n    return str.replace(/(^\\s*)|(\\s*$)/g, '');\n  },\n  trimRight: function (str) {\n    if (String.prototype.trimRight) {\n      return str.trimRight();\n    }\n    return str.replace(/(\\s*$)/g, '');\n  }\n};\n","/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar _ = require('./util');\n\n\n/**\n * 解析style\n *\n * @param {String} css\n * @param {Function} onAttr 处理属性的函数\n *   参数格式: function (sourcePosition, position, name, value, source)\n * @return {String}\n */\nfunction parseStyle (css, onAttr) {\n  css = _.trimRight(css);\n  if (css[css.length - 1] !== ';') css += ';';\n  var cssLength = css.length;\n  var isParenthesisOpen = false;\n  var lastPos = 0;\n  var i = 0;\n  var retCSS = '';\n\n  function addNewAttr () {\n    // 如果没有正常的闭合圆括号,则直接忽略当前属性\n    if (!isParenthesisOpen) {\n      var source = _.trim(css.slice(lastPos, i));\n      var j = source.indexOf(':');\n      if (j !== -1) {\n        var name = _.trim(source.slice(0, j));\n        var value = _.trim(source.slice(j + 1));\n        // 必须有属性名称\n        if (name) {\n          var ret = onAttr(lastPos, retCSS.length, name, value, source);\n          if (ret) retCSS += ret + '; ';\n        }\n      }\n    }\n    lastPos = i + 1;\n  }\n\n  for (; i < cssLength; i++) {\n    var c = css[i];\n    if (c === '/' && css[i + 1] === '*') {\n      // 备注开始\n      var j = css.indexOf('*/', i + 2);\n      // 如果没有正常的备注结束,则后面的部分全部跳过\n      if (j === -1) break;\n      // 直接将当前位置调到备注结尾,并且初始化状态\n      i = j + 1;\n      lastPos = i + 1;\n      isParenthesisOpen = false;\n    } else if (c === '(') {\n      isParenthesisOpen = true;\n    } else if (c === ')') {\n      isParenthesisOpen = false;\n    } else if (c === ';') {\n      if (isParenthesisOpen) {\n        // 在圆括号里面,忽略\n      } else {\n        addNewAttr();\n      }\n    } else if (c === '\\n') {\n      addNewAttr();\n    }\n  }\n\n  return _.trim(retCSS);\n}\n\nmodule.exports = parseStyle;\n","/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar DEFAULT = require('./default');\nvar parseStyle = require('./parser');\nvar _ = require('./util');\n\n\n/**\n * 返回值是否为空\n *\n * @param {Object} obj\n * @return {Boolean}\n */\nfunction isNull (obj) {\n  return (obj === undefined || obj === null);\n}\n\n/**\n * 浅拷贝对象\n *\n * @param {Object} obj\n * @return {Object}\n */\nfunction shallowCopyObject (obj) {\n  var ret = {};\n  for (var i in obj) {\n    ret[i] = obj[i];\n  }\n  return ret;\n}\n\n/**\n * 创建CSS过滤器\n *\n * @param {Object} options\n *   - {Object} whiteList\n *   - {Function} onAttr\n *   - {Function} onIgnoreAttr\n *   - {Function} safeAttrValue\n */\nfunction FilterCSS (options) {\n  options = shallowCopyObject(options || {});\n  options.whiteList = options.whiteList || DEFAULT.whiteList;\n  options.onAttr = options.onAttr || DEFAULT.onAttr;\n  options.onIgnoreAttr = options.onIgnoreAttr || DEFAULT.onIgnoreAttr;\n  options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue;\n  this.options = options;\n}\n\nFilterCSS.prototype.process = function (css) {\n  // 兼容各种奇葩输入\n  css = css || '';\n  css = css.toString();\n  if (!css) return '';\n\n  var me = this;\n  var options = me.options;\n  var whiteList = options.whiteList;\n  var onAttr = options.onAttr;\n  var onIgnoreAttr = options.onIgnoreAttr;\n  var safeAttrValue = options.safeAttrValue;\n\n  var retCSS = parseStyle(css, function (sourcePosition, position, name, value, source) {\n\n    var check = whiteList[name];\n    var isWhite = false;\n    if (check === true) isWhite = check;\n    else if (typeof check === 'function') isWhite = check(value);\n    else if (check instanceof RegExp) isWhite = check.test(value);\n    if (isWhite !== true) isWhite = false;\n\n    // 如果过滤后 value 为空则直接忽略\n    value = safeAttrValue(name, value);\n    if (!value) return;\n\n    var opts = {\n      position: position,\n      sourcePosition: sourcePosition,\n      source: source,\n      isWhite: isWhite\n    };\n\n    if (isWhite) {\n\n      var ret = onAttr(name, value, opts);\n      if (isNull(ret)) {\n        return name + ':' + value;\n      } else {\n        return ret;\n      }\n\n    } else {\n\n      var ret = onIgnoreAttr(name, value, opts);\n      if (!isNull(ret)) {\n        return ret;\n      }\n\n    }\n  });\n\n  return retCSS;\n};\n\n\nmodule.exports = FilterCSS;\n","/**\n * cssfilter\n *\n * @author 老雷<leizongmin@gmail.com>\n */\n\nvar DEFAULT = require('./default');\nvar FilterCSS = require('./css');\n\n\n/**\n * XSS过滤\n *\n * @param {String} css 要过滤的CSS代码\n * @param {Object} options 选项:whiteList, onAttr, onIgnoreAttr\n * @return {String}\n */\nfunction filterCSS (html, options) {\n  var xss = new FilterCSS(options);\n  return xss.process(html);\n}\n\n\n// 输出\nexports = module.exports = filterCSS;\nexports.FilterCSS = FilterCSS;\nfor (var i in DEFAULT) exports[i] = DEFAULT[i];\n\n// 在浏览器端使用\nif (typeof window !== 'undefined') {\n  window.filterCSS = module.exports;\n}\n","module.exports = {\n  indexOf: function (arr, item) {\n    var i, j;\n    if (Array.prototype.indexOf) {\n      return arr.indexOf(item);\n    }\n    for (i = 0, j = arr.length; i < j; i++) {\n      if (arr[i] === item) {\n        return i;\n      }\n    }\n    return -1;\n  },\n  forEach: function (arr, fn, scope) {\n    var i, j;\n    if (Array.prototype.forEach) {\n      return arr.forEach(fn, scope);\n    }\n    for (i = 0, j = arr.length; i < j; i++) {\n      fn.call(scope, arr[i], i, arr);\n    }\n  },\n  trim: function (str) {\n    if (String.prototype.trim) {\n      return str.trim();\n    }\n    return str.replace(/(^\\s*)|(\\s*$)/g, \"\");\n  },\n  spaceIndex: function (str) {\n    var reg = /\\s|\\n|\\t/;\n    var match = reg.exec(str);\n    return match ? match.index : -1;\n  },\n};\n","/**\n * default settings\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar FilterCSS = require(\"cssfilter\").FilterCSS;\nvar getDefaultCSSWhiteList = require(\"cssfilter\").getDefaultWhiteList;\nvar _ = require(\"./util\");\n\nfunction getDefaultWhiteList() {\n  return {\n    a: [\"target\", \"href\", \"title\"],\n    abbr: [\"title\"],\n    address: [],\n    area: [\"shape\", \"coords\", \"href\", \"alt\"],\n    article: [],\n    aside: [],\n    audio: [\n      \"autoplay\",\n      \"controls\",\n      \"crossorigin\",\n      \"loop\",\n      \"muted\",\n      \"preload\",\n      \"src\",\n    ],\n    b: [],\n    bdi: [\"dir\"],\n    bdo: [\"dir\"],\n    big: [],\n    blockquote: [\"cite\"],\n    br: [],\n    caption: [],\n    center: [],\n    cite: [],\n    code: [],\n    col: [\"align\", \"valign\", \"span\", \"width\"],\n    colgroup: [\"align\", \"valign\", \"span\", \"width\"],\n    dd: [],\n    del: [\"datetime\"],\n    details: [\"open\"],\n    div: [],\n    dl: [],\n    dt: [],\n    em: [],\n    figcaption: [],\n    figure: [],\n    font: [\"color\", \"size\", \"face\"],\n    footer: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    header: [],\n    hr: [],\n    i: [],\n    img: [\"src\", \"alt\", \"title\", \"width\", \"height\"],\n    ins: [\"datetime\"],\n    li: [],\n    mark: [],\n    nav: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    section: [],\n    small: [],\n    span: [],\n    sub: [],\n    summary: [],\n    sup: [],\n    strong: [],\n    strike: [],\n    table: [\"width\", \"border\", \"align\", \"valign\"],\n    tbody: [\"align\", \"valign\"],\n    td: [\"width\", \"rowspan\", \"colspan\", \"align\", \"valign\"],\n    tfoot: [\"align\", \"valign\"],\n    th: [\"width\", \"rowspan\", \"colspan\", \"align\", \"valign\"],\n    thead: [\"align\", \"valign\"],\n    tr: [\"rowspan\", \"align\", \"valign\"],\n    tt: [],\n    u: [],\n    ul: [],\n    video: [\n      \"autoplay\",\n      \"controls\",\n      \"crossorigin\",\n      \"loop\",\n      \"muted\",\n      \"playsinline\",\n      \"poster\",\n      \"preload\",\n      \"src\",\n      \"height\",\n      \"width\",\n    ],\n  };\n}\n\nvar defaultCSSFilter = new FilterCSS();\n\n/**\n * default onTag function\n *\n * @param {String} tag\n * @param {String} html\n * @param {Object} options\n * @return {String}\n */\nfunction onTag(tag, html, options) {\n  // do nothing\n}\n\n/**\n * default onIgnoreTag function\n *\n * @param {String} tag\n * @param {String} html\n * @param {Object} options\n * @return {String}\n */\nfunction onIgnoreTag(tag, html, options) {\n  // do nothing\n}\n\n/**\n * default onTagAttr function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction onTagAttr(tag, name, value) {\n  // do nothing\n}\n\n/**\n * default onIgnoreTagAttr function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @return {String}\n */\nfunction onIgnoreTagAttr(tag, name, value) {\n  // do nothing\n}\n\n/**\n * default escapeHtml function\n *\n * @param {String} html\n */\nfunction escapeHtml(html) {\n  return html.replace(REGEXP_LT, \"&lt;\").replace(REGEXP_GT, \"&gt;\");\n}\n\n/**\n * default safeAttrValue function\n *\n * @param {String} tag\n * @param {String} name\n * @param {String} value\n * @param {Object} cssFilter\n * @return {String}\n */\nfunction safeAttrValue(tag, name, value, cssFilter) {\n  // unescape attribute value firstly\n  value = friendlyAttrValue(value);\n\n  if (name === \"href\" || name === \"src\") {\n    // filter `href` and `src` attribute\n    // only allow the value that starts with `http://` | `https://` | `mailto:` | `/` | `#`\n    value = _.trim(value);\n    if (value === \"#\") return \"#\";\n    if (\n      !(\n        value.substr(0, 7) === \"http://\" ||\n        value.substr(0, 8) === \"https://\" ||\n        value.substr(0, 7) === \"mailto:\" ||\n        value.substr(0, 4) === \"tel:\" ||\n        value.substr(0, 11) === \"data:image/\" ||\n        value.substr(0, 6) === \"ftp://\" ||\n        value.substr(0, 2) === \"./\" ||\n        value.substr(0, 3) === \"../\" ||\n        value[0] === \"#\" ||\n        value[0] === \"/\"\n      )\n    ) {\n      return \"\";\n    }\n  } else if (name === \"background\") {\n    // filter `background` attribute (maybe no use)\n    // `javascript:`\n    REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n    if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n      return \"\";\n    }\n  } else if (name === \"style\") {\n    // `expression()`\n    REGEXP_DEFAULT_ON_TAG_ATTR_7.lastIndex = 0;\n    if (REGEXP_DEFAULT_ON_TAG_ATTR_7.test(value)) {\n      return \"\";\n    }\n    // `url()`\n    REGEXP_DEFAULT_ON_TAG_ATTR_8.lastIndex = 0;\n    if (REGEXP_DEFAULT_ON_TAG_ATTR_8.test(value)) {\n      REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n      if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n        return \"\";\n      }\n    }\n    if (cssFilter !== false) {\n      cssFilter = cssFilter || defaultCSSFilter;\n      value = cssFilter.process(value);\n    }\n  }\n\n  // escape `<>\"` before returns\n  value = escapeAttrValue(value);\n  return value;\n}\n\n// RegExp list\nvar REGEXP_LT = /</g;\nvar REGEXP_GT = />/g;\nvar REGEXP_QUOTE = /\"/g;\nvar REGEXP_QUOTE_2 = /&quot;/g;\nvar REGEXP_ATTR_VALUE_1 = /&#([a-zA-Z0-9]*);?/gim;\nvar REGEXP_ATTR_VALUE_COLON = /&colon;?/gim;\nvar REGEXP_ATTR_VALUE_NEWLINE = /&newline;?/gim;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_3 = /\\/\\*|\\*\\//gm;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_4 =\n  /((j\\s*a\\s*v\\s*a|v\\s*b|l\\s*i\\s*v\\s*e)\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t\\s*|m\\s*o\\s*c\\s*h\\s*a):/gi;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_5 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:/gi;\n// var REGEXP_DEFAULT_ON_TAG_ATTR_6 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:\\s*image\\//gi;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_7 =\n  /e\\s*x\\s*p\\s*r\\s*e\\s*s\\s*s\\s*i\\s*o\\s*n\\s*\\(.*/gi;\nvar REGEXP_DEFAULT_ON_TAG_ATTR_8 = /u\\s*r\\s*l\\s*\\(.*/gi;\n\n/**\n * escape double quote\n *\n * @param {String} str\n * @return {String} str\n */\nfunction escapeQuote(str) {\n  return str.replace(REGEXP_QUOTE, \"&quot;\");\n}\n\n/**\n * unescape double quote\n *\n * @param {String} str\n * @return {String} str\n */\nfunction unescapeQuote(str) {\n  return str.replace(REGEXP_QUOTE_2, '\"');\n}\n\n/**\n * escape html entities\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeHtmlEntities(str) {\n  return str.replace(REGEXP_ATTR_VALUE_1, function replaceUnicode(str, code) {\n    return code[0] === \"x\" || code[0] === \"X\"\n      ? String.fromCharCode(parseInt(code.substr(1), 16))\n      : String.fromCharCode(parseInt(code, 10));\n  });\n}\n\n/**\n * escape html5 new danger entities\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeDangerHtml5Entities(str) {\n  return str\n    .replace(REGEXP_ATTR_VALUE_COLON, \":\")\n    .replace(REGEXP_ATTR_VALUE_NEWLINE, \" \");\n}\n\n/**\n * clear nonprintable characters\n *\n * @param {String} str\n * @return {String}\n */\nfunction clearNonPrintableCharacter(str) {\n  var str2 = \"\";\n  for (var i = 0, len = str.length; i < len; i++) {\n    str2 += str.charCodeAt(i) < 32 ? \" \" : str.charAt(i);\n  }\n  return _.trim(str2);\n}\n\n/**\n * get friendly attribute value\n *\n * @param {String} str\n * @return {String}\n */\nfunction friendlyAttrValue(str) {\n  str = unescapeQuote(str);\n  str = escapeHtmlEntities(str);\n  str = escapeDangerHtml5Entities(str);\n  str = clearNonPrintableCharacter(str);\n  return str;\n}\n\n/**\n * unescape attribute value\n *\n * @param {String} str\n * @return {String}\n */\nfunction escapeAttrValue(str) {\n  str = escapeQuote(str);\n  str = escapeHtml(str);\n  return str;\n}\n\n/**\n * `onIgnoreTag` function for removing all the tags that are not in whitelist\n */\nfunction onIgnoreTagStripAll() {\n  return \"\";\n}\n\n/**\n * remove tag body\n * specify a `tags` list, if the tag is not in the `tags` list then process by the specify function (optional)\n *\n * @param {array} tags\n * @param {function} next\n */\nfunction StripTagBody(tags, next) {\n  if (typeof next !== \"function\") {\n    next = function () {};\n  }\n\n  var isRemoveAllTag = !Array.isArray(tags);\n  function isRemoveTag(tag) {\n    if (isRemoveAllTag) return true;\n    return _.indexOf(tags, tag) !== -1;\n  }\n\n  var removeList = [];\n  var posStart = false;\n\n  return {\n    onIgnoreTag: function (tag, html, options) {\n      if (isRemoveTag(tag)) {\n        if (options.isClosing) {\n          var ret = \"[/removed]\";\n          var end = options.position + ret.length;\n          removeList.push([\n            posStart !== false ? posStart : options.position,\n            end,\n          ]);\n          posStart = false;\n          return ret;\n        } else {\n          if (!posStart) {\n            posStart = options.position;\n          }\n          return \"[removed]\";\n        }\n      } else {\n        return next(tag, html, options);\n      }\n    },\n    remove: function (html) {\n      var rethtml = \"\";\n      var lastPos = 0;\n      _.forEach(removeList, function (pos) {\n        rethtml += html.slice(lastPos, pos[0]);\n        lastPos = pos[1];\n      });\n      rethtml += html.slice(lastPos);\n      return rethtml;\n    },\n  };\n}\n\n/**\n * remove html comments\n *\n * @param {String} html\n * @return {String}\n */\nfunction stripCommentTag(html) {\n  var retHtml = \"\";\n  var lastPos = 0;\n  while (lastPos < html.length) {\n    var i = html.indexOf(\"<!--\", lastPos);\n    if (i === -1) {\n      retHtml += html.slice(lastPos);\n      break;\n    }\n    retHtml += html.slice(lastPos, i);\n    var j = html.indexOf(\"-->\", i);\n    if (j === -1) {\n      break;\n    }\n    lastPos = j + 3;\n  }\n  return retHtml;\n}\n\n/**\n * remove invisible characters\n *\n * @param {String} html\n * @return {String}\n */\nfunction stripBlankChar(html) {\n  var chars = html.split(\"\");\n  chars = chars.filter(function (char) {\n    var c = char.charCodeAt(0);\n    if (c === 127) return false;\n    if (c <= 31) {\n      if (c === 10 || c === 13) return true;\n      return false;\n    }\n    return true;\n  });\n  return chars.join(\"\");\n}\n\nexports.whiteList = getDefaultWhiteList();\nexports.getDefaultWhiteList = getDefaultWhiteList;\nexports.onTag = onTag;\nexports.onIgnoreTag = onIgnoreTag;\nexports.onTagAttr = onTagAttr;\nexports.onIgnoreTagAttr = onIgnoreTagAttr;\nexports.safeAttrValue = safeAttrValue;\nexports.escapeHtml = escapeHtml;\nexports.escapeQuote = escapeQuote;\nexports.unescapeQuote = unescapeQuote;\nexports.escapeHtmlEntities = escapeHtmlEntities;\nexports.escapeDangerHtml5Entities = escapeDangerHtml5Entities;\nexports.clearNonPrintableCharacter = clearNonPrintableCharacter;\nexports.friendlyAttrValue = friendlyAttrValue;\nexports.escapeAttrValue = escapeAttrValue;\nexports.onIgnoreTagStripAll = onIgnoreTagStripAll;\nexports.StripTagBody = StripTagBody;\nexports.stripCommentTag = stripCommentTag;\nexports.stripBlankChar = stripBlankChar;\nexports.cssFilter = defaultCSSFilter;\nexports.getDefaultCSSWhiteList = getDefaultCSSWhiteList;\n","/**\n * Simple HTML Parser\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar _ = require(\"./util\");\n\n/**\n * get tag name\n *\n * @param {String} html e.g. '<a hef=\"#\">'\n * @return {String}\n */\nfunction getTagName(html) {\n  var i = _.spaceIndex(html);\n  var tagName;\n  if (i === -1) {\n    tagName = html.slice(1, -1);\n  } else {\n    tagName = html.slice(1, i + 1);\n  }\n  tagName = _.trim(tagName).toLowerCase();\n  if (tagName.slice(0, 1) === \"/\") tagName = tagName.slice(1);\n  if (tagName.slice(-1) === \"/\") tagName = tagName.slice(0, -1);\n  return tagName;\n}\n\n/**\n * is close tag?\n *\n * @param {String} html 如:'<a hef=\"#\">'\n * @return {Boolean}\n */\nfunction isClosing(html) {\n  return html.slice(0, 2) === \"</\";\n}\n\n/**\n * parse input html and returns processed html\n *\n * @param {String} html\n * @param {Function} onTag e.g. function (sourcePosition, position, tag, html, isClosing)\n * @param {Function} escapeHtml\n * @return {String}\n */\nfunction parseTag(html, onTag, escapeHtml) {\n  \"use strict\";\n\n  var rethtml = \"\";\n  var lastPos = 0;\n  var tagStart = false;\n  var quoteStart = false;\n  var currentPos = 0;\n  var len = html.length;\n  var currentTagName = \"\";\n  var currentHtml = \"\";\n\n  chariterator: for (currentPos = 0; currentPos < len; currentPos++) {\n    var c = html.charAt(currentPos);\n    if (tagStart === false) {\n      if (c === \"<\") {\n        tagStart = currentPos;\n        continue;\n      }\n    } else {\n      if (quoteStart === false) {\n        if (c === \"<\") {\n          rethtml += escapeHtml(html.slice(lastPos, currentPos));\n          tagStart = currentPos;\n          lastPos = currentPos;\n          continue;\n        }\n        if (c === \">\" || currentPos === len - 1) {\n          rethtml += escapeHtml(html.slice(lastPos, tagStart));\n          currentHtml = html.slice(tagStart, currentPos + 1);\n          currentTagName = getTagName(currentHtml);\n          rethtml += onTag(\n            tagStart,\n            rethtml.length,\n            currentTagName,\n            currentHtml,\n            isClosing(currentHtml)\n          );\n          lastPos = currentPos + 1;\n          tagStart = false;\n          continue;\n        }\n        if (c === '\"' || c === \"'\") {\n          var i = 1;\n          var ic = html.charAt(currentPos - i);\n\n          while (ic.trim() === \"\" || ic === \"=\") {\n            if (ic === \"=\") {\n              quoteStart = c;\n              continue chariterator;\n            }\n            ic = html.charAt(currentPos - ++i);\n          }\n        }\n      } else {\n        if (c === quoteStart) {\n          quoteStart = false;\n          continue;\n        }\n      }\n    }\n  }\n  if (lastPos < len) {\n    rethtml += escapeHtml(html.substr(lastPos));\n  }\n\n  return rethtml;\n}\n\nvar REGEXP_ILLEGAL_ATTR_NAME = /[^a-zA-Z0-9\\\\_:.-]/gim;\n\n/**\n * parse input attributes and returns processed attributes\n *\n * @param {String} html e.g. `href=\"#\" target=\"_blank\"`\n * @param {Function} onAttr e.g. `function (name, value)`\n * @return {String}\n */\nfunction parseAttr(html, onAttr) {\n  \"use strict\";\n\n  var lastPos = 0;\n  var lastMarkPos = 0;\n  var retAttrs = [];\n  var tmpName = false;\n  var len = html.length;\n\n  function addAttr(name, value) {\n    name = _.trim(name);\n    name = name.replace(REGEXP_ILLEGAL_ATTR_NAME, \"\").toLowerCase();\n    if (name.length < 1) return;\n    var ret = onAttr(name, value || \"\");\n    if (ret) retAttrs.push(ret);\n  }\n\n  // 逐个分析字符\n  for (var i = 0; i < len; i++) {\n    var c = html.charAt(i);\n    var v, j;\n    if (tmpName === false && c === \"=\") {\n      tmpName = html.slice(lastPos, i);\n      lastPos = i + 1;\n      lastMarkPos = html.charAt(lastPos) === '\"' || html.charAt(lastPos) === \"'\" ? lastPos : findNextQuotationMark(html, i + 1);\n      continue;\n    }\n    if (tmpName !== false) {\n      if (\n        i === lastMarkPos\n      ) {\n        j = html.indexOf(c, i + 1);\n        if (j === -1) {\n          break;\n        } else {\n          v = _.trim(html.slice(lastMarkPos + 1, j));\n          addAttr(tmpName, v);\n          tmpName = false;\n          i = j;\n          lastPos = i + 1;\n          continue;\n        }\n      }\n    }\n    if (/\\s|\\n|\\t/.test(c)) {\n      html = html.replace(/\\s|\\n|\\t/g, \" \");\n      if (tmpName === false) {\n        j = findNextEqual(html, i);\n        if (j === -1) {\n          v = _.trim(html.slice(lastPos, i));\n          addAttr(v);\n          tmpName = false;\n          lastPos = i + 1;\n          continue;\n        } else {\n          i = j - 1;\n          continue;\n        }\n      } else {\n        j = findBeforeEqual(html, i - 1);\n        if (j === -1) {\n          v = _.trim(html.slice(lastPos, i));\n          v = stripQuoteWrap(v);\n          addAttr(tmpName, v);\n          tmpName = false;\n          lastPos = i + 1;\n          continue;\n        } else {\n          continue;\n        }\n      }\n    }\n  }\n\n  if (lastPos < html.length) {\n    if (tmpName === false) {\n      addAttr(html.slice(lastPos));\n    } else {\n      addAttr(tmpName, stripQuoteWrap(_.trim(html.slice(lastPos))));\n    }\n  }\n\n  return _.trim(retAttrs.join(\" \"));\n}\n\nfunction findNextEqual(str, i) {\n  for (; i < str.length; i++) {\n    var c = str[i];\n    if (c === \" \") continue;\n    if (c === \"=\") return i;\n    return -1;\n  }\n}\n\nfunction findNextQuotationMark(str, i) {\n  for (; i < str.length; i++) {\n    var c = str[i];\n    if (c === \" \") continue;\n    if (c === \"'\" || c === '\"') return i;\n    return -1;\n  }\n}\n\nfunction findBeforeEqual(str, i) {\n  for (; i > 0; i--) {\n    var c = str[i];\n    if (c === \" \") continue;\n    if (c === \"=\") return i;\n    return -1;\n  }\n}\n\nfunction isQuoteWrapString(text) {\n  if (\n    (text[0] === '\"' && text[text.length - 1] === '\"') ||\n    (text[0] === \"'\" && text[text.length - 1] === \"'\")\n  ) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nfunction stripQuoteWrap(text) {\n  if (isQuoteWrapString(text)) {\n    return text.substr(1, text.length - 2);\n  } else {\n    return text;\n  }\n}\n\nexports.parseTag = parseTag;\nexports.parseAttr = parseAttr;\n","/**\n * filter xss\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar FilterCSS = require(\"cssfilter\").FilterCSS;\nvar DEFAULT = require(\"./default\");\nvar parser = require(\"./parser\");\nvar parseTag = parser.parseTag;\nvar parseAttr = parser.parseAttr;\nvar _ = require(\"./util\");\n\n/**\n * returns `true` if the input value is `undefined` or `null`\n *\n * @param {Object} obj\n * @return {Boolean}\n */\nfunction isNull(obj) {\n  return obj === undefined || obj === null;\n}\n\n/**\n * get attributes for a tag\n *\n * @param {String} html\n * @return {Object}\n *   - {String} html\n *   - {Boolean} closing\n */\nfunction getAttrs(html) {\n  var i = _.spaceIndex(html);\n  if (i === -1) {\n    return {\n      html: \"\",\n      closing: html[html.length - 2] === \"/\",\n    };\n  }\n  html = _.trim(html.slice(i + 1, -1));\n  var isClosing = html[html.length - 1] === \"/\";\n  if (isClosing) html = _.trim(html.slice(0, -1));\n  return {\n    html: html,\n    closing: isClosing,\n  };\n}\n\n/**\n * shallow copy\n *\n * @param {Object} obj\n * @return {Object}\n */\nfunction shallowCopyObject(obj) {\n  var ret = {};\n  for (var i in obj) {\n    ret[i] = obj[i];\n  }\n  return ret;\n}\n\nfunction keysToLowerCase(obj) {\n  var ret = {};\n  for (var i in obj) {\n    if (Array.isArray(obj[i])) {\n      ret[i.toLowerCase()] = obj[i].map(function (item) {\n        return item.toLowerCase();\n      });\n    } else {\n      ret[i.toLowerCase()] = obj[i];\n    }\n  }\n  return ret;\n}\n\n/**\n * FilterXSS class\n *\n * @param {Object} options\n *        whiteList (or allowList), onTag, onTagAttr, onIgnoreTag,\n *        onIgnoreTagAttr, safeAttrValue, escapeHtml\n *        stripIgnoreTagBody, allowCommentTag, stripBlankChar\n *        css{whiteList, onAttr, onIgnoreAttr} `css=false` means don't use `cssfilter`\n */\nfunction FilterXSS(options) {\n  options = shallowCopyObject(options || {});\n\n  if (options.stripIgnoreTag) {\n    if (options.onIgnoreTag) {\n      console.error(\n        'Notes: cannot use these two options \"stripIgnoreTag\" and \"onIgnoreTag\" at the same time'\n      );\n    }\n    options.onIgnoreTag = DEFAULT.onIgnoreTagStripAll;\n  }\n  if (options.whiteList || options.allowList) {\n    options.whiteList = keysToLowerCase(options.whiteList || options.allowList);\n  } else {\n    options.whiteList = DEFAULT.whiteList;\n  }\n\n  options.onTag = options.onTag || DEFAULT.onTag;\n  options.onTagAttr = options.onTagAttr || DEFAULT.onTagAttr;\n  options.onIgnoreTag = options.onIgnoreTag || DEFAULT.onIgnoreTag;\n  options.onIgnoreTagAttr = options.onIgnoreTagAttr || DEFAULT.onIgnoreTagAttr;\n  options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue;\n  options.escapeHtml = options.escapeHtml || DEFAULT.escapeHtml;\n  this.options = options;\n\n  if (options.css === false) {\n    this.cssFilter = false;\n  } else {\n    options.css = options.css || {};\n    this.cssFilter = new FilterCSS(options.css);\n  }\n}\n\n/**\n * start process and returns result\n *\n * @param {String} html\n * @return {String}\n */\nFilterXSS.prototype.process = function (html) {\n  // compatible with the input\n  html = html || \"\";\n  html = html.toString();\n  if (!html) return \"\";\n\n  var me = this;\n  var options = me.options;\n  var whiteList = options.whiteList;\n  var onTag = options.onTag;\n  var onIgnoreTag = options.onIgnoreTag;\n  var onTagAttr = options.onTagAttr;\n  var onIgnoreTagAttr = options.onIgnoreTagAttr;\n  var safeAttrValue = options.safeAttrValue;\n  var escapeHtml = options.escapeHtml;\n  var cssFilter = me.cssFilter;\n\n  // remove invisible characters\n  if (options.stripBlankChar) {\n    html = DEFAULT.stripBlankChar(html);\n  }\n\n  // remove html comments\n  if (!options.allowCommentTag) {\n    html = DEFAULT.stripCommentTag(html);\n  }\n\n  // if enable stripIgnoreTagBody\n  var stripIgnoreTagBody = false;\n  if (options.stripIgnoreTagBody) {\n    stripIgnoreTagBody = DEFAULT.StripTagBody(\n      options.stripIgnoreTagBody,\n      onIgnoreTag\n    );\n    onIgnoreTag = stripIgnoreTagBody.onIgnoreTag;\n  }\n\n  var retHtml = parseTag(\n    html,\n    function (sourcePosition, position, tag, html, isClosing) {\n      var info = {\n        sourcePosition: sourcePosition,\n        position: position,\n        isClosing: isClosing,\n        isWhite: Object.prototype.hasOwnProperty.call(whiteList, tag),\n      };\n\n      // call `onTag()`\n      var ret = onTag(tag, html, info);\n      if (!isNull(ret)) return ret;\n\n      if (info.isWhite) {\n        if (info.isClosing) {\n          return \"</\" + tag + \">\";\n        }\n\n        var attrs = getAttrs(html);\n        var whiteAttrList = whiteList[tag];\n        var attrsHtml = parseAttr(attrs.html, function (name, value) {\n          // call `onTagAttr()`\n          var isWhiteAttr = _.indexOf(whiteAttrList, name) !== -1;\n          var ret = onTagAttr(tag, name, value, isWhiteAttr);\n          if (!isNull(ret)) return ret;\n\n          if (isWhiteAttr) {\n            // call `safeAttrValue()`\n            value = safeAttrValue(tag, name, value, cssFilter);\n            if (value) {\n              return name + '=\"' + value + '\"';\n            } else {\n              return name;\n            }\n          } else {\n            // call `onIgnoreTagAttr()`\n            ret = onIgnoreTagAttr(tag, name, value, isWhiteAttr);\n            if (!isNull(ret)) return ret;\n            return;\n          }\n        });\n\n        // build new tag html\n        html = \"<\" + tag;\n        if (attrsHtml) html += \" \" + attrsHtml;\n        if (attrs.closing) html += \" /\";\n        html += \">\";\n        return html;\n      } else {\n        // call `onIgnoreTag()`\n        ret = onIgnoreTag(tag, html, info);\n        if (!isNull(ret)) return ret;\n        return escapeHtml(html);\n      }\n    },\n    escapeHtml\n  );\n\n  // if enable stripIgnoreTagBody\n  if (stripIgnoreTagBody) {\n    retHtml = stripIgnoreTagBody.remove(retHtml);\n  }\n\n  return retHtml;\n};\n\nmodule.exports = FilterXSS;\n","/**\n * xss\n *\n * @author Zongmin Lei<leizongmin@gmail.com>\n */\n\nvar DEFAULT = require(\"./default\");\nvar parser = require(\"./parser\");\nvar FilterXSS = require(\"./xss\");\n\n/**\n * filter xss function\n *\n * @param {String} html\n * @param {Object} options { whiteList, onTag, onTagAttr, onIgnoreTag, onIgnoreTagAttr, safeAttrValue, escapeHtml }\n * @return {String}\n */\nfunction filterXSS(html, options) {\n  var xss = new FilterXSS(options);\n  return xss.process(html);\n}\n\nexports = module.exports = filterXSS;\nexports.filterXSS = filterXSS;\nexports.FilterXSS = FilterXSS;\n\n(function () {\n  for (var i in DEFAULT) {\n    exports[i] = DEFAULT[i];\n  }\n  for (var j in parser) {\n    exports[j] = parser[j];\n  }\n})();\n\n// using `xss` on the browser, output `filterXSS` to the globals\nif (typeof window !== \"undefined\") {\n  window.filterXSS = module.exports;\n}\n\n// using `xss` on the WebWorker, output `filterXSS` to the globals\nfunction isWorkerEnv() {\n  return (\n    typeof self !== \"undefined\" &&\n    typeof DedicatedWorkerGlobalScope !== \"undefined\" &&\n    self instanceof DedicatedWorkerGlobalScope\n  );\n}\nif (isWorkerEnv()) {\n  self.filterXSS = module.exports;\n}\n","import linkifyHtml from \"linkify-html\";\nimport xss from \"xss\";\nconst linkify = (rawHtml, options) => {\n    const sanitized = xss(rawHtml);\n    return linkifyHtml(sanitized, options);\n};\nconst directive = {\n    beforeMount(element, binding) {\n        element.innerHTML = linkify(element.innerHTML, binding.value);\n    },\n    updated(element, binding) {\n        element.innerHTML = linkify(element.innerHTML, binding.value);\n    },\n};\nconst mixin = {\n    directives: { Linkify: directive },\n};\nconst plugin = {\n    install(app) {\n        app.directive(\"linkify\", directive);\n    },\n};\nexport { directive, mixin };\nexport default plugin;\n//# sourceMappingURL=main.js.map","import { createStore } from \"vuex\";\n\nimport flashMessages from \"@/app/javascript/store/modules/flashMessages\";\n\nexport default createStore({\n  modules: {\n    flashMessages\n  },\n  state: {\n    guest: null,\n    plusOnes: null,\n    event: null,\n    formErrors: [],\n    loading: false,\n    finished: false\n  },\n  getters: {},\n  mutations: {\n    setGuest(state, guest) {\n      if (guest) {\n        guest.answers_data = {};\n        guest.rsvp = \"unknown\";\n      }\n      state.guest = guest;\n    },\n    setPlusOnes(state, plusOnes) {\n      if (plusOnes) {\n        plusOnes.forEach(question => {\n          question.answers_data = {};\n          question.rsvp = \"unknown\";\n        });\n      }\n      state.plusOnes = plusOnes;\n    },\n    setEvent(state, event) {\n      state.event = event;\n    },\n    setFormErrors(state, formErrors) {\n      state.formErrors = formErrors;\n    },\n    setLoading(state, loading) {\n      state.loading = loading;\n    },\n    setFinished(state, finished) {\n      state.finished = finished;\n    }\n  },\n  actions: {}\n});\n","<template>\n  <div\n    class=\"playground p-5 bg-paper-2\"\n    :style=\"globalThemeVars\">\n    <div\n      class=\"playground-container mx-auto bg-white br-1 border border-paper-3 shadow-1 p-5\">\n      <h1 class=\"typeset-2 mb-3\">Other elements</h1>\n      <p class=\"typeset-7 mb-4\">\n        Below are some elements that don't quite fit into the preview at the\n        moment!\n      </p>\n\n      <p class=\"typeset-7 mb-2\">Generic text</p>\n      <p class=\"typeset-9 text-ink-3 mb-5\">\n        Shown in various parts of Guest ID and template\n      </p>\n      <p\n        :style=\"computedStyle(theme, 'genericText')\"\n        class=\"generic-text mb-5\">\n        This is some generic text. It may have\n        <a href=\"#\">a link</a>\n        inside it.\n      </p>\n\n      <p class=\"typeset-7 mb-2\">A button</p>\n      <p class=\"typeset-9 text-ink-3 mb-3\">\n        Appears on the Guest ID step and at the bottom of the page if there's a\n        form to submit.\n      </p>\n      <btn\n        type=\"secondary\"\n        data-element=\"button\"\n        class=\"btn-large mb-5\"\n        :theme=\"page.design.theme\">\n        {{ t(\"planner.pages.response.form.send-response\") }}\n      </btn>\n\n      <p class=\"typeset-7 mb-2\">RSVP button</p>\n      <p class=\"typeset-9 text-ink-3 mb-3\">\n        You should be able to see the selected state if you click yes or no.\n      </p>\n      <div class=\"flex px-px mb-4\">\n        <button\n          v-for=\"(choice, index) in choices\"\n          :key=\"index\"\n          class=\"btn btn-large rsvp-btn flex-1\"\n          :class=\"{ selected: isSelected(choice), '-mx-px': index === 0 }\"\n          :style=\"[theme.rsvpButton, selectedStyleProps(choice)]\"\n          data-element=\"rsvpButton\"\n          @click=\"selectedChoice = choice\">\n          {{ choice }}\n        </button>\n      </div>\n\n      <p class=\"typeset-7 mb-2\">An input with a label</p>\n      <p class=\"typeset-9 text-ink-3 mb-3\">Appears on the Guest ID step.</p>\n      <div class=\"flex -mx-3 mb-5\">\n        <div class=\"px-3 w-1/2\">\n          <text-input\n            required\n            input-id=\"firstName\"\n            label=\"First name\"\n            class=\"mb-4\"\n            :theme=\"page.design.theme\" />\n        </div>\n        <div class=\"px-3 w-1/2\">\n          <text-input\n            required\n            input-id=\"lastName\"\n            label=\"Last name\"\n            class=\"mb-4\"\n            :theme=\"page.design.theme\" />\n        </div>\n      </div>\n\n      <p class=\"typeset-7 mb-2\">\"Plus one\" information</p>\n      <p class=\"typeset-9 text-ink-3 mb-3\">\n        Shown when a guest has 1 or more plus ones.\n      </p>\n      <div\n        class=\"plus-one-response-header -mx-5 mb-6 px-5 py-7\"\n        data-element=\"plusOneResponseHeader\"\n        :style=\"page.design.theme.plusOneResponseHeader\">\n        <p\n          class=\"plus-one-response-heading\"\n          data-element=\"plusOneResponseHeading\"\n          :style=\"computedStyle(theme, 'plusOneResponseHeading')\">\n          Reply for your plus one\n        </p>\n        <p\n          class=\"plus-one-response-subheading\"\n          data-element=\"plusOneResponseSubheading\"\n          :style=\"computedStyle(theme, 'plusOneResponseSubheading')\">\n          You’ve been assigned a plus one, we’ll need some answers for them too!\n        </p>\n      </div>\n    </div>\n    <slot name=\"highlighter\"></slot>\n  </div>\n</template>\n\n<script>\nimport Btn from \"@/app/javascript/components/shared/Btn.vue\";\nimport TextInput from \"@/app/javascript/components/shared/TextInput.vue\";\nimport computedStyle from \"../../../mixins/computedStyle\";\n\nexport default {\n  name: \"GlobalTemplate0\",\n  components: {\n    Btn,\n    TextInput\n  },\n  mixins: [computedStyle],\n  props: {\n    page: {\n      type: Object,\n      default: () => {}\n    }\n  },\n  data() {\n    return {\n      choices: [\"yes\", \"no\"],\n      selectedChoice: null\n    };\n  },\n  computed: {\n    theme() {\n      return this.page.design.theme;\n    },\n    globalThemeVars() {\n      if (this.theme) {\n        return {\n          \"--generic-link-color\": this.theme.genericLink.color,\n          \"--generic-link-hover-color\": this.theme.genericLink.hover.color,\n          \"--generic-link-text-decoration\":\n            this.theme.genericLink.textDecoration,\n          \"--generic-link-hover-text-decoration\":\n            this.theme.genericLink.hover.textDecoration\n        };\n      }\n      return null;\n    },\n    isSelected() {\n      return choice => {\n        return this.selectedChoice === choice;\n      };\n    },\n    selectedStyleProps() {\n      return choice => {\n        if (!this.isSelected(choice)) return null;\n        return this.theme.rsvpButton.selected;\n      };\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.playground {\n  min-height: 100vh;\n}\n\n.playground-container {\n  max-width: 500px;\n}\n\n/*! purgecss start ignore */\n// Styles for elements in child components\n// that we want to control from this template\n:deep(.hr) {\n  width: 80px;\n}\n\n// The following styles pertain to the questions,\n// which are inserted via the <slot /> in PageTemplateX.vue.\n:deep(.question-label) {\n  font-size: 16px;\n  line-height: 1.75;\n}\n\n// Styles for the layout of the <select>\n// element in this template.\n:deep(.themed-select) {\n  height: 46px;\n  font-size: 14px;\n  position: relative;\n  background-color: transparent;\n  padding-right: 32px;\n  padding-left: 8px;\n  background-image: url(\"@assets/images/svg/downarrow-small-thin.svg\");\n  background-repeat: no-repeat;\n  background-size: 10px 6px;\n  background-position: right 0.5rem center;\n\n  // Base styles for the select - could be moved to a global file\n  width: 100%;\n  cursor: pointer;\n  outline: 0;\n  -moz-appearance: none;\n  -webkit-appearance: none;\n  max-width: none;\n  transition:\n    border-color ease-in-out 0.15s,\n    box-shadow ease-in-out 0.15s;\n}\n\n// Styles for the layout of the <text-input>\n// component in this template.\n:deep(.themed-text-input) {\n  display: block;\n  width: 100%;\n  padding: 2px 10px 2px;\n  height: 46px;\n  font-size: 1rem;\n  font-weight: normal;\n  border-width: 1px;\n  transition:\n    border-color ease-in-out 0.15s,\n    box-shadow ease-in-out 0.15s;\n}\n\n// Styles for the layout of the <textarea-input>\n// component in this template.\n:deep(.themed-textarea) {\n  display: block;\n  width: 100%;\n  padding: 2px 10px 2px;\n  font-size: 1rem;\n  font-weight: normal;\n  border-width: 1px;\n  transition: background 0.1s ease;\n}\n\n// Styles for the layout of the <btn>\n// component in this template.\n:deep(.themed-button) {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 1rem;\n  font-weight: normal;\n  transition: background 0.1s ease;\n}\n\n// Styles for the layout of the rsvp buttons\n// in this template.\n:deep(.rsvp-btn) {\n  position: relative;\n  text-transform: uppercase;\n  font-size: 14px;\n  font-weight: normal;\n  border-style: solid;\n\n  .selected {\n    z-index: 1;\n  }\n}\n\n// Plus one section\n:deep(.plus-one-response-header) {\n  text-align: center;\n}\n\n:deep(.plus-one-response-heading) {\n  font-size: 14px;\n  line-height: 2;\n  text-transform: uppercase;\n}\n\n:deep(.plus-one-response-subheading) {\n  font-size: 13px;\n  line-height: 1.4;\n}\n\n:deep(.responding-for-text) {\n  font-size: 12px;\n}\n\n:deep(.not-person-link) {\n  font-size: 12px;\n  text-decoration: underline;\n}\n\n:deep(.generic-text) {\n  font-size: 14px;\n}\n\n:deep(.generic-text) {\n  a {\n    color: var(--generic-link-color);\n    text-decoration: var(--generic-link-text-decoration);\n\n    &:hover {\n      color: var(--generic-link-hover-color);\n      text-decoration: var(--generic-link-hover-text-decoration);\n    }\n  }\n}\n\n:deep(.generic-link) {\n  font-size: 14px;\n  text-decoration: underline;\n}\n/*! purgecss end ignore */\n</style>\n","<template>\n  <div>\n    <slot></slot>\n    <slot name=\"highlighter\"></slot>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: \"GlobalTemplate1\"\n};\n</script>\n\n<style lang=\"scss\" scoped>\n/*! purgecss start ignore */\n// Styles for elements in child components\n// that we want to control from this template\n:deep(.hr) {\n  width: 80px;\n}\n\n// The following styles pertain to the questions,\n// which are inserted via the <slot /> in PageTemplateX.vue.\n:deep(.question-label) {\n  font-size: 16px;\n  line-height: 1.75;\n}\n\n// Styles for the layout of the <select>\n// element in this template.\n:deep(.themed-select) {\n  height: 46px;\n  font-size: 14px;\n  position: relative;\n  background-color: transparent;\n  padding-right: 32px;\n  padding-left: 8px;\n  background-image: url(\"@assets/images/svg/downarrow-small-thin.svg\");\n  background-repeat: no-repeat;\n  background-size: 10px 6px;\n  background-position: right 0.5rem center;\n\n  // Base styles for the select - could be moved to a global file\n  width: 100%;\n  cursor: pointer;\n  outline: 0;\n  -moz-appearance: none;\n  -webkit-appearance: none;\n  max-width: none;\n  transition:\n    border-color ease-in-out 0.15s,\n    box-shadow ease-in-out 0.15s;\n}\n\n// Styles for the layout of the <text-input>\n// component in this template.\n:deep(.themed-text-input) {\n  display: block;\n  width: 100%;\n  padding: 2px 10px 2px;\n  height: 46px;\n  font-size: 1rem;\n  font-weight: normal;\n  border-width: 1px;\n  transition:\n    border-color ease-in-out 0.15s,\n    box-shadow ease-in-out 0.15s;\n}\n\n// Styles for the layout of the <textarea-input>\n// component in this template.\n:deep(.themed-textarea) {\n  display: block;\n  width: 100%;\n  padding: 2px 10px 2px;\n  font-size: 1rem;\n  font-weight: normal;\n  border-width: 1px;\n  transition: background 0.1s ease;\n}\n\n// Styles for the layout of the <btn>\n// component in this template.\n:deep(.themed-button) {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 1rem;\n  font-weight: normal;\n  transition: background 0.1s ease;\n}\n\n// Styles for the layout of the rsvp buttons\n// in this template.\n:deep(.rsvp-btn) {\n  position: relative;\n  text-transform: uppercase;\n  font-size: 14px;\n  font-weight: normal;\n  border-style: solid;\n\n  .selected {\n    z-index: 1;\n  }\n}\n\n// Plus one section\n:deep(.plus-one-response-header) {\n  text-align: center;\n}\n\n:deep(.plus-one-response-heading) {\n  font-size: 14px;\n  line-height: 2;\n  text-transform: uppercase;\n}\n\n:deep(.plus-one-response-subheading) {\n  font-size: 13px;\n  line-height: 1.4;\n}\n\n:deep(.responding-for-text) {\n  font-size: 12px;\n}\n\n:deep(.not-person-link) {\n  font-size: 12px;\n  text-decoration: underline;\n}\n\n:deep(.generic-text) {\n  font-size: 14px;\n}\n\n:deep(.generic-link) {\n  font-size: 14px;\n  text-decoration: underline;\n}\n/*! purgecss end ignore */\n</style>\n","<template>\n  <div>\n    <slot></slot>\n    <slot name=\"highlighter\"></slot>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: \"GlobalTemplate2\"\n};\n</script>\n\n<style lang=\"scss\" scoped>\n/*! purgecss start ignore */\n// Styles for elements in child components\n// that we want to control from this template\n:deep(.hr) {\n  width: 80px;\n}\n\n// The following styles pertain to the questions,\n// which are inserted via the <slot /> in PageTemplateX.vue.\n:deep(.question-label) {\n  font-size: 16px;\n  line-height: 1.75;\n}\n\n// Styles for the layout of the <select>\n// element in this template.\n:deep(.themed-select) {\n  height: 46px;\n  font-size: 14px;\n  position: relative;\n  background-color: transparent;\n  padding-right: 32px;\n  padding-left: 8px;\n  background-image: url(\"@assets/images/svg/downarrow-small-thin.svg\");\n  background-repeat: no-repeat;\n  background-size: 10px 6px;\n  background-position: right 0.5rem center;\n\n  // Base styles for the select - could be moved to a global file\n  width: 100%;\n  cursor: pointer;\n  outline: 0;\n  -moz-appearance: none;\n  -webkit-appearance: none;\n  max-width: none;\n  transition:\n    border-color ease-in-out 0.15s,\n    box-shadow ease-in-out 0.15s;\n}\n\n// Styles for the layout of the <text-input>\n// component in this template.\n:deep(.themed-text-input) {\n  display: block;\n  width: 100%;\n  padding: 2px 10px 2px;\n  height: 46px;\n  font-size: 1rem;\n  font-weight: normal;\n  border-width: 1px;\n  transition:\n    border-color ease-in-out 0.15s,\n    box-shadow ease-in-out 0.15s;\n}\n\n// Styles for the layout of the <textarea-input>\n// component in this template.\n:deep(.themed-textarea) {\n  display: block;\n  width: 100%;\n  padding: 2px 10px 2px;\n  font-size: 1rem;\n  font-weight: normal;\n  border-width: 1px;\n  transition: background 0.1s ease;\n}\n\n// Styles for the layout of the <btn>\n// component in this template.\n:deep(.themed-button) {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 1rem;\n  font-weight: normal;\n  transition: background 0.1s ease;\n}\n\n// Styles for the layout of the rsvp buttons\n// in this template.\n:deep(.rsvp-btn) {\n  position: relative;\n  text-transform: uppercase;\n  font-size: 14px;\n  font-weight: normal;\n  border-style: solid;\n\n  .selected {\n    z-index: 1;\n  }\n}\n\n// Plus one section\n:deep(.plus-one-response-header) {\n  text-align: center;\n}\n\n:deep(.plus-one-response-heading) {\n  font-size: 14px;\n  line-height: 2;\n  text-transform: uppercase;\n}\n\n:deep(.plus-one-response-subheading) {\n  font-size: 13px;\n  line-height: 1.4;\n}\n\n:deep(.responding-for-text) {\n  font-size: 12px;\n}\n\n:deep(.not-person-link) {\n  font-size: 12px;\n  text-decoration: underline;\n}\n\n:deep(.generic-text) {\n  font-size: 14px;\n}\n\n:deep(.generic-link) {\n  font-size: 14px;\n  text-decoration: underline;\n}\n/*! purgecss end ignore */\n</style>\n","<template>\n  <div>\n    <slot></slot>\n    <slot name=\"highlighter\"></slot>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: \"GlobalTemplate3\"\n};\n</script>\n\n<style lang=\"scss\" scoped>\n/*! purgecss start ignore */\n// Styles for elements in child components\n// that we want to control from this template\n:deep(.hr) {\n  width: 80px;\n}\n\n// The following styles pertain to the questions,\n// which are inserted via the <slot /> in PageTemplateX.vue.\n:deep(.question-label) {\n  font-size: 16px;\n  line-height: 1.75;\n}\n\n// Styles for the layout of the <select>\n// element in this template.\n:deep(.themed-select) {\n  height: 46px;\n  font-size: 14px;\n  position: relative;\n  background-color: transparent;\n  padding-right: 32px;\n  padding-left: 8px;\n  background-image: url(\"@assets/images/svg/downarrow-small-thin.svg\");\n  background-repeat: no-repeat;\n  background-size: 10px 6px;\n  background-position: right 0.5rem center;\n\n  // Base styles for the select - could be moved to a global file\n  width: 100%;\n  cursor: pointer;\n  outline: 0;\n  -moz-appearance: none;\n  -webkit-appearance: none;\n  max-width: none;\n  transition:\n    border-color ease-in-out 0.15s,\n    box-shadow ease-in-out 0.15s;\n}\n\n// Styles for the layout of the <text-input>\n// component in this template.\n:deep(.themed-text-input) {\n  display: block;\n  width: 100%;\n  padding: 2px 10px 2px;\n  height: 46px;\n  font-size: 1rem;\n  font-weight: normal;\n  border-width: 1px;\n  transition:\n    border-color ease-in-out 0.15s,\n    box-shadow ease-in-out 0.15s;\n}\n\n// Styles for the layout of the <textarea-input>\n// component in this template.\n:deep(.themed-textarea) {\n  display: block;\n  width: 100%;\n  padding: 2px 10px 2px;\n  font-size: 1rem;\n  font-weight: normal;\n  border-width: 1px;\n  transition: background 0.1s ease;\n}\n\n// Styles for the layout of the <btn>\n// component in this template.\n:deep(.themed-button) {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 1rem;\n  font-weight: normal;\n  transition: background 0.1s ease;\n}\n\n// Styles for the layout of the rsvp buttons\n// in this template.\n:deep(.rsvp-btn) {\n  position: relative;\n  text-transform: uppercase;\n  font-size: 14px;\n  font-weight: normal;\n  border-style: solid;\n\n  .selected {\n    z-index: 1;\n  }\n}\n\n// Plus one section\n:deep(.plus-one-response-header) {\n  text-align: center;\n}\n\n:deep(.plus-one-response-heading) {\n  font-size: 14px;\n  line-height: 2;\n  text-transform: uppercase;\n}\n\n:deep(.plus-one-response-subheading) {\n  font-size: 13px;\n  line-height: 1.4;\n}\n\n:deep(.responding-for-text) {\n  font-size: 12px;\n}\n\n:deep(.not-person-link) {\n  font-size: 12px;\n  text-decoration: underline;\n}\n\n:deep(.guest-id-text) {\n  font-size: 14px;\n}\n\n:deep(.guest-id-link) {\n  font-size: 14px;\n  text-decoration: underline;\n}\n/*! purgecss end ignore */\n</style>\n","<template>\n  <div>\n    <slot></slot>\n    <slot name=\"highlighter\"></slot>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: \"GlobalTemplate4\"\n};\n</script>\n\n<style lang=\"scss\" scoped>\n/*! purgecss start ignore */\n// Styles for elements in child components\n// that we want to control from this template\n:deep(.hr) {\n  width: 80px;\n}\n\n// The following styles pertain to the questions,\n// which are inserted via the <slot /> in PageTemplateX.vue.\n:deep(.question-label) {\n  font-size: 16px;\n  line-height: 1.75;\n}\n\n// Styles for the layout of the <select>\n// element in this template.\n:deep(.themed-select) {\n  height: 46px;\n  font-size: 14px;\n  position: relative;\n  background-color: transparent;\n  padding-right: 32px;\n  padding-left: 8px;\n  background-image: url(\"@assets/images/svg/downarrow-small-thin.svg\");\n  background-repeat: no-repeat;\n  background-size: 10px 6px;\n  background-position: right 0.5rem center;\n\n  // Base styles for the select - could be moved to a global file\n  width: 100%;\n  cursor: pointer;\n  outline: 0;\n  -moz-appearance: none;\n  -webkit-appearance: none;\n  max-width: none;\n  transition:\n    border-color ease-in-out 0.15s,\n    box-shadow ease-in-out 0.15s;\n}\n\n// Styles for the layout of the <text-input>\n// component in this template.\n:deep(.themed-text-input) {\n  display: block;\n  width: 100%;\n  padding: 2px 10px 2px;\n  height: 46px;\n  font-size: 1rem;\n  font-weight: normal;\n  transition:\n    border-color ease-in-out 0.15s,\n    box-shadow ease-in-out 0.15s;\n}\n\n// Styles for the layout of the <textarea-input>\n// component in this template.\n:deep(.themed-textarea) {\n  display: block;\n  width: 100%;\n  padding: 2px 10px 2px;\n  font-size: 1rem;\n  font-weight: normal;\n  border-width: 1px;\n  transition: background 0.1s ease;\n}\n\n// Styles for the layout of the <btn>\n// component in this template.\n:deep(.themed-button) {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 1rem;\n  font-weight: normal;\n  border-width: 1px;\n  transition: background 0.1s ease;\n}\n\n// Styles for the layout of the rsvp buttons\n// in this template.\n:deep(.rsvp-btn) {\n  position: relative;\n  text-transform: uppercase;\n  font-size: 14px;\n  font-weight: normal;\n  border-style: solid;\n\n  .selected {\n    z-index: 1;\n  }\n}\n\n// Plus one section\n:deep(.plus-one-response-header) {\n  text-align: center;\n}\n\n:deep(.plus-one-response-heading) {\n  font-size: 14px;\n  line-height: 2;\n  text-transform: uppercase;\n}\n\n:deep(.plus-one-response-subheading) {\n  font-size: 13px;\n  line-height: 1.4;\n}\n\n:deep(.responding-for-text) {\n  font-size: 12px;\n}\n\n:deep(.not-person-link) {\n  font-size: 12px;\n  text-decoration: underline;\n}\n\n:deep(.guest-id-text) {\n  font-size: 14px;\n}\n\n:deep(.guest-id-link) {\n  font-size: 14px;\n  text-decoration: underline;\n}\n/*! purgecss end ignore */\n</style>\n","<template>\n  <div>\n    <slot></slot>\n    <slot name=\"highlighter\"></slot>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: \"GlobalTemplate5\"\n};\n</script>\n\n<style lang=\"scss\" scoped>\n/*! purgecss start ignore */\n// Styles for elements in child components\n// that we want to control from this template\n:deep(.hr) {\n  width: 80px;\n}\n\n// The following styles pertain to the questions,\n// which are inserted via the <slot /> in PageTemplateX.vue.\n:deep(.question-label) {\n  font-size: 16px;\n  line-height: 1.75;\n}\n\n// Styles for the layout of the <select>\n// element in this template.\n:deep(.themed-select) {\n  height: 46px;\n  font-size: 14px;\n  position: relative;\n  background-color: transparent;\n  padding-right: 32px;\n  padding-left: 8px;\n  background-image: url(\"@assets/images/svg/downarrow-small-thin.svg\");\n  background-repeat: no-repeat;\n  background-size: 10px 6px;\n  background-position: right 0.5rem center;\n\n  // Base styles for the select - could be moved to a global file\n  width: 100%;\n  cursor: pointer;\n  outline: 0;\n  -moz-appearance: none;\n  -webkit-appearance: none;\n  max-width: none;\n  transition:\n    border-color ease-in-out 0.15s,\n    box-shadow ease-in-out 0.15s;\n}\n\n// Styles for the layout of the <text-input>\n// component in this template.\n:deep(.themed-text-input) {\n  display: block;\n  width: 100%;\n  padding: 2px 10px 2px;\n  height: 46px;\n  font-size: 1rem;\n  font-weight: normal;\n  transition:\n    border-color ease-in-out 0.15s,\n    box-shadow ease-in-out 0.15s;\n}\n\n// Styles for the layout of the <textarea-input>\n// component in this template.\n:deep(.themed-textarea) {\n  display: block;\n  width: 100%;\n  padding: 2px 10px 2px;\n  font-size: 1rem;\n  font-weight: normal;\n  border-width: 1px;\n  transition: background 0.1s ease;\n}\n\n// Styles for the layout of the <btn>\n// component in this template.\n:deep(.themed-button) {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 1rem;\n  font-weight: normal;\n  border-width: 1px;\n  transition: background 0.1s ease;\n}\n\n// Styles for the layout of the rsvp buttons\n// in this template.\n:deep(.rsvp-btn) {\n  position: relative;\n  text-transform: uppercase;\n  font-size: 14px;\n  font-weight: normal;\n  border-style: solid;\n\n  .selected {\n    z-index: 1;\n  }\n}\n\n// Plus one section\n:deep(.plus-one-response-header) {\n  text-align: center;\n}\n\n:deep(.plus-one-response-heading) {\n  font-size: 14px;\n  line-height: 2;\n  text-transform: uppercase;\n}\n\n:deep(.plus-one-response-subheading) {\n  font-size: 13px;\n  line-height: 1.4;\n}\n\n:deep(.responding-for-text) {\n  font-size: 12px;\n}\n\n:deep(.not-person-link) {\n  font-size: 12px;\n  text-decoration: underline;\n}\n\n:deep(.guest-id-text) {\n  font-size: 14px;\n}\n\n:deep(.guest-id-link) {\n  font-size: 14px;\n  text-decoration: underline;\n}\n/*! purgecss end ignore */\n</style>\n","export default {\n  computed: {\n    imageExists() {\n      return (theme, imagePosition) => {\n        return (\n          (theme.images &&\n            theme.images[`${imagePosition}_desktop`] &&\n            theme.images[`${imagePosition}_desktop`].url) ||\n          (theme.images &&\n            theme.images[`${imagePosition}_mobile`] &&\n            theme.images[`${imagePosition}_mobile`].url)\n        );\n      };\n    }\n  }\n};\n","export default {\n  computed: {\n    date() {\n      const tempDate = new Date(this.page.date);\n      const userTimezoneOffset = tempDate.getTimezoneOffset() * 60000;\n      return new Date(tempDate.getTime() + userTimezoneOffset);\n    }\n  }\n};\n","<template>\n  <div>\n    <picture\n      v-if=\"\n        imageExists(`${position}_desktop`) && imageExists(`${position}_mobile`)\n      \">\n      <source\n        media=\"(min-width: 500px)\"\n        :srcset=\"theme.images[`${position}_desktop`].url\" />\n      <img\n        :src=\"theme.images[`${position}_mobile`].url\"\n        :class=\"position\" />\n    </picture>\n    <img\n      v-else-if=\"imageExists(`${position}_desktop`)\"\n      :src=\"theme.images[`${position}_desktop`].url\"\n      :class=\"position\"\n      class=\"hidden sm:block\" />\n    <img\n      v-else-if=\"imageExists(`${position}_mobile`)\"\n      :src=\"theme.images[`${position}_mobile`].url\"\n      :class=\"position\"\n      class=\"sm:hidden\" />\n  </div>\n</template>\n\n<script>\nexport default {\n  name: \"ThemeImage\",\n  props: {\n    position: {\n      type: String,\n      required: true\n    },\n    theme: {\n      type: Object,\n      required: true\n    }\n  },\n  computed: {\n    imageExists() {\n      return imagePosition => {\n        return (\n          this.theme.images &&\n          this.theme.images[imagePosition] &&\n          this.theme.images[imagePosition].url\n        );\n      };\n    }\n  }\n};\n</script>\n","<template>\n  <div\n    class=\"main-page-body pb-8\"\n    data-element=\"mainPageBody\"\n    :style=\"page.design.theme.mainPageBody\">\n    <div\n      class=\"main-page-content mx-auto p-5 sm:p-7\"\n      data-element=\"mainPageContent\"\n      :style=\"page.design.theme.mainPageContent\">\n      <div class=\"text-center\">\n        <theme-image\n          v-if=\"imageExists(theme, 'top_center')\"\n          v-bind=\"themeImageProps('top_center')\"\n          class=\"mb-5 sm:mb-7\" />\n        <h1\n          v-if=\"page.title\"\n          v-linkify\n          data-element=\"title\"\n          class=\"title mb-4 text\"\n          :style=\"computedStyle(theme, 'title')\"\n          v-html=\"page.title\"></h1>\n        <div\n          v-if=\"page.text_area_1\"\n          v-linkify\n          class=\"text-area-1 mb-4 text\"\n          data-element=\"text_area_1\"\n          :style=\"computedStyle(theme, 'text_area_1')\"\n          v-html=\"page.text_area_1\"></div>\n        <div\n          v-if=\"\n            (page.first_name || page.last_name) &&\n            (page.partner_first_name || page.partner_last_name)\n          \"\n          class=\"names mb-4 text\">\n          <div\n            class=\"name flex flex-wrap justify-center gap-x-3 md:gap-x-4\"\n            :style=\"theme.names\">\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text first-name\"\n              data-element=\"firstName\"\n              :style=\"computedStyle(theme, 'firstName')\"\n              v-html=\"page.first_name\"></span>\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text last-name\"\n              data-element=\"lastName\"\n              :style=\"computedStyle(theme, 'lastName')\"\n              v-html=\"page.last_name\"></span>\n          </div>\n          <div\n            :style=\"computedStyle(theme, 'and')\"\n            data-element=\"and\"\n            class=\"and\">\n            {{ theme.and.content }}\n          </div>\n          <div\n            class=\"name flex flex-wrap justify-center gap-x-3 md:gap-x-4\"\n            :style=\"computedStyle(theme, 'names')\">\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text first-name partner-first-name\"\n              data-element=\"firstName\"\n              :style=\"computedStyle(theme, 'firstName')\"\n              v-html=\"page.partner_first_name\"></span>\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text last-name partner-last-name\"\n              data-element=\"lastName\"\n              :style=\"computedStyle(theme, 'lastName')\"\n              v-html=\"page.partner_last_name\"></span>\n          </div>\n        </div>\n        <div\n          v-if=\"page.text_area_2\"\n          v-linkify\n          class=\"text-area-2 mb-4 text\"\n          data-element=\"text_area_2\"\n          :style=\"computedStyle(theme, 'text_area_2')\"\n          v-html=\"page.text_area_2\"></div>\n        <div\n          v-if=\"page.date\"\n          class=\"date mb-4\"\n          data-element=\"date\"\n          :style=\"computedStyle(theme, 'date')\">\n          {{ dateString }}\n        </div>\n        <div\n          v-if=\"page.text_area_3\"\n          v-linkify\n          data-element=\"text_area_3\"\n          :style=\"computedStyle(theme, 'text_area_3')\"\n          class=\"text-area-3 whitespace-pre-wrap text\"\n          v-html=\"page.text_area_3\"></div>\n      </div>\n      <hr\n        v-if=\"hasVisiblePageQuestions\"\n        class=\"hr my-7\"\n        data-element=\"hr\"\n        :style=\"computedStyle(theme, 'hr')\" />\n      <slot></slot>\n      <theme-image\n        v-if=\"imageExists(theme, 'bottom_center')\"\n        v-bind=\"themeImageProps('bottom_center')\"\n        class=\"mt-5 sm:mt-7\" />\n    </div>\n  </div>\n</template>\n\n<script>\nimport computedStyle from \"../../../mixins/computedStyle\";\nimport imageExists from \"../../../mixins/imageExists\";\nimport dates from \"./dates\";\n\nimport ThemeImage from \"../ThemeImage.vue\";\n\n/* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_destroy\"] }] */\nexport default {\n  name: \"PageTemplate1\",\n  components: {\n    ThemeImage\n  },\n  mixins: [computedStyle, imageExists, dates],\n  props: {\n    page: {\n      type: Object,\n      required: true\n    }\n  },\n  data() {\n    return {\n      dateOptions: {\n        weekday: \"long\",\n        year: \"numeric\",\n        month: \"long\",\n        day: \"numeric\"\n      }\n    };\n  },\n  computed: {\n    dateString() {\n      return this.date.toLocaleDateString(undefined, this.dateOptions);\n    },\n    theme() {\n      return this.page.design.theme;\n    },\n    images() {\n      return this.page.design.theme.images;\n    },\n    themeImageProps() {\n      return position => {\n        return {\n          position,\n          theme: this.theme\n        };\n      };\n    },\n    hasVisiblePageQuestions() {\n      return this.page.page_questions.some(\n        pageQuestion => !pageQuestion._destroy\n      );\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.main-page-body {\n  min-height: 100vh;\n  border-width: 16px;\n\n  @media (min-width: $screen-sm-min) {\n    border-width: 40px;\n  }\n}\n\n.main-page-content {\n  width: 500px;\n  max-width: 100%;\n  position: relative;\n}\n\n/*! purgecss start ignore */\n:deep(.top_center),\n:deep(.bottom_center) {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n/*! purgecss end ignore */\n\n.title {\n  font-size: 19px;\n}\n\n.name {\n  font-size: 24px;\n  line-height: 1.6;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 28px;\n    line-height: 1.83;\n  }\n}\n\n.and {\n  font-size: 18px;\n  line-height: 1.6;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 28px;\n    line-height: 1.83;\n  }\n}\n\n.text-area-1,\n.text-area-2,\n.text-area-3 {\n  font-size: 16px;\n  line-height: 1.5;\n}\n\n.date {\n  font-size: 19px;\n  line-height: 1.5;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 24px;\n  }\n}\n\n/*! purgecss start ignore */\n.text :deep(a) {\n  text-decoration: underline;\n  word-break: break-all;\n}\n\n.text :deep(a:hover) {\n  text-decoration: none;\n}\n/*! purgecss end ignore */\n</style>\n","<template>\n  <div\n    class=\"main-page-body pb-8\"\n    data-element=\"mainPageBody\"\n    :style=\"page.design.theme.mainPageBody\">\n    <div\n      class=\"main-page-content mx-auto p-5 sm:p-7\"\n      data-element=\"mainPageContent\"\n      :style=\"page.design.theme.mainPageContent\">\n      <div class=\"text-center\">\n        <theme-image\n          v-if=\"imageExists(theme, 'top_center')\"\n          v-bind=\"themeImageProps('top_center')\"\n          class=\"-mx-5 sm:mx-0 mb-5 sm:mb-7\" />\n        <h1\n          v-if=\"page.title\"\n          v-linkify\n          data-element=\"title\"\n          class=\"title mb-4 text\"\n          :style=\"computedStyle(theme, 'title')\"\n          v-html=\"page.title\"></h1>\n        <div\n          v-if=\"page.text_area_1\"\n          v-linkify\n          class=\"text-area-1 mb-4 text\"\n          data-element=\"text_area_1\"\n          :style=\"computedStyle(theme, 'text_area_1')\"\n          v-html=\"page.text_area_1\"></div>\n        <div\n          v-if=\"\n            (page.first_name || page.last_name) &&\n            (page.partner_first_name || page.partner_last_name)\n          \"\n          class=\"names mb-4 text\">\n          <div\n            class=\"name flex flex-wrap justify-center gap-x-3 md:gap-x-4\"\n            :style=\"theme.names\">\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text first-name\"\n              data-element=\"firstName\"\n              :style=\"computedStyle(theme, 'firstName')\"\n              v-html=\"page.first_name\"></span>\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text last-name\"\n              data-element=\"lastName\"\n              :style=\"computedStyle(theme, 'lastName')\"\n              v-html=\"page.last_name\"></span>\n          </div>\n          <div\n            :style=\"computedStyle(theme, 'and')\"\n            data-element=\"and\"\n            class=\"and\">\n            {{ theme.and.content }}\n          </div>\n          <div\n            class=\"name flex flex-wrap justify-center gap-x-3 md:gap-x-4\"\n            :style=\"computedStyle(theme, 'names')\">\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text first-name partner-first-name\"\n              data-element=\"firstName\"\n              :style=\"computedStyle(theme, 'firstName')\"\n              v-html=\"page.partner_first_name\"></span>\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text last-name partner-last-name\"\n              data-element=\"lastName\"\n              :style=\"computedStyle(theme, 'lastName')\"\n              v-html=\"page.partner_last_name\"></span>\n          </div>\n        </div>\n        <div\n          v-if=\"page.text_area_2\"\n          v-linkify\n          class=\"text-area-2 mb-4 text\"\n          data-element=\"text_area_2\"\n          :style=\"computedStyle(theme, 'text_area_2')\"\n          v-html=\"page.text_area_2\"></div>\n        <div\n          v-if=\"page.date\"\n          class=\"date mb-4\"\n          data-element=\"date\"\n          :style=\"computedStyle(theme, 'date')\">\n          {{ dateString }}\n        </div>\n        <div\n          v-if=\"page.text_area_3\"\n          v-linkify\n          data-element=\"text_area_3\"\n          :style=\"computedStyle(theme, 'text_area_3')\"\n          class=\"text-area-3 whitespace-pre-wrap text\"\n          v-html=\"page.text_area_3\"></div>\n      </div>\n      <hr\n        v-if=\"hasVisiblePageQuestions\"\n        class=\"hr my-7\"\n        data-element=\"hr\"\n        :style=\"computedStyle(theme, 'hr')\" />\n      <slot></slot>\n      <theme-image\n        v-if=\"imageExists(theme, 'bottom_center')\"\n        v-bind=\"themeImageProps('bottom_center')\"\n        class=\"-mx-5 sm:mx-0 mt-5 sm:mt-7\" />\n    </div>\n  </div>\n</template>\n\n<script>\nimport computedStyle from \"../../../mixins/computedStyle\";\nimport imageExists from \"../../../mixins/imageExists\";\nimport dates from \"./dates\";\n\nimport ThemeImage from \"../ThemeImage.vue\";\n\n/* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_destroy\"] }] */\nexport default {\n  name: \"PageTemplate2\",\n  components: {\n    ThemeImage\n  },\n  mixins: [computedStyle, imageExists, dates],\n  props: {\n    page: {\n      type: Object,\n      required: true\n    }\n  },\n  data() {\n    return {\n      dateOptions: {\n        weekday: \"long\",\n        year: \"numeric\",\n        month: \"long\",\n        day: \"numeric\"\n      }\n    };\n  },\n  computed: {\n    dateString() {\n      return this.date.toLocaleDateString(undefined, this.dateOptions);\n    },\n    theme() {\n      return this.page.design.theme;\n    },\n    images() {\n      return this.page.design.theme.images;\n    },\n    themeImageProps() {\n      return position => {\n        return {\n          position,\n          theme: this.theme\n        };\n      };\n    },\n    hasVisiblePageQuestions() {\n      return this.page.page_questions.some(\n        pageQuestion => !pageQuestion._destroy\n      );\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.main-page-body {\n  min-height: 100vh;\n}\n\n.main-page-content {\n  width: 500px;\n  max-width: 100%;\n  position: relative;\n}\n\n/*! purgecss start ignore */\n:deep(.top_center),\n:deep(.bottom_center) {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n/*! purgecss end ignore */\n\n.title {\n  font-size: 19px;\n}\n\n.name {\n  font-size: 24px;\n  line-height: 1.6;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 28px;\n    line-height: 1.83;\n  }\n}\n\n.and {\n  font-size: 18px;\n  line-height: 1.6;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 28px;\n    line-height: 1.83;\n  }\n}\n\n.text-area-1,\n.text-area-2,\n.text-area-3 {\n  font-size: 16px;\n  line-height: 1.5;\n}\n\n.date {\n  font-size: 19px;\n  line-height: 1.5;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 24px;\n  }\n}\n\n/*! purgecss start ignore */\n.text :deep(a) {\n  text-decoration: underline;\n  word-break: break-all;\n}\n\n.text :deep(a:hover) {\n  text-decoration: none;\n}\n/*! purgecss end ignore */\n</style>\n","<template>\n  <div\n    class=\"main-page-body relative\"\n    data-element=\"mainPageBody\"\n    :style=\"page.design.theme.mainPageBody\">\n    <theme-image\n      v-if=\"imageExists(theme, 'top_center_wide')\"\n      v-bind=\"themeImageProps('top_center_wide')\" />\n    <div\n      class=\"main-page-content mx-auto p-5 sm:p-7\"\n      data-element=\"mainPageContent\"\n      :style=\"page.design.theme.mainPageContent\">\n      <div class=\"text-center\">\n        <h1\n          v-if=\"page.title\"\n          v-linkify\n          data-element=\"title\"\n          class=\"title mb-4 text\"\n          :style=\"computedStyle(theme, 'title')\"\n          v-html=\"page.title\"></h1>\n        <div\n          v-if=\"page.text_area_1\"\n          v-linkify\n          class=\"text-area-1 mb-4 text\"\n          data-element=\"text_area_1\"\n          :style=\"computedStyle(theme, 'text_area_1')\"\n          v-html=\"page.text_area_1\"></div>\n        <div\n          v-if=\"\n            (page.first_name || page.last_name) &&\n            (page.partner_first_name || page.partner_last_name)\n          \"\n          class=\"names mb-4 text\">\n          <div\n            class=\"name flex flex-wrap justify-center gap-x-3 md:gap-x-4\"\n            :style=\"theme.names\">\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text first-name\"\n              data-element=\"firstName\"\n              :style=\"computedStyle(theme, 'firstName')\"\n              v-html=\"page.first_name\"></span>\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text last-name\"\n              data-element=\"lastName\"\n              :style=\"computedStyle(theme, 'lastName')\"\n              v-html=\"page.last_name\"></span>\n          </div>\n          <div\n            :style=\"computedStyle(theme, 'and')\"\n            data-element=\"and\"\n            class=\"and\">\n            {{ theme.and.content }}\n          </div>\n          <div\n            class=\"name flex flex-wrap justify-center gap-x-3 md:gap-x-4\"\n            :style=\"computedStyle(theme, 'names')\">\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text first-name partner-first-name\"\n              data-element=\"firstName\"\n              :style=\"computedStyle(theme, 'firstName')\"\n              v-html=\"page.partner_first_name\"></span>\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text last-name partner-last-name\"\n              data-element=\"lastName\"\n              :style=\"computedStyle(theme, 'lastName')\"\n              v-html=\"page.partner_last_name\"></span>\n          </div>\n        </div>\n        <div\n          v-if=\"page.text_area_2\"\n          v-linkify\n          class=\"text-area-2 mb-4 text\"\n          data-element=\"text_area_2\"\n          :style=\"computedStyle(theme, 'text_area_2')\"\n          v-html=\"page.text_area_2\"></div>\n        <div\n          v-if=\"page.date\"\n          class=\"date mb-4\"\n          data-element=\"date\"\n          :style=\"computedStyle(theme, 'date')\">\n          {{ dateString }}\n        </div>\n        <div\n          v-if=\"page.text_area_3\"\n          v-linkify\n          data-element=\"text_area_3\"\n          :style=\"computedStyle(theme, 'text_area_3')\"\n          class=\"text-area-3 whitespace-pre-wrap text\"\n          v-html=\"page.text_area_3\"></div>\n      </div>\n      <hr\n        v-if=\"hasVisiblePageQuestions\"\n        class=\"hr my-7\"\n        data-element=\"hr\"\n        :style=\"computedStyle(theme, 'hr')\" />\n      <slot></slot>\n    </div>\n    <theme-image\n      v-if=\"imageExists(theme, 'bottom_center_wide')\"\n      v-bind=\"themeImageProps('bottom_center_wide')\" />\n  </div>\n</template>\n\n<script>\nimport computedStyle from \"../../../mixins/computedStyle\";\nimport imageExists from \"../../../mixins/imageExists\";\nimport dates from \"./dates\";\n\nimport ThemeImage from \"../ThemeImage.vue\";\n\n/* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_destroy\"] }] */\nexport default {\n  name: \"PageTemplate3\",\n  components: {\n    ThemeImage\n  },\n  mixins: [computedStyle, imageExists, dates],\n  props: {\n    page: {\n      type: Object,\n      required: true\n    }\n  },\n  data() {\n    return {\n      dateOptions: {\n        weekday: \"long\",\n        year: \"numeric\",\n        month: \"long\",\n        day: \"numeric\"\n      }\n    };\n  },\n  computed: {\n    dateString() {\n      return this.date.toLocaleDateString(undefined, this.dateOptions);\n    },\n    theme() {\n      return this.page.design.theme;\n    },\n    themeImageProps() {\n      return position => {\n        return {\n          position,\n          theme: this.theme\n        };\n      };\n    },\n    hasVisiblePageQuestions() {\n      return this.page.page_questions.some(\n        pageQuestion => !pageQuestion._destroy\n      );\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.main-page-body {\n  min-height: 100vh;\n  padding-top: 165px;\n  padding-bottom: 165px;\n  overflow: hidden;\n}\n\n.main-page-content {\n  width: 500px;\n  max-width: 100%;\n  position: relative;\n  z-index: 1;\n}\n\n/*! purgecss start ignore */\n:deep(.top_center_wide),\n:deep(.bottom_center_wide) {\n  position: absolute;\n  width: 500px;\n  left: 50%;\n  transform: translateX(-50%);\n\n  @media (min-width: $screen-xs-min) {\n    width: 1500px;\n  }\n}\n\n:deep(.top_center_wide) {\n  top: 0;\n}\n\n:deep(.bottom_center_wide) {\n  bottom: 0;\n}\n/*! purgecss end ignore */\n\n.title {\n  font-size: 19px;\n}\n\n.name {\n  font-size: 24px;\n  line-height: 1.6;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 28px;\n    line-height: 1.83;\n  }\n}\n\n.and {\n  font-size: 18px;\n  line-height: 1.6;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 28px;\n    line-height: 1.83;\n  }\n}\n\n.text-area-1,\n.text-area-2,\n.text-area-3 {\n  font-size: 16px;\n  line-height: 1.5;\n}\n\n.date {\n  font-size: 19px;\n  line-height: 1.5;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 24px;\n  }\n}\n\n/*! purgecss start ignore */\n.text :deep(a) {\n  text-decoration: underline;\n  word-break: break-all;\n}\n\n.text :deep(a:hover) {\n  text-decoration: none;\n}\n/*! purgecss end ignore */\n</style>\n","<template>\n  <div\n    class=\"main-page-body relative\"\n    data-element=\"mainPageBody\"\n    :style=\"page.design.theme.mainPageBody\">\n    <theme-image\n      v-if=\"imageExists(theme, 'top_left_corner')\"\n      v-bind=\"themeImageProps('top_left_corner')\" />\n    <theme-image\n      v-if=\"imageExists(theme, 'top_right_corner')\"\n      v-bind=\"themeImageProps('top_right_corner')\" />\n    <theme-image\n      v-if=\"imageExists(theme, 'bottom_left_corner')\"\n      v-bind=\"themeImageProps('bottom_left_corner')\" />\n    <theme-image\n      v-if=\"imageExists(theme, 'bottom_right_corner')\"\n      v-bind=\"themeImageProps('bottom_right_corner')\" />\n    <div\n      class=\"main-page-content mx-auto p-5 sm:p-7\"\n      data-element=\"mainPageContent\"\n      :style=\"page.design.theme.mainPageContent\">\n      <div class=\"text-center\">\n        <h1\n          v-if=\"page.title\"\n          v-linkify\n          data-element=\"title\"\n          class=\"title mb-4 text\"\n          :style=\"computedStyle(theme, 'title')\"\n          v-html=\"page.title\"></h1>\n        <div\n          v-if=\"page.text_area_1\"\n          v-linkify\n          class=\"text-area-1 mb-4 text\"\n          data-element=\"text_area_1\"\n          :style=\"computedStyle(theme, 'text_area_1')\"\n          v-html=\"page.text_area_1\"></div>\n        <div\n          v-if=\"\n            (page.first_name || page.last_name) &&\n            (page.partner_first_name || page.partner_last_name)\n          \"\n          class=\"names mb-4 text\">\n          <div\n            class=\"name flex flex-wrap justify-center gap-x-3 md:gap-x-4\"\n            :style=\"theme.names\">\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text first-name\"\n              data-element=\"firstName\"\n              :style=\"computedStyle(theme, 'firstName')\"\n              v-html=\"page.first_name\"></span>\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text last-name\"\n              data-element=\"lastName\"\n              :style=\"computedStyle(theme, 'lastName')\"\n              v-html=\"page.last_name\"></span>\n          </div>\n          <div\n            :style=\"computedStyle(theme, 'and')\"\n            data-element=\"and\"\n            class=\"and\">\n            {{ theme.and.content }}\n          </div>\n          <div\n            class=\"name flex flex-wrap justify-center gap-x-3 md:gap-x-4\"\n            :style=\"computedStyle(theme, 'names')\">\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text first-name partner-first-name\"\n              data-element=\"firstName\"\n              :style=\"computedStyle(theme, 'firstName')\"\n              v-html=\"page.partner_first_name\"></span>\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text last-name partner-last-name\"\n              data-element=\"lastName\"\n              :style=\"computedStyle(theme, 'lastName')\"\n              v-html=\"page.partner_last_name\"></span>\n          </div>\n        </div>\n        <div\n          v-if=\"page.text_area_2\"\n          v-linkify\n          class=\"text-area-2 mb-4 text\"\n          data-element=\"text_area_2\"\n          :style=\"computedStyle(theme, 'text_area_2')\"\n          v-html=\"page.text_area_2\"></div>\n        <div\n          v-if=\"page.date\"\n          class=\"date mb-4\"\n          data-element=\"date\"\n          :style=\"computedStyle(theme, 'date')\">\n          {{ dateString }}\n        </div>\n        <div\n          v-if=\"page.text_area_3\"\n          v-linkify\n          data-element=\"text_area_3\"\n          :style=\"computedStyle(theme, 'text_area_3')\"\n          class=\"text-area-3 whitespace-pre-wrap text\"\n          v-html=\"page.text_area_3\"></div>\n      </div>\n      <hr\n        v-if=\"hasVisiblePageQuestions\"\n        class=\"hr my-7\"\n        data-element=\"hr\"\n        :style=\"computedStyle(theme, 'hr')\" />\n      <slot></slot>\n    </div>\n  </div>\n</template>\n\n<script>\nimport computedStyle from \"../../../mixins/computedStyle\";\nimport imageExists from \"../../../mixins/imageExists\";\nimport dates from \"./dates\";\n\nimport ThemeImage from \"../ThemeImage.vue\";\n\n/* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_destroy\"] }] */\nexport default {\n  name: \"PageTemplate4\",\n  components: {\n    ThemeImage\n  },\n  mixins: [computedStyle, imageExists, dates],\n  props: {\n    page: {\n      type: Object,\n      required: true\n    }\n  },\n  data() {\n    return {\n      dateOptions: {\n        weekday: \"long\",\n        year: \"numeric\",\n        month: \"long\",\n        day: \"numeric\"\n      }\n    };\n  },\n  computed: {\n    dateString() {\n      return this.date.toLocaleDateString(undefined, this.dateOptions);\n    },\n    theme() {\n      return this.page.design.theme;\n    },\n    themeImageProps() {\n      return position => {\n        return {\n          position,\n          theme: this.theme\n        };\n      };\n    },\n    hasVisiblePageQuestions() {\n      return this.page.page_questions.some(\n        pageQuestion => !pageQuestion._destroy\n      );\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.main-page-body {\n  min-height: 100vh;\n  padding-top: 165px;\n  padding-bottom: 165px;\n}\n\n.main-page-content {\n  width: 500px;\n  max-width: 100%;\n  position: relative;\n}\n\n/*! purgecss start ignore */\n:deep(.top_left_corner),\n:deep(.top_right_corner),\n:deep(.bottom_left_corner),\n:deep(.bottom_right_corner) {\n  position: absolute;\n  width: 500px;\n\n  @media (min-width: $screen-xs-min) {\n    width: 650px;\n  }\n}\n\n:deep(.top_left_corner) {\n  top: 0;\n  left: 0;\n}\n\n:deep(.top_right_corner) {\n  top: 0;\n  right: 0;\n}\n\n:deep(.bottom_left_corner) {\n  bottom: 0;\n  left: 0;\n}\n\n:deep(.bottom_right_corner) {\n  bottom: 0;\n  right: 0;\n}\n/*! purgecss end ignore */\n\n.title {\n  font-size: 19px;\n}\n\n.name {\n  font-size: 24px;\n  line-height: 1.6;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 28px;\n    line-height: 1.83;\n  }\n}\n\n.and {\n  font-size: 18px;\n  line-height: 1.6;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 28px;\n    line-height: 1.83;\n  }\n}\n\n.text-area-1,\n.text-area-2,\n.text-area-3 {\n  font-size: 16px;\n  line-height: 1.5;\n}\n\n.date {\n  font-size: 19px;\n  line-height: 1.5;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 24px;\n  }\n}\n\n/*! purgecss start ignore */\n.text :deep(a) {\n  text-decoration: underline;\n  word-break: break-all;\n}\n\n.text :deep(a:hover) {\n  text-decoration: none;\n}\n/*! purgecss end ignore */\n</style>\n","<template>\n  <div\n    class=\"main-page-body relative m-2 sm:m-0\"\n    data-element=\"mainPageBody\"\n    :style=\"page.design.theme.mainPageBody\">\n    <div\n      class=\"main-page-content mx-auto px-4 py-5 sm:p-7\"\n      data-element=\"mainPageContent\"\n      :style=\"[page.design.theme.mainPageContent, borderImageStyles]\">\n      <div class=\"text-center\">\n        <h1\n          v-if=\"page.title\"\n          v-linkify\n          data-element=\"title\"\n          class=\"title mb-4 text\"\n          :style=\"computedStyle(theme, 'title')\"\n          v-html=\"page.title\"></h1>\n        <div\n          v-if=\"page.text_area_1\"\n          v-linkify\n          class=\"text-area-1 mb-4 text\"\n          data-element=\"text_area_1\"\n          :style=\"computedStyle(theme, 'text_area_1')\"\n          v-html=\"page.text_area_1\"></div>\n        <div\n          v-if=\"\n            (page.first_name || page.last_name) &&\n            (page.partner_first_name || page.partner_last_name)\n          \"\n          class=\"names mb-4 text\">\n          <div\n            class=\"name flex flex-wrap justify-center gap-x-3 md:gap-x-4\"\n            :style=\"theme.names\">\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text first-name\"\n              data-element=\"firstName\"\n              :style=\"computedStyle(theme, 'firstName')\"\n              v-html=\"page.first_name\"></span>\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text last-name\"\n              data-element=\"lastName\"\n              :style=\"computedStyle(theme, 'lastName')\"\n              v-html=\"page.last_name\"></span>\n          </div>\n          <div\n            :style=\"computedStyle(theme, 'and')\"\n            data-element=\"and\"\n            class=\"and\">\n            {{ theme.and.content }}\n          </div>\n          <div\n            class=\"name flex flex-wrap justify-center gap-x-3 md:gap-x-4\"\n            :style=\"computedStyle(theme, 'names')\">\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text first-name partner-first-name\"\n              data-element=\"firstName\"\n              :style=\"computedStyle(theme, 'firstName')\"\n              v-html=\"page.partner_first_name\"></span>\n            <span\n              v-linkify\n              data-cs-mask\n              class=\"text last-name partner-last-name\"\n              data-element=\"lastName\"\n              :style=\"computedStyle(theme, 'lastName')\"\n              v-html=\"page.partner_last_name\"></span>\n          </div>\n        </div>\n        <div\n          v-if=\"page.text_area_2\"\n          v-linkify\n          class=\"text-area-2 mb-4 text\"\n          data-element=\"text_area_2\"\n          :style=\"computedStyle(theme, 'text_area_2')\"\n          v-html=\"page.text_area_2\"></div>\n        <div\n          v-if=\"page.date\"\n          class=\"date mb-4\"\n          data-element=\"date\"\n          :style=\"computedStyle(theme, 'date')\">\n          {{ dateString }}\n        </div>\n        <div\n          v-if=\"page.text_area_3\"\n          v-linkify\n          data-element=\"text_area_3\"\n          :style=\"computedStyle(theme, 'text_area_3')\"\n          class=\"text-area-3 whitespace-pre-wrap text\"\n          v-html=\"page.text_area_3\"></div>\n      </div>\n      <hr\n        v-if=\"hasVisiblePageQuestions\"\n        class=\"hr my-7\"\n        data-element=\"hr\"\n        :style=\"computedStyle(theme, 'hr')\" />\n      <slot></slot>\n    </div>\n  </div>\n</template>\n\n<script>\nimport computedStyle from \"../../../mixins/computedStyle\";\nimport imageExists from \"../../../mixins/imageExists\";\nimport dates from \"./dates\";\n\n/* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_destroy\"] }] */\nexport default {\n  name: \"PageTemplate5\",\n  mixins: [computedStyle, imageExists, dates],\n  props: {\n    page: {\n      type: Object,\n      required: true\n    }\n  },\n  data() {\n    return {\n      dateOptions: {\n        weekday: \"long\",\n        year: \"numeric\",\n        month: \"long\",\n        day: \"numeric\"\n      }\n    };\n  },\n  computed: {\n    dateString() {\n      return this.date.toLocaleDateString(undefined, this.dateOptions);\n    },\n    theme() {\n      return this.page.design.theme;\n    },\n    themeImageProps() {\n      return position => {\n        return {\n          position,\n          theme: this.theme\n        };\n      };\n    },\n    hasVisiblePageQuestions() {\n      return this.page.page_questions.some(\n        pageQuestion => !pageQuestion._destroy\n      );\n    },\n    borderImageStyles() {\n      if (this.imageExists(this.theme, \"border_image\")) {\n        return {\n          \"--border-image-source-desktop\": `url(${this.theme.images.border_image_desktop.url})`,\n          \"--border-image-source-mobile\": `url(${this.theme.images.border_image_mobile.url})`\n        };\n      }\n      return null;\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.main-page-body {\n  min-height: 100vh;\n\n  @media (min-width: $screen-sm-min) {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n}\n\n.main-page-content {\n  width: 600px;\n  max-width: 100%;\n  border-width: 24px;\n  border-image-source: var(--border-image-source-mobile);\n  border-image-slice: 48;\n  position: relative;\n\n  @media (min-width: $screen-sm-min) {\n    border-width: 48px;\n    border-image-source: var(--border-image-source-desktop);\n    border-image-slice: 96;\n  }\n}\n\n.title {\n  font-size: 19px;\n}\n\n.name {\n  font-size: 24px;\n  line-height: 1.6;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 28px;\n    line-height: 1.83;\n  }\n}\n\n.and {\n  font-size: 18px;\n  line-height: 1.6;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 28px;\n    line-height: 1.83;\n  }\n}\n\n.text-area-1,\n.text-area-2,\n.text-area-3 {\n  font-size: 16px;\n  line-height: 1.5;\n}\n\n.date {\n  font-size: 19px;\n  line-height: 1.5;\n\n  @media (min-width: $screen-sm-min) {\n    font-size: 24px;\n  }\n}\n\n/*! purgecss start ignore */\n.text :deep(a) {\n  text-decoration: underline;\n  word-break: break-all;\n}\n\n.text :deep(a:hover) {\n  text-decoration: none;\n}\n/*! purgecss end ignore */\n</style>\n","export default \"data:image/svg+xml,%3csvg%20width='100'%20height='22'%20viewBox='0%200%20191%2040'%20fill='currentColor'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M164.672%2019.2701C166.618%2019.9513%20168.759%2020.3406%20171.29%2020.3406C178.005%2020.3406%20181.606%2016.9343%20181.606%2011.0949C181.606%204.86618%20177.518%201.45985%20170.024%201.45985H164.574V19.2701H164.672ZM188.419%2035.4258C189.1%2037.5669%20189.586%2038.8321%20190.268%2039.9027H182.968C182.774%2038.6375%20182.482%2037.1776%20182.19%2035.9124L180.73%2029.781C179.27%2023.6496%20176.934%2021.8005%20170.608%2021.8005H164.477V31.0462C164.477%2034.5499%20164.672%2037.4696%20165.255%2039.9027H158.443C158.735%2037.4696%20158.929%2034.5499%20158.929%2031.0462V8.85645C158.929%205.3528%20158.735%202.43309%20158.443%200H170.219C181.606%200%20187.543%203.6983%20187.543%2010.7056C187.543%2016.4477%20183.455%2020.3406%20176.156%2021.1192C182.287%2022.2871%20184.915%2024.5255%20186.472%2029.5864L188.419%2035.4258ZM151.241%2034.8419L150.852%2039.9027H124.672C124.964%2037.4696%20125.158%2034.5499%20125.158%2031.0462V8.85645C125.158%205.3528%20124.964%202.43309%20124.672%200H149.878L149.1%204.18492L142.579%202.43309C140.049%201.75182%20137.908%201.45985%20134.793%201.45985H130.706V18.3942H134.793C137.616%2018.3942%20141.314%2018.1022%20146.083%2017.3236V21.2165C141.314%2020.438%20137.616%2020.146%20134.793%2020.146H130.706V38.3455H134.209C137.908%2038.3455%20140.925%2037.9562%20144.623%2036.8856L151.241%2034.8419ZM114.258%2031.1436C114.258%2034.6472%20114.453%2037.5669%20114.745%2040H108.127C108.419%2037.5669%20108.613%2034.6472%20108.613%2031.1436V8.85645C108.613%205.3528%20108.419%202.43309%20108.127%200H114.745C114.453%202.43309%20114.258%205.3528%20114.258%208.85645V31.1436ZM83.4063%2022.4818C90.1217%2022.4818%2093.9173%2018.6861%2093.9173%2012.1655C93.9173%205.3528%2089.635%201.45985%2082.2384%201.45985H76.8857V21.1192C79.1241%2021.9951%2081.4599%2022.4818%2083.4063%2022.4818ZM82.5304%200C93.9173%200%2099.9513%204.18492%2099.9513%2011.9708C99.9513%2019.7567%2094.0146%2024.2336%2083.6983%2024.2336C81.6545%2024.2336%2079.1241%2024.0389%2076.8857%2023.6496V31.1436C76.8857%2034.6472%2077.0803%2037.5669%2077.6642%2040H70.8516C71.1436%2037.5669%2071.3382%2034.6472%2071.3382%2031.1436V8.85645C71.3382%205.3528%2071.1436%202.43309%2070.8516%200H82.5304ZM44.8662%202.72506L37.5669%2024.1363H52.1655L44.8662%202.72506ZM56.7397%2040C55.8638%2035.8151%2054.5012%2030.8516%2052.944%2026.0827H36.983C35.5231%2030.7543%2034.7445%2035.0365%2034.0633%2040H28.8078C31.2409%2034.9392%2033.7713%2029.0998%2035.4258%2024.4282L44.1849%200H50.219C50.511%201.36253%2051.2895%203.89295%2052.2628%206.61801L59.562%2027.4453C61.1192%2032.1168%2062.5791%2035.6204%2064.2336%2039.9027H56.7397V40ZM12.5547%2022.4818C19.2701%2022.4818%2023.0657%2018.6861%2023.0657%2012.1655C23.0657%205.3528%2018.7835%201.45985%2011.3869%201.45985H6.03406V21.1192C8.27251%2021.9951%2010.6083%2022.4818%2012.5547%2022.4818ZM11.6788%200C23.0657%200%2029.0998%204.18492%2029.0998%2011.9708C29.0998%2019.7567%2023.163%2024.2336%2012.8467%2024.2336C10.8029%2024.2336%208.27251%2024.0389%206.03406%2023.6496V31.1436C6.03406%2034.6472%206.22871%2037.5669%206.81265%2040H0C0.291971%2037.5669%200.486618%2034.6472%200.486618%2031.1436V8.85645C0.486618%205.3528%200.291971%202.43309%200%200H11.6788Z'%20fill='currentColor'/%3e%3c/svg%3e\"","<template>\n  <div class=\"success-page flex flex-col text-center\">\n    <div class=\"flex-1 flex items-center justify-center px-4 py-5\">\n      <div>\n        <p class=\"typeset-2 mb-4\">\n          {{ t(\"planner.pages.response.form.confirmation.title\") }}\n        </p>\n        <p class=\"typeset-7\">\n          {{ t(\"planner.pages.response.form.confirmation.message\") }}\n          <br />\n          {{ event.host_name }}\n        </p>\n      </div>\n    </div>\n\n    <div class=\"footer bg-paper-1 px-4 py-8\">\n      <img\n        :src=\"papierLogo\"\n        alt=\"papier logo\"\n        class=\"img-responsive mx-auto pb-4\" />\n      <div class=\"typeset-8 mb-3\">\n        {{ t(\"planner.pages.response.form.footer-text\") }}\n      </div>\n      <div class=\"typeset-8 underline cursor-pointer\">\n        <a href=\"http://papier.com/wedding/online\">\n          {{ t(\"planner.pages.response.form.find-out-more\") }}\n        </a>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n// eslint-disable-next-line import/no-unresolved\nimport papierLogo from \"@/app/assets/images/papierlogo.svg?url\";\n\nexport default {\n  name: \"ResponseConfirmation\",\n  data() {\n    return {\n      papierLogo\n    };\n  },\n  computed: {\n    ...mapState({\n      event: state => state.event\n    })\n  }\n};\n</script>\n<style lang=\"scss\" scoped>\n.success-page {\n  min-height: 100vh;\n  width: 534px;\n  max-width: 100%;\n  margin: 0 auto;\n}\n\n.footer {\n  width: 320px;\n  margin: 0 auto;\n\n  @media screen and (max-width: 480px) {\n    width: 100vw;\n    position: relative;\n    left: 50%;\n    right: 50%;\n    margin-left: -50vw;\n    margin-right: -50vw;\n  }\n}\n</style>\n","import api from \"@/app/javascript/api\";\nimport {\n  plannerGuestApiPageGuestsPath,\n  plannerGuestApiPageEmailsPath,\n  plannerGuestApiPageAnswerPath\n} from \"@/app/javascript/routes\";\n\nexport default {\n  async index(pageId, params) {\n    return api.get(plannerGuestApiPageGuestsPath(pageId), {\n      params\n    });\n  },\n  async email(pageId, params) {\n    return api.post(plannerGuestApiPageEmailsPath(pageId), params);\n  },\n  async respond(pageId, params) {\n    return api.put(plannerGuestApiPageAnswerPath(pageId), params);\n  }\n};\n","<template>\n  <div :class=\"{ 'has-errors': guest && formErrors[`rsvp-${guest.id}`] }\">\n    <h3\n      class=\"typeset-4 question-label mb-4\"\n      data-element=\"questionLabel\"\n      :style=\"computedStyle(theme, 'questionLabel')\">\n      {{ question.question }}\n      <span\n        v-if=\"question.required\"\n        class=\"text-red\">\n        *\n      </span>\n    </h3>\n\n    <div class=\"flex px-px\">\n      <button\n        v-for=\"(choice, index) in question.choices\"\n        :key=\"index\"\n        class=\"btn btn-large rsvp-btn flex-1\"\n        :class=\"{ selected: isSelected(choice), '-mx-px': index === 0 }\"\n        :style=\"[theme.rsvpButton, selectedStyleProps(choice)]\"\n        data-element=\"rsvpButton\"\n        @click=\"setRsvp(choice)\">\n        {{ choice }}\n      </button>\n    </div>\n\n    <span\n      v-if=\"guest && formErrors[`rsvp-${guest.id}`]\"\n      class=\"error-box mt-2\">\n      {{ formErrors[`rsvp-${guest.id}`][0] }}\n    </span>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport computedStyle from \"../../../mixins/computedStyle\";\n\nexport default {\n  name: \"RsvpQuestion\",\n  mixins: [computedStyle],\n  props: {\n    question: {\n      type: Object,\n      required: true\n    },\n    guest: {\n      type: Object,\n      default: null\n    },\n    page: {\n      type: Object,\n      required: true\n    }\n  },\n  computed: {\n    ...mapState({\n      formErrors: state => state.formErrors\n    }),\n    theme() {\n      return this.page.design.theme;\n    },\n    isSelected() {\n      return choice => {\n        if (!this.guest) return false;\n        return choice === this.guest.rsvp;\n      };\n    },\n    selectedStyleProps() {\n      return choice => {\n        if (!this.isSelected(choice)) return null;\n        return this.theme.rsvpButton.selected;\n      };\n    }\n  },\n  methods: {\n    setRsvp(choice) {\n      if (this.guest) {\n        this.guest.rsvp = choice;\n      }\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.btn {\n  &:focus {\n    position: relative;\n    z-index: 1;\n  }\n}\n</style>\n","<template>\n  <div>\n    <h3\n      class=\"typeset-4 question-label mb-4\"\n      data-element=\"questionLabel\"\n      :style=\"computedStyle(theme, 'questionLabel')\">\n      {{ question.question }}\n      <span\n        v-if=\"question.required\"\n        class=\"text-red\">\n        *\n      </span>\n    </h3>\n    <div v-if=\"guest\">\n      <text-input\n        v-model=\"guest.answers_data[question.id]\"\n        :input-id=\"`text-${question.id}-${guest.id}`\"\n        :required=\"question.required\"\n        :errors=\"formErrors[`guest-${guest.id}-${question.id}`]\"\n        class=\"mb-4\"\n        :theme=\"page.design.theme\" />\n    </div>\n\n    <div v-else>\n      <text-input\n        :input-id=\"`text-${question.id}`\"\n        data-element=\"textInput\"\n        :required=\"question.required\"\n        class=\"mb-4\"\n        :theme=\"page.design.theme\" />\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport TextInput from \"@/app/javascript/components/shared/TextInput.vue\";\nimport computedStyle from \"../../../mixins/computedStyle\";\n\nexport default {\n  name: \"TextQuestion\",\n  components: {\n    TextInput\n  },\n  mixins: [computedStyle],\n  props: {\n    question: {\n      type: Object,\n      required: true\n    },\n    guest: {\n      type: Object,\n      default: null\n    },\n    page: {\n      type: Object,\n      required: true\n    }\n  },\n  computed: {\n    ...mapState({\n      formErrors: state => state.formErrors\n    }),\n    theme() {\n      return this.page.design.theme;\n    }\n  }\n};\n</script>\n","<template>\n  <div\n    class=\"multi-response\"\n    :class=\"{ 'has-errors': guest && hasErrors }\">\n    <h3\n      class=\"typeset-4 question-label mb-4\"\n      data-element=\"questionLabel\"\n      :style=\"computedStyle(theme, 'questionLabel')\">\n      {{ question.question }}\n      <span\n        v-if=\"question.required\"\n        class=\"text-red\">\n        *\n      </span>\n    </h3>\n\n    <template v-if=\"guest\">\n      <select\n        v-model=\"guest.answers_data[question.id]\"\n        :style=\"selectThemeProps\"\n        :class=\"[\n          { 'error-select-box': hasErrors },\n          theme ? 'themed-select' : 'form-control'\n        ]\"\n        class=\"mb-4\">\n        <option\n          selected\n          disabled\n          value=\"\">\n          -\n        </option>\n        <option\n          v-for=\"(option, index) in question.choices\"\n          :key=\"index\"\n          :value=\"option\">\n          {{ option }}\n        </option>\n      </select>\n      <div\n        v-if=\"hasErrors\"\n        class=\"error-box mt-2\">\n        {{ formErrors[`guest-${guest.id}-${question.id}`][0] }}\n      </div>\n    </template>\n\n    <select\n      v-else\n      data-element=\"select\"\n      :style=\"selectThemeProps\"\n      :class=\"theme ? 'themed-select' : 'form-control'\"\n      class=\"mb-4\">\n      <option\n        v-for=\"(option, index) in question.choices\"\n        :key=\"index\"\n        :value=\"option\">\n        {{ option }}\n      </option>\n    </select>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport computedStyle from \"../../../mixins/computedStyle\";\n\nexport default {\n  name: \"MultiQuestion\",\n  mixins: [computedStyle],\n  props: {\n    question: {\n      type: Object,\n      required: true\n    },\n    guest: {\n      type: Object,\n      required: false\n    },\n    preview: {\n      type: Boolean,\n      default: false\n    },\n    page: {\n      type: Object,\n      required: true\n    }\n  },\n  computed: {\n    ...mapState({\n      formErrors: state => state.formErrors\n    }),\n    hasErrors() {\n      return this.formErrors[`guest-${this.guest.id}-${this.question.id}`];\n    },\n    theme() {\n      return this.page.design.theme;\n    },\n    selectThemeProps() {\n      if (this.theme) {\n        return {\n          borderRadius: this.theme.select.borderRadius,\n          borderWidth: this.theme.select.borderWidth,\n          fontFamily: this.theme.select.fontFamily,\n          letterSpacing: this.theme.select.letterSpacing,\n          \"--select-color\": this.theme.select.color,\n          \"--select-hover-color\": this.theme.select.hover.color,\n          \"--select-focus-color\": this.theme.select.focus.color,\n          \"--select-background-color\": this.theme.select.backgroundColor,\n          \"--select-hover-background-color\":\n            this.theme.select.hover.backgroundColor,\n          \"--select-focus-background-color\":\n            this.theme.select.focus.backgroundColor,\n          \"--select-border-color\": this.theme.select.borderColor,\n          \"--select-hover-border-color\": this.theme.select.hover.borderColor,\n          \"--select-focus-border-color\": this.theme.select.focus.borderColor,\n          \"--select-box-shadow\": this.theme.select.boxShadow,\n          \"--select-hover-box-shadow\": this.theme.select.hover.boxShadow,\n          \"--select-focus-box-shadow\": this.theme.select.focus.boxShadow\n        };\n      }\n      return null;\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.multi-response {\n  .error-select-box {\n    border-color: #f17f75;\n    border-radius: 0 0 3px 3px;\n  }\n}\n\n.themed-select {\n  // Set some defaults, in case these aren't set in the custom theme.\n  --select-color: #343434;\n  --select-hover-color: #343434;\n  --select-focus-color: #343434;\n  --select-background-color: #efefef;\n  --select-border-color: #efefef;\n  --select-hover-background-color: #ffffff;\n  --select-hover-border-color: #121212;\n  --select-box-shadow: inset 0 2px 4px 0 rgba(0, 37, 84, 0.08);\n\n  // Certain props set using CSS variables\n  // so we can override on hover/focus\n  background-color: var(--select-background-color);\n  border-color: var(--select-border-color);\n  box-shadow: var(--select-box-shadow);\n  color: var(--select-color);\n\n  // Interaction styles (hover/focus) must use css variables\n  &:hover {\n    color: var(--select-hover-color);\n    background-color: var(--select-hover-background-color);\n    box-shadow: var(--select-hover-box-shadow);\n    border-color: var(--select-hover-border-color);\n  }\n\n  &:focus {\n    color: var(--select-focus-color);\n    background-color: var(--select-focus-background-color);\n    box-shadow: var(--select-focus-box-shadow);\n    border-color: var(--select-focus-border-color);\n  }\n}\n</style>\n","<template>\n  <div class=\"address-response\">\n    <h3\n      class=\"typeset-4 question-label mb-4\"\n      data-element=\"questionLabel\"\n      :style=\"computedStyle(theme, 'questionLabel')\">\n      {{ question.question }}\n      <span\n        v-if=\"question.required\"\n        class=\"text-red\">\n        *\n      </span>\n    </h3>\n    <div>\n      <text-input\n        v-model=\"address.line_1\"\n        data-element=\"textInput\"\n        placeholder=\"Address Name\"\n        :required=\"question.required\"\n        :errors=\"formErrors['address']\"\n        input-id=\"address-response-1\"\n        class=\"mb-4\"\n        :theme=\"page.design.theme\" />\n      <text-input\n        v-model=\"address.line_2\"\n        data-element=\"textInput\"\n        placeholder=\"Line 1\"\n        input-id=\"address-response-2\"\n        class=\"mb-4\"\n        :theme=\"page.design.theme\" />\n      <text-input\n        v-model=\"address.line_3\"\n        data-element=\"textInput\"\n        placeholder=\"Line 2\"\n        input-id=\"address-response-3\"\n        class=\"mb-4\"\n        :theme=\"page.design.theme\" />\n      <text-input\n        v-model=\"address.line_4\"\n        data-element=\"textInput\"\n        placeholder=\"Line 3\"\n        input-id=\"address-response-4\"\n        class=\"mb-4\"\n        :theme=\"page.design.theme\" />\n      <text-input\n        v-model=\"address.line_5\"\n        data-element=\"textInput\"\n        placeholder=\"Line 4\"\n        input-id=\"address-response-5\"\n        class=\"mb-4\"\n        :theme=\"page.design.theme\" />\n      <text-input\n        v-model=\"address.line_6\"\n        data-element=\"textInput\"\n        placeholder=\"Country\"\n        input-id=\"address-response-6\"\n        class=\"mb-4\"\n        :theme=\"page.design.theme\" />\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport TextInput from \"@/app/javascript/components/shared/TextInput.vue\";\nimport computedStyle from \"../../../mixins/computedStyle\";\n\nexport default {\n  name: \"AddressQuestion\",\n  components: {\n    TextInput\n  },\n  mixins: [computedStyle],\n  props: {\n    address: {\n      type: Object,\n      required: true\n    },\n    page: {\n      type: Object,\n      required: true\n    },\n    question: {\n      type: Object,\n      required: true\n    }\n  },\n  computed: {\n    ...mapState({\n      formErrors: state => state.formErrors\n    }),\n    theme() {\n      return this.page.design.theme;\n    }\n  }\n};\n</script>\n","<template>\n  <div>\n    <h3\n      class=\"typeset-4 question-label mb-4\"\n      :style=\"theme.questionLabel\">\n      {{ t(\"planner.pages.response.form.plus-one.add-name\") }}\n    </h3>\n\n    <div class=\"flex flex-wrap -mx-2\">\n      <text-input\n        v-model=\"guest.title\"\n        class=\"w-2/12 mb-4 px-2\"\n        label=\"Title\"\n        :input-id=\"`title-${guest.id}`\"\n        :theme=\"theme\" />\n\n      <text-input\n        v-model=\"guest.first_name\"\n        class=\"w-full sm:w-5/12 mb-4 px-2\"\n        label=\"First name\"\n        :input-id=\"`first-name-${guest.id}`\"\n        :errors=\"formErrors[`first-name-${guest.id}`]\"\n        required\n        :theme=\"theme\" />\n\n      <text-input\n        v-model=\"guest.last_name\"\n        class=\"w-full sm:w-5/12 mb-4 px-2\"\n        label=\"Last name\"\n        :input-id=\"`last-name-${guest.id}`\"\n        :errors=\"formErrors[`last-name-${guest.id}`]\"\n        required\n        :theme=\"theme\" />\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport TextInput from \"@/app/javascript/components/shared/TextInput.vue\";\n\nexport default {\n  name: \"PlusOneNameQuestion\",\n  components: {\n    TextInput\n  },\n  props: {\n    guest: {\n      type: Object,\n      required: false\n    },\n    page: {\n      type: Object,\n      required: true\n    }\n  },\n  computed: {\n    ...mapState({\n      formErrors: state => state.formErrors\n    }),\n    theme() {\n      return this.page.design.theme;\n    }\n  }\n};\n</script>\n","<template>\n  <div class=\"plus-one-response mb-6\">\n    <div\n      class=\"plus-one-response-header -mx-5 sm:-mx-7 mb-6 px-5 py-7\"\n      :style=\"theme.plusOneResponseHeader\">\n      <p\n        class=\"plus-one-response-heading\"\n        :style=\"computedStyle(theme, 'plusOneResponseHeading')\">\n        {{ plusOneHeading }}\n      </p>\n      <p\n        class=\"plus-one-response-subheading\"\n        :style=\"computedStyle(theme, 'plusOneResponseSubheading')\">\n        {{ plusOneSubheading }}\n      </p>\n    </div>\n    <div\n      v-for=\"(plusOne, index) in plusOnes\"\n      :key=\"plusOne.id\">\n      <div v-if=\"plusOnes.length > 1\">\n        <p\n          :style=\"computedStyle(theme, 'plusOneResponseHeading')\"\n          class=\"plus-one-response-heading mb-6\">\n          {{ guestLabel(index, plusOne) }}\n        </p>\n      </div>\n\n      <div v-if=\"plusOne.rsvp !== 'no'\">\n        <plus-one-name-question\n          v-if=\"!plusOne.full_name && plusOne.rsvp !== 'no'\"\n          :guest=\"plusOne\"\n          :page=\"page\"\n          class=\"mb-6\" />\n        <p\n          :style=\"computedStyle(theme, 'plusOneResponseHeading')\"\n          class=\"plus-one-response-heading text-center mb-6\">\n          {{ plusOneFormLabel(plusOne) }}\n        </p>\n      </div>\n\n      <component\n        :is=\"pageQuestionBlockName(question)\"\n        v-for=\"{ question } in questionsForPlusOne(plusOne)\"\n        :key=\"question.id\"\n        :question=\"question\"\n        :guest=\"plusOne\"\n        :page=\"page\"\n        class=\"mb-6\" />\n\n      <hr\n        v-if=\"index < plusOnes.length - 1\"\n        :theme=\"theme.hr\"\n        class=\"my-6 hr\" />\n    </div>\n  </div>\n</template>\n\n<script>\n/* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_destroy\"] }] */\nimport { mapState } from \"vuex\";\nimport computedStyle from \"../../mixins/computedStyle\";\nimport RsvpQuestion from \"./blocks/RsvpQuestion.vue\";\nimport TextQuestion from \"./blocks/TextQuestion.vue\";\nimport MultiQuestion from \"./blocks/MultiQuestion.vue\";\nimport AddressQuestion from \"./blocks/AddressQuestion.vue\";\nimport PlusOneNameQuestion from \"./blocks/PlusOneNameQuestion.vue\";\n\nexport default {\n  name: \"PlusOneResponse\",\n  components: {\n    RsvpQuestion,\n    TextQuestion,\n    MultiQuestion,\n    AddressQuestion,\n    PlusOneNameQuestion\n  },\n  mixins: [computedStyle],\n  props: {\n    page: {\n      type: Object,\n      required: true\n    }\n  },\n  computed: {\n    ...mapState({\n      plusOnes: state => state.plusOnes\n    }),\n    pageQuestionBlockName() {\n      return question => {\n        return `${this.formattedQuestiontype(question)}Question`;\n      };\n    },\n    formattedQuestiontype() {\n      return question => {\n        const split = question.type.split(\"::\");\n        return split[split.length - 1];\n      };\n    },\n    visiblePageQuestions() {\n      return this.page.page_questions.filter(\n        pageQuestion => !pageQuestion._destroy\n      );\n    },\n    questionsForPlusOne() {\n      return plusOne => {\n        return this.visiblePageQuestions.filter(\n          pageQuestion =>\n            pageQuestion.question.extend_to_plus_ones &&\n            this.showQuestionForPlusOne(plusOne, pageQuestion.question)\n        );\n      };\n    },\n    showQuestionForPlusOne() {\n      return (plusOne, question) => {\n        return (\n          plusOne.rsvp !== \"no\" ||\n          this.formattedQuestiontype(question) === \"Rsvp\"\n        );\n      };\n    },\n    plusOneSubheading() {\n      if (this.plusOnes.length === 1) {\n        return this.t(\n          \"planner.pages.response.form.plus-one.subheading-singular\"\n        );\n      }\n      return this.t(\"planner.pages.response.form.plus-one.subheading-plural\", {\n        count: this.plusOnes.length\n      });\n    },\n    plusOneHeading() {\n      return this.plusOnes.length === 1\n        ? this.t(\"planner.pages.response.form.plus-one.heading-singular\")\n        : this.t(\"planner.pages.response.form.plus-one.heading-plural\");\n    },\n    theme() {\n      return this.page.design.theme;\n    },\n    guestLabel() {\n      return (guestIndex, guest) => {\n        const baseLabel = `${this.stringifyNumber(guestIndex)} plus one`;\n        if (guest.first_name && guest.rsvp === \"no\") {\n          return `${baseLabel} - ${guest.first_name}`;\n        }\n        return baseLabel;\n      };\n    }\n  },\n  methods: {\n    stringifyNumber(n) {\n      const special = [\n        \"First\",\n        \"Second\",\n        \"Third\",\n        \"Fourth\",\n        \"Fifth\",\n        \"Sixth\",\n        \"Seventh\",\n        \"Eighth\",\n        \"Ninth\",\n        \"Tenth\",\n        \"Eleventh\",\n        \"Twelfth\",\n        \"Thirteenth\",\n        \"Fourteenth\",\n        \"Fifteenth\",\n        \"Sixteenth\",\n        \"Seventeenth\",\n        \"Eighteenth\",\n        \"Nineteenth\"\n      ];\n      const deca = [\n        \"Twent\",\n        \"Thirt\",\n        \"Fort\",\n        \"Fift\",\n        \"Sixt\",\n        \"Sevent\",\n        \"Eight\",\n        \"Ninet\"\n      ];\n      if (n < 20) return special[n];\n      if (n % 10 === 0) return `${deca[Math.floor(n / 10) - 2]}ieth`;\n      return `${deca[Math.floor(n / 10) - 2]}y-${special[n % 10]}`;\n    },\n    plusOneFormLabel(plusOne) {\n      if (plusOne.first_name) {\n        return this.t(\n          \"planner.pages.response.form.plus-one.respond-label-with-name\",\n          {\n            name: plusOne.first_name\n          }\n        );\n      }\n      return this.t(\n        \"planner.pages.response.form.plus-one.respond-label-no-name\"\n      );\n    }\n  }\n};\n</script>\n","<template>\n  <div>\n    <rsvp-question\n      v-if=\"rsvpPageQuestion\"\n      :question=\"rsvpPageQuestion && rsvpPageQuestion.question\"\n      :guest=\"guest\"\n      :preview=\"preview\"\n      :page=\"page\"\n      class=\"mb-6\" />\n    <slide-transition>\n      <div v-if=\"shouldShowQuestions\">\n        <component\n          :is=\"pageQuestionBlockName(question)\"\n          v-for=\"{ question } in nonRsvpPageQuestions\"\n          :key=\"question.id\"\n          v-bind=\"propsForQuestionBlock(question)\"\n          class=\"mb-6\" />\n\n        <div v-if=\"showPlusOneSection\">\n          <plus-one-response :page=\"page\" />\n        </div>\n      </div>\n    </slide-transition>\n    <slide-transition>\n      <div\n        v-if=\"guest && guest.rsvp === 'no'\"\n        class=\"py-5\">\n        <h3\n          class=\"question-label typeset-4 mb-4\"\n          :style=\"theme.questionLabel\">\n          {{ t(\"planner.pages.response.form.send-message\") }}\n        </h3>\n        <textarea-input\n          v-model=\"body\"\n          input-id=\"body\"\n          :theme=\"theme\"\n          rows=\"4\"\n          class=\"mb-6\" />\n      </div>\n    </slide-transition>\n\n    <div\n      v-if=\"visiblePageQuestions.length === 0 && plusOnes && plusOnes.length\"\n      class=\"px-6 py-4 mt-5\"\n      :style=\"theme.plusOneResponseHeader\">\n      <span\n        class=\"block text-center\"\n        :style=\"theme.genericText\">\n        {{ guest.plus_ones_names_formatted }}\n      </span>\n    </div>\n\n    <div\n      v-if=\"shouldShowResponseButton\"\n      class=\"text-center\">\n      <hr\n        class=\"my-7 hr\"\n        data-element=\"hr\"\n        :style=\"theme.hr\" />\n      <btn\n        type=\"secondary\"\n        data-element=\"button\"\n        class=\"btn-large mb-5\"\n        :theme=\"theme\"\n        @click=\"checkRsvpAndSend\">\n        {{ t(\"planner.pages.response.form.send-response\") }}\n      </btn>\n\n      <p\n        data-element=\"genericText\"\n        :style=\"computedStyle(theme, 'genericText')\"\n        class=\"responding-for-text mb-3\">\n        {{\n          t(\"planner.pages.response.form.responding-for\", {\n            guest: guest.full_name\n          })\n        }}\n      </p>\n      <a\n        href=\"#\"\n        class=\"not-person-link\"\n        data-element=\"genericLink\"\n        :style=\"[computedStyle(theme, 'genericText'), theme.genericLink]\"\n        @click.prevent=\"returnToGuestId\">\n        {{\n          t(\"planner.pages.response.form.not-person\", {\n            guest: guest.full_name\n          })\n        }}\n      </a>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n\nimport Btn from \"@/app/javascript/components/shared/Btn.vue\";\nimport TextareaInput from \"@/app/javascript/components/shared/TextareaInput.vue\";\nimport SlideTransition from \"@/app/javascript/components/transitions/SlideTransition.vue\";\nimport api from \"../../api/guestSide\";\nimport computedStyle from \"../../mixins/computedStyle\";\n\n/* eslint no-underscore-dangle: [\"error\", { \"allow\": [\"_destroy\"] }] */\n\nimport RsvpQuestion from \"./blocks/RsvpQuestion.vue\";\nimport TextQuestion from \"./blocks/TextQuestion.vue\";\nimport MultiQuestion from \"./blocks/MultiQuestion.vue\";\nimport AddressQuestion from \"./blocks/AddressQuestion.vue\";\nimport PlusOneResponse from \"./PlusOneResponse.vue\";\nimport ResponseConfirmation from \"./ResponseConfirmation.vue\";\n\nexport default {\n  name: \"Page\",\n  components: {\n    Btn,\n    RsvpQuestion,\n    TextQuestion,\n    MultiQuestion,\n    AddressQuestion,\n    PlusOneResponse,\n    ResponseConfirmation,\n    TextareaInput,\n    SlideTransition\n  },\n  mixins: [computedStyle],\n  props: {\n    page: {\n      type: Object,\n      required: true\n    },\n    preview: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    return {\n      finished: false,\n      loading: false,\n      body: \"\",\n      errors: {},\n      address: {\n        line_1: \"\",\n        line_2: \"\",\n        line_3: \"\",\n        line_4: \"\",\n        line_5: \"\",\n        line_6: \"\"\n      }\n    };\n  },\n  computed: {\n    ...mapState({\n      guest: state => state.guest,\n      plusOnes: state => state.plusOnes,\n      formErrors: state => state.formErrors,\n      event: state => state.event\n    }),\n    pageQuestionBlockName() {\n      return question => {\n        return `${this.formattedQuestionType(question)}Question`;\n      };\n    },\n    propsForQuestionBlock() {\n      return question => {\n        // All question types need these props\n        const commonProps = {\n          question,\n          page: this.page\n        };\n        // Address needs slightly different props to other questions\n        let otherProps;\n        if (this.formattedQuestionType(question) === \"Address\") {\n          otherProps = {\n            address: this.address\n          };\n        } else {\n          otherProps = {\n            guest: this.guest\n          };\n        }\n        // Combine the two\n        return { ...commonProps, ...otherProps };\n      };\n    },\n    formattedQuestionType() {\n      return question => {\n        const split = question.type.split(\"::\");\n        return split[split.length - 1];\n      };\n    },\n    rsvpPageQuestion() {\n      return this.visiblePageQuestions.find(\n        pageQuestion => pageQuestion.question.type === \"Planner::Question::Rsvp\"\n      );\n    },\n    nonRsvpPageQuestions() {\n      return this.visiblePageQuestions.filter(\n        pageQuestion => pageQuestion.question.type !== \"Planner::Question::Rsvp\"\n      );\n    },\n    visiblePageQuestions() {\n      return this.page.page_questions.filter(\n        pageQuestion => !pageQuestion._destroy\n      );\n    },\n    questionsForPlusOnes() {\n      return this.visiblePageQuestions.filter(\n        pageQuestion => pageQuestion.question.extend_to_plus_ones\n      );\n    },\n    shouldShowQuestions() {\n      if (!this.rsvpPageQuestion) return true;\n\n      return this.preview || (this.guest && this.guest.rsvp !== \"no\");\n    },\n    shouldShowResponseButton() {\n      return this.guest && this.guest.id && this.visiblePageQuestions.length;\n    },\n    showPlusOneSection() {\n      if (this.preview) {\n        return false;\n      }\n      return (\n        this.plusOnes.length &&\n        this.questionsForPlusOnes.length &&\n        this.guest.rsvp !== \"no\"\n      );\n    },\n    theme() {\n      return this.page.design.theme;\n    }\n  },\n  methods: {\n    toggleFormErrors(errors = {}) {\n      this.$store.commit(\"setFormErrors\", errors);\n    },\n    checkRsvpAndSend() {\n      this.$store.commit(\"setLoading\", true);\n      this.clearValidationErrors();\n      if (this.guest.rsvp === \"no\") {\n        this.setAllGuestsRsvpToNo();\n        if (this.body) {\n          this.sendRsvpDeclineEmail();\n        } else {\n          this.sendAllResponses();\n        }\n      } else {\n        this.sendAllResponses();\n      }\n    },\n    setAllGuestsRsvpToNo() {\n      this.plusOnes.forEach(plusOne => {\n        plusOne.rsvp = \"no\";\n      });\n    },\n    sendAllResponses(rsvpNo = false) {\n      const payload = this.buildResponsePayload(rsvpNo);\n\n      if (Object.keys(this.errors).length) {\n        this.toggleFormErrors(this.errors);\n        this.$store.commit(\"setLoading\", false);\n      } else {\n        api.respond(this.page.slug, payload).then(() => {\n          this.$store.commit(\"setLoading\", false);\n          this.$store.commit(\"setFinished\", true);\n        });\n      }\n    },\n    buildResponsePayload(rsvpNo) {\n      const answerParams = {};\n      this.visiblePageQuestions.forEach(pageQuestion => {\n        const questionId = pageQuestion.question.id;\n        switch (pageQuestion.question.type) {\n          case \"Planner::Question::Rsvp\":\n            answerParams[questionId] = this.buildRsvpObject(\n              pageQuestion.question\n            );\n            break;\n          case \"Planner::Question::Address\":\n            if (pageQuestion.question.required || this.address.line_1) {\n              answerParams[questionId] = this.buildAddressObject(\n                pageQuestion.question\n              );\n            }\n            break;\n          default:\n            answerParams[questionId] = this.buildOtherObject(\n              pageQuestion.question\n            );\n        }\n      });\n\n      return {\n        answers_data: answerParams,\n        guests_data: this.showPlusOneSection ? this.buildNameObject() : {},\n        lead_guest_id: this.guest.id,\n        skip_notification: rsvpNo\n      };\n    },\n    sendRsvpDeclineEmail() {\n      api\n        .email(this.page.slug, {\n          guest_email: this.guest.email,\n          message: this.body,\n          simple_format: true\n        })\n        .then(() => {\n          this.sendAllResponses(true);\n        });\n    },\n    clearValidationErrors() {\n      this.toggleFormErrors();\n      this.errors = {};\n    },\n    requiredFieldPresent(fieldLabel, responseRequired, response) {\n      if (!responseRequired || (response && response !== \"unknown\")) {\n        return true;\n      }\n      if (\n        this.guest.rsvp !== \"no\" &&\n        responseRequired &&\n        (!response || response === \"unknown\")\n      ) {\n        this.errors[fieldLabel] = [\n          this.t(\"planner.pages.response.form.error.required-field\")\n        ];\n      }\n      return false;\n    },\n    buildNameObject() {\n      const params = {};\n      this.plusOnes.forEach(plusOne => {\n        if (plusOne.rsvp !== \"no\" && !plusOne.full_name) {\n          if (\n            this.requiredFieldPresent(\n              `first-name-${plusOne.id}`,\n              true,\n              plusOne.first_name\n            ) &&\n            this.requiredFieldPresent(\n              `last-name-${plusOne.id}`,\n              true,\n              plusOne.last_name\n            )\n          ) {\n            params[plusOne.id] = {\n              first_name: plusOne.first_name,\n              last_name: plusOne.last_name,\n              title: plusOne.title\n            };\n          }\n        }\n      });\n      return params;\n    },\n    buildRsvpObject(question) {\n      const rsvpObject = {};\n      if (\n        this.requiredFieldPresent(\n          `rsvp-${this.guest.id}`,\n          question.required,\n          this.guest.rsvp\n        )\n      ) {\n        rsvpObject[this.guest.id] = this.guest.rsvp;\n      }\n      this.plusOnes.forEach(guest => {\n        if (\n          this.requiredFieldPresent(\n            `rsvp-${guest.id}`,\n            question.required,\n            guest.rsvp\n          )\n        ) {\n          rsvpObject[guest.id] = guest.rsvp;\n        }\n      });\n      return rsvpObject;\n    },\n    buildAddressObject(question) {\n      const addressObject = {};\n      if (this.guest.rsvp !== \"no\") {\n        if (\n          this.requiredFieldPresent(\n            \"address\",\n            question.required,\n            this.address.line_1\n          )\n        ) {\n          addressObject[this.guest.id] = { address: this.address };\n        }\n      }\n      return addressObject;\n    },\n    buildOtherObject(question) {\n      const object = {};\n      const mainGuestResponse = this.guest.answers_data[question.id];\n\n      if (\n        this.requiredFieldPresent(\n          `guest-${this.guest.id}-${question.id}`,\n          question.required,\n          mainGuestResponse\n        )\n      ) {\n        object[this.guest.id] = mainGuestResponse;\n      }\n      if (question.extend_to_plus_ones) {\n        this.plusOnes.forEach(guest => {\n          if (guest.rsvp !== \"no\") {\n            const response = guest.answers_data[question.id];\n            if (\n              (guest,\n              this.requiredFieldPresent(\n                `guest-${guest.id}-${question.id}`,\n                question.required,\n                response\n              ))\n            ) {\n              object[guest.id] = response;\n            }\n          }\n        });\n      }\n      return object;\n    },\n    returnToGuestId() {\n      this.$store.commit(\"setGuest\", null);\n      this.$store.commit(\"setPlusOnes\", null);\n      this.toggleFormErrors();\n    }\n  }\n};\n</script>\n","<template>\n  <div>\n    <modal\n      open\n      class=\"contact-organiser-modal\"\n      prevent-background-close\n      @closed=\"$emit('closed')\">\n      <template #header>\n        <h3 class=\"typeset-4 ellipsis\">\n          {{ t(\"planner.pages.response.contact-organiser.heading\") }}\n        </h3>\n      </template>\n      <template #body>\n        <p\n          class=\"mb-4\"\n          :style=\"computedStyle(page.design.theme, 'genericText')\">\n          {{ t(\"planner.pages.response.contact-organiser.explanation\") }}\n        </p>\n        <text-input\n          v-model=\"email\"\n          type=\"email\"\n          input-id=\"email\"\n          :label=\"t('planner.pages.response.contact-organiser.labels.email')\"\n          :errors=\"errors.email\"\n          required\n          class=\"mb-4\"\n          :theme=\"page.design.theme\" />\n        <textarea-input\n          v-model=\"body\"\n          input-id=\"body\"\n          :label=\"t('planner.pages.response.contact-organiser.labels.message')\"\n          :errors=\"errors.body\"\n          required\n          class=\"mb-4\"\n          :theme=\"page.design.theme\" />\n        <btn\n          :promise=\"sendEmail()\"\n          type=\"secondary\"\n          :theme=\"page.design.theme\"\n          class=\"btn-large\">\n          {{ t(\"planner.pages.response.contact-organiser.cta\") }}\n        </btn>\n      </template>\n    </modal>\n  </div>\n</template>\n\n<script>\nimport Modal from \"@/app/javascript/components/shared/Modal.vue\";\nimport TextInput from \"@/app/javascript/components/shared/TextInput.vue\";\nimport TextareaInput from \"@/app/javascript/components/shared/TextareaInput.vue\";\nimport Btn from \"@/app/javascript/components/shared/Btn.vue\";\nimport computedStyle from \"../../mixins/computedStyle\";\nimport api from \"../../api/guestSide\";\n\nexport default {\n  name: \"ContactOrganiser\",\n  components: {\n    Modal,\n    TextInput,\n    TextareaInput,\n    Btn\n  },\n  mixins: [computedStyle],\n  props: {\n    page: {\n      type: Object,\n      required: true\n    }\n  },\n  emits: [\"message-sent\", \"closed\"],\n  data() {\n    return {\n      email: \"\",\n      body: \"\",\n      errors: {\n        email: [],\n        body: []\n      }\n    };\n  },\n  methods: {\n    sendEmail() {\n      return () => {\n        return new Promise((resolve, reject) => {\n          if (!this.email.trim().length) {\n            this.errors.email = [\n              \"You need to add an email before sending your message\"\n            ];\n            reject();\n            return;\n          }\n          if (!/\\S+@\\S+\\.\\S+/.test(this.email)) {\n            this.errors.email = [\"Please enter a valid email address\"];\n            reject();\n            return;\n          }\n          this.errors.email = [];\n\n          if (!this.body.trim().length) {\n            this.errors.body = [\n              \"You need to add a message before sending your email\"\n            ];\n            reject();\n            return;\n          }\n          this.errors.body = [];\n\n          api\n            .email(this.page.slug, {\n              guest_email: this.email,\n              message: this.body\n            })\n            .then(() => {\n              this.$store.dispatch(\"flashMessages/showFlashMessage\", {\n                message:\n                  \"planner.pages.response.contact-organiser.flash-message\",\n                type: \"success\"\n              });\n              resolve();\n              this.$emit(\"message-sent\");\n            });\n        });\n      };\n    }\n  }\n};\n</script>\n\n<style>\n.contact-organiser-modal textarea {\n  min-height: 200px;\n}\n</style>\n","<template>\n  <div\n    class=\"guest-id-body flex\"\n    :style=\"theme.mainPageBody\">\n    <div\n      class=\"guest-id-content m-auto p-5\"\n      :style=\"theme.mainPageContent\">\n      <div class=\"py-5\">\n        <contact-organiser\n          v-if=\"contactOrganiser\"\n          :page=\"page\"\n          @closed=\"contactOrganiser = false\"\n          @message-sent=\"messageSent\" />\n        <div v-if=\"noSuggestionsFound\">\n          <a\n            href=\"#\"\n            class=\"generic-link inline-flex items-center mb-4 underline\"\n            :style=\"[computedStyle(theme, 'genericText'), theme.genericLink]\"\n            @click.prevent=\"goBack\">\n            <svg-icon\n              name=\"leftarrow-small-thin\"\n              class=\"mr-4\" />\n            {{ t(\"planner.pages.response.guest-id.no-matches.back\") }}\n          </a>\n          <div\n            class=\"generic-text mb-4\"\n            :style=\"computedStyle(theme, 'genericText')\">\n            {{\n              t(\"planner.pages.response.guest-id.no-matches.p1\", {\n                firstName,\n                lastName\n              })\n            }}\n          </div>\n          <div\n            class=\"generic-text mb-4\"\n            :style=\"computedStyle(theme, 'genericText')\">\n            {{ t(\"planner.pages.response.guest-id.no-matches.p2\") }}\n          </div>\n          <a\n            href=\"#\"\n            class=\"underline mb-4\"\n            @click.prevent=\"contactOrganiser = true\">\n            {{ t(\"planner.pages.response.guest-id.no-matches.contact\") }}\n          </a>\n        </div>\n        <div v-else-if=\"!suggestions\">\n          <div\n            class=\"generic-text mb-5\"\n            :style=\"computedStyle(theme, 'genericText')\">\n            {{ t(\"planner.pages.response.guest-id.intro\") }}\n          </div>\n          <div\n            action=\"#\"\n            class=\"flex -mx-3 mb-5\">\n            <div class=\"px-3 w-1/2\">\n              <text-input\n                v-model=\"firstName\"\n                :errors=\"errors.firstName\"\n                required\n                input-id=\"firstName\"\n                label=\"First name\"\n                class=\"mb-4\"\n                :theme=\"theme\"\n                @update:model-value=\"errors.firstName = []\"\n                @keydown.enter=\"idGuest\" />\n            </div>\n            <div class=\"px-3 w-1/2\">\n              <text-input\n                v-model=\"lastName\"\n                :errors=\"errors.lastName\"\n                required\n                input-id=\"lastName\"\n                label=\"Last name\"\n                class=\"mb-4\"\n                :theme=\"theme\"\n                @update:model-value=\"errors.lastName = []\"\n                @keydown.enter=\"idGuest\" />\n            </div>\n          </div>\n          <btn\n            ref=\"btn\"\n            type=\"secondary\"\n            class=\"btn-large\"\n            :promise=\"next()\"\n            :theme=\"theme\">\n            {{ t(\"planner.pages.response.guest-id.next\") }}\n          </btn>\n        </div>\n        <div v-if=\"suggestions\">\n          <a\n            href=\"#\"\n            class=\"generic-link inline-flex items-center mb-4 underline\"\n            :style=\"[computedStyle(theme, 'genericText'), theme.genericLink]\"\n            @click.prevent=\"goBack\">\n            <svg-icon\n              name=\"leftarrow-small-thin\"\n              class=\"mr-3\" />\n            {{ t(\"planner.pages.response.guest-id.suggestions.back\") }}\n          </a>\n          <div\n            class=\"generic-text mb-4\"\n            :style=\"computedStyle(theme, 'genericText')\">\n            {{\n              t(\"planner.pages.response.guest-id.suggestions.intro\", {\n                firstName,\n                lastName\n              })\n            }}\n          </div>\n          <div class=\"mb-5\">\n            <div>\n              <radio-input\n                v-for=\"suggestion in suggestions\"\n                :key=\"suggestion.id\"\n                class=\"mb-3\"\n                :value=\"suggestion.id\"\n                :checked=\"suggestedGuest === suggestion\"\n                input-id=\"suggested-guest\"\n                :label=\"suggestion.full_name\"\n                @input=\"suggestedGuest = suggestion\" />\n            </div>\n          </div>\n          <div class=\"flex items-center\">\n            <btn\n              type=\"secondary\"\n              class=\"btn-large w-1/2 mr-4\"\n              :theme=\"theme\"\n              @click=\"setGuestandPlusOnes(suggestedGuest)\">\n              {{ t(\"planner.pages.response.guest-id.suggestions.cta\") }}\n            </btn>\n            <div\n              class=\"generic-text w-1/2\"\n              :style=\"computedStyle(theme, 'genericText')\">\n              {{\n                t(\"planner.pages.response.guest-id.suggestions.cant-see-name\")\n              }}\n              <br />\n              <a\n                href=\"#\"\n                class=\"underline\"\n                @click.prevent=\"contactOrganiser = true\">\n                {{ t(\"planner.pages.response.guest-id.suggestions.contact\") }}\n              </a>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport Btn from \"@/app/javascript/components/shared/Btn.vue\";\nimport SvgIcon from \"@/app/javascript/components/shared/SvgIcon.vue\";\nimport TextInput from \"@/app/javascript/components/shared/TextInput.vue\";\nimport RadioInput from \"@/app/javascript/components/shared/RadioInput.vue\";\nimport computedStyle from \"../../mixins/computedStyle\";\nimport api from \"../../api/guestSide\";\nimport ContactOrganiser from \"./ContactOrganiser.vue\";\n\nexport default {\n  name: \"GuestId\",\n  components: {\n    Btn,\n    TextInput,\n    RadioInput,\n    SvgIcon,\n    ContactOrganiser\n  },\n  mixins: [computedStyle],\n  props: {\n    page: {\n      type: Object,\n      required: true\n    }\n  },\n  data() {\n    return {\n      firstName: \"\",\n      lastName: \"\",\n      errors: {\n        firstName: [],\n        lastName: []\n      },\n      suggestions: null,\n      suggestedGuest: null,\n      noSuggestionsFound: false,\n      contactOrganiser: false\n    };\n  },\n  computed: {\n    theme() {\n      return this.page.design.theme;\n    }\n  },\n  methods: {\n    setGuestandPlusOnes(guest) {\n      this.$store.commit(\"setGuest\", guest);\n      this.$store.commit(\"setPlusOnes\", guest.plus_ones);\n    },\n    goBack() {\n      this.firstName = \"\";\n      this.lastName = \"\";\n      this.noSuggestionsFound = null;\n      this.suggestions = null;\n    },\n    idGuest() {\n      this.$refs.btn.handleClick();\n    },\n    messageSent() {\n      this.contactOrganiser = false;\n      this.goBack();\n    },\n    next() {\n      return () => {\n        return new Promise((resolve, reject) => {\n          if (!this.firstName.trim().length) {\n            this.errors.firstName = [\"You need to add a first name\"];\n            reject();\n          } else {\n            this.errors.firstName = [];\n          }\n\n          if (!this.lastName.trim().length) {\n            this.errors.lastName = [\"You need to add a last name\"];\n            reject();\n          } else {\n            this.errors.lastName = [];\n          }\n\n          if (\n            this.errors.firstName.length === 0 &&\n            this.errors.lastName.length === 0\n          ) {\n            api\n              .index(this.page.slug, {\n                first_name: this.firstName,\n                last_name: this.lastName\n              })\n              .then(response => {\n                const { match, suggestions } = response.data;\n                if (match) {\n                  this.setGuestandPlusOnes(match);\n                } else if (suggestions.length) {\n                  this.suggestions = suggestions;\n                } else {\n                  this.noSuggestionsFound = true;\n                }\n                resolve();\n              });\n          }\n        });\n      };\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.guest-id-body {\n  min-height: 100vh;\n  border-width: 16px;\n\n  @media (min-width: $screen-sm-min) {\n    border-width: 40px;\n  }\n}\n\n.guest-id-content {\n  width: 534px;\n  max-width: 100%;\n  max-height: calc(100vh - 2rem);\n  overflow-y: scroll;\n}\n</style>\n","<template>\n  <component\n    :is=\"globalTemplate\"\n    :page=\"pageToUse\">\n    <overlay v-if=\"loading\" />\n    <flash-messages />\n    <fade-transition\n      mode=\"out-in\"\n      appear>\n      <response-confirmation\n        v-if=\"finished\"\n        key=\"response-confirmation\" />\n      <guest-id\n        v-else-if=\"!isPreview && !guest\"\n        key=\"guest-id\"\n        :page=\"pageToUse\" />\n      <component\n        :is=\"pageTemplate\"\n        v-else\n        key=\"page\"\n        :page=\"pageToUse\">\n        <page\n          :page=\"pageToUse\"\n          :preview=\"isPreview\" />\n      </component>\n    </fade-transition>\n    <template #highlighter>\n      <div\n        v-for=\"(element, index) in highlightedElements\"\n        :key=\"index\"\n        class=\"highlighter\"\n        :style=\"highlightedElementStyles(element)\"></div>\n    </template>\n  </component>\n</template>\n\n<script>\nimport { clone } from \"lodash-es\";\nimport { mapState } from \"vuex\";\nimport GlobalTemplate0 from \"@/components/planner/app/javascript/components/page/templates/GlobalTemplate0.vue\";\nimport GlobalTemplate1 from \"@/components/planner/app/javascript/components/page/templates/GlobalTemplate1.vue\";\nimport GlobalTemplate2 from \"@/components/planner/app/javascript/components/page/templates/GlobalTemplate2.vue\";\nimport GlobalTemplate3 from \"@/components/planner/app/javascript/components/page/templates/GlobalTemplate3.vue\";\nimport GlobalTemplate4 from \"@/components/planner/app/javascript/components/page/templates/GlobalTemplate4.vue\";\nimport GlobalTemplate5 from \"@/components/planner/app/javascript/components/page/templates/GlobalTemplate5.vue\";\nimport PageTemplate1 from \"@/components/planner/app/javascript/components/page/templates/PageTemplate1.vue\";\nimport PageTemplate2 from \"@/components/planner/app/javascript/components/page/templates/PageTemplate2.vue\";\nimport PageTemplate3 from \"@/components/planner/app/javascript/components/page/templates/PageTemplate3.vue\";\nimport PageTemplate4 from \"@/components/planner/app/javascript/components/page/templates/PageTemplate4.vue\";\nimport PageTemplate5 from \"@/components/planner/app/javascript/components/page/templates/PageTemplate5.vue\";\nimport FlashMessages from \"@/app/javascript/components/shared/FlashMessages.vue\";\nimport Overlay from \"@/app/javascript/components/shared/Overlay.vue\";\nimport FadeTransition from \"@/app/javascript/components/transitions/FadeTransition.vue\";\nimport ResponseConfirmation from \"../components/page/ResponseConfirmation.vue\";\nimport Page from \"../components/page/Page.vue\";\nimport GuestId from \"../components/page/GuestId.vue\";\n\nexport default {\n  name: \"Guest\",\n  components: {\n    GlobalTemplate0,\n    GlobalTemplate1,\n    GlobalTemplate2,\n    GlobalTemplate3,\n    GlobalTemplate4,\n    GlobalTemplate5,\n    PageTemplate1,\n    PageTemplate2,\n    PageTemplate3,\n    PageTemplate4,\n    PageTemplate5,\n    FlashMessages,\n    Overlay,\n    ResponseConfirmation,\n    Page,\n    GuestId,\n    FadeTransition\n  },\n  props: {\n    page: {\n      type: Object,\n      required: true\n    },\n    share: {\n      type: Object,\n      required: false\n    }\n  },\n  data() {\n    return {\n      dataPage: null,\n      originalDataPage: null,\n      highlightedElements: []\n    };\n  },\n  computed: {\n    ...mapState({\n      guest: state => state.guest,\n      loading: state => state.loading,\n      finished: state => state.finished\n    }),\n    globalTemplate() {\n      return `global-template-${this.pageToUse.design.template_id}`;\n    },\n    pageTemplate() {\n      return `page-template-${this.pageToUse.design.template_id}`;\n    },\n    isPreview() {\n      const pathSplit = window.location.pathname.split(\"/\");\n      return pathSplit[pathSplit.length - 1] === \"preview\";\n    },\n    pageToUse() {\n      return this.dataPage || this.page;\n    },\n    highlightedElementStyles() {\n      return element => {\n        return {\n          top: `${element.getBoundingClientRect().top}px`,\n          left: `${element.getBoundingClientRect().left}px`,\n          width: `${element.getBoundingClientRect().width}px`,\n          height: `${element.getBoundingClientRect().height}px`\n        };\n      };\n    }\n  },\n  mounted() {\n    this.dataPage = clone(this.page);\n    window.addEventListener(\"message\", this.receiveMessage, false);\n    this.originalDataPage = clone(this.page);\n  },\n  methods: {\n    receiveMessage(event) {\n      if (!event.data.payload) return;\n\n      const data = JSON.parse(event.data.payload);\n      if (event.data.type === \"papier\") {\n        this.dataPage = data;\n      } else if (event.data.type === \"papierThemeDesigner\") {\n        this.dataPage.design.theme = data;\n      } else if (event.data.type === \"papierTemplateSwitcher\") {\n        this.dataPage.design.template_id = data.template;\n      } else if (event.data.type === \"papierPageTypeSwitcher\") {\n        if (!data) {\n          this.dataPage = clone(this.originalDataPage);\n        } else {\n          this.dataPage = { ...this.dataPage, ...data };\n        }\n      } else if (event.data.type === \"papierThemeHighlighter\") {\n        this.highlightedElements = [];\n        if (data.element) {\n          this.highlightedElements = document.querySelectorAll(\n            `[data-element=\"${data.element}\"]`\n          );\n        }\n      }\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.highlighter {\n  position: fixed;\n  box-shadow: 0 0 0 1px rgba(0, 173, 255, 1);\n  background-color: rgba(0, 173, 255, 0.3);\n}\n</style>\n","import { createApp } from \"vue\";\nimport Vue3linkify from \"vue-3-linkify\";\n\nimport I18n from \"@/app/javascript/plugins/i18n\";\n\nimport store from \"./guestStore\";\n\nimport Guest from \"./pages/Guest.vue\";\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const node = document.getElementById(\"guest-app\");\n  const props = JSON.parse(node.dataset.props);\n  const translations = JSON.parse(node.dataset.translations);\n  const storeData = JSON.parse(node.dataset.store);\n\n  const app = createApp(Guest, props);\n\n  app.use(store);\n  app.use(I18n, translations);\n  app.use(Vue3linkify);\n\n  store.commit(\"setGuest\", storeData.guest);\n  store.commit(\"setPlusOnes\", storeData.plusOnes);\n  store.commit(\"setEvent\", storeData.event);\n\n  app.mount(node);\n});\n"],"names":["State","token","input","tokenOrState","nextState","makeState","templateState","takeT","makeAcceptingState","makeT","startState","makeRegexT","regex","state","i","_nextState","makeMultiT","chars","makeBatchT","transitions","makeChainT","str","endState","defaultStateFactory","len","DOMAIN","LOCALHOST","TLD","NUM","PROTOCOL","MAILTO","WS","NL","OPENBRACE","OPENBRACKET","OPENANGLEBRACKET","OPENPAREN","CLOSEBRACE","CLOSEBRACKET","CLOSEANGLEBRACKET","CLOSEPAREN","AMPERSAND","APOSTROPHE","ASTERISK","AT","BACKSLASH","BACKTICK","CARET","COLON","COMMA","DOLLAR","DOT","EQUALS","EXCLAMATION","HYPHEN","PERCENT","PIPE","PLUS","POUND","QUERY","QUOTE","SEMI","SLASH","TILDE","UNDERSCORE","SYM","text","tlds","LETTER","EMOJI","EMOJI_VARIATION","DIGIT","SPACE","init$2","customProtocols","S_START","S_NUM","S_DOMAIN","S_DOMAIN_HYPHEN","S_WS","DOMAIN_REGEX_TRANSITIONS","makeDomainState","makeNearDomainState","S_PROTOCOL_FILE","S_PROTOCOL_FTP","S_PROTOCOL_HTTP","S_MAILTO","S_PROTOCOL_SECURE","S_FULL_PROTOCOL","S_FULL_MAILTO","S_CUSTOM_PROTOCOL","_i","run$1","start","iterable","stringToArray","c","charCount","tokens","cursor","charCursor","tokenLength","latestAccepting","sinceAccepts","charsSinceAccepts","result","index","first","second","char","_typeof","obj","defaults","noop","Options","opts","ignoredTags","href","key","operator","option","optionValue","val","inherits","parent","child","props","extended","p","MultiToken","protocol","createTokenClass","type","Token","value","MailtoEmail","Email","Text","Nl","Url","hasProtocol","hasSlashSlash","multi","init$1","S_PROTOCOL","S_PROTOCOL_SLASH","S_PROTOCOL_SLASH_SLASH","S_DOMAIN_DOT","S_TLD","S_TLD_COLON","S_TLD_PORT","S_URL","S_URL_NON_ACCEPTING","S_URL_OPENBRACE","S_URL_OPENBRACKET","S_URL_OPENANGLEBRACKET","S_URL_OPENPAREN","S_URL_OPENBRACE_Q","S_URL_OPENBRACKET_Q","S_URL_OPENANGLEBRACKET_Q","S_URL_OPENPAREN_Q","S_URL_OPENBRACE_SYMS","S_URL_OPENBRACKET_SYMS","S_URL_OPENANGLEBRACKET_SYMS","S_URL_OPENPAREN_SYMS","S_EMAIL_DOMAIN","S_EMAIL_DOMAIN_DOT","S_EMAIL","S_EMAIL_COLON","S_EMAIL_PORT","S_MAILTO_EMAIL","S_MAILTO_EMAIL_NON_ACCEPTING","S_LOCALPART","S_LOCALPART_AT","S_LOCALPART_DOT","S_NL","qsAccepting","qsNonAccepting","localpartAccepting","run","multis","textTokens","secondState","multiLength","parserCreateMultiToken","Multi","subtokens","startIdx","endIdx","INIT","init","utils","tokenize","HTML5NamedCharRefs","HEXCHARCODE","CHARCODE","NAMED","EntityParser","named","entity","matches","WSP","ALPHA","CRLF","isSpace","isAlpha","preprocessInput","EventedTokenizer","delegate","entityParser","mode","tag","maybeDoctype","nextSixChars","isPublic","isSystem","handler","endIndex","count","Tokenizer","options","doctype","isQuoted","message","tokenizer","linkify.Options","StartTag","EndTag","Chars","Comment","Doctype","linkifyHtml","linkifiedTokens","linkified","tagName","isIgnored","preskipLen","skipTagTokens","linkifedChars","linkifyChars","_token","link","attrs","attrsToStrings","linkify.tokenize","_opts$resolve","formatted","formattedHref","className","target","rel","attributes","truncate","attributeArray","attr","skippedTokens","stackCount","escapeAttr","attrStrs","name","getDefaultWhiteList","whiteList","onAttr","onIgnoreAttr","REGEXP_URL_JAVASCRIPT","safeAttrValue","_default","util","arr","item","j","fn","scope","_","require$$0","parseStyle","css","cssLength","isParenthesisOpen","lastPos","retCSS","addNewAttr","source","ret","parser","DEFAULT","require$$1","require$$2","isNull","shallowCopyObject","FilterCSS","me","sourcePosition","position","check","isWhite","filterCSS","html","xss","exports","module","reg","match","getDefaultCSSWhiteList","defaultCSSFilter","onTag","onIgnoreTag","onTagAttr","onIgnoreTagAttr","escapeHtml","REGEXP_LT","REGEXP_GT","cssFilter","friendlyAttrValue","REGEXP_DEFAULT_ON_TAG_ATTR_4","REGEXP_DEFAULT_ON_TAG_ATTR_7","REGEXP_DEFAULT_ON_TAG_ATTR_8","escapeAttrValue","REGEXP_QUOTE","REGEXP_QUOTE_2","REGEXP_ATTR_VALUE_1","REGEXP_ATTR_VALUE_COLON","REGEXP_ATTR_VALUE_NEWLINE","escapeQuote","unescapeQuote","escapeHtmlEntities","code","escapeDangerHtml5Entities","clearNonPrintableCharacter","str2","onIgnoreTagStripAll","StripTagBody","tags","next","isRemoveAllTag","isRemoveTag","removeList","posStart","end","rethtml","pos","stripCommentTag","retHtml","stripBlankChar","getTagName","isClosing","parseTag","tagStart","quoteStart","currentPos","currentTagName","currentHtml","chariterator","ic","REGEXP_ILLEGAL_ATTR_NAME","parseAttr","lastMarkPos","retAttrs","tmpName","addAttr","v","findNextQuotationMark","findNextEqual","findBeforeEqual","stripQuoteWrap","isQuoteWrapString","require$$3","getAttrs","keysToLowerCase","FilterXSS","stripIgnoreTagBody","info","whiteAttrList","attrsHtml","isWhiteAttr","filterXSS","isWorkerEnv","linkify","rawHtml","sanitized","directive","element","binding","plugin","app","store","createStore","flashMessages","guest","plusOnes","question","event","formErrors","loading","finished","_sfc_main","Btn","TextInput","computedStyle","choice","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_createElementBlock","_normalizeStyle","$options","_createElementVNode","_cache","_ctx","_createTextVNode","_createVNode","_component_btn","$props","_withCtx","_toDisplayString","_openBlock","_Fragment","_renderList","$data","_normalizeClass","$event","_component_text_input","_renderSlot","imageExists","theme","imagePosition","dates","tempDate","userTimezoneOffset","_createCommentVNode","ThemeImage","pageQuestion","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_createBlock","_component_theme_image","_mergeProps","_normalizeProps","papierLogo","mapState","api","pageId","params","plannerGuestApiPageGuestsPath","plannerGuestApiPageEmailsPath","plannerGuestApiPageAnswerPath","_vModelSelect","RsvpQuestion","TextQuestion","MultiQuestion","AddressQuestion","PlusOneNameQuestion","split","plusOne","guestIndex","baseLabel","n","special","deca","_component_plus_one_name_question","_resolveDynamicComponent","PlusOneResponse","ResponseConfirmation","TextareaInput","SlideTransition","commonProps","otherProps","errors","rsvpNo","payload","answerParams","questionId","fieldLabel","responseRequired","response","rsvpObject","addressObject","object","mainGuestResponse","_component_rsvp_question","_component_slide_transition","_component_plus_one_response","_component_textarea_input","_withModifiers","args","Modal","resolve","reject","_component_modal","RadioInput","SvgIcon","ContactOrganiser","suggestions","_component_contact_organiser","_component_svg_icon","_withKeys","suggestion","_component_radio_input","GlobalTemplate0","GlobalTemplate1","GlobalTemplate2","GlobalTemplate3","GlobalTemplate4","GlobalTemplate5","PageTemplate1","PageTemplate2","PageTemplate3","PageTemplate4","PageTemplate5","FlashMessages","Overlay","Page","GuestId","FadeTransition","pathSplit","clone","data","_component_overlay","_component_flash_messages","_component_fade_transition","_component_response_confirmation","_component_guest_id","_component_page","node","translations","storeData","createApp","Guest","I18n","Vue3linkify"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12]}