| {this.props.modeTitle} | \n{this.props.compareTitle} | \n
|---|
| {this.props.modeTitle} | \n{this.props.compareTitle} | \n
|---|
{messageShown}
{messageShown}
| {this.props.modeTitle} | \n{this.props.compareTitle} | \n
|---|
| {this.props.modeTitle} | \n{this.props.compareTitle} | \n
|---|
::, \"123456:email:alice@example.com\".\n const cred = this.props.reqCredMethod == 'email' ? this.state.email.trim() : this.state.tel.trim();\n this.props.onReset(this.state.password.trim(), {\n scheme: 'code',\n secret: btoa(`${this.state.code}:${this.props.reqCredMethod}:${cred}`)\n });\n } else {\n // Send email or SMS with the secret code.\n const email = this.state.email.trim();\n const tel = this.state.tel.trim();\n this.setState({email: email, tel: tel});\n this.props.onRequest(this.props.reqCredMethod, email || tel)\n .then(_ => {\n this.setState({sent: true});\n const msg = this.props.reqCredMethod == 'email' ? messages.password_reset_email_sent :\n this.props.reqCredMethod == 'tel' ? messages.password_reset_sms_sent : null;\n if (msg) {\n this.props.onError(this.props.intl.formatMessage(msg), 'info');\n }\n });\n }\n }\n\n handleEmailChange(e) {\n this.setState({email: e.target.value});\n }\n\n handlePasswordChange(e) {\n this.setState({password: e.target.value});\n }\n\n handleCodeChange(e) {\n this.setState({code: e.target.value.replace(/[^\\d]/g, '')});\n }\n\n handleShowCodeField(e) {\n e.preventDefault();\n this.setState({haveCode: true});\n }\n\n render() {\n const showCredentialInput = !((this.state.token || (this.state.code && this.props.reqCredMethod)) && this.state.scheme);\n const showPasswordInput = !showCredentialInput || this.state.haveCode || this.state.sent;\n\n const passwordInput = (<>\n \n {\n (placeholder) => \n } \n >);\n\n const emailInput = (<>\n {this.state.haveCode ?\n null :\n \n }\n {\n (placeholder) => \n } \n >);\n\n const phoneInput = (<>\n {this.state.haveCode ?\n null :\n \n }\n \n \n \n \n this.setState({tel: number})} />\n \n >);\n\n const codeInput = (<>\n \n \n \n \n {\n (numbers_only) => \n } \n \n >);\n\n const credentialInput = this.props.reqCredMethod == 'email' ?\n emailInput : this.props.reqCredMethod == 'tel' ? phoneInput : null;\n\n return (\n \n );\n }\n}\n\nexport default injectIntl(PasswordResetView);\n","// Editor for a phone number.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { AsYouType, getExampleNumber, parsePhoneNumber } from 'libphonenumber-js/mobile';\nimport examples from 'libphonenumber-js/mobile/examples'\n\nimport * as dcodes from '../dcodes.json';\nimport { flagEmoji } from '../lib/strformat';\n\nconst messages = defineMessages({\n mobile_number_required: {\n id: 'mobile_number_required',\n defaultMessage: 'Mobile phone number required',\n description: 'Error message'\n }\n});\n\nclass PhoneEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.codeMap = {};\n dcodes.default.forEach(dc => { this.codeMap[dc.code] = dc.dial; });\n\n const code = props.countryCode || 'US';\n const dial = this.codeMap[code];\n\n this.state = {\n countryCode: code,\n dialCode: dial,\n localNumber: '',\n placeholderNumber: this.placeholderNumber(code, dial)\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.handleFinished = this.handleFinished.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.showCountrySelector = this.showCountrySelector.bind(this);\n }\n\n handleChange(e) {\n const prefix = `+${this.state.dialCode}`;\n let formatted = new AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n formatted = formatted.substring(prefix.length).trim();\n this.setState({localNumber: formatted});\n }\n\n handleFinished(e) {\n e.preventDefault();\n const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\\d]/g, '');\n let number = null;\n try {\n number = parsePhoneNumber(`+${raw}`);\n } catch (err) {}\n\n if (!number || !number.isValid()) {\n this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n return;\n }\n\n this.inputField.setCustomValidity('');\n this.props.onSubmit(number.format('E.164'));\n }\n\n\n handleKeyDown(e) {\n if (e.key === 'Enter') {\n this.handleFinished(e);\n }\n }\n\n showCountrySelector() {\n this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode,\n (code, dial) => {\n this.setState({\n countryCode: code,\n dialCode: dial,\n placeholderNumber: this.placeholderNumber(code, dial)\n })\n });\n }\n\n // Filter out characters not permitted in a phone number.\n filterNumber(number) {\n if (!number) {\n return number;\n }\n // Leave numbers, space, (, ), -, and .\n // The + is not allowed: it's handled by the country code portion.\n return number.replace(/[^-\\s().\\d]/g, '');\n }\n\n placeholderNumber(code, dial) {\n const sample = getExampleNumber(code, examples);\n return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n }\n\n render() {\n return (\n <>\n \n {flagEmoji(this.state.countryCode)} \n +{this.state.dialCode} \n {this.inputField = ref}} placeholder={this.state.placeholderNumber}\n value={this.state.localNumber} onChange={this.handleChange}\n maxLength={17} onKeyDown={this.handleKeyDown} onBlur={this.handleFinished}\n required autoFocus={this.props.autoFocus} />\n >\n );\n }\n}\n\nexport default injectIntl(PhoneEdit);\n"],"names":["messages","defineMessages","password_reset_email_sent","id","defaultMessage","password_reset_sms_sent","PasswordResetView","React","constructor","props","super","this","state","tel","email","password","sent","haveCode","code","handleSubmit","bind","handleEmailChange","handlePasswordChange","handleCodeChange","handleShowCodeField","tinode","connect","catch","err","onError","message","componentDidMount","parsed","HashNavigation","parseUrlHash","window","location","hash","newState","token","params","scheme","savedCred","cred","reqCredMethod","setState","componentDidUpdate","prevProps","prevState","e","preventDefault","onReset","trim","secret","btoa","onRequest","then","_","msg","intl","formatMessage","target","value","replace","render","showCredentialInput","showPasswordInput","passwordInput","className","htmlFor","FormattedMessage","placeholder","VisiblePassword","autoComplete","required","autoFocus","onChange","emailInput","type","phoneInput","PhoneEdit","onShowCountrySelector","onSubmit","number","codeInput","numbers_only","maxLength","credentialInput","href","onClick","style","marginRight","injectIntl","mobile_number_required","codeMap","dcodes","forEach","dc","dial","countryCode","dialCode","localNumber","placeholderNumber","handleChange","handleFinished","handleKeyDown","showCountrySelector","prefix","formatted","AsYouType","input","filterNumber","substring","length","raw","parsePhoneNumber","isValid","inputField","setCustomValidity","format","key","sample","getExampleNumber","examples","formatInternational","flagEmoji","ref","onKeyDown","onBlur"],"ignoreList":[],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"993.prod.js","mappings":"mMASA,MAAMA,GAAW,EAAAC,EAAAC,gBAAe,CAC9BC,0BAA2B,CACzBC,GAAI,4BACJC,eAAgB,6CAChBC,YAAa,8EAEfC,wBAAyB,CACvBH,GAAI,0BACJC,eAAgB,mDAChBC,YAAa,8EAIjB,MAAME,UAA0BC,IAAA,cAC9B,WAAAC,CAAYC,GACVC,MAAMD,GAENE,KAAKC,MAAQ,CACXC,IAAK,GACLC,MAAO,GACPC,SAAU,GACVC,MAAM,EACNC,UAAU,EACVC,KAAM,IAGRP,KAAKQ,aAAeR,KAAKQ,aAAaC,KAAKT,MAC3CA,KAAKU,kBAAoBV,KAAKU,kBAAkBD,KAAKT,MACrDA,KAAKW,qBAAuBX,KAAKW,qBAAqBF,KAAKT,MAC3DA,KAAKY,iBAAmBZ,KAAKY,iBAAiBH,KAAKT,MACnDA,KAAKa,oBAAsBb,KAAKa,oBAAoBJ,KAAKT,MAGzDF,EAAMgB,OAAOC,UACVC,MAAMC,IACLjB,KAAKF,MAAMoB,QAAQD,EAAIE,QAAS,QAEtC,CAEA,iBAAAC,GACE,MAAMC,EAASC,EAAAC,EAAeC,aAAaC,OAAOC,SAASC,MACrDC,EAAW,CACfC,MAAOR,EAAOS,OAAOD,MACrBE,OAAQV,EAAOS,OAAOC,OACtBxB,KAAMc,EAAOS,OAAOvB,MAAQ,IAG9BP,KAAKgC,UAAYX,EAAOS,OAAOG,KAC3BjC,KAAKF,MAAMoC,eAAiBb,EAAOS,OAAOG,OAC5CL,EAAS5B,KAAKF,MAAMoC,eAAiBlC,KAAKgC,WAE5ChC,KAAKmC,SAASP,EAChB,CAEA,kBAAAQ,CAAmBC,EAAWC,GACxBD,EAAUH,eAAiBlC,KAAKF,MAAMoC,eAAiBlC,KAAKF,MAAMoC,eACpElC,KAAKmC,SAAS,CAAC,CAACnC,KAAKF,MAAMoC,eAAgBlC,KAAKgC,WAAa,IAEjE,CAEA,YAAAxB,CAAa+B,GAEX,GADAA,EAAEC,iBACExC,KAAKC,MAAM4B,MAEb7B,KAAKF,MAAM2C,QAAQzC,KAAKC,MAAMG,SAASsC,OAAQ,CAC7CX,OAAQ,QACRY,OAAQ3C,KAAKC,MAAM4B,aAEhB,GAAI7B,KAAKC,MAAMM,MAAQP,KAAKF,MAAMoC,cAAe,CAGtD,MAAMD,EAAmC,SAA5BjC,KAAKF,MAAMoC,cAA2BlC,KAAKC,MAAME,MAAMuC,OAAS1C,KAAKC,MAAMC,IAAIwC,OAC5F1C,KAAKF,MAAM2C,QAAQzC,KAAKC,MAAMG,SAASsC,OAAQ,CAC7CX,OAAQ,OACRY,OAAQC,KAAK,GAAG5C,KAAKC,MAAMM,QAAQP,KAAKF,MAAMoC,iBAAiBD,MAEnE,KAAO,CAEL,MAAM9B,EAAQH,KAAKC,MAAME,MAAMuC,OACzBxC,EAAMF,KAAKC,MAAMC,IAAIwC,OAC3B1C,KAAKmC,SAAS,CAAChC,MAAOA,EAAOD,IAAKA,IAClCF,KAAKF,MAAM+C,UAAU7C,KAAKF,MAAMoC,cAAe/B,GAASD,GACrD4C,KAAKC,IACJ/C,KAAKmC,SAAS,CAAC9B,MAAM,IACrB,MAAM2C,EAAkC,SAA5BhD,KAAKF,MAAMoC,cAA2B/C,EAASG,0BAC7B,OAA5BU,KAAKF,MAAMoC,cAAyB/C,EAASO,wBAA0B,KACrEsD,GACFhD,KAAKF,MAAMoB,QAAQlB,KAAKF,MAAMmD,KAAKC,cAAcF,GAAM,SAG/D,CACF,CAEA,iBAAAtC,CAAkB6B,GAChBvC,KAAKmC,SAAS,CAAChC,MAAOoC,EAAEY,OAAOC,OACjC,CAEA,oBAAAzC,CAAqB4B,GACnBvC,KAAKmC,SAAS,CAAC/B,SAAUmC,EAAEY,OAAOC,OACpC,CAEA,gBAAAxC,CAAiB2B,GACfvC,KAAKmC,SAAS,CAAC5B,KAAMgC,EAAEY,OAAOC,MAAMC,QAAQ,SAAU,KACxD,CAEA,mBAAAxC,CAAoB0B,GAClBA,EAAEC,iBACFxC,KAAKmC,SAAS,CAAC7B,UAAU,GAC3B,CAEA,MAAAgD,GACE,MAAMC,KAAyBvD,KAAKC,MAAM4B,OAAU7B,KAAKC,MAAMM,MAAQP,KAAKF,MAAMoC,gBAAmBlC,KAAKC,MAAM8B,QAC1GyB,GAAqBD,GAAuBvD,KAAKC,MAAMK,UAAYN,KAAKC,MAAMI,KAE9EoD,GAAiB,EAAAC,EAAAC,QAAAD,EAAAE,SAAA,CAAAC,SAAA,EACnB,EAAAH,EAAAC,QAAA,SAAOG,UAAU,aAAaC,QAAQ,eAAcF,UAClD,EAAAH,EAAAC,QAACvE,EAAA4E,iBAAgB,CAACzE,GAAG,qBACnBC,eAAe,eACfC,YAAY,0CAAmC,YAAG,OAEtD,EAAAiE,EAAAC,QAACvE,EAAA4E,iBAAgB,CAACzE,GAAG,2BAA2BC,eAAe,qBAC7DC,YAAY,wCAAuCoE,SAClDI,IAAgB,EAAAP,EAAAC,QAACO,EAAA3C,EAAe,CAC/BhC,GAAG,eACH0E,YAAaA,EACbE,aAAa,eACbf,MAAOpD,KAAKC,MAAMG,SAClBgE,UAAU,EAAMC,WAAW,EAC3BC,SAAUtE,KAAKW,2BAAqB,YAAG,aACvB,MAGlB4D,GAAc,EAAAb,EAAAC,QAAAD,EAAAE,SAAA,CAAAC,SAAA,CACf7D,KAAKC,MAAMK,SACV,MACA,EAAAoD,EAAAC,QAAA,SAAOI,QAAQ,aAAYF,UACzB,EAAAH,EAAAC,QAACvE,EAAA4E,iBAAgB,CAACzE,GAAG,uBACnBC,eAAe,8BACfC,YAAY,uCAAgC,YAAG,OAGrD,EAAAiE,EAAAC,QAACvE,EAAA4E,iBAAgB,CAACzE,GAAG,0BAA0BC,eAAe,0BAC5DC,YAAY,iCAAgCoE,SAC3CI,IAAgB,EAAAP,EAAAC,QAAA,SAAOa,KAAK,QAAQjF,GAAG,aACtC0E,YAAaA,EACbE,aAAa,QACbf,MAAOpD,KAAKC,MAAME,MAClBmE,SAAUtE,KAAKU,kBACf0D,UAAQ,EAACC,WAAS,oBAAG,aACL,MAGlBI,GAAc,EAAAf,EAAAC,QAAAD,EAAAE,SAAA,CAAAC,SAAA,CACf7D,KAAKC,MAAMK,SACV,MACA,EAAAoD,EAAAC,QAAA,OAAAE,UAAK,EAAAH,EAAAC,QAAA,SAAAE,UACH,EAAAH,EAAAC,QAACvE,EAAA4E,iBAAgB,CAACzE,GAAG,2BACnBC,eAAe,6BACfC,YAAY,gDAAyC,YAAG,YACpD,OAEV,EAAAiE,EAAAC,QAAA,OAAAE,UACE,EAAAH,EAAAC,QAAA,SAAOG,UAAU,aAAYD,UAC3B,EAAAH,EAAAC,QAACvE,EAAA4E,iBAAgB,CAACzE,GAAG,sBAAsBC,eAAe,sBACxDC,YAAY,kDAA2C,YAAG,YACtD,OAEV,EAAAiE,EAAAC,QAAA,OAAKG,UAAU,iBAAgBD,UAC7B,EAAAH,EAAAC,QAACe,EAAAnD,EAAS,CACR8C,WAAW,EACXM,sBAAuB3E,KAAKF,MAAM6E,sBAClCC,SAAUC,GAAU7E,KAAKmC,SAAS,CAACjC,IAAK2E,UAAS,YAAG,aAClD,MAGJC,GAAa,EAAApB,EAAAC,QAAAD,EAAAE,SAAA,CAAAC,SAAA,EACf,EAAAH,EAAAC,QAAA,OAAAE,UACE,EAAAH,EAAAC,QAAA,SAAOG,UAAU,aAAaC,QAAQ,0BAAyBF,UAC7D,EAAAH,EAAAC,QAACvE,EAAA4E,iBAAgB,CAACzE,GAAG,iCACnBC,eAAe,oBACfC,YAAY,2CAAoC,YAAG,YAC/C,OAEV,EAAAiE,EAAAC,QAAA,OAAAE,UACE,EAAAH,EAAAC,QAACvE,EAAA4E,iBAAgB,CAACzE,GAAG,mCACnBC,eAAe,eAAeC,YAAY,uCAAsCoE,SAC/EkB,IAAiB,EAAArB,EAAAC,QAAA,SAAOa,KAAK,OAAOjF,GAAG,0BACtC0E,YAAac,EAAcC,UAAW,GACtC5B,MAAOpD,KAAKC,MAAMM,KAAM+D,SAAUtE,KAAKY,iBAAkBwD,UAAQ,oBAAG,YACpD,aAChB,MAGJa,EAA8C,SAA5BjF,KAAKF,MAAMoC,cACjCqC,EAAyC,OAA5BvE,KAAKF,MAAMoC,cAAyBuC,EAAa,KAEhE,OACE,EAAAf,EAAAC,QAAA,QAAMpE,GAAG,sBAAsBqF,SAAU5E,KAAKQ,aAAaqD,SAAA,EACvD7D,KAAKC,MAAMI,MAAQkD,EAAsB0B,EAAkB,KAC5DjF,KAAKC,MAAMK,UAAYN,KAAKC,MAAMI,KAAOyE,EAAY,KACrDtB,EAAoBC,EAAgB,MACrC,EAAAC,EAAAC,QAAA,OAAKG,UAAU,iBAAgBD,SAAA,CAC5B7D,KAAKC,MAAMK,UAAYN,KAAKC,MAAMI,MAAQL,KAAKC,MAAM4B,OAAS7B,KAAKC,MAAMM,KAAO,MAC/E,EAAAmD,EAAAC,QAAA,KAAGuB,KAAK,IAAIC,QAASnF,KAAKa,oBAAqBuE,MAAO,CAACC,YAAa,QAAQxB,UAC1E,EAAAH,EAAAC,QAACvE,EAAA4E,iBAAgB,CAACzE,GAAG,uBAAuBC,eAAe,cACzDC,YAAY,wDAAiD,YAAG,OAGtE,EAAAiE,EAAAC,QAAA,UAAQG,UAAU,UAAUU,KAAK,SAAQX,SACvCL,GACE,EAAAE,EAAAC,QAACvE,EAAA4E,iBAAgB,CAACzE,GAAG,eAAeC,eAAe,QAAQC,YAAY,uBAAgB,OAEvF,EAAAiE,EAAAC,QAACvE,EAAA4E,iBAAgB,CAACzE,GAAG,sBAAsBC,eAAe,eACxDC,YAAY,8BAAuB,YAAG,aAClC,aACN,KAGZ,EAGF6F,EAAA,SAAe,EAAAlG,EAAAmG,YAAW5F,+HC5N1B,MAAMR,GAAW,EAAAC,EAAAC,gBAAe,CAC9BmG,uBAAwB,CACtBjG,GAAI,yBACJC,eAAgB,+BAChBC,YAAa,mBAIjB,MAAMgG,UAAkB7F,IAAA,cACtB,WAAAC,CAAYC,GACVC,MAAMD,GAENE,KAAK0F,QAAU,CAAC,EAChBC,EAAeC,QAAQC,IAAQ7F,KAAK0F,QAAQG,EAAGtF,MAAQsF,EAAGC,OAE1D,MAAMvF,EAAOT,EAAMiG,aAAe,KAC5BD,EAAO9F,KAAK0F,QAAQnF,GAE1BP,KAAKC,MAAQ,CACX8F,YAAaxF,EACbyF,SAAUF,EACVG,YAAa,GACbC,kBAAmBlG,KAAKkG,kBAAkB3F,EAAMuF,IAGlD9F,KAAKmG,aAAenG,KAAKmG,aAAa1F,KAAKT,MAC3CA,KAAKoG,eAAiBpG,KAAKoG,eAAe3F,KAAKT,MAC/CA,KAAKqG,cAAgBrG,KAAKqG,cAAc5F,KAAKT,MAC7CA,KAAKsG,oBAAsBtG,KAAKsG,oBAAoB7F,KAAKT,KAC3D,CAEA,YAAAmG,CAAa5D,GACX,MAAMgE,EAAS,IAAIvG,KAAKC,MAAM+F,WAC9B,IAAIQ,GAAY,IAAIC,EAAAC,GAAYC,MAAM,GAAGJ,IAASvG,KAAK4G,aAAarE,EAAEY,OAAOC,UAC7EoD,EAAYA,EAAUK,UAAUN,EAAOO,QAAQpE,OAC/C1C,KAAKmC,SAAS,CAAC8D,YAAaO,GAC9B,CAEA,cAAAJ,CAAe7D,GACbA,EAAEC,iBACF,MAAMuE,EAAM,GAAG/G,KAAKC,MAAM+F,WAAWhG,KAAKC,MAAMgG,YAAYvD,SAASW,QAAQ,SAAU,IACvF,IAAIwB,EAAS,KACb,IACEA,GAAS,EAAAmC,EAAAC,GAAiB,IAAIF,IAChC,CAAE,MAAO9F,GAAM,CAEV4D,GAAWA,EAAOqC,WAKvBlH,KAAKmH,WAAWC,kBAAkB,IAClCpH,KAAKF,MAAM8E,SAASC,EAAOwC,OAAO,WALhCrH,KAAKmH,WAAWC,kBAAkBpH,KAAKF,MAAMmD,KAAKC,cAAc/D,EAASqG,wBAM7E,CAGA,aAAAa,CAAc9D,GACE,UAAVA,EAAE+E,KACJtH,KAAKoG,eAAe7D,EAExB,CAEA,mBAAA+D,GACEtG,KAAKF,MAAM6E,sBAAsB3E,KAAKC,MAAM8F,YAAa/F,KAAKC,MAAM+F,SAClE,CAACzF,EAAMuF,KACH9F,KAAKmC,SAAS,CACZ4D,YAAaxF,EACbyF,SAAUF,EACVI,kBAAmBlG,KAAKkG,kBAAkB3F,EAAMuF,MAG1D,CAGA,YAAAc,CAAa/B,GACX,OAAKA,EAKEA,EAAOxB,QAAQ,eAAgB,IAJ7BwB,CAKX,CAEA,iBAAAqB,CAAkB3F,EAAMuF,GACtB,MAAMyB,GAAS,EAAAC,EAAAC,GAAiBlH,EAAMmH,EAAAnG,GACtC,OAAOgG,EAASA,EAAOI,sBAAsBd,UAAUf,EAAKgB,OAAS,GAAGpE,OAAS,UACnF,CAEA,MAAAY,GACE,OACE,EAAAsE,EAAAjE,QAAAiE,EAAAhE,SAAA,CAAAC,SAAA,EACE,EAAA+D,EAAAjE,QAAA,QAAMG,UAAU,YAAYqB,QAASnF,KAAKsG,oBAAoBzC,SAAA,EAC5D,EAAA+D,EAAAjE,QAAA,QAAMG,UAAU,eAAcD,SAAA,EAAE,EAAAgE,EAAAC,IAAU9H,KAAKC,MAAM8F,aAAa,WAAM,MAAO,IAC7E/F,KAAKC,MAAM+F,SAAS,WAAM,OAC9B,EAAA4B,EAAAjE,QAAA,SAAOa,KAAK,MAAMuD,IAAKA,IAAQ/H,KAAKmH,WAAaY,GAAM9D,YAAajE,KAAKC,MAAMiG,kBAC3E9C,MAAOpD,KAAKC,MAAMgG,YAAa3B,SAAUtE,KAAKmG,aAC9CnB,UAAW,GAAIgD,UAAWhI,KAAKqG,cAAe4B,OAAQjI,KAAKoG,eAC3DhC,UAAQ,EAACC,UAAWrE,KAAKF,MAAMuE,gBAAU,aAAG,KAGtD,EAGFiB,EAAA/D,GAAe,EAAAnC,EAAAmG,YAAWE","sources":["webpack://tinode-webapp/./src/views/password-reset-view.jsx","webpack://tinode-webapp/./src/widgets/phone-edit.jsx"],"sourcesContent":["// A password reset form.\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport PhoneEdit from '../widgets/phone-edit.jsx';\nimport VisiblePassword from '../widgets/visible-password.jsx';\n\nimport HashNavigation from '../lib/navigation.js';\n\nconst messages = defineMessages({\n password_reset_email_sent: {\n id: 'password_reset_email_sent',\n defaultMessage: 'An email with security code has been sent.',\n description: 'Notification that the email with password reset instructions has been sent'\n },\n password_reset_sms_sent: {\n id: 'password_reset_sms_sent',\n defaultMessage: 'A text message with security code has been sent.',\n description: 'Notification that the SMS with password reset instructions has been sent'\n }\n});\n\nclass PasswordResetView extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n tel: '',\n email: '',\n password: '',\n sent: false,\n haveCode: false,\n code: ''\n };\n\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleEmailChange = this.handleEmailChange.bind(this);\n this.handlePasswordChange = this.handlePasswordChange.bind(this);\n this.handleCodeChange = this.handleCodeChange.bind(this);\n this.handleShowCodeField = this.handleShowCodeField.bind(this);\n\n // Connection will trigger change by changing the this.props.serverVersion.\n props.tinode.connect()\n .catch(err => {\n this.props.onError(err.message, 'err');\n });\n }\n\n componentDidMount() {\n const parsed = HashNavigation.parseUrlHash(window.location.hash);\n const newState = {\n token: parsed.params.token,\n scheme: parsed.params.scheme,\n code: parsed.params.code || ''\n }\n\n this.savedCred = parsed.params.cred;\n if (this.props.reqCredMethod && parsed.params.cred) {\n newState[this.props.reqCredMethod] = this.savedCred;\n }\n this.setState(newState);\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (prevProps.reqCredMethod != this.props.reqCredMethod && this.props.reqCredMethod) {\n this.setState({[this.props.reqCredMethod]: this.savedCred || ''});\n }\n }\n\n handleSubmit(e) {\n e.preventDefault();\n if (this.state.token) {\n // Reset using token.\n this.props.onReset(this.state.password.trim(), {\n scheme: 'token',\n secret: this.state.token\n });\n } else if (this.state.code && this.props.reqCredMethod) {\n // Reset using security code.\n // The secret is structured as ::, \"123456:email:alice@example.com\".\n const cred = this.props.reqCredMethod == 'email' ? this.state.email.trim() : this.state.tel.trim();\n this.props.onReset(this.state.password.trim(), {\n scheme: 'code',\n secret: btoa(`${this.state.code}:${this.props.reqCredMethod}:${cred}`)\n });\n } else {\n // Send email or SMS with the secret code.\n const email = this.state.email.trim();\n const tel = this.state.tel.trim();\n this.setState({email: email, tel: tel});\n this.props.onRequest(this.props.reqCredMethod, email || tel)\n .then(_ => {\n this.setState({sent: true});\n const msg = this.props.reqCredMethod == 'email' ? messages.password_reset_email_sent :\n this.props.reqCredMethod == 'tel' ? messages.password_reset_sms_sent : null;\n if (msg) {\n this.props.onError(this.props.intl.formatMessage(msg), 'info');\n }\n });\n }\n }\n\n handleEmailChange(e) {\n this.setState({email: e.target.value});\n }\n\n handlePasswordChange(e) {\n this.setState({password: e.target.value});\n }\n\n handleCodeChange(e) {\n this.setState({code: e.target.value.replace(/[^\\d]/g, '')});\n }\n\n handleShowCodeField(e) {\n e.preventDefault();\n this.setState({haveCode: true});\n }\n\n render() {\n const showCredentialInput = !((this.state.token || (this.state.code && this.props.reqCredMethod)) && this.state.scheme);\n const showPasswordInput = !showCredentialInput || this.state.haveCode || this.state.sent;\n\n const passwordInput = (<>\n \n {\n (placeholder) => \n } \n >);\n\n const emailInput = (<>\n {this.state.haveCode ?\n null :\n \n }\n {\n (placeholder) => \n } \n >);\n\n const phoneInput = (<>\n {this.state.haveCode ?\n null :\n \n }\n \n \n \n \n this.setState({tel: number})} />\n \n >);\n\n const codeInput = (<>\n \n \n \n \n {\n (numbers_only) => \n } \n \n >);\n\n const credentialInput = this.props.reqCredMethod == 'email' ?\n emailInput : this.props.reqCredMethod == 'tel' ? phoneInput : null;\n\n return (\n \n );\n }\n}\n\nexport default injectIntl(PasswordResetView);\n","// Editor for a phone number.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { AsYouType, getExampleNumber, parsePhoneNumber } from 'libphonenumber-js/mobile';\nimport examples from 'libphonenumber-js/mobile/examples'\n\nimport * as dcodes from '../dcodes.json';\nimport { flagEmoji } from '../lib/strformat';\n\nconst messages = defineMessages({\n mobile_number_required: {\n id: 'mobile_number_required',\n defaultMessage: 'Mobile phone number required',\n description: 'Error message'\n }\n});\n\nclass PhoneEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.codeMap = {};\n dcodes.default.forEach(dc => { this.codeMap[dc.code] = dc.dial; });\n\n const code = props.countryCode || 'US';\n const dial = this.codeMap[code];\n\n this.state = {\n countryCode: code,\n dialCode: dial,\n localNumber: '',\n placeholderNumber: this.placeholderNumber(code, dial)\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.handleFinished = this.handleFinished.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.showCountrySelector = this.showCountrySelector.bind(this);\n }\n\n handleChange(e) {\n const prefix = `+${this.state.dialCode}`;\n let formatted = new AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n formatted = formatted.substring(prefix.length).trim();\n this.setState({localNumber: formatted});\n }\n\n handleFinished(e) {\n e.preventDefault();\n const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\\d]/g, '');\n let number = null;\n try {\n number = parsePhoneNumber(`+${raw}`);\n } catch (err) {}\n\n if (!number || !number.isValid()) {\n this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n return;\n }\n\n this.inputField.setCustomValidity('');\n this.props.onSubmit(number.format('E.164'));\n }\n\n\n handleKeyDown(e) {\n if (e.key === 'Enter') {\n this.handleFinished(e);\n }\n }\n\n showCountrySelector() {\n this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode,\n (code, dial) => {\n this.setState({\n countryCode: code,\n dialCode: dial,\n placeholderNumber: this.placeholderNumber(code, dial)\n })\n });\n }\n\n // Filter out characters not permitted in a phone number.\n filterNumber(number) {\n if (!number) {\n return number;\n }\n // Leave numbers, space, (, ), -, and .\n // The + is not allowed: it's handled by the country code portion.\n return number.replace(/[^-\\s().\\d]/g, '');\n }\n\n placeholderNumber(code, dial) {\n const sample = getExampleNumber(code, examples);\n return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n }\n\n render() {\n return (\n <>\n \n {flagEmoji(this.state.countryCode)} \n +{this.state.dialCode} \n {this.inputField = ref}} placeholder={this.state.placeholderNumber}\n value={this.state.localNumber} onChange={this.handleChange}\n maxLength={17} onKeyDown={this.handleKeyDown} onBlur={this.handleFinished}\n required autoFocus={this.props.autoFocus} />\n >\n );\n }\n}\n\nexport default injectIntl(PhoneEdit);\n"],"names":["messages","react_intl__WEBPACK_IMPORTED_MODULE_1__","defineMessages","password_reset_email_sent","id","defaultMessage","description","password_reset_sms_sent","PasswordResetView","react__WEBPACK_IMPORTED_MODULE_0___default","constructor","props","super","this","state","tel","email","password","sent","haveCode","code","handleSubmit","bind","handleEmailChange","handlePasswordChange","handleCodeChange","handleShowCodeField","tinode","connect","catch","err","onError","message","componentDidMount","parsed","_lib_navigation_js__WEBPACK_IMPORTED_MODULE_4__","A","parseUrlHash","window","location","hash","newState","token","params","scheme","savedCred","cred","reqCredMethod","setState","componentDidUpdate","prevProps","prevState","e","preventDefault","onReset","trim","secret","btoa","onRequest","then","_","msg","intl","formatMessage","target","value","replace","render","showCredentialInput","showPasswordInput","passwordInput","react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__","jsxDEV","Fragment","children","className","htmlFor","FormattedMessage","placeholder","_widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_3__","autoComplete","required","autoFocus","onChange","emailInput","type","phoneInput","_widgets_phone_edit_jsx__WEBPACK_IMPORTED_MODULE_2__","onShowCountrySelector","onSubmit","number","codeInput","numbers_only","maxLength","credentialInput","href","onClick","style","marginRight","__webpack_exports__","injectIntl","mobile_number_required","PhoneEdit","codeMap","_dcodes_json__WEBPACK_IMPORTED_MODULE_6__","forEach","dc","dial","countryCode","dialCode","localNumber","placeholderNumber","handleChange","handleFinished","handleKeyDown","showCountrySelector","prefix","formatted","libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_3__","Q","input","filterNumber","substring","length","raw","libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_2__","L","isValid","inputField","setCustomValidity","format","key","sample","libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_4__","a","libphonenumber_js_mobile_examples__WEBPACK_IMPORTED_MODULE_5__","formatInternational","react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__","_lib_strformat__WEBPACK_IMPORTED_MODULE_7__","lb","ref","onKeyDown","onBlur"],"sourceRoot":""}
\ No newline at end of file
diff --git a/umd/996.prod.js b/umd/996.prod.js
index f38853f0..700126b8 100644
--- a/umd/996.prod.js
+++ b/umd/996.prod.js
@@ -1,2 +1,2 @@
-"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[996],{111:function(e){e.exports=JSON.parse('[{"dial":"93","code":"AF"},{"dial":"355","code":"AL"},{"dial":"213","code":"DZ"},{"dial":"1-684","code":"AS"},{"dial":"376","code":"AD"},{"dial":"244","code":"AO"},{"dial":"1-264","code":"AI"},{"dial":"672","code":"AQ"},{"dial":"1-268","code":"AG"},{"dial":"54","code":"AR"},{"dial":"374","code":"AM"},{"dial":"297","code":"AW"},{"dial":"61","code":"AU"},{"dial":"43","code":"AT"},{"dial":"994","code":"AZ"},{"dial":"1-242","code":"BS"},{"dial":"973","code":"BH"},{"dial":"880","code":"BD"},{"dial":"1-246","code":"BB"},{"dial":"375","code":"BY"},{"dial":"32","code":"BE"},{"dial":"501","code":"BZ"},{"dial":"229","code":"BJ"},{"dial":"1-441","code":"BM"},{"dial":"975","code":"BT"},{"dial":"591","code":"BO"},{"dial":"387","code":"BA"},{"dial":"267","code":"BW"},{"dial":"55","code":"BR"},{"dial":"246","code":"IO"},{"dial":"1-284","code":"VG"},{"dial":"673","code":"BN"},{"dial":"359","code":"BG"},{"dial":"226","code":"BF"},{"dial":"257","code":"BI"},{"dial":"855","code":"KH"},{"dial":"237","code":"CM"},{"dial":"1","code":"CA"},{"dial":"238","code":"CV"},{"dial":"1-345","code":"KY"},{"dial":"236","code":"CF"},{"dial":"235","code":"TD"},{"dial":"56","code":"CL"},{"dial":"86","code":"CN"},{"dial":"61","code":"CX"},{"dial":"61","code":"CC"},{"dial":"57","code":"CO"},{"dial":"269","code":"KM"},{"dial":"682","code":"CK"},{"dial":"506","code":"CR"},{"dial":"385","code":"HR"},{"dial":"53","code":"CU"},{"dial":"599","code":"CW"},{"dial":"357","code":"CY"},{"dial":"420","code":"CZ"},{"dial":"243","code":"CD"},{"dial":"45","code":"DK"},{"dial":"253","code":"DJ"},{"dial":"1-767","code":"DM"},{"dial":"1-809, 1-829, 1-849","code":"DO"},{"dial":"670","code":"TL"},{"dial":"593","code":"EC"},{"dial":"20","code":"EG"},{"dial":"503","code":"SV"},{"dial":"240","code":"GQ"},{"dial":"291","code":"ER"},{"dial":"372","code":"EE"},{"dial":"251","code":"ET"},{"dial":"500","code":"FK"},{"dial":"298","code":"FO"},{"dial":"679","code":"FJ"},{"dial":"358","code":"FI"},{"dial":"33","code":"FR"},{"dial":"689","code":"PF"},{"dial":"241","code":"GA"},{"dial":"220","code":"GM"},{"dial":"995","code":"GE"},{"dial":"49","code":"DE"},{"dial":"233","code":"GH"},{"dial":"350","code":"GI"},{"dial":"30","code":"GR"},{"dial":"299","code":"GL"},{"dial":"1-473","code":"GD"},{"dial":"1-671","code":"GU"},{"dial":"502","code":"GT"},{"dial":"44-1481","code":"GG"},{"dial":"224","code":"GN"},{"dial":"245","code":"GW"},{"dial":"592","code":"GY"},{"dial":"509","code":"HT"},{"dial":"504","code":"HN"},{"dial":"852","code":"HK"},{"dial":"36","code":"HU"},{"dial":"354","code":"IS"},{"dial":"91","code":"IN"},{"dial":"62","code":"ID"},{"dial":"98","code":"IR"},{"dial":"964","code":"IQ"},{"dial":"353","code":"IE"},{"dial":"44-1624","code":"IM"},{"dial":"972","code":"IL"},{"dial":"39","code":"IT"},{"dial":"225","code":"CI"},{"dial":"1-876","code":"JM"},{"dial":"81","code":"JP"},{"dial":"44-1534","code":"JE"},{"dial":"962","code":"JO"},{"dial":"7, 997","code":"KZ"},{"dial":"254","code":"KE"},{"dial":"686","code":"KI"},{"dial":"383","code":"XK"},{"dial":"965","code":"KW"},{"dial":"996","code":"KG"},{"dial":"856","code":"LA"},{"dial":"371","code":"LV"},{"dial":"961","code":"LB"},{"dial":"266","code":"LS"},{"dial":"231","code":"LR"},{"dial":"218","code":"LY"},{"dial":"423","code":"LI"},{"dial":"370","code":"LT"},{"dial":"352","code":"LU"},{"dial":"853","code":"MO"},{"dial":"389","code":"MK"},{"dial":"261","code":"MG"},{"dial":"265","code":"MW"},{"dial":"60","code":"MY"},{"dial":"960","code":"MV"},{"dial":"223","code":"ML"},{"dial":"356","code":"MT"},{"dial":"692","code":"MH"},{"dial":"222","code":"MR"},{"dial":"230","code":"MU"},{"dial":"262","code":"YT"},{"dial":"52","code":"MX"},{"dial":"691","code":"FM"},{"dial":"373","code":"MD"},{"dial":"377","code":"MC"},{"dial":"976","code":"MN"},{"dial":"382","code":"ME"},{"dial":"1-664","code":"MS"},{"dial":"212","code":"MA"},{"dial":"258","code":"MZ"},{"dial":"95","code":"MM"},{"dial":"264","code":"NA"},{"dial":"674","code":"NR"},{"dial":"977","code":"NP"},{"dial":"31","code":"NL"},{"dial":"599","code":"CW"},{"dial":"687","code":"NC"},{"dial":"64","code":"NZ"},{"dial":"505","code":"NI"},{"dial":"227","code":"NE"},{"dial":"234","code":"NG"},{"dial":"683","code":"NU"},{"dial":"850","code":"KP"},{"dial":"1-670","code":"MP"},{"dial":"47","code":"NO"},{"dial":"968","code":"OM"},{"dial":"92","code":"PK"},{"dial":"680","code":"PW"},{"dial":"970","code":"PS"},{"dial":"507","code":"PA"},{"dial":"675","code":"PG"},{"dial":"595","code":"PY"},{"dial":"51","code":"PE"},{"dial":"63","code":"PH"},{"dial":"64","code":"PN"},{"dial":"48","code":"PL"},{"dial":"351","code":"PT"},{"dial":"1-787, 1-939","code":"PR"},{"dial":"974","code":"QA"},{"dial":"242","code":"CG"},{"dial":"262","code":"RE"},{"dial":"40","code":"RO"},{"dial":"7","code":"RU"},{"dial":"250","code":"RW"},{"dial":"590","code":"BL"},{"dial":"290","code":"SH"},{"dial":"1-869","code":"KN"},{"dial":"1-758","code":"LC"},{"dial":"590","code":"MF"},{"dial":"508","code":"PM"},{"dial":"1-784","code":"VC"},{"dial":"685","code":"WS"},{"dial":"378","code":"SM"},{"dial":"239","code":"ST"},{"dial":"966","code":"SA"},{"dial":"221","code":"SN"},{"dial":"381","code":"RS"},{"dial":"248","code":"SC"},{"dial":"232","code":"SL"},{"dial":"65","code":"SG"},{"dial":"1-721","code":"SX"},{"dial":"421","code":"SK"},{"dial":"386","code":"SI"},{"dial":"677","code":"SB"},{"dial":"252","code":"SO"},{"dial":"27","code":"ZA"},{"dial":"82","code":"KR"},{"dial":"211","code":"SS"},{"dial":"34","code":"ES"},{"dial":"94","code":"LK"},{"dial":"249","code":"SD"},{"dial":"597","code":"SR"},{"dial":"47","code":"SJ"},{"dial":"268","code":"SZ"},{"dial":"46","code":"SE"},{"dial":"41","code":"CH"},{"dial":"963","code":"SY"},{"dial":"886","code":"TW"},{"dial":"992","code":"TJ"},{"dial":"255","code":"TZ"},{"dial":"66","code":"TH"},{"dial":"228","code":"TG"},{"dial":"690","code":"TK"},{"dial":"676","code":"TO"},{"dial":"1-868","code":"TT"},{"dial":"216","code":"TN"},{"dial":"90","code":"TR"},{"dial":"993","code":"TM"},{"dial":"1-649","code":"TC"},{"dial":"688","code":"TV"},{"dial":"1-340","code":"VI"},{"dial":"256","code":"UG"},{"dial":"380","code":"UA"},{"dial":"971","code":"AE"},{"dial":"44","code":"GB"},{"dial":"1","code":"US"},{"dial":"598","code":"UY"},{"dial":"998","code":"UZ"},{"dial":"678","code":"VU"},{"dial":"379","code":"VA"},{"dial":"58","code":"VE"},{"dial":"84","code":"VN"},{"dial":"681","code":"WF"},{"dial":"212","code":"EH"},{"dial":"967","code":"YE"},{"dial":"260","code":"ZM"},{"dial":"263","code":"ZW"}]')},3996:function(e,a,d){d.r(a),d.d(a,{default:function(){return C}});var t=d(1594),l=d.n(t),i=d(8181),o=d(221),c=d(9418),n=d(1166),s=d(4956),r=d(6789),h=d(8262),m=d(6110),u=d(3540),p=d(8589),g=d(9027);class C extends l().PureComponent{constructor(e){super(e),this.state={login:"",password:"",meth:"",email:"",tel:"",fn:"",imageUrl:null,uploadUrl:null,newAvatar:null,newAvatarMime:null,buttonDisabled:!1,saveToken:h.A.getObject("keep-logged-in")},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handlePhoneChange=this.handlePhoneChange.bind(this),this.handleFnChange=this.handleFnChange.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleAvatarCropped=this.handleAvatarCropped.bind(this),this.handleAvatarCropCancel=this.handleAvatarCropCancel.bind(this),this.uploadAvatar=this.uploadAvatar.bind(this),this.handleSubmit=this.handleSubmit.bind(this),e.tinode.connect().catch(e=>{this.props.onError(e.message,"err")})}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e})}handleEmailChange(e){this.setState({meth:"email",email:e.target.value})}handlePhoneChange(e){this.setState({meth:"tel",tel:e})}handleFnChange(e){this.setState({fn:e.target.value})}handleImageChanged(e,a){this.setState({newAvatar:a,newAvatarMime:e}),a||this.setState({imageUrl:null,uploadUrl:null})}handleToggleSaveToken(){h.A.setObject("keep-logged-in",!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.props.onCreateAccount(this.state.login.trim(),this.state.password.trim(),(0,u.k6)((0,p.W5)(this.state.fn.trim(),g.tS),this.state.uploadUrl),{meth:this.state.meth,val:"email"==this.state.meth?this.state.email:"tel"==this.state.meth?this.state.tel:null})}handleAvatarCropped(e,a,d,t){a&&URL.createObjectURL(a);this.setState({newAvatar:null,newAvatarMime:null}),a&&this.uploadAvatar(e,a,d,t)}handleAvatarCropCancel(){this.setState({newAvatar:null,newAvatarMime:null})}uploadAvatar(e,a,d,t){const l=e=>{let{mime:a,blob:d}=e;if(this.setState({imageUrl:URL.createObjectURL(d),buttonDisabled:!0}),d.size>g.Z7){this.props.tinode.getLargeFileHelper().upload(d,"newacc").then(e=>this.setState({uploadUrl:e})).catch(e=>this.props.onError(e.message,"err")).finally(e=>this.setState({buttonDisabled:!1}))}else(0,m.Sk)(d).then(e=>this.setState({uploadUrl:(0,m.to)({data:e.bits,type:a})})).finally(e=>this.setState({buttonDisabled:!1}))};d>g.eQ||t>g.eQ||d!=t?(0,m.ag)(a,g.eQ,g.eQ,g.qy,!0).then(e=>l(e)).catch(e=>this.props.onError(e.message,"err")):l({mime:e,blob:a,width:d,height:t})}render(){if(this.state.newAvatar)return l().createElement(o.A,{avatar:this.state.newAvatar,mime:this.state.newAvatarMime,onSubmit:this.handleAvatarCropped,onCancel:this.handleAvatarCropCancel,onError:this.props.onError});let e="primary";return this.props.disabled&&(e+=" disabled"),l().createElement("form",{className:"panel-form-column",onSubmit:this.handleSubmit},l().createElement("div",{className:"panel-form-row"},l().createElement("div",{className:"umn"},l().createElement(i.FormattedMessage,{id:"login_prompt",defaultMessage:[{type:0,value:"Login"}]},e=>l().createElement("input",{type:"text",placeholder:e,autoComplete:"user-name",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0})),l().createElement(i.FormattedMessage,{id:"password_prompt",defaultMessage:[{type:0,value:"Password"}]},e=>l().createElement(r.A,{placeholder:e,autoComplete:"new-password",value:this.state.password,onFinished:this.handlePasswordChange,required:!0}))),l().createElement(c.A,{tinode:this.props.tinode,avatar:this.state.imageUrl,onImageUpdated:this.handleImageChanged,onError:this.props.onError})),l().createElement("div",{className:"panel-form-row"},l().createElement(i.FormattedMessage,{id:"full_name_prompt",defaultMessage:[{type:0,value:"Full name, e.g. John Doe"}]},e=>l().createElement("input",{type:"text",placeholder:e,autoComplete:"name",value:this.state.fn,onChange:this.handleFnChange,required:!0}))),"email"==this.props.reqCredMethod?l().createElement("div",{className:"panel-form-row"},l().createElement(i.FormattedMessage,{id:"email_prompt",defaultMessage:[{type:0,value:"Email, e.g. jdoe@example.com"}]},e=>l().createElement("input",{type:"email",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0}))):"tel"==this.props.reqCredMethod?l().createElement(l().Fragment,null,l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small gray"},l().createElement(i.FormattedMessage,{id:"mobile_phone_number",defaultMessage:[{type:0,value:"Mobile phone number"}]}))),l().createElement("div",{className:"panel-form-row"},l().createElement(s.A,{autoFocus:!1,onShowCountrySelector:this.props.onShowCountrySelector,onSubmit:this.handlePhoneChange}))):null,l().createElement("div",{className:"panel-form-row"},l().createElement(n.A,{id:"save-token",name:"save-token",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),l().createElement(i.FormattedMessage,{id:"stay_logged_in",defaultMessage:[{type:0,value:"Stay logged in"}]},e=>l().createElement("label",{htmlFor:"save-token"}," ",e))),l().createElement("div",{className:"dialog-buttons"},l().createElement("button",{className:e,type:"submit",disabled:this.state.buttonDisabled},l().createElement(i.FormattedMessage,{id:"button_sign_up",defaultMessage:[{type:0,value:"Sign up"}]}))))}}},4956:function(e,a,d){var t=d(1594),l=d.n(t),i=d(8181),o=d(8892),c=d(4724),n=d(6187),s=d(4701),r=d(111),h=d(8589);const m=(0,i.defineMessages)({mobile_number_required:{id:"mobile_number_required",defaultMessage:[{type:0,value:"Mobile phone number required"}]}});class u extends l().PureComponent{constructor(e){super(e),this.codeMap={},r.forEach(e=>{this.codeMap[e.code]=e.dial});const a=e.countryCode||"US",d=this.codeMap[a];this.state={countryCode:a,dialCode:d,localNumber:"",placeholderNumber:this.placeholderNumber(a,d)},this.handleChange=this.handleChange.bind(this),this.handleFinished=this.handleFinished.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.showCountrySelector=this.showCountrySelector.bind(this)}handleChange(e){const a=`+${this.state.dialCode}`;let d=(new c.Q).input(`${a}${this.filterNumber(e.target.value)}`);d=d.substring(a.length).trim(),this.setState({localNumber:d})}handleFinished(e){e.preventDefault();const a=`${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\d]/g,"");let d=null;try{d=(0,o.L)(`+${a}`)}catch(e){}d&&d.isValid()?(this.inputField.setCustomValidity(""),this.props.onSubmit(d.format("E.164"))):this.inputField.setCustomValidity(this.props.intl.formatMessage(m.mobile_number_required))}handleKeyDown(e){"Enter"===e.key&&this.handleFinished(e)}showCountrySelector(){this.props.onShowCountrySelector(this.state.countryCode,this.state.dialCode,(e,a)=>{this.setState({countryCode:e,dialCode:a,placeholderNumber:this.placeholderNumber(e,a)})})}filterNumber(e){return e?e.replace(/[^-\s().\d]/g,""):e}placeholderNumber(e,a){const d=(0,n.a)(e,s.A);return d?d.formatInternational().substring(a.length+1).trim():"123 0123"}render(){return l().createElement(l().Fragment,null,l().createElement("span",{className:"dial-code",onClick:this.showCountrySelector},l().createElement("span",{className:"country-flag"},(0,h.lb)(this.state.countryCode)," "),"+",this.state.dialCode," "),l().createElement("input",{type:"tel",ref:e=>{this.inputField=e},placeholder:this.state.placeholderNumber,value:this.state.localNumber,onChange:this.handleChange,maxLength:17,onKeyDown:this.handleKeyDown,onBlur:this.handleFinished,required:!0,autoFocus:this.props.autoFocus}))}}a.A=(0,i.injectIntl)(u)}}]);
+"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[996],{3996:function(e,d,a){a.r(d),a.d(d,{default:function(){return v}});var i=a(1594),o=a.n(i),l=a(8181),t=a(221),s=a(9418),c=a(1166),n=a(4956),r=a(6789),h=a(8262),u=a(6110),p=a(3540),m=a(8589),g=a(9027),C=a(5446);class v extends o().PureComponent{constructor(e){super(e),this.state={login:"",password:"",meth:"",email:"",tel:"",fn:"",imageUrl:null,uploadUrl:null,newAvatar:null,newAvatarMime:null,buttonDisabled:!1,saveToken:h.A.getObject("keep-logged-in")},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleEmailChange=this.handleEmailChange.bind(this),this.handlePhoneChange=this.handlePhoneChange.bind(this),this.handleFnChange=this.handleFnChange.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleAvatarCropped=this.handleAvatarCropped.bind(this),this.handleAvatarCropCancel=this.handleAvatarCropCancel.bind(this),this.uploadAvatar=this.uploadAvatar.bind(this),this.handleSubmit=this.handleSubmit.bind(this),e.tinode.connect().catch(e=>{this.props.onError(e.message,"err")})}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e})}handleEmailChange(e){this.setState({meth:"email",email:e.target.value})}handlePhoneChange(e){this.setState({meth:"tel",tel:e})}handleFnChange(e){this.setState({fn:e.target.value})}handleImageChanged(e,d){this.setState({newAvatar:d,newAvatarMime:e}),d||this.setState({imageUrl:null,uploadUrl:null})}handleToggleSaveToken(){h.A.setObject("keep-logged-in",!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.props.onCreateAccount(this.state.login.trim(),this.state.password.trim(),(0,p.k6)((0,m.W5)(this.state.fn.trim(),60),this.state.uploadUrl),{meth:this.state.meth,val:"email"==this.state.meth?this.state.email:"tel"==this.state.meth?this.state.tel:null})}handleAvatarCropped(e,d,a,i){d&&URL.createObjectURL(d),this.setState({newAvatar:null,newAvatarMime:null}),d&&this.uploadAvatar(e,d,a,i)}handleAvatarCropCancel(){this.setState({newAvatar:null,newAvatarMime:null})}uploadAvatar(e,d,a,i){const o=e=>{let{mime:d,blob:a}=e;this.setState({imageUrl:URL.createObjectURL(a),buttonDisabled:!0}),a.size>4096?this.props.tinode.getLargeFileHelper().upload(a,"newacc").then(e=>this.setState({uploadUrl:e})).catch(e=>this.props.onError(e.message,"err")).finally(e=>this.setState({buttonDisabled:!1})):(0,u.Sk)(a).then(e=>this.setState({uploadUrl:(0,u.to)({data:e.bits,type:d})})).finally(e=>this.setState({buttonDisabled:!1}))};a>384||i>384||a!=i?(0,u.ag)(d,384,384,g.qy,!0).then(e=>o(e)).catch(e=>this.props.onError(e.message,"err")):o({mime:e,blob:d,width:a,height:i})}render(){if(this.state.newAvatar)return(0,C.jsxDEV)(t.A,{avatar:this.state.newAvatar,mime:this.state.newAvatarMime,onSubmit:this.handleAvatarCropped,onCancel:this.handleAvatarCropCancel,onError:this.props.onError},void 0,!1);let e="primary";return this.props.disabled&&(e+=" disabled"),(0,C.jsxDEV)("form",{className:"panel-form-column",onSubmit:this.handleSubmit,children:[(0,C.jsxDEV)("div",{className:"panel-form-row",children:[(0,C.jsxDEV)("div",{className:"umn",children:[(0,C.jsxDEV)(l.FormattedMessage,{id:"login_prompt",defaultMessage:"Login",description:"Placeholer for username/login",children:e=>(0,C.jsxDEV)("input",{type:"text",placeholder:e,autoComplete:"user-name",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0},void 0,!1)},void 0,!1),(0,C.jsxDEV)(l.FormattedMessage,{id:"password_prompt",defaultMessage:"Password",description:"Placeholder/prompt for entering password",children:e=>(0,C.jsxDEV)(r.A,{placeholder:e,autoComplete:"new-password",value:this.state.password,onFinished:this.handlePasswordChange,required:!0},void 0,!1)},void 0,!1)]},void 0,!0),(0,C.jsxDEV)(s.A,{tinode:this.props.tinode,avatar:this.state.imageUrl,onImageUpdated:this.handleImageChanged,onError:this.props.onError},void 0,!1)]},void 0,!0),(0,C.jsxDEV)("div",{className:"panel-form-row",children:(0,C.jsxDEV)(l.FormattedMessage,{id:"full_name_prompt",defaultMessage:"Full name, e.g. John Doe",description:"Input placeholder for person's full name",children:e=>(0,C.jsxDEV)("input",{type:"text",placeholder:e,autoComplete:"name",value:this.state.fn,onChange:this.handleFnChange,required:!0},void 0,!1)},void 0,!1)},void 0,!1),"email"==this.props.reqCredMethod?(0,C.jsxDEV)("div",{className:"panel-form-row",children:(0,C.jsxDEV)(l.FormattedMessage,{id:"email_prompt",defaultMessage:"Email, e.g. jdoe@example.com",description:"Input placeholder for email entry",children:e=>(0,C.jsxDEV)("input",{type:"email",placeholder:e,autoComplete:"email",value:this.state.email,onChange:this.handleEmailChange,required:!0},void 0,!1)},void 0,!1)},void 0,!1):"tel"==this.props.reqCredMethod?(0,C.jsxDEV)(C.Fragment,{children:[(0,C.jsxDEV)("div",{className:"panel-form-row",children:(0,C.jsxDEV)("label",{className:"small gray",children:(0,C.jsxDEV)(l.FormattedMessage,{id:"mobile_phone_number",defaultMessage:"Mobile phone number",description:"Prompt for entering a mobile phone number"},void 0,!1)},void 0,!1)},void 0,!1),(0,C.jsxDEV)("div",{className:"panel-form-row",children:(0,C.jsxDEV)(n.A,{autoFocus:!1,onShowCountrySelector:this.props.onShowCountrySelector,onSubmit:this.handlePhoneChange},void 0,!1)},void 0,!1)]},void 0,!0):null,(0,C.jsxDEV)("div",{className:"panel-form-row",children:[(0,C.jsxDEV)(c.A,{id:"save-token",name:"save-token",checked:this.state.saveToken,onChange:this.handleToggleSaveToken},void 0,!1),(0,C.jsxDEV)(l.FormattedMessage,{id:"stay_logged_in",defaultMessage:"Stay logged in",description:"Label for a checkbox",children:e=>(0,C.jsxDEV)("label",{htmlFor:"save-token",children:[" ",e]},void 0,!0)},void 0,!1)]},void 0,!0),(0,C.jsxDEV)("div",{className:"dialog-buttons",children:(0,C.jsxDEV)("button",{className:e,type:"submit",disabled:this.state.buttonDisabled,children:(0,C.jsxDEV)(l.FormattedMessage,{id:"button_sign_up",defaultMessage:"Sign up",description:"Create account button [Sign Up]"},void 0,!1)},void 0,!1)},void 0,!1)]},void 0,!0)}}},4956:function(e,d,a){var i=a(1594),o=a.n(i),l=a(8181),t=a(8892),s=a(4724),c=a(6187),n=a(4701),r=a(111),h=a(8589),u=a(5446);const p=(0,l.defineMessages)({mobile_number_required:{id:"mobile_number_required",defaultMessage:"Mobile phone number required",description:"Error message"}});class m extends o().PureComponent{constructor(e){super(e),this.codeMap={},r.forEach(e=>{this.codeMap[e.code]=e.dial});const d=e.countryCode||"US",a=this.codeMap[d];this.state={countryCode:d,dialCode:a,localNumber:"",placeholderNumber:this.placeholderNumber(d,a)},this.handleChange=this.handleChange.bind(this),this.handleFinished=this.handleFinished.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this),this.showCountrySelector=this.showCountrySelector.bind(this)}handleChange(e){const d=`+${this.state.dialCode}`;let a=(new s.Q).input(`${d}${this.filterNumber(e.target.value)}`);a=a.substring(d.length).trim(),this.setState({localNumber:a})}handleFinished(e){e.preventDefault();const d=`${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\d]/g,"");let a=null;try{a=(0,t.L)(`+${d}`)}catch(e){}a&&a.isValid()?(this.inputField.setCustomValidity(""),this.props.onSubmit(a.format("E.164"))):this.inputField.setCustomValidity(this.props.intl.formatMessage(p.mobile_number_required))}handleKeyDown(e){"Enter"===e.key&&this.handleFinished(e)}showCountrySelector(){this.props.onShowCountrySelector(this.state.countryCode,this.state.dialCode,(e,d)=>{this.setState({countryCode:e,dialCode:d,placeholderNumber:this.placeholderNumber(e,d)})})}filterNumber(e){return e?e.replace(/[^-\s().\d]/g,""):e}placeholderNumber(e,d){const a=(0,c.a)(e,n.A);return a?a.formatInternational().substring(d.length+1).trim():"123 0123"}render(){return(0,u.jsxDEV)(u.Fragment,{children:[(0,u.jsxDEV)("span",{className:"dial-code",onClick:this.showCountrySelector,children:[(0,u.jsxDEV)("span",{className:"country-flag",children:[(0,h.lb)(this.state.countryCode)," "]},void 0,!0),"+",this.state.dialCode," "]},void 0,!0),(0,u.jsxDEV)("input",{type:"tel",ref:e=>{this.inputField=e},placeholder:this.state.placeholderNumber,value:this.state.localNumber,onChange:this.handleChange,maxLength:17,onKeyDown:this.handleKeyDown,onBlur:this.handleFinished,required:!0,autoFocus:this.props.autoFocus},void 0,!1)]},void 0,!0)}}d.A=(0,l.injectIntl)(m)},111:function(e){e.exports=JSON.parse('[{"dial":"93","code":"AF"},{"dial":"355","code":"AL"},{"dial":"213","code":"DZ"},{"dial":"1-684","code":"AS"},{"dial":"376","code":"AD"},{"dial":"244","code":"AO"},{"dial":"1-264","code":"AI"},{"dial":"672","code":"AQ"},{"dial":"1-268","code":"AG"},{"dial":"54","code":"AR"},{"dial":"374","code":"AM"},{"dial":"297","code":"AW"},{"dial":"61","code":"AU"},{"dial":"43","code":"AT"},{"dial":"994","code":"AZ"},{"dial":"1-242","code":"BS"},{"dial":"973","code":"BH"},{"dial":"880","code":"BD"},{"dial":"1-246","code":"BB"},{"dial":"375","code":"BY"},{"dial":"32","code":"BE"},{"dial":"501","code":"BZ"},{"dial":"229","code":"BJ"},{"dial":"1-441","code":"BM"},{"dial":"975","code":"BT"},{"dial":"591","code":"BO"},{"dial":"387","code":"BA"},{"dial":"267","code":"BW"},{"dial":"55","code":"BR"},{"dial":"246","code":"IO"},{"dial":"1-284","code":"VG"},{"dial":"673","code":"BN"},{"dial":"359","code":"BG"},{"dial":"226","code":"BF"},{"dial":"257","code":"BI"},{"dial":"855","code":"KH"},{"dial":"237","code":"CM"},{"dial":"1","code":"CA"},{"dial":"238","code":"CV"},{"dial":"1-345","code":"KY"},{"dial":"236","code":"CF"},{"dial":"235","code":"TD"},{"dial":"56","code":"CL"},{"dial":"86","code":"CN"},{"dial":"61","code":"CX"},{"dial":"61","code":"CC"},{"dial":"57","code":"CO"},{"dial":"269","code":"KM"},{"dial":"682","code":"CK"},{"dial":"506","code":"CR"},{"dial":"385","code":"HR"},{"dial":"53","code":"CU"},{"dial":"599","code":"CW"},{"dial":"357","code":"CY"},{"dial":"420","code":"CZ"},{"dial":"243","code":"CD"},{"dial":"45","code":"DK"},{"dial":"253","code":"DJ"},{"dial":"1-767","code":"DM"},{"dial":"1-809, 1-829, 1-849","code":"DO"},{"dial":"670","code":"TL"},{"dial":"593","code":"EC"},{"dial":"20","code":"EG"},{"dial":"503","code":"SV"},{"dial":"240","code":"GQ"},{"dial":"291","code":"ER"},{"dial":"372","code":"EE"},{"dial":"251","code":"ET"},{"dial":"500","code":"FK"},{"dial":"298","code":"FO"},{"dial":"679","code":"FJ"},{"dial":"358","code":"FI"},{"dial":"33","code":"FR"},{"dial":"689","code":"PF"},{"dial":"241","code":"GA"},{"dial":"220","code":"GM"},{"dial":"995","code":"GE"},{"dial":"49","code":"DE"},{"dial":"233","code":"GH"},{"dial":"350","code":"GI"},{"dial":"30","code":"GR"},{"dial":"299","code":"GL"},{"dial":"1-473","code":"GD"},{"dial":"1-671","code":"GU"},{"dial":"502","code":"GT"},{"dial":"44-1481","code":"GG"},{"dial":"224","code":"GN"},{"dial":"245","code":"GW"},{"dial":"592","code":"GY"},{"dial":"509","code":"HT"},{"dial":"504","code":"HN"},{"dial":"852","code":"HK"},{"dial":"36","code":"HU"},{"dial":"354","code":"IS"},{"dial":"91","code":"IN"},{"dial":"62","code":"ID"},{"dial":"98","code":"IR"},{"dial":"964","code":"IQ"},{"dial":"353","code":"IE"},{"dial":"44-1624","code":"IM"},{"dial":"972","code":"IL"},{"dial":"39","code":"IT"},{"dial":"225","code":"CI"},{"dial":"1-876","code":"JM"},{"dial":"81","code":"JP"},{"dial":"44-1534","code":"JE"},{"dial":"962","code":"JO"},{"dial":"7, 997","code":"KZ"},{"dial":"254","code":"KE"},{"dial":"686","code":"KI"},{"dial":"383","code":"XK"},{"dial":"965","code":"KW"},{"dial":"996","code":"KG"},{"dial":"856","code":"LA"},{"dial":"371","code":"LV"},{"dial":"961","code":"LB"},{"dial":"266","code":"LS"},{"dial":"231","code":"LR"},{"dial":"218","code":"LY"},{"dial":"423","code":"LI"},{"dial":"370","code":"LT"},{"dial":"352","code":"LU"},{"dial":"853","code":"MO"},{"dial":"389","code":"MK"},{"dial":"261","code":"MG"},{"dial":"265","code":"MW"},{"dial":"60","code":"MY"},{"dial":"960","code":"MV"},{"dial":"223","code":"ML"},{"dial":"356","code":"MT"},{"dial":"692","code":"MH"},{"dial":"222","code":"MR"},{"dial":"230","code":"MU"},{"dial":"262","code":"YT"},{"dial":"52","code":"MX"},{"dial":"691","code":"FM"},{"dial":"373","code":"MD"},{"dial":"377","code":"MC"},{"dial":"976","code":"MN"},{"dial":"382","code":"ME"},{"dial":"1-664","code":"MS"},{"dial":"212","code":"MA"},{"dial":"258","code":"MZ"},{"dial":"95","code":"MM"},{"dial":"264","code":"NA"},{"dial":"674","code":"NR"},{"dial":"977","code":"NP"},{"dial":"31","code":"NL"},{"dial":"599","code":"CW"},{"dial":"687","code":"NC"},{"dial":"64","code":"NZ"},{"dial":"505","code":"NI"},{"dial":"227","code":"NE"},{"dial":"234","code":"NG"},{"dial":"683","code":"NU"},{"dial":"850","code":"KP"},{"dial":"1-670","code":"MP"},{"dial":"47","code":"NO"},{"dial":"968","code":"OM"},{"dial":"92","code":"PK"},{"dial":"680","code":"PW"},{"dial":"970","code":"PS"},{"dial":"507","code":"PA"},{"dial":"675","code":"PG"},{"dial":"595","code":"PY"},{"dial":"51","code":"PE"},{"dial":"63","code":"PH"},{"dial":"64","code":"PN"},{"dial":"48","code":"PL"},{"dial":"351","code":"PT"},{"dial":"1-787, 1-939","code":"PR"},{"dial":"974","code":"QA"},{"dial":"242","code":"CG"},{"dial":"262","code":"RE"},{"dial":"40","code":"RO"},{"dial":"7","code":"RU"},{"dial":"250","code":"RW"},{"dial":"590","code":"BL"},{"dial":"290","code":"SH"},{"dial":"1-869","code":"KN"},{"dial":"1-758","code":"LC"},{"dial":"590","code":"MF"},{"dial":"508","code":"PM"},{"dial":"1-784","code":"VC"},{"dial":"685","code":"WS"},{"dial":"378","code":"SM"},{"dial":"239","code":"ST"},{"dial":"966","code":"SA"},{"dial":"221","code":"SN"},{"dial":"381","code":"RS"},{"dial":"248","code":"SC"},{"dial":"232","code":"SL"},{"dial":"65","code":"SG"},{"dial":"1-721","code":"SX"},{"dial":"421","code":"SK"},{"dial":"386","code":"SI"},{"dial":"677","code":"SB"},{"dial":"252","code":"SO"},{"dial":"27","code":"ZA"},{"dial":"82","code":"KR"},{"dial":"211","code":"SS"},{"dial":"34","code":"ES"},{"dial":"94","code":"LK"},{"dial":"249","code":"SD"},{"dial":"597","code":"SR"},{"dial":"47","code":"SJ"},{"dial":"268","code":"SZ"},{"dial":"46","code":"SE"},{"dial":"41","code":"CH"},{"dial":"963","code":"SY"},{"dial":"886","code":"TW"},{"dial":"992","code":"TJ"},{"dial":"255","code":"TZ"},{"dial":"66","code":"TH"},{"dial":"228","code":"TG"},{"dial":"690","code":"TK"},{"dial":"676","code":"TO"},{"dial":"1-868","code":"TT"},{"dial":"216","code":"TN"},{"dial":"90","code":"TR"},{"dial":"993","code":"TM"},{"dial":"1-649","code":"TC"},{"dial":"688","code":"TV"},{"dial":"1-340","code":"VI"},{"dial":"256","code":"UG"},{"dial":"380","code":"UA"},{"dial":"971","code":"AE"},{"dial":"44","code":"GB"},{"dial":"1","code":"US"},{"dial":"598","code":"UY"},{"dial":"998","code":"UZ"},{"dial":"678","code":"VU"},{"dial":"379","code":"VA"},{"dial":"58","code":"VE"},{"dial":"84","code":"VN"},{"dial":"681","code":"WF"},{"dial":"212","code":"EH"},{"dial":"967","code":"YE"},{"dial":"260","code":"ZM"},{"dial":"263","code":"ZW"}]')}}]);
//# sourceMappingURL=996.prod.js.map
\ No newline at end of file
diff --git a/umd/996.prod.js.map b/umd/996.prod.js.map
index f68b1676..fe253448 100644
--- a/umd/996.prod.js.map
+++ b/umd/996.prod.js.map
@@ -1 +1 @@
-{"version":3,"file":"996.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./src/views/create-account-view.jsx","webpack://tinode-webapp/./src/widgets/phone-edit.jsx"],"sourcesContent":["// Account registration.\nimport React, { Suspense } from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport AvatarCrop from '../widgets/avatar-crop.jsx';\nimport AvatarUpload from '../widgets/avatar-upload.jsx';\nimport CheckBox from '../widgets/checkbox.jsx';\nimport PhoneEdit from '../widgets/phone-edit.jsx';\nimport VisiblePassword from '../widgets/visible-password.jsx';\n\nimport LocalStorageUtil from '../lib/local-storage.js';\nimport { imageScaled, blobToBase64, makeImageUrl } from '../lib/blob-helpers.js';\nimport { theCard } from '../lib/utils.js';\nimport { truncateString } from '../lib/strformat.js';\n\nimport { AVATAR_SIZE, MAX_AVATAR_BYTES, MAX_EXTERN_ATTACHMENT_SIZE,\n MAX_TITLE_LENGTH } from '../config.js';\n\nexport default class CreateAccountView extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n login: '',\n password: '',\n meth: '',\n email: '',\n tel: '',\n fn: '', // full/formatted name\n imageUrl: null,\n uploadUrl: null,\n newAvatar: null,\n newAvatarMime: null,\n buttonDisabled: false,\n saveToken: LocalStorageUtil.getObject('keep-logged-in')\n };\n\n this.handleLoginChange = this.handleLoginChange.bind(this);\n this.handlePasswordChange = this.handlePasswordChange.bind(this);\n this.handleEmailChange = this.handleEmailChange.bind(this);\n this.handlePhoneChange = this.handlePhoneChange.bind(this);\n this.handleFnChange = this.handleFnChange.bind(this);\n this.handleImageChanged = this.handleImageChanged.bind(this);\n this.handleToggleSaveToken = this.handleToggleSaveToken.bind(this);\n this.handleAvatarCropped = this.handleAvatarCropped.bind(this);\n this.handleAvatarCropCancel = this.handleAvatarCropCancel.bind(this);\n this.uploadAvatar = this.uploadAvatar.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n\n // Connection will trigger change by changing the this.props.serverVersion.\n props.tinode.connect()\n .catch(err => {\n this.props.onError(err.message, 'err');\n });\n }\n\n handleLoginChange(e) {\n this.setState({login: e.target.value});\n }\n\n handlePasswordChange(password) {\n this.setState({password: password});\n }\n\n handleEmailChange(e) {\n this.setState({meth: 'email', email: e.target.value});\n }\n\n handlePhoneChange(number) {\n this.setState({meth: 'tel', tel: number});\n }\n\n handleFnChange(e) {\n this.setState({fn: e.target.value});\n }\n\n handleImageChanged(mime, img) {\n this.setState({newAvatar: img, newAvatarMime: mime});\n if (!img) {\n // User cleared the image.\n this.setState({imageUrl: null, uploadUrl: null});\n }\n }\n\n handleToggleSaveToken() {\n LocalStorageUtil.setObject('keep-logged-in', !this.state.saveToken);\n this.setState({saveToken: !this.state.saveToken});\n }\n\n handleSubmit(e) {\n e.preventDefault();\n this.props.onCreateAccount(\n this.state.login.trim(),\n this.state.password.trim(),\n theCard(truncateString(this.state.fn.trim(), MAX_TITLE_LENGTH), this.state.uploadUrl),\n {\n 'meth': this.state.meth,\n 'val': this.state.meth == 'email' ?\n this.state.email :\n this.state.meth == 'tel' ? this.state.tel : null\n }\n );\n }\n\n // AvatarCropView calls this method when the user has cropped the image.\n handleAvatarCropped(mime, blob, width, height) {\n const url = blob ? URL.createObjectURL(blob) : null;\n this.setState({newAvatar: null, newAvatarMime: null});\n if (blob) {\n this.uploadAvatar(mime, blob, width, height);\n }\n }\n\n handleAvatarCropCancel() {\n this.setState({newAvatar: null, newAvatarMime: null});\n }\n\n // Utility method for converting cropped avatar blob to bytes for sending inband or\n // for uploading it to the server out of band.\n uploadAvatar(mime, blob, width, height) {\n const readyToUpload = image => {\n let {mime, blob} = image;\n this.setState({imageUrl: URL.createObjectURL(blob), buttonDisabled: true});\n if (blob.size > MAX_AVATAR_BYTES) {\n // Too large to send inband - uploading out of band and sending as a link.\n const uploader = this.props.tinode.getLargeFileHelper();\n uploader.upload(blob, 'newacc')\n .then(url => this.setState({uploadUrl: url}))\n .catch(err => this.props.onError(err.message, 'err'))\n .finally(_ => this.setState({buttonDisabled: false}));\n } else {\n // Convert blob to base64-encoded bits.\n blobToBase64(blob)\n .then(b64 => this.setState({uploadUrl: makeImageUrl({data: b64.bits, type: mime})}))\n .finally(_ => this.setState({buttonDisabled: false}));\n }\n };\n\n if (width > AVATAR_SIZE || height > AVATAR_SIZE || width != height) {\n // Avatar is not square or too large even after cropping. Shrink it and make square.\n imageScaled(blob, AVATAR_SIZE, AVATAR_SIZE, MAX_EXTERN_ATTACHMENT_SIZE, true)\n .then(scaled => readyToUpload(scaled))\n .catch(err => this.props.onError(err.message, 'err'));\n } else {\n readyToUpload({mime: mime, blob: blob, width: width, height: height});\n }\n }\n\n render() {\n if (this.state.newAvatar) {\n return (\n \n );\n }\n\n let submitClasses = 'primary';\n if (this.props.disabled) {\n submitClasses += ' disabled';\n }\n\n return (\n \n );\n }\n};\n","// Editor for a phone number.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { AsYouType, getExampleNumber, parsePhoneNumber } from 'libphonenumber-js/mobile';\nimport examples from 'libphonenumber-js/mobile/examples'\n\nimport * as dcodes from '../dcodes.json';\nimport { flagEmoji } from '../lib/strformat';\n\nconst messages = defineMessages({\n mobile_number_required: {\n id: 'mobile_number_required',\n defaultMessage: 'Mobile phone number required',\n description: 'Error message'\n }\n});\n\nclass PhoneEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.codeMap = {};\n dcodes.default.forEach(dc => { this.codeMap[dc.code] = dc.dial; });\n\n const code = props.countryCode || 'US';\n const dial = this.codeMap[code];\n\n this.state = {\n countryCode: code,\n dialCode: dial,\n localNumber: '',\n placeholderNumber: this.placeholderNumber(code, dial)\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.handleFinished = this.handleFinished.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.showCountrySelector = this.showCountrySelector.bind(this);\n }\n\n handleChange(e) {\n const prefix = `+${this.state.dialCode}`;\n let formatted = new AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n formatted = formatted.substring(prefix.length).trim();\n this.setState({localNumber: formatted});\n }\n\n handleFinished(e) {\n e.preventDefault();\n const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\\d]/g, '');\n let number = null;\n try {\n number = parsePhoneNumber(`+${raw}`);\n } catch (err) {}\n\n if (!number || !number.isValid()) {\n this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n return;\n }\n\n this.inputField.setCustomValidity('');\n this.props.onSubmit(number.format('E.164'));\n }\n\n\n handleKeyDown(e) {\n if (e.key === 'Enter') {\n this.handleFinished(e);\n }\n }\n\n showCountrySelector() {\n this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode,\n (code, dial) => {\n this.setState({\n countryCode: code,\n dialCode: dial,\n placeholderNumber: this.placeholderNumber(code, dial)\n })\n });\n }\n\n // Filter out characters not permitted in a phone number.\n filterNumber(number) {\n if (!number) {\n return number;\n }\n // Leave numbers, space, (, ), -, and .\n // The + is not allowed: it's handled by the country code portion.\n return number.replace(/[^-\\s().\\d]/g, '');\n }\n\n placeholderNumber(code, dial) {\n const sample = getExampleNumber(code, examples);\n return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n }\n\n render() {\n return (\n <>\n \n {flagEmoji(this.state.countryCode)} \n +{this.state.dialCode} \n {this.inputField = ref}} placeholder={this.state.placeholderNumber}\n value={this.state.localNumber} onChange={this.handleChange}\n maxLength={17} onKeyDown={this.handleKeyDown} onBlur={this.handleFinished}\n required autoFocus={this.props.autoFocus} />\n >\n );\n }\n}\n\nexport default injectIntl(PhoneEdit);\n"],"names":["CreateAccountView","React","constructor","props","super","this","state","login","password","meth","email","tel","fn","imageUrl","uploadUrl","newAvatar","newAvatarMime","buttonDisabled","saveToken","LocalStorageUtil","getObject","handleLoginChange","bind","handlePasswordChange","handleEmailChange","handlePhoneChange","handleFnChange","handleImageChanged","handleToggleSaveToken","handleAvatarCropped","handleAvatarCropCancel","uploadAvatar","handleSubmit","tinode","connect","catch","err","onError","message","e","setState","target","value","number","mime","img","setObject","preventDefault","onCreateAccount","trim","theCard","truncateString","MAX_TITLE_LENGTH","blob","width","height","URL","createObjectURL","readyToUpload","image","size","MAX_AVATAR_BYTES","getLargeFileHelper","upload","then","url","finally","_","blobToBase64","b64","makeImageUrl","data","bits","type","AVATAR_SIZE","imageScaled","MAX_EXTERN_ATTACHMENT_SIZE","scaled","render","AvatarCrop","avatar","onSubmit","onCancel","submitClasses","disabled","className","FormattedMessage","id","defaultMessage","login_prompt","placeholder","autoComplete","onChange","required","autoFocus","password_prompt","VisiblePassword","onFinished","AvatarUpload","onImageUpdated","full_name_prompt","reqCredMethod","email_prompt","PhoneEdit","onShowCountrySelector","CheckBox","name","checked","stay_logged_in","htmlFor","messages","defineMessages","mobile_number_required","codeMap","dcodes","forEach","dc","code","dial","countryCode","dialCode","localNumber","placeholderNumber","handleChange","handleFinished","handleKeyDown","showCountrySelector","prefix","formatted","AsYouType","input","filterNumber","substring","length","raw","replace","parsePhoneNumber","isValid","inputField","setCustomValidity","format","intl","formatMessage","key","sample","getExampleNumber","examples","formatInternational","onClick","flagEmoji","ref","maxLength","onKeyDown","onBlur","injectIntl"],"ignoreList":[],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"996.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./src/views/create-account-view.jsx","webpack://tinode-webapp/./src/widgets/phone-edit.jsx"],"sourcesContent":["// Account registration.\nimport React, { Suspense } from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport AvatarCrop from '../widgets/avatar-crop.jsx';\nimport AvatarUpload from '../widgets/avatar-upload.jsx';\nimport CheckBox from '../widgets/checkbox.jsx';\nimport PhoneEdit from '../widgets/phone-edit.jsx';\nimport VisiblePassword from '../widgets/visible-password.jsx';\n\nimport LocalStorageUtil from '../lib/local-storage.js';\nimport { imageScaled, blobToBase64, makeImageUrl } from '../lib/blob-helpers.js';\nimport { theCard } from '../lib/utils.js';\nimport { truncateString } from '../lib/strformat.js';\n\nimport { AVATAR_SIZE, MAX_AVATAR_BYTES, MAX_EXTERN_ATTACHMENT_SIZE,\n MAX_TITLE_LENGTH } from '../config.js';\n\nexport default class CreateAccountView extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n login: '',\n password: '',\n meth: '',\n email: '',\n tel: '',\n fn: '', // full/formatted name\n imageUrl: null,\n uploadUrl: null,\n newAvatar: null,\n newAvatarMime: null,\n buttonDisabled: false,\n saveToken: LocalStorageUtil.getObject('keep-logged-in')\n };\n\n this.handleLoginChange = this.handleLoginChange.bind(this);\n this.handlePasswordChange = this.handlePasswordChange.bind(this);\n this.handleEmailChange = this.handleEmailChange.bind(this);\n this.handlePhoneChange = this.handlePhoneChange.bind(this);\n this.handleFnChange = this.handleFnChange.bind(this);\n this.handleImageChanged = this.handleImageChanged.bind(this);\n this.handleToggleSaveToken = this.handleToggleSaveToken.bind(this);\n this.handleAvatarCropped = this.handleAvatarCropped.bind(this);\n this.handleAvatarCropCancel = this.handleAvatarCropCancel.bind(this);\n this.uploadAvatar = this.uploadAvatar.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n\n // Connection will trigger change by changing the this.props.serverVersion.\n props.tinode.connect()\n .catch(err => {\n this.props.onError(err.message, 'err');\n });\n }\n\n handleLoginChange(e) {\n this.setState({login: e.target.value});\n }\n\n handlePasswordChange(password) {\n this.setState({password: password});\n }\n\n handleEmailChange(e) {\n this.setState({meth: 'email', email: e.target.value});\n }\n\n handlePhoneChange(number) {\n this.setState({meth: 'tel', tel: number});\n }\n\n handleFnChange(e) {\n this.setState({fn: e.target.value});\n }\n\n handleImageChanged(mime, img) {\n this.setState({newAvatar: img, newAvatarMime: mime});\n if (!img) {\n // User cleared the image.\n this.setState({imageUrl: null, uploadUrl: null});\n }\n }\n\n handleToggleSaveToken() {\n LocalStorageUtil.setObject('keep-logged-in', !this.state.saveToken);\n this.setState({saveToken: !this.state.saveToken});\n }\n\n handleSubmit(e) {\n e.preventDefault();\n this.props.onCreateAccount(\n this.state.login.trim(),\n this.state.password.trim(),\n theCard(truncateString(this.state.fn.trim(), MAX_TITLE_LENGTH), this.state.uploadUrl),\n {\n 'meth': this.state.meth,\n 'val': this.state.meth == 'email' ?\n this.state.email :\n this.state.meth == 'tel' ? this.state.tel : null\n }\n );\n }\n\n // AvatarCropView calls this method when the user has cropped the image.\n handleAvatarCropped(mime, blob, width, height) {\n const url = blob ? URL.createObjectURL(blob) : null;\n this.setState({newAvatar: null, newAvatarMime: null});\n if (blob) {\n this.uploadAvatar(mime, blob, width, height);\n }\n }\n\n handleAvatarCropCancel() {\n this.setState({newAvatar: null, newAvatarMime: null});\n }\n\n // Utility method for converting cropped avatar blob to bytes for sending inband or\n // for uploading it to the server out of band.\n uploadAvatar(mime, blob, width, height) {\n const readyToUpload = image => {\n let {mime, blob} = image;\n this.setState({imageUrl: URL.createObjectURL(blob), buttonDisabled: true});\n if (blob.size > MAX_AVATAR_BYTES) {\n // Too large to send inband - uploading out of band and sending as a link.\n const uploader = this.props.tinode.getLargeFileHelper();\n uploader.upload(blob, 'newacc')\n .then(url => this.setState({uploadUrl: url}))\n .catch(err => this.props.onError(err.message, 'err'))\n .finally(_ => this.setState({buttonDisabled: false}));\n } else {\n // Convert blob to base64-encoded bits.\n blobToBase64(blob)\n .then(b64 => this.setState({uploadUrl: makeImageUrl({data: b64.bits, type: mime})}))\n .finally(_ => this.setState({buttonDisabled: false}));\n }\n };\n\n if (width > AVATAR_SIZE || height > AVATAR_SIZE || width != height) {\n // Avatar is not square or too large even after cropping. Shrink it and make square.\n imageScaled(blob, AVATAR_SIZE, AVATAR_SIZE, MAX_EXTERN_ATTACHMENT_SIZE, true)\n .then(scaled => readyToUpload(scaled))\n .catch(err => this.props.onError(err.message, 'err'));\n } else {\n readyToUpload({mime: mime, blob: blob, width: width, height: height});\n }\n }\n\n render() {\n if (this.state.newAvatar) {\n return (\n \n );\n }\n\n let submitClasses = 'primary';\n if (this.props.disabled) {\n submitClasses += ' disabled';\n }\n\n return (\n \n );\n }\n};\n","// Editor for a phone number.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { AsYouType, getExampleNumber, parsePhoneNumber } from 'libphonenumber-js/mobile';\nimport examples from 'libphonenumber-js/mobile/examples'\n\nimport * as dcodes from '../dcodes.json';\nimport { flagEmoji } from '../lib/strformat';\n\nconst messages = defineMessages({\n mobile_number_required: {\n id: 'mobile_number_required',\n defaultMessage: 'Mobile phone number required',\n description: 'Error message'\n }\n});\n\nclass PhoneEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.codeMap = {};\n dcodes.default.forEach(dc => { this.codeMap[dc.code] = dc.dial; });\n\n const code = props.countryCode || 'US';\n const dial = this.codeMap[code];\n\n this.state = {\n countryCode: code,\n dialCode: dial,\n localNumber: '',\n placeholderNumber: this.placeholderNumber(code, dial)\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.handleFinished = this.handleFinished.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.showCountrySelector = this.showCountrySelector.bind(this);\n }\n\n handleChange(e) {\n const prefix = `+${this.state.dialCode}`;\n let formatted = new AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n formatted = formatted.substring(prefix.length).trim();\n this.setState({localNumber: formatted});\n }\n\n handleFinished(e) {\n e.preventDefault();\n const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\\d]/g, '');\n let number = null;\n try {\n number = parsePhoneNumber(`+${raw}`);\n } catch (err) {}\n\n if (!number || !number.isValid()) {\n this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n return;\n }\n\n this.inputField.setCustomValidity('');\n this.props.onSubmit(number.format('E.164'));\n }\n\n\n handleKeyDown(e) {\n if (e.key === 'Enter') {\n this.handleFinished(e);\n }\n }\n\n showCountrySelector() {\n this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode,\n (code, dial) => {\n this.setState({\n countryCode: code,\n dialCode: dial,\n placeholderNumber: this.placeholderNumber(code, dial)\n })\n });\n }\n\n // Filter out characters not permitted in a phone number.\n filterNumber(number) {\n if (!number) {\n return number;\n }\n // Leave numbers, space, (, ), -, and .\n // The + is not allowed: it's handled by the country code portion.\n return number.replace(/[^-\\s().\\d]/g, '');\n }\n\n placeholderNumber(code, dial) {\n const sample = getExampleNumber(code, examples);\n return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n }\n\n render() {\n return (\n <>\n \n {flagEmoji(this.state.countryCode)} \n +{this.state.dialCode} \n {this.inputField = ref}} placeholder={this.state.placeholderNumber}\n value={this.state.localNumber} onChange={this.handleChange}\n maxLength={17} onKeyDown={this.handleKeyDown} onBlur={this.handleFinished}\n required autoFocus={this.props.autoFocus} />\n >\n );\n }\n}\n\nexport default injectIntl(PhoneEdit);\n"],"names":["CreateAccountView","react__WEBPACK_IMPORTED_MODULE_0___default","constructor","props","super","this","state","login","password","meth","email","tel","fn","imageUrl","uploadUrl","newAvatar","newAvatarMime","buttonDisabled","saveToken","_lib_local_storage_js__WEBPACK_IMPORTED_MODULE_7__","A","getObject","handleLoginChange","bind","handlePasswordChange","handleEmailChange","handlePhoneChange","handleFnChange","handleImageChanged","handleToggleSaveToken","handleAvatarCropped","handleAvatarCropCancel","uploadAvatar","handleSubmit","tinode","connect","catch","err","onError","message","e","setState","target","value","number","mime","img","setObject","preventDefault","onCreateAccount","trim","_lib_utils_js__WEBPACK_IMPORTED_MODULE_9__","k6","_lib_strformat_js__WEBPACK_IMPORTED_MODULE_10__","W5","val","blob","width","height","URL","createObjectURL","readyToUpload","image","size","getLargeFileHelper","upload","then","url","finally","_","_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__","Sk","b64","to","data","bits","type","ag","_config_js__WEBPACK_IMPORTED_MODULE_11__","qy","scaled","render","react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_12__","jsxDEV","_widgets_avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_2__","avatar","onSubmit","onCancel","submitClasses","disabled","className","children","react_intl__WEBPACK_IMPORTED_MODULE_1__","FormattedMessage","id","defaultMessage","description","login_prompt","placeholder","autoComplete","onChange","required","autoFocus","password_prompt","_widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_6__","onFinished","_widgets_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__","onImageUpdated","full_name_prompt","reqCredMethod","email_prompt","Fragment","_widgets_phone_edit_jsx__WEBPACK_IMPORTED_MODULE_5__","onShowCountrySelector","_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_4__","name","checked","stay_logged_in","htmlFor","messages","defineMessages","mobile_number_required","PhoneEdit","codeMap","_dcodes_json__WEBPACK_IMPORTED_MODULE_6__","forEach","dc","code","dial","countryCode","dialCode","localNumber","placeholderNumber","handleChange","handleFinished","handleKeyDown","showCountrySelector","prefix","formatted","libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_3__","Q","input","filterNumber","substring","length","raw","replace","libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_2__","L","isValid","inputField","setCustomValidity","format","intl","formatMessage","key","sample","libphonenumber_js_mobile__WEBPACK_IMPORTED_MODULE_4__","a","libphonenumber_js_mobile_examples__WEBPACK_IMPORTED_MODULE_5__","formatInternational","react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_8__","onClick","_lib_strformat__WEBPACK_IMPORTED_MODULE_7__","lb","ref","maxLength","onKeyDown","onBlur","__webpack_exports__","injectIntl"],"sourceRoot":""}
\ No newline at end of file
diff --git a/umd/index.dev.js b/umd/index.dev.js
index 23654e27..a726219d 100644
--- a/umd/index.dev.js
+++ b/umd/index.dev.js
@@ -2,13 +2,14002 @@
/******/ "use strict";
/******/ var __webpack_modules__ = ({
-/***/ "./img/bkg/index.json":
+/***/ "./node_modules/@firebase/util/dist/index.esm2017.js":
+/*!***********************************************************!*\
+ !*** ./node_modules/@firebase/util/dist/index.esm2017.js ***!
+ \***********************************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ CONSTANTS: function() { return /* binding */ CONSTANTS; },
+/* harmony export */ DecodeBase64StringError: function() { return /* binding */ DecodeBase64StringError; },
+/* harmony export */ Deferred: function() { return /* binding */ Deferred; },
+/* harmony export */ ErrorFactory: function() { return /* binding */ ErrorFactory; },
+/* harmony export */ FirebaseError: function() { return /* binding */ FirebaseError; },
+/* harmony export */ MAX_VALUE_MILLIS: function() { return /* binding */ MAX_VALUE_MILLIS; },
+/* harmony export */ RANDOM_FACTOR: function() { return /* binding */ RANDOM_FACTOR; },
+/* harmony export */ Sha1: function() { return /* binding */ Sha1; },
+/* harmony export */ areCookiesEnabled: function() { return /* binding */ areCookiesEnabled; },
+/* harmony export */ assert: function() { return /* binding */ assert; },
+/* harmony export */ assertionError: function() { return /* binding */ assertionError; },
+/* harmony export */ async: function() { return /* binding */ async; },
+/* harmony export */ base64: function() { return /* binding */ base64; },
+/* harmony export */ base64Decode: function() { return /* binding */ base64Decode; },
+/* harmony export */ base64Encode: function() { return /* binding */ base64Encode; },
+/* harmony export */ base64urlEncodeWithoutPadding: function() { return /* binding */ base64urlEncodeWithoutPadding; },
+/* harmony export */ calculateBackoffMillis: function() { return /* binding */ calculateBackoffMillis; },
+/* harmony export */ contains: function() { return /* binding */ contains; },
+/* harmony export */ createMockUserToken: function() { return /* binding */ createMockUserToken; },
+/* harmony export */ createSubscribe: function() { return /* binding */ createSubscribe; },
+/* harmony export */ decode: function() { return /* binding */ decode; },
+/* harmony export */ deepCopy: function() { return /* binding */ deepCopy; },
+/* harmony export */ deepEqual: function() { return /* binding */ deepEqual; },
+/* harmony export */ deepExtend: function() { return /* binding */ deepExtend; },
+/* harmony export */ errorPrefix: function() { return /* binding */ errorPrefix; },
+/* harmony export */ extractQuerystring: function() { return /* binding */ extractQuerystring; },
+/* harmony export */ getDefaultAppConfig: function() { return /* binding */ getDefaultAppConfig; },
+/* harmony export */ getDefaultEmulatorHost: function() { return /* binding */ getDefaultEmulatorHost; },
+/* harmony export */ getDefaultEmulatorHostnameAndPort: function() { return /* binding */ getDefaultEmulatorHostnameAndPort; },
+/* harmony export */ getDefaults: function() { return /* binding */ getDefaults; },
+/* harmony export */ getExperimentalSetting: function() { return /* binding */ getExperimentalSetting; },
+/* harmony export */ getGlobal: function() { return /* binding */ getGlobal; },
+/* harmony export */ getModularInstance: function() { return /* binding */ getModularInstance; },
+/* harmony export */ getUA: function() { return /* binding */ getUA; },
+/* harmony export */ isAdmin: function() { return /* binding */ isAdmin; },
+/* harmony export */ isBrowser: function() { return /* binding */ isBrowser; },
+/* harmony export */ isBrowserExtension: function() { return /* binding */ isBrowserExtension; },
+/* harmony export */ isCloudWorkstation: function() { return /* binding */ isCloudWorkstation; },
+/* harmony export */ isCloudflareWorker: function() { return /* binding */ isCloudflareWorker; },
+/* harmony export */ isElectron: function() { return /* binding */ isElectron; },
+/* harmony export */ isEmpty: function() { return /* binding */ isEmpty; },
+/* harmony export */ isIE: function() { return /* binding */ isIE; },
+/* harmony export */ isIndexedDBAvailable: function() { return /* binding */ isIndexedDBAvailable; },
+/* harmony export */ isMobileCordova: function() { return /* binding */ isMobileCordova; },
+/* harmony export */ isNode: function() { return /* binding */ isNode; },
+/* harmony export */ isNodeSdk: function() { return /* binding */ isNodeSdk; },
+/* harmony export */ isReactNative: function() { return /* binding */ isReactNative; },
+/* harmony export */ isSafari: function() { return /* binding */ isSafari; },
+/* harmony export */ isSafariOrWebkit: function() { return /* binding */ isSafariOrWebkit; },
+/* harmony export */ isUWP: function() { return /* binding */ isUWP; },
+/* harmony export */ isValidFormat: function() { return /* binding */ isValidFormat; },
+/* harmony export */ isValidTimestamp: function() { return /* binding */ isValidTimestamp; },
+/* harmony export */ isWebWorker: function() { return /* binding */ isWebWorker; },
+/* harmony export */ issuedAtTime: function() { return /* binding */ issuedAtTime; },
+/* harmony export */ jsonEval: function() { return /* binding */ jsonEval; },
+/* harmony export */ map: function() { return /* binding */ map; },
+/* harmony export */ ordinal: function() { return /* binding */ ordinal; },
+/* harmony export */ pingServer: function() { return /* binding */ pingServer; },
+/* harmony export */ promiseWithTimeout: function() { return /* binding */ promiseWithTimeout; },
+/* harmony export */ querystring: function() { return /* binding */ querystring; },
+/* harmony export */ querystringDecode: function() { return /* binding */ querystringDecode; },
+/* harmony export */ safeGet: function() { return /* binding */ safeGet; },
+/* harmony export */ stringLength: function() { return /* binding */ stringLength; },
+/* harmony export */ stringToByteArray: function() { return /* binding */ stringToByteArray; },
+/* harmony export */ stringify: function() { return /* binding */ stringify; },
+/* harmony export */ updateEmulatorBanner: function() { return /* binding */ updateEmulatorBanner; },
+/* harmony export */ validateArgCount: function() { return /* binding */ validateArgCount; },
+/* harmony export */ validateCallback: function() { return /* binding */ validateCallback; },
+/* harmony export */ validateContextObject: function() { return /* binding */ validateContextObject; },
+/* harmony export */ validateIndexedDBOpenable: function() { return /* binding */ validateIndexedDBOpenable; },
+/* harmony export */ validateNamespace: function() { return /* binding */ validateNamespace; }
+/* harmony export */ });
+/* harmony import */ var _postinstall_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./postinstall.mjs */ "./node_modules/@firebase/util/dist/postinstall.mjs");
+
+
+/**
+ * @license
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * @fileoverview Firebase constants. Some of these (@defines) can be overridden at compile-time.
+ */
+const CONSTANTS = {
+ /**
+ * @define {boolean} Whether this is the client Node.js SDK.
+ */
+ NODE_CLIENT: false,
+ /**
+ * @define {boolean} Whether this is the Admin Node.js SDK.
+ */
+ NODE_ADMIN: false,
+ /**
+ * Firebase SDK Version
+ */
+ SDK_VERSION: '${JSCORE_VERSION}'
+};
+
+/**
+ * @license
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Throws an error if the provided assertion is falsy
+ */
+const assert = function (assertion, message) {
+ if (!assertion) {
+ throw assertionError(message);
+ }
+};
+/**
+ * Returns an Error object suitable for throwing.
+ */
+const assertionError = function (message) {
+ return new Error('Firebase Database (' +
+ CONSTANTS.SDK_VERSION +
+ ') INTERNAL ASSERT FAILED: ' +
+ message);
+};
+
+/**
+ * @license
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+const stringToByteArray$1 = function (str) {
+ // TODO(user): Use native implementations if/when available
+ const out = [];
+ let p = 0;
+ for (let i = 0; i < str.length; i++) {
+ let c = str.charCodeAt(i);
+ if (c < 128) {
+ out[p++] = c;
+ }
+ else if (c < 2048) {
+ out[p++] = (c >> 6) | 192;
+ out[p++] = (c & 63) | 128;
+ }
+ else if ((c & 0xfc00) === 0xd800 &&
+ i + 1 < str.length &&
+ (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {
+ // Surrogate Pair
+ c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);
+ out[p++] = (c >> 18) | 240;
+ out[p++] = ((c >> 12) & 63) | 128;
+ out[p++] = ((c >> 6) & 63) | 128;
+ out[p++] = (c & 63) | 128;
+ }
+ else {
+ out[p++] = (c >> 12) | 224;
+ out[p++] = ((c >> 6) & 63) | 128;
+ out[p++] = (c & 63) | 128;
+ }
+ }
+ return out;
+};
+/**
+ * Turns an array of numbers into the string given by the concatenation of the
+ * characters to which the numbers correspond.
+ * @param bytes Array of numbers representing characters.
+ * @return Stringification of the array.
+ */
+const byteArrayToString = function (bytes) {
+ // TODO(user): Use native implementations if/when available
+ const out = [];
+ let pos = 0, c = 0;
+ while (pos < bytes.length) {
+ const c1 = bytes[pos++];
+ if (c1 < 128) {
+ out[c++] = String.fromCharCode(c1);
+ }
+ else if (c1 > 191 && c1 < 224) {
+ const c2 = bytes[pos++];
+ out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
+ }
+ else if (c1 > 239 && c1 < 365) {
+ // Surrogate Pair
+ const c2 = bytes[pos++];
+ const c3 = bytes[pos++];
+ const c4 = bytes[pos++];
+ const u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -
+ 0x10000;
+ out[c++] = String.fromCharCode(0xd800 + (u >> 10));
+ out[c++] = String.fromCharCode(0xdc00 + (u & 1023));
+ }
+ else {
+ const c2 = bytes[pos++];
+ const c3 = bytes[pos++];
+ out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+ }
+ }
+ return out.join('');
+};
+// We define it as an object literal instead of a class because a class compiled down to es5 can't
+// be treeshaked. https://github.com/rollup/rollup/issues/1691
+// Static lookup maps, lazily populated by init_()
+// TODO(dlarocque): Define this as a class, since we no longer target ES5.
+const base64 = {
+ /**
+ * Maps bytes to characters.
+ */
+ byteToCharMap_: null,
+ /**
+ * Maps characters to bytes.
+ */
+ charToByteMap_: null,
+ /**
+ * Maps bytes to websafe characters.
+ * @private
+ */
+ byteToCharMapWebSafe_: null,
+ /**
+ * Maps websafe characters to bytes.
+ * @private
+ */
+ charToByteMapWebSafe_: null,
+ /**
+ * Our default alphabet, shared between
+ * ENCODED_VALS and ENCODED_VALS_WEBSAFE
+ */
+ ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',
+ /**
+ * Our default alphabet. Value 64 (=) is special; it means "nothing."
+ */
+ get ENCODED_VALS() {
+ return this.ENCODED_VALS_BASE + '+/=';
+ },
+ /**
+ * Our websafe alphabet.
+ */
+ get ENCODED_VALS_WEBSAFE() {
+ return this.ENCODED_VALS_BASE + '-_.';
+ },
+ /**
+ * Whether this browser supports the atob and btoa functions. This extension
+ * started at Mozilla but is now implemented by many browsers. We use the
+ * ASSUME_* variables to avoid pulling in the full useragent detection library
+ * but still allowing the standard per-browser compilations.
+ *
+ */
+ HAS_NATIVE_SUPPORT: typeof atob === 'function',
+ /**
+ * Base64-encode an array of bytes.
+ *
+ * @param input An array of bytes (numbers with
+ * value in [0, 255]) to encode.
+ * @param webSafe Boolean indicating we should use the
+ * alternative alphabet.
+ * @return The base64 encoded string.
+ */
+ encodeByteArray(input, webSafe) {
+ if (!Array.isArray(input)) {
+ throw Error('encodeByteArray takes an array as a parameter');
+ }
+ this.init_();
+ const byteToCharMap = webSafe
+ ? this.byteToCharMapWebSafe_
+ : this.byteToCharMap_;
+ const output = [];
+ for (let i = 0; i < input.length; i += 3) {
+ const byte1 = input[i];
+ const haveByte2 = i + 1 < input.length;
+ const byte2 = haveByte2 ? input[i + 1] : 0;
+ const haveByte3 = i + 2 < input.length;
+ const byte3 = haveByte3 ? input[i + 2] : 0;
+ const outByte1 = byte1 >> 2;
+ const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);
+ let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);
+ let outByte4 = byte3 & 0x3f;
+ if (!haveByte3) {
+ outByte4 = 64;
+ if (!haveByte2) {
+ outByte3 = 64;
+ }
+ }
+ output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);
+ }
+ return output.join('');
+ },
+ /**
+ * Base64-encode a string.
+ *
+ * @param input A string to encode.
+ * @param webSafe If true, we should use the
+ * alternative alphabet.
+ * @return The base64 encoded string.
+ */
+ encodeString(input, webSafe) {
+ // Shortcut for Mozilla browsers that implement
+ // a native base64 encoder in the form of "btoa/atob"
+ if (this.HAS_NATIVE_SUPPORT && !webSafe) {
+ return btoa(input);
+ }
+ return this.encodeByteArray(stringToByteArray$1(input), webSafe);
+ },
+ /**
+ * Base64-decode a string.
+ *
+ * @param input to decode.
+ * @param webSafe True if we should use the
+ * alternative alphabet.
+ * @return string representing the decoded value.
+ */
+ decodeString(input, webSafe) {
+ // Shortcut for Mozilla browsers that implement
+ // a native base64 encoder in the form of "btoa/atob"
+ if (this.HAS_NATIVE_SUPPORT && !webSafe) {
+ return atob(input);
+ }
+ return byteArrayToString(this.decodeStringToByteArray(input, webSafe));
+ },
+ /**
+ * Base64-decode a string.
+ *
+ * In base-64 decoding, groups of four characters are converted into three
+ * bytes. If the encoder did not apply padding, the input length may not
+ * be a multiple of 4.
+ *
+ * In this case, the last group will have fewer than 4 characters, and
+ * padding will be inferred. If the group has one or two characters, it decodes
+ * to one byte. If the group has three characters, it decodes to two bytes.
+ *
+ * @param input Input to decode.
+ * @param webSafe True if we should use the web-safe alphabet.
+ * @return bytes representing the decoded value.
+ */
+ decodeStringToByteArray(input, webSafe) {
+ this.init_();
+ const charToByteMap = webSafe
+ ? this.charToByteMapWebSafe_
+ : this.charToByteMap_;
+ const output = [];
+ for (let i = 0; i < input.length;) {
+ const byte1 = charToByteMap[input.charAt(i++)];
+ const haveByte2 = i < input.length;
+ const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;
+ ++i;
+ const haveByte3 = i < input.length;
+ const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;
+ ++i;
+ const haveByte4 = i < input.length;
+ const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;
+ ++i;
+ if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {
+ throw new DecodeBase64StringError();
+ }
+ const outByte1 = (byte1 << 2) | (byte2 >> 4);
+ output.push(outByte1);
+ if (byte3 !== 64) {
+ const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);
+ output.push(outByte2);
+ if (byte4 !== 64) {
+ const outByte3 = ((byte3 << 6) & 0xc0) | byte4;
+ output.push(outByte3);
+ }
+ }
+ }
+ return output;
+ },
+ /**
+ * Lazy static initialization function. Called before
+ * accessing any of the static map variables.
+ * @private
+ */
+ init_() {
+ if (!this.byteToCharMap_) {
+ this.byteToCharMap_ = {};
+ this.charToByteMap_ = {};
+ this.byteToCharMapWebSafe_ = {};
+ this.charToByteMapWebSafe_ = {};
+ // We want quick mappings back and forth, so we precompute two maps.
+ for (let i = 0; i < this.ENCODED_VALS.length; i++) {
+ this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);
+ this.charToByteMap_[this.byteToCharMap_[i]] = i;
+ this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);
+ this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;
+ // Be forgiving when decoding and correctly decode both encodings.
+ if (i >= this.ENCODED_VALS_BASE.length) {
+ this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;
+ this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;
+ }
+ }
+ }
+ }
+};
+/**
+ * An error encountered while decoding base64 string.
+ */
+class DecodeBase64StringError extends Error {
+ constructor() {
+ super(...arguments);
+ this.name = 'DecodeBase64StringError';
+ }
+}
+/**
+ * URL-safe base64 encoding
+ */
+const base64Encode = function (str) {
+ const utf8Bytes = stringToByteArray$1(str);
+ return base64.encodeByteArray(utf8Bytes, true);
+};
+/**
+ * URL-safe base64 encoding (without "." padding in the end).
+ * e.g. Used in JSON Web Token (JWT) parts.
+ */
+const base64urlEncodeWithoutPadding = function (str) {
+ // Use base64url encoding and remove padding in the end (dot characters).
+ return base64Encode(str).replace(/\./g, '');
+};
+/**
+ * URL-safe base64 decoding
+ *
+ * NOTE: DO NOT use the global atob() function - it does NOT support the
+ * base64Url variant encoding.
+ *
+ * @param str To be decoded
+ * @return Decoded result, if possible
+ */
+const base64Decode = function (str) {
+ try {
+ return base64.decodeString(str, true);
+ }
+ catch (e) {
+ console.error('base64Decode failed: ', e);
+ }
+ return null;
+};
+
+/**
+ * @license
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Do a deep-copy of basic JavaScript Objects or Arrays.
+ */
+function deepCopy(value) {
+ return deepExtend(undefined, value);
+}
+/**
+ * Copy properties from source to target (recursively allows extension
+ * of Objects and Arrays). Scalar values in the target are over-written.
+ * If target is undefined, an object of the appropriate type will be created
+ * (and returned).
+ *
+ * We recursively copy all child properties of plain Objects in the source- so
+ * that namespace- like dictionaries are merged.
+ *
+ * Note that the target can be a function, in which case the properties in
+ * the source Object are copied onto it as static properties of the Function.
+ *
+ * Note: we don't merge __proto__ to prevent prototype pollution
+ */
+function deepExtend(target, source) {
+ if (!(source instanceof Object)) {
+ return source;
+ }
+ switch (source.constructor) {
+ case Date:
+ // Treat Dates like scalars; if the target date object had any child
+ // properties - they will be lost!
+ const dateValue = source;
+ return new Date(dateValue.getTime());
+ case Object:
+ if (target === undefined) {
+ target = {};
+ }
+ break;
+ case Array:
+ // Always copy the array source and overwrite the target.
+ target = [];
+ break;
+ default:
+ // Not a plain Object - treat it as a scalar.
+ return source;
+ }
+ for (const prop in source) {
+ // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202
+ if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {
+ continue;
+ }
+ target[prop] = deepExtend(target[prop], source[prop]);
+ }
+ return target;
+}
+function isValidKey(key) {
+ return key !== '__proto__';
+}
+
+/**
+ * @license
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Polyfill for `globalThis` object.
+ * @returns the `globalThis` object for the given environment.
+ * @public
+ */
+function getGlobal() {
+ if (typeof self !== 'undefined') {
+ return self;
+ }
+ if (typeof window !== 'undefined') {
+ return window;
+ }
+ if (typeof __webpack_require__.g !== 'undefined') {
+ return __webpack_require__.g;
+ }
+ throw new Error('Unable to locate global object.');
+}
+
+/**
+ * @license
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+const getDefaultsFromGlobal = () => getGlobal().__FIREBASE_DEFAULTS__;
+/**
+ * Attempt to read defaults from a JSON string provided to
+ * process(.)env(.)__FIREBASE_DEFAULTS__ or a JSON file whose path is in
+ * process(.)env(.)__FIREBASE_DEFAULTS_PATH__
+ * The dots are in parens because certain compilers (Vite?) cannot
+ * handle seeing that variable in comments.
+ * See https://github.com/firebase/firebase-js-sdk/issues/6838
+ */
+const getDefaultsFromEnvVariable = () => {
+ if (typeof process === 'undefined' || typeof process.env === 'undefined') {
+ return;
+ }
+ const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;
+ if (defaultsJsonString) {
+ return JSON.parse(defaultsJsonString);
+ }
+};
+const getDefaultsFromCookie = () => {
+ if (typeof document === 'undefined') {
+ return;
+ }
+ let match;
+ try {
+ match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);
+ }
+ catch (e) {
+ // Some environments such as Angular Universal SSR have a
+ // `document` object but error on accessing `document.cookie`.
+ return;
+ }
+ const decoded = match && base64Decode(match[1]);
+ return decoded && JSON.parse(decoded);
+};
+/**
+ * Get the __FIREBASE_DEFAULTS__ object. It checks in order:
+ * (1) if such an object exists as a property of `globalThis`
+ * (2) if such an object was provided on a shell environment variable
+ * (3) if such an object exists in a cookie
+ * @public
+ */
+const getDefaults = () => {
+ try {
+ return ((0,_postinstall_mjs__WEBPACK_IMPORTED_MODULE_0__.getDefaultsFromPostinstall)() ||
+ getDefaultsFromGlobal() ||
+ getDefaultsFromEnvVariable() ||
+ getDefaultsFromCookie());
+ }
+ catch (e) {
+ /**
+ * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due
+ * to any environment case we have not accounted for. Log to
+ * info instead of swallowing so we can find these unknown cases
+ * and add paths for them if needed.
+ */
+ console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);
+ return;
+ }
+};
+/**
+ * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object
+ * for the given product.
+ * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available
+ * @public
+ */
+const getDefaultEmulatorHost = (productName) => { var _a, _b; return (_b = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.emulatorHosts) === null || _b === void 0 ? void 0 : _b[productName]; };
+/**
+ * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object
+ * for the given product.
+ * @returns a pair of hostname and port like `["::1", 4000]` if available
+ * @public
+ */
+const getDefaultEmulatorHostnameAndPort = (productName) => {
+ const host = getDefaultEmulatorHost(productName);
+ if (!host) {
+ return undefined;
+ }
+ const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.
+ if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {
+ throw new Error(`Invalid host ${host} with no separate hostname and port!`);
+ }
+ // eslint-disable-next-line no-restricted-globals
+ const port = parseInt(host.substring(separatorIndex + 1), 10);
+ if (host[0] === '[') {
+ // Bracket-quoted `[ipv6addr]:port` => return "ipv6addr" (without brackets).
+ return [host.substring(1, separatorIndex - 1), port];
+ }
+ else {
+ return [host.substring(0, separatorIndex), port];
+ }
+};
+/**
+ * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.
+ * @public
+ */
+const getDefaultAppConfig = () => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.config; };
+/**
+ * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties
+ * prefixed by "_")
+ * @public
+ */
+const getExperimentalSetting = (name) => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a[`_${name}`]; };
+
+/**
+ * @license
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+class Deferred {
+ constructor() {
+ this.reject = () => { };
+ this.resolve = () => { };
+ this.promise = new Promise((resolve, reject) => {
+ this.resolve = resolve;
+ this.reject = reject;
+ });
+ }
+ /**
+ * Our API internals are not promisified and cannot because our callback APIs have subtle expectations around
+ * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback
+ * and returns a node-style callback which will resolve or reject the Deferred's promise.
+ */
+ wrapCallback(callback) {
+ return (error, value) => {
+ if (error) {
+ this.reject(error);
+ }
+ else {
+ this.resolve(value);
+ }
+ if (typeof callback === 'function') {
+ // Attaching noop handler just in case developer wasn't expecting
+ // promises
+ this.promise.catch(() => { });
+ // Some of our callbacks don't expect a value and our own tests
+ // assert that the parameter length is 1
+ if (callback.length === 1) {
+ callback(error);
+ }
+ else {
+ callback(error, value);
+ }
+ }
+ };
+ }
+}
+
+/**
+ * @license
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Checks whether host is a cloud workstation or not.
+ * @public
+ */
+function isCloudWorkstation(url) {
+ // `isCloudWorkstation` is called without protocol in certain connect*Emulator functions
+ // In HTTP request builders, it's called with the protocol.
+ // If called with protocol prefix, it's a valid URL, so we extract the hostname
+ // If called without, we assume the string is the hostname.
+ try {
+ const host = url.startsWith('http://') || url.startsWith('https://')
+ ? new URL(url).hostname
+ : url;
+ return host.endsWith('.cloudworkstations.dev');
+ }
+ catch (_a) {
+ return false;
+ }
+}
+/**
+ * Makes a fetch request to the given server.
+ * Mostly used for forwarding cookies in Firebase Studio.
+ * @public
+ */
+async function pingServer(endpoint) {
+ const result = await fetch(endpoint, {
+ credentials: 'include'
+ });
+ return result.ok;
+}
+
+/**
+ * @license
+ * Copyright 2021 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+function createMockUserToken(token, projectId) {
+ if (token.uid) {
+ throw new Error('The "uid" field is no longer supported by mockUserToken. Please use "sub" instead for Firebase Auth User ID.');
+ }
+ // Unsecured JWTs use "none" as the algorithm.
+ const header = {
+ alg: 'none',
+ type: 'JWT'
+ };
+ const project = projectId || 'demo-project';
+ const iat = token.iat || 0;
+ const sub = token.sub || token.user_id;
+ if (!sub) {
+ throw new Error("mockUserToken must contain 'sub' or 'user_id' field!");
+ }
+ const payload = Object.assign({
+ // Set all required fields to decent defaults
+ iss: `https://securetoken.google.com/${project}`, aud: project, iat, exp: iat + 3600, auth_time: iat, sub, user_id: sub, firebase: {
+ sign_in_provider: 'custom',
+ identities: {}
+ } }, token);
+ // Unsecured JWTs use the empty string as a signature.
+ const signature = '';
+ return [
+ base64urlEncodeWithoutPadding(JSON.stringify(header)),
+ base64urlEncodeWithoutPadding(JSON.stringify(payload)),
+ signature
+ ].join('.');
+}
+const emulatorStatus = {};
+// Checks whether any products are running on an emulator
+function getEmulatorSummary() {
+ const summary = {
+ prod: [],
+ emulator: []
+ };
+ for (const key of Object.keys(emulatorStatus)) {
+ if (emulatorStatus[key]) {
+ summary.emulator.push(key);
+ }
+ else {
+ summary.prod.push(key);
+ }
+ }
+ return summary;
+}
+function getOrCreateEl(id) {
+ let parentDiv = document.getElementById(id);
+ let created = false;
+ if (!parentDiv) {
+ parentDiv = document.createElement('div');
+ parentDiv.setAttribute('id', id);
+ created = true;
+ }
+ return { created, element: parentDiv };
+}
+let previouslyDismissed = false;
+/**
+ * Updates Emulator Banner. Primarily used for Firebase Studio
+ * @param name
+ * @param isRunningEmulator
+ * @public
+ */
+function updateEmulatorBanner(name, isRunningEmulator) {
+ if (typeof window === 'undefined' ||
+ typeof document === 'undefined' ||
+ !isCloudWorkstation(window.location.host) ||
+ emulatorStatus[name] === isRunningEmulator ||
+ emulatorStatus[name] || // If already set to use emulator, can't go back to prod.
+ previouslyDismissed) {
+ return;
+ }
+ emulatorStatus[name] = isRunningEmulator;
+ function prefixedId(id) {
+ return `__firebase__banner__${id}`;
+ }
+ const bannerId = '__firebase__banner';
+ const summary = getEmulatorSummary();
+ const showError = summary.prod.length > 0;
+ function tearDown() {
+ const element = document.getElementById(bannerId);
+ if (element) {
+ element.remove();
+ }
+ }
+ function setupBannerStyles(bannerEl) {
+ bannerEl.style.display = 'flex';
+ bannerEl.style.background = '#7faaf0';
+ bannerEl.style.position = 'fixed';
+ bannerEl.style.bottom = '5px';
+ bannerEl.style.left = '5px';
+ bannerEl.style.padding = '.5em';
+ bannerEl.style.borderRadius = '5px';
+ bannerEl.style.alignItems = 'center';
+ }
+ function setupIconStyles(prependIcon, iconId) {
+ prependIcon.setAttribute('width', '24');
+ prependIcon.setAttribute('id', iconId);
+ prependIcon.setAttribute('height', '24');
+ prependIcon.setAttribute('viewBox', '0 0 24 24');
+ prependIcon.setAttribute('fill', 'none');
+ prependIcon.style.marginLeft = '-6px';
+ }
+ function setupCloseBtn() {
+ const closeBtn = document.createElement('span');
+ closeBtn.style.cursor = 'pointer';
+ closeBtn.style.marginLeft = '16px';
+ closeBtn.style.fontSize = '24px';
+ closeBtn.innerHTML = ' ×';
+ closeBtn.onclick = () => {
+ previouslyDismissed = true;
+ tearDown();
+ };
+ return closeBtn;
+ }
+ function setupLinkStyles(learnMoreLink, learnMoreId) {
+ learnMoreLink.setAttribute('id', learnMoreId);
+ learnMoreLink.innerText = 'Learn more';
+ learnMoreLink.href =
+ 'https://firebase.google.com/docs/studio/preview-apps#preview-backend';
+ learnMoreLink.setAttribute('target', '__blank');
+ learnMoreLink.style.paddingLeft = '5px';
+ learnMoreLink.style.textDecoration = 'underline';
+ }
+ function setupDom() {
+ const banner = getOrCreateEl(bannerId);
+ const firebaseTextId = prefixedId('text');
+ const firebaseText = document.getElementById(firebaseTextId) || document.createElement('span');
+ const learnMoreId = prefixedId('learnmore');
+ const learnMoreLink = document.getElementById(learnMoreId) ||
+ document.createElement('a');
+ const prependIconId = prefixedId('preprendIcon');
+ const prependIcon = document.getElementById(prependIconId) ||
+ document.createElementNS('http://www.w3.org/2000/svg', 'svg');
+ if (banner.created) {
+ // update styles
+ const bannerEl = banner.element;
+ setupBannerStyles(bannerEl);
+ setupLinkStyles(learnMoreLink, learnMoreId);
+ const closeBtn = setupCloseBtn();
+ setupIconStyles(prependIcon, prependIconId);
+ bannerEl.append(prependIcon, firebaseText, learnMoreLink, closeBtn);
+ document.body.appendChild(bannerEl);
+ }
+ if (showError) {
+ firebaseText.innerText = `Preview backend disconnected.`;
+ prependIcon.innerHTML = `
+
+
+
+
+
+
+ `;
+ }
+ else {
+ prependIcon.innerHTML = `
+
+
+
+
+
+
+ `;
+ firebaseText.innerText = 'Preview backend running in this workspace.';
+ }
+ firebaseText.setAttribute('id', firebaseTextId);
+ }
+ if (document.readyState === 'loading') {
+ window.addEventListener('DOMContentLoaded', setupDom);
+ }
+ else {
+ setupDom();
+ }
+}
+
+/**
+ * @license
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Returns navigator.userAgent string or '' if it's not defined.
+ * @return user agent string
+ */
+function getUA() {
+ if (typeof navigator !== 'undefined' &&
+ typeof navigator['userAgent'] === 'string') {
+ return navigator['userAgent'];
+ }
+ else {
+ return '';
+ }
+}
+/**
+ * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.
+ *
+ * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap
+ * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally
+ * wait for a callback.
+ */
+function isMobileCordova() {
+ return (typeof window !== 'undefined' &&
+ // @ts-ignore Setting up an broadly applicable index signature for Window
+ // just to deal with this case would probably be a bad idea.
+ !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&
+ /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));
+}
+/**
+ * Detect Node.js.
+ *
+ * @return true if Node.js environment is detected or specified.
+ */
+// Node detection logic from: https://github.com/iliakan/detect-node/
+function isNode() {
+ var _a;
+ const forceEnvironment = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.forceEnvironment;
+ if (forceEnvironment === 'node') {
+ return true;
+ }
+ else if (forceEnvironment === 'browser') {
+ return false;
+ }
+ try {
+ return (Object.prototype.toString.call(__webpack_require__.g.process) === '[object process]');
+ }
+ catch (e) {
+ return false;
+ }
+}
+/**
+ * Detect Browser Environment.
+ * Note: This will return true for certain test frameworks that are incompletely
+ * mimicking a browser, and should not lead to assuming all browser APIs are
+ * available.
+ */
+function isBrowser() {
+ return typeof window !== 'undefined' || isWebWorker();
+}
+/**
+ * Detect Web Worker context.
+ */
+function isWebWorker() {
+ return (typeof WorkerGlobalScope !== 'undefined' &&
+ typeof self !== 'undefined' &&
+ self instanceof WorkerGlobalScope);
+}
+/**
+ * Detect Cloudflare Worker context.
+ */
+function isCloudflareWorker() {
+ return (typeof navigator !== 'undefined' &&
+ navigator.userAgent === 'Cloudflare-Workers');
+}
+function isBrowserExtension() {
+ const runtime = typeof chrome === 'object'
+ ? chrome.runtime
+ : typeof browser === 'object'
+ ? browser.runtime
+ : undefined;
+ return typeof runtime === 'object' && runtime.id !== undefined;
+}
+/**
+ * Detect React Native.
+ *
+ * @return true if ReactNative environment is detected.
+ */
+function isReactNative() {
+ return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');
+}
+/** Detects Electron apps. */
+function isElectron() {
+ return getUA().indexOf('Electron/') >= 0;
+}
+/** Detects Internet Explorer. */
+function isIE() {
+ const ua = getUA();
+ return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;
+}
+/** Detects Universal Windows Platform apps. */
+function isUWP() {
+ return getUA().indexOf('MSAppHost/') >= 0;
+}
+/**
+ * Detect whether the current SDK build is the Node version.
+ *
+ * @return true if it's the Node SDK build.
+ */
+function isNodeSdk() {
+ return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;
+}
+/** Returns true if we are running in Safari. */
+function isSafari() {
+ return (!isNode() &&
+ !!navigator.userAgent &&
+ navigator.userAgent.includes('Safari') &&
+ !navigator.userAgent.includes('Chrome'));
+}
+/** Returns true if we are running in Safari or WebKit */
+function isSafariOrWebkit() {
+ return (!isNode() &&
+ !!navigator.userAgent &&
+ (navigator.userAgent.includes('Safari') ||
+ navigator.userAgent.includes('WebKit')) &&
+ !navigator.userAgent.includes('Chrome'));
+}
+/**
+ * This method checks if indexedDB is supported by current browser/service worker context
+ * @return true if indexedDB is supported by current browser/service worker context
+ */
+function isIndexedDBAvailable() {
+ try {
+ return typeof indexedDB === 'object';
+ }
+ catch (e) {
+ return false;
+ }
+}
+/**
+ * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject
+ * if errors occur during the database open operation.
+ *
+ * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox
+ * private browsing)
+ */
+function validateIndexedDBOpenable() {
+ return new Promise((resolve, reject) => {
+ try {
+ let preExist = true;
+ const DB_CHECK_NAME = 'validate-browser-context-for-indexeddb-analytics-module';
+ const request = self.indexedDB.open(DB_CHECK_NAME);
+ request.onsuccess = () => {
+ request.result.close();
+ // delete database only when it doesn't pre-exist
+ if (!preExist) {
+ self.indexedDB.deleteDatabase(DB_CHECK_NAME);
+ }
+ resolve(true);
+ };
+ request.onupgradeneeded = () => {
+ preExist = false;
+ };
+ request.onerror = () => {
+ var _a;
+ reject(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || '');
+ };
+ }
+ catch (error) {
+ reject(error);
+ }
+ });
+}
+/**
+ *
+ * This method checks whether cookie is enabled within current browser
+ * @return true if cookie is enabled within current browser
+ */
+function areCookiesEnabled() {
+ if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {
+ return false;
+ }
+ return true;
+}
+
+/**
+ * @license
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * @fileoverview Standardized Firebase Error.
+ *
+ * Usage:
+ *
+ * // TypeScript string literals for type-safe codes
+ * type Err =
+ * 'unknown' |
+ * 'object-not-found'
+ * ;
+ *
+ * // Closure enum for type-safe error codes
+ * // at-enum {string}
+ * var Err = {
+ * UNKNOWN: 'unknown',
+ * OBJECT_NOT_FOUND: 'object-not-found',
+ * }
+ *
+ * let errors: Map = {
+ * 'generic-error': "Unknown error",
+ * 'file-not-found': "Could not find file: {$file}",
+ * };
+ *
+ * // Type-safe function - must pass a valid error code as param.
+ * let error = new ErrorFactory('service', 'Service', errors);
+ *
+ * ...
+ * throw error.create(Err.GENERIC);
+ * ...
+ * throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});
+ * ...
+ * // Service: Could not file file: foo.txt (service/file-not-found).
+ *
+ * catch (e) {
+ * assert(e.message === "Could not find file: foo.txt.");
+ * if ((e as FirebaseError)?.code === 'service/file-not-found') {
+ * console.log("Could not read file: " + e['file']);
+ * }
+ * }
+ */
+const ERROR_NAME = 'FirebaseError';
+// Based on code from:
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types
+class FirebaseError extends Error {
+ constructor(
+ /** The error code for this error. */
+ code, message,
+ /** Custom data for this error. */
+ customData) {
+ super(message);
+ this.code = code;
+ this.customData = customData;
+ /** The custom name for all FirebaseErrors. */
+ this.name = ERROR_NAME;
+ // Fix For ES5
+ // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
+ // TODO(dlarocque): Replace this with `new.target`: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget
+ // which we can now use since we no longer target ES5.
+ Object.setPrototypeOf(this, FirebaseError.prototype);
+ // Maintains proper stack trace for where our error was thrown.
+ // Only available on V8.
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, ErrorFactory.prototype.create);
+ }
+ }
+}
+class ErrorFactory {
+ constructor(service, serviceName, errors) {
+ this.service = service;
+ this.serviceName = serviceName;
+ this.errors = errors;
+ }
+ create(code, ...data) {
+ const customData = data[0] || {};
+ const fullCode = `${this.service}/${code}`;
+ const template = this.errors[code];
+ const message = template ? replaceTemplate(template, customData) : 'Error';
+ // Service Name: Error message (service/code).
+ const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;
+ const error = new FirebaseError(fullCode, fullMessage, customData);
+ return error;
+ }
+}
+function replaceTemplate(template, data) {
+ return template.replace(PATTERN, (_, key) => {
+ const value = data[key];
+ return value != null ? String(value) : `<${key}?>`;
+ });
+}
+const PATTERN = /\{\$([^}]+)}/g;
+
+/**
+ * @license
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Evaluates a JSON string into a javascript object.
+ *
+ * @param {string} str A string containing JSON.
+ * @return {*} The javascript object representing the specified JSON.
+ */
+function jsonEval(str) {
+ return JSON.parse(str);
+}
+/**
+ * Returns JSON representing a javascript object.
+ * @param {*} data JavaScript object to be stringified.
+ * @return {string} The JSON contents of the object.
+ */
+function stringify(data) {
+ return JSON.stringify(data);
+}
+
+/**
+ * @license
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Decodes a Firebase auth. token into constituent parts.
+ *
+ * Notes:
+ * - May return with invalid / incomplete claims if there's no native base64 decoding support.
+ * - Doesn't check if the token is actually valid.
+ */
+const decode = function (token) {
+ let header = {}, claims = {}, data = {}, signature = '';
+ try {
+ const parts = token.split('.');
+ header = jsonEval(base64Decode(parts[0]) || '');
+ claims = jsonEval(base64Decode(parts[1]) || '');
+ signature = parts[2];
+ data = claims['d'] || {};
+ delete claims['d'];
+ }
+ catch (e) { }
+ return {
+ header,
+ claims,
+ data,
+ signature
+ };
+};
+/**
+ * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the
+ * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.
+ *
+ * Notes:
+ * - May return a false negative if there's no native base64 decoding support.
+ * - Doesn't check if the token is actually valid.
+ */
+const isValidTimestamp = function (token) {
+ const claims = decode(token).claims;
+ const now = Math.floor(new Date().getTime() / 1000);
+ let validSince = 0, validUntil = 0;
+ if (typeof claims === 'object') {
+ if (claims.hasOwnProperty('nbf')) {
+ validSince = claims['nbf'];
+ }
+ else if (claims.hasOwnProperty('iat')) {
+ validSince = claims['iat'];
+ }
+ if (claims.hasOwnProperty('exp')) {
+ validUntil = claims['exp'];
+ }
+ else {
+ // token will expire after 24h by default
+ validUntil = validSince + 86400;
+ }
+ }
+ return (!!now &&
+ !!validSince &&
+ !!validUntil &&
+ now >= validSince &&
+ now <= validUntil);
+};
+/**
+ * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.
+ *
+ * Notes:
+ * - May return null if there's no native base64 decoding support.
+ * - Doesn't check if the token is actually valid.
+ */
+const issuedAtTime = function (token) {
+ const claims = decode(token).claims;
+ if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {
+ return claims['iat'];
+ }
+ return null;
+};
+/**
+ * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.
+ *
+ * Notes:
+ * - May return a false negative if there's no native base64 decoding support.
+ * - Doesn't check if the token is actually valid.
+ */
+const isValidFormat = function (token) {
+ const decoded = decode(token), claims = decoded.claims;
+ return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');
+};
+/**
+ * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.
+ *
+ * Notes:
+ * - May return a false negative if there's no native base64 decoding support.
+ * - Doesn't check if the token is actually valid.
+ */
+const isAdmin = function (token) {
+ const claims = decode(token).claims;
+ return typeof claims === 'object' && claims['admin'] === true;
+};
+
+/**
+ * @license
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+function contains(obj, key) {
+ return Object.prototype.hasOwnProperty.call(obj, key);
+}
+function safeGet(obj, key) {
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
+ return obj[key];
+ }
+ else {
+ return undefined;
+ }
+}
+function isEmpty(obj) {
+ for (const key in obj) {
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
+ return false;
+ }
+ }
+ return true;
+}
+function map(obj, fn, contextObj) {
+ const res = {};
+ for (const key in obj) {
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
+ res[key] = fn.call(contextObj, obj[key], key, obj);
+ }
+ }
+ return res;
+}
+/**
+ * Deep equal two objects. Support Arrays and Objects.
+ */
+function deepEqual(a, b) {
+ if (a === b) {
+ return true;
+ }
+ const aKeys = Object.keys(a);
+ const bKeys = Object.keys(b);
+ for (const k of aKeys) {
+ if (!bKeys.includes(k)) {
+ return false;
+ }
+ const aProp = a[k];
+ const bProp = b[k];
+ if (isObject(aProp) && isObject(bProp)) {
+ if (!deepEqual(aProp, bProp)) {
+ return false;
+ }
+ }
+ else if (aProp !== bProp) {
+ return false;
+ }
+ }
+ for (const k of bKeys) {
+ if (!aKeys.includes(k)) {
+ return false;
+ }
+ }
+ return true;
+}
+function isObject(thing) {
+ return thing !== null && typeof thing === 'object';
+}
+
+/**
+ * @license
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Rejects if the given promise doesn't resolve in timeInMS milliseconds.
+ * @internal
+ */
+function promiseWithTimeout(promise, timeInMS = 2000) {
+ const deferredPromise = new Deferred();
+ setTimeout(() => deferredPromise.reject('timeout!'), timeInMS);
+ promise.then(deferredPromise.resolve, deferredPromise.reject);
+ return deferredPromise.promise;
+}
+
+/**
+ * @license
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a
+ * params object (e.g. {arg: 'val', arg2: 'val2'})
+ * Note: You must prepend it with ? when adding it to a URL.
+ */
+function querystring(querystringParams) {
+ const params = [];
+ for (const [key, value] of Object.entries(querystringParams)) {
+ if (Array.isArray(value)) {
+ value.forEach(arrayVal => {
+ params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));
+ });
+ }
+ else {
+ params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
+ }
+ }
+ return params.length ? '&' + params.join('&') : '';
+}
+/**
+ * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object
+ * (e.g. {arg: 'val', arg2: 'val2'})
+ */
+function querystringDecode(querystring) {
+ const obj = {};
+ const tokens = querystring.replace(/^\?/, '').split('&');
+ tokens.forEach(token => {
+ if (token) {
+ const [key, value] = token.split('=');
+ obj[decodeURIComponent(key)] = decodeURIComponent(value);
+ }
+ });
+ return obj;
+}
+/**
+ * Extract the query string part of a URL, including the leading question mark (if present).
+ */
+function extractQuerystring(url) {
+ const queryStart = url.indexOf('?');
+ if (!queryStart) {
+ return '';
+ }
+ const fragmentStart = url.indexOf('#', queryStart);
+ return url.substring(queryStart, fragmentStart > 0 ? fragmentStart : undefined);
+}
+
+/**
+ * @license
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * @fileoverview SHA-1 cryptographic hash.
+ * Variable names follow the notation in FIPS PUB 180-3:
+ * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.
+ *
+ * Usage:
+ * var sha1 = new sha1();
+ * sha1.update(bytes);
+ * var hash = sha1.digest();
+ *
+ * Performance:
+ * Chrome 23: ~400 Mbit/s
+ * Firefox 16: ~250 Mbit/s
+ *
+ */
+/**
+ * SHA-1 cryptographic hash constructor.
+ *
+ * The properties declared here are discussed in the above algorithm document.
+ * @constructor
+ * @final
+ * @struct
+ */
+class Sha1 {
+ constructor() {
+ /**
+ * Holds the previous values of accumulated variables a-e in the compress_
+ * function.
+ * @private
+ */
+ this.chain_ = [];
+ /**
+ * A buffer holding the partially computed hash result.
+ * @private
+ */
+ this.buf_ = [];
+ /**
+ * An array of 80 bytes, each a part of the message to be hashed. Referred to
+ * as the message schedule in the docs.
+ * @private
+ */
+ this.W_ = [];
+ /**
+ * Contains data needed to pad messages less than 64 bytes.
+ * @private
+ */
+ this.pad_ = [];
+ /**
+ * @private {number}
+ */
+ this.inbuf_ = 0;
+ /**
+ * @private {number}
+ */
+ this.total_ = 0;
+ this.blockSize = 512 / 8;
+ this.pad_[0] = 128;
+ for (let i = 1; i < this.blockSize; ++i) {
+ this.pad_[i] = 0;
+ }
+ this.reset();
+ }
+ reset() {
+ this.chain_[0] = 0x67452301;
+ this.chain_[1] = 0xefcdab89;
+ this.chain_[2] = 0x98badcfe;
+ this.chain_[3] = 0x10325476;
+ this.chain_[4] = 0xc3d2e1f0;
+ this.inbuf_ = 0;
+ this.total_ = 0;
+ }
+ /**
+ * Internal compress helper function.
+ * @param buf Block to compress.
+ * @param offset Offset of the block in the buffer.
+ * @private
+ */
+ compress_(buf, offset) {
+ if (!offset) {
+ offset = 0;
+ }
+ const W = this.W_;
+ // get 16 big endian words
+ if (typeof buf === 'string') {
+ for (let i = 0; i < 16; i++) {
+ // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS
+ // have a bug that turns the post-increment ++ operator into pre-increment
+ // during JIT compilation. We have code that depends heavily on SHA-1 for
+ // correctness and which is affected by this bug, so I've removed all uses
+ // of post-increment ++ in which the result value is used. We can revert
+ // this change once the Safari bug
+ // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and
+ // most clients have been updated.
+ W[i] =
+ (buf.charCodeAt(offset) << 24) |
+ (buf.charCodeAt(offset + 1) << 16) |
+ (buf.charCodeAt(offset + 2) << 8) |
+ buf.charCodeAt(offset + 3);
+ offset += 4;
+ }
+ }
+ else {
+ for (let i = 0; i < 16; i++) {
+ W[i] =
+ (buf[offset] << 24) |
+ (buf[offset + 1] << 16) |
+ (buf[offset + 2] << 8) |
+ buf[offset + 3];
+ offset += 4;
+ }
+ }
+ // expand to 80 words
+ for (let i = 16; i < 80; i++) {
+ const t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];
+ W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;
+ }
+ let a = this.chain_[0];
+ let b = this.chain_[1];
+ let c = this.chain_[2];
+ let d = this.chain_[3];
+ let e = this.chain_[4];
+ let f, k;
+ // TODO(user): Try to unroll this loop to speed up the computation.
+ for (let i = 0; i < 80; i++) {
+ if (i < 40) {
+ if (i < 20) {
+ f = d ^ (b & (c ^ d));
+ k = 0x5a827999;
+ }
+ else {
+ f = b ^ c ^ d;
+ k = 0x6ed9eba1;
+ }
+ }
+ else {
+ if (i < 60) {
+ f = (b & c) | (d & (b | c));
+ k = 0x8f1bbcdc;
+ }
+ else {
+ f = b ^ c ^ d;
+ k = 0xca62c1d6;
+ }
+ }
+ const t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;
+ e = d;
+ d = c;
+ c = ((b << 30) | (b >>> 2)) & 0xffffffff;
+ b = a;
+ a = t;
+ }
+ this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;
+ this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;
+ this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;
+ this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;
+ this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;
+ }
+ update(bytes, length) {
+ // TODO(johnlenz): tighten the function signature and remove this check
+ if (bytes == null) {
+ return;
+ }
+ if (length === undefined) {
+ length = bytes.length;
+ }
+ const lengthMinusBlock = length - this.blockSize;
+ let n = 0;
+ // Using local instead of member variables gives ~5% speedup on Firefox 16.
+ const buf = this.buf_;
+ let inbuf = this.inbuf_;
+ // The outer while loop should execute at most twice.
+ while (n < length) {
+ // When we have no data in the block to top up, we can directly process the
+ // input buffer (assuming it contains sufficient data). This gives ~25%
+ // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that
+ // the data is provided in large chunks (or in multiples of 64 bytes).
+ if (inbuf === 0) {
+ while (n <= lengthMinusBlock) {
+ this.compress_(bytes, n);
+ n += this.blockSize;
+ }
+ }
+ if (typeof bytes === 'string') {
+ while (n < length) {
+ buf[inbuf] = bytes.charCodeAt(n);
+ ++inbuf;
+ ++n;
+ if (inbuf === this.blockSize) {
+ this.compress_(buf);
+ inbuf = 0;
+ // Jump to the outer loop so we use the full-block optimization.
+ break;
+ }
+ }
+ }
+ else {
+ while (n < length) {
+ buf[inbuf] = bytes[n];
+ ++inbuf;
+ ++n;
+ if (inbuf === this.blockSize) {
+ this.compress_(buf);
+ inbuf = 0;
+ // Jump to the outer loop so we use the full-block optimization.
+ break;
+ }
+ }
+ }
+ }
+ this.inbuf_ = inbuf;
+ this.total_ += length;
+ }
+ /** @override */
+ digest() {
+ const digest = [];
+ let totalBits = this.total_ * 8;
+ // Add pad 0x80 0x00*.
+ if (this.inbuf_ < 56) {
+ this.update(this.pad_, 56 - this.inbuf_);
+ }
+ else {
+ this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));
+ }
+ // Add # bits.
+ for (let i = this.blockSize - 1; i >= 56; i--) {
+ this.buf_[i] = totalBits & 255;
+ totalBits /= 256; // Don't use bit-shifting here!
+ }
+ this.compress_(this.buf_);
+ let n = 0;
+ for (let i = 0; i < 5; i++) {
+ for (let j = 24; j >= 0; j -= 8) {
+ digest[n] = (this.chain_[i] >> j) & 255;
+ ++n;
+ }
+ }
+ return digest;
+ }
+}
+
+/**
+ * Helper to make a Subscribe function (just like Promise helps make a
+ * Thenable).
+ *
+ * @param executor Function which can make calls to a single Observer
+ * as a proxy.
+ * @param onNoObservers Callback when count of Observers goes to zero.
+ */
+function createSubscribe(executor, onNoObservers) {
+ const proxy = new ObserverProxy(executor, onNoObservers);
+ return proxy.subscribe.bind(proxy);
+}
+/**
+ * Implement fan-out for any number of Observers attached via a subscribe
+ * function.
+ */
+class ObserverProxy {
+ /**
+ * @param executor Function which can make calls to a single Observer
+ * as a proxy.
+ * @param onNoObservers Callback when count of Observers goes to zero.
+ */
+ constructor(executor, onNoObservers) {
+ this.observers = [];
+ this.unsubscribes = [];
+ this.observerCount = 0;
+ // Micro-task scheduling by calling task.then().
+ this.task = Promise.resolve();
+ this.finalized = false;
+ this.onNoObservers = onNoObservers;
+ // Call the executor asynchronously so subscribers that are called
+ // synchronously after the creation of the subscribe function
+ // can still receive the very first value generated in the executor.
+ this.task
+ .then(() => {
+ executor(this);
+ })
+ .catch(e => {
+ this.error(e);
+ });
+ }
+ next(value) {
+ this.forEachObserver((observer) => {
+ observer.next(value);
+ });
+ }
+ error(error) {
+ this.forEachObserver((observer) => {
+ observer.error(error);
+ });
+ this.close(error);
+ }
+ complete() {
+ this.forEachObserver((observer) => {
+ observer.complete();
+ });
+ this.close();
+ }
+ /**
+ * Subscribe function that can be used to add an Observer to the fan-out list.
+ *
+ * - We require that no event is sent to a subscriber synchronously to their
+ * call to subscribe().
+ */
+ subscribe(nextOrObserver, error, complete) {
+ let observer;
+ if (nextOrObserver === undefined &&
+ error === undefined &&
+ complete === undefined) {
+ throw new Error('Missing Observer.');
+ }
+ // Assemble an Observer object when passed as callback functions.
+ if (implementsAnyMethods(nextOrObserver, [
+ 'next',
+ 'error',
+ 'complete'
+ ])) {
+ observer = nextOrObserver;
+ }
+ else {
+ observer = {
+ next: nextOrObserver,
+ error,
+ complete
+ };
+ }
+ if (observer.next === undefined) {
+ observer.next = noop;
+ }
+ if (observer.error === undefined) {
+ observer.error = noop;
+ }
+ if (observer.complete === undefined) {
+ observer.complete = noop;
+ }
+ const unsub = this.unsubscribeOne.bind(this, this.observers.length);
+ // Attempt to subscribe to a terminated Observable - we
+ // just respond to the Observer with the final error or complete
+ // event.
+ if (this.finalized) {
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
+ this.task.then(() => {
+ try {
+ if (this.finalError) {
+ observer.error(this.finalError);
+ }
+ else {
+ observer.complete();
+ }
+ }
+ catch (e) {
+ // nothing
+ }
+ return;
+ });
+ }
+ this.observers.push(observer);
+ return unsub;
+ }
+ // Unsubscribe is synchronous - we guarantee that no events are sent to
+ // any unsubscribed Observer.
+ unsubscribeOne(i) {
+ if (this.observers === undefined || this.observers[i] === undefined) {
+ return;
+ }
+ delete this.observers[i];
+ this.observerCount -= 1;
+ if (this.observerCount === 0 && this.onNoObservers !== undefined) {
+ this.onNoObservers(this);
+ }
+ }
+ forEachObserver(fn) {
+ if (this.finalized) {
+ // Already closed by previous event....just eat the additional values.
+ return;
+ }
+ // Since sendOne calls asynchronously - there is no chance that
+ // this.observers will become undefined.
+ for (let i = 0; i < this.observers.length; i++) {
+ this.sendOne(i, fn);
+ }
+ }
+ // Call the Observer via one of it's callback function. We are careful to
+ // confirm that the observe has not been unsubscribed since this asynchronous
+ // function had been queued.
+ sendOne(i, fn) {
+ // Execute the callback asynchronously
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
+ this.task.then(() => {
+ if (this.observers !== undefined && this.observers[i] !== undefined) {
+ try {
+ fn(this.observers[i]);
+ }
+ catch (e) {
+ // Ignore exceptions raised in Observers or missing methods of an
+ // Observer.
+ // Log error to console. b/31404806
+ if (typeof console !== 'undefined' && console.error) {
+ console.error(e);
+ }
+ }
+ }
+ });
+ }
+ close(err) {
+ if (this.finalized) {
+ return;
+ }
+ this.finalized = true;
+ if (err !== undefined) {
+ this.finalError = err;
+ }
+ // Proxy is no longer needed - garbage collect references
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
+ this.task.then(() => {
+ this.observers = undefined;
+ this.onNoObservers = undefined;
+ });
+ }
+}
+/** Turn synchronous function into one called asynchronously. */
+// eslint-disable-next-line @typescript-eslint/ban-types
+function async(fn, onError) {
+ return (...args) => {
+ Promise.resolve(true)
+ .then(() => {
+ fn(...args);
+ })
+ .catch((error) => {
+ if (onError) {
+ onError(error);
+ }
+ });
+ };
+}
+/**
+ * Return true if the object passed in implements any of the named methods.
+ */
+function implementsAnyMethods(obj, methods) {
+ if (typeof obj !== 'object' || obj === null) {
+ return false;
+ }
+ for (const method of methods) {
+ if (method in obj && typeof obj[method] === 'function') {
+ return true;
+ }
+ }
+ return false;
+}
+function noop() {
+ // do nothing
+}
+
+/**
+ * @license
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Check to make sure the appropriate number of arguments are provided for a public function.
+ * Throws an error if it fails.
+ *
+ * @param fnName The function name
+ * @param minCount The minimum number of arguments to allow for the function call
+ * @param maxCount The maximum number of argument to allow for the function call
+ * @param argCount The actual number of arguments provided.
+ */
+const validateArgCount = function (fnName, minCount, maxCount, argCount) {
+ let argError;
+ if (argCount < minCount) {
+ argError = 'at least ' + minCount;
+ }
+ else if (argCount > maxCount) {
+ argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;
+ }
+ if (argError) {
+ const error = fnName +
+ ' failed: Was called with ' +
+ argCount +
+ (argCount === 1 ? ' argument.' : ' arguments.') +
+ ' Expects ' +
+ argError +
+ '.';
+ throw new Error(error);
+ }
+};
+/**
+ * Generates a string to prefix an error message about failed argument validation
+ *
+ * @param fnName The function name
+ * @param argName The name of the argument
+ * @return The prefix to add to the error thrown for validation.
+ */
+function errorPrefix(fnName, argName) {
+ return `${fnName} failed: ${argName} argument `;
+}
+/**
+ * @param fnName
+ * @param argumentNumber
+ * @param namespace
+ * @param optional
+ */
+function validateNamespace(fnName, namespace, optional) {
+ if (optional && !namespace) {
+ return;
+ }
+ if (typeof namespace !== 'string') {
+ //TODO: I should do more validation here. We only allow certain chars in namespaces.
+ throw new Error(errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.');
+ }
+}
+function validateCallback(fnName, argumentName,
+// eslint-disable-next-line @typescript-eslint/ban-types
+callback, optional) {
+ if (optional && !callback) {
+ return;
+ }
+ if (typeof callback !== 'function') {
+ throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid function.');
+ }
+}
+function validateContextObject(fnName, argumentName, context, optional) {
+ if (optional && !context) {
+ return;
+ }
+ if (typeof context !== 'object' || context === null) {
+ throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid context object.');
+ }
+}
+
+/**
+ * @license
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they
+// automatically replaced '\r\n' with '\n', and they didn't handle surrogate pairs,
+// so it's been modified.
+// Note that not all Unicode characters appear as single characters in JavaScript strings.
+// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters
+// use 2 characters in JavaScript. All 4-byte UTF-8 characters begin with a first
+// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate
+// pair).
+// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3
+/**
+ * @param {string} str
+ * @return {Array}
+ */
+const stringToByteArray = function (str) {
+ const out = [];
+ let p = 0;
+ for (let i = 0; i < str.length; i++) {
+ let c = str.charCodeAt(i);
+ // Is this the lead surrogate in a surrogate pair?
+ if (c >= 0xd800 && c <= 0xdbff) {
+ const high = c - 0xd800; // the high 10 bits.
+ i++;
+ assert(i < str.length, 'Surrogate pair missing trail surrogate.');
+ const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.
+ c = 0x10000 + (high << 10) + low;
+ }
+ if (c < 128) {
+ out[p++] = c;
+ }
+ else if (c < 2048) {
+ out[p++] = (c >> 6) | 192;
+ out[p++] = (c & 63) | 128;
+ }
+ else if (c < 65536) {
+ out[p++] = (c >> 12) | 224;
+ out[p++] = ((c >> 6) & 63) | 128;
+ out[p++] = (c & 63) | 128;
+ }
+ else {
+ out[p++] = (c >> 18) | 240;
+ out[p++] = ((c >> 12) & 63) | 128;
+ out[p++] = ((c >> 6) & 63) | 128;
+ out[p++] = (c & 63) | 128;
+ }
+ }
+ return out;
+};
+/**
+ * Calculate length without actually converting; useful for doing cheaper validation.
+ * @param {string} str
+ * @return {number}
+ */
+const stringLength = function (str) {
+ let p = 0;
+ for (let i = 0; i < str.length; i++) {
+ const c = str.charCodeAt(i);
+ if (c < 128) {
+ p++;
+ }
+ else if (c < 2048) {
+ p += 2;
+ }
+ else if (c >= 0xd800 && c <= 0xdbff) {
+ // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.
+ p += 4;
+ i++; // skip trail surrogate.
+ }
+ else {
+ p += 3;
+ }
+ }
+ return p;
+};
+
+/**
+ * @license
+ * Copyright 2019 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * The amount of milliseconds to exponentially increase.
+ */
+const DEFAULT_INTERVAL_MILLIS = 1000;
+/**
+ * The factor to backoff by.
+ * Should be a number greater than 1.
+ */
+const DEFAULT_BACKOFF_FACTOR = 2;
+/**
+ * The maximum milliseconds to increase to.
+ *
+ * Visible for testing
+ */
+const MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.
+/**
+ * The percentage of backoff time to randomize by.
+ * See
+ * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic
+ * for context.
+ *
+ *
Visible for testing
+ */
+const RANDOM_FACTOR = 0.5;
+/**
+ * Based on the backoff method from
+ * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.
+ * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.
+ */
+function calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {
+ // Calculates an exponentially increasing value.
+ // Deviation: calculates value from count and a constant interval, so we only need to save value
+ // and count to restore state.
+ const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);
+ // A random "fuzz" to avoid waves of retries.
+ // Deviation: randomFactor is required.
+ const randomWait = Math.round(
+ // A fraction of the backoff value to add/subtract.
+ // Deviation: changes multiplication order to improve readability.
+ RANDOM_FACTOR *
+ currBaseValue *
+ // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines
+ // if we add or subtract.
+ (Math.random() - 0.5) *
+ 2);
+ // Limits backoff to max to avoid effectively permanent backoff.
+ return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);
+}
+
+/**
+ * @license
+ * Copyright 2020 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Provide English ordinal letters after a number
+ */
+function ordinal(i) {
+ if (!Number.isFinite(i)) {
+ return `${i}`;
+ }
+ return i + indicator(i);
+}
+function indicator(i) {
+ i = Math.abs(i);
+ const cent = i % 100;
+ if (cent >= 10 && cent <= 20) {
+ return 'th';
+ }
+ const dec = i % 10;
+ if (dec === 1) {
+ return 'st';
+ }
+ if (dec === 2) {
+ return 'nd';
+ }
+ if (dec === 3) {
+ return 'rd';
+ }
+ return 'th';
+}
+
+/**
+ * @license
+ * Copyright 2021 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+function getModularInstance(service) {
+ if (service && service._delegate) {
+ return service._delegate;
+ }
+ else {
+ return service;
+ }
+}
+
+
+//# sourceMappingURL=index.esm2017.js.map
+
+
+/***/ }),
+
+/***/ "./src/config.js":
+/*!***********************!*\
+ !*** ./src/config.js ***!
+ \***********************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ API_KEY: function() { return /* binding */ API_KEY; },
+/* harmony export */ APP_NAME: function() { return /* binding */ APP_NAME; },
+/* harmony export */ AVATAR_SIZE: function() { return /* binding */ AVATAR_SIZE; },
+/* harmony export */ BROKEN_IMAGE_SIZE: function() { return /* binding */ BROKEN_IMAGE_SIZE; },
+/* harmony export */ CHANNEL_ACCESS_MODE: function() { return /* binding */ CHANNEL_ACCESS_MODE; },
+/* harmony export */ CLICKABLE_URL_SCHEMES: function() { return /* binding */ CLICKABLE_URL_SCHEMES; },
+/* harmony export */ DEFAULT_COLOR_SCHEME: function() { return /* binding */ DEFAULT_COLOR_SCHEME; },
+/* harmony export */ DEFAULT_HOST: function() { return /* binding */ DEFAULT_HOST; },
+/* harmony export */ DEFAULT_P2P_ACCESS_MODE: function() { return /* binding */ DEFAULT_P2P_ACCESS_MODE; },
+/* harmony export */ DEFAULT_TEXT_SIZE: function() { return /* binding */ DEFAULT_TEXT_SIZE; },
+/* harmony export */ DRAFTY_FR_MIME_TYPE_LEGACY: function() { return /* binding */ DRAFTY_FR_MIME_TYPE_LEGACY; },
+/* harmony export */ EDIT_PREVIEW_LENGTH: function() { return /* binding */ EDIT_PREVIEW_LENGTH; },
+/* harmony export */ FORWARDED_PREVIEW_LENGTH: function() { return /* binding */ FORWARDED_PREVIEW_LENGTH; },
+/* harmony export */ IMAGE_PREVIEW_DIM: function() { return /* binding */ IMAGE_PREVIEW_DIM; },
+/* harmony export */ IMAGE_THUMBNAIL_DIM: function() { return /* binding */ IMAGE_THUMBNAIL_DIM; },
+/* harmony export */ IMMEDIATE_P2P_SUBSCRIPTION: function() { return /* binding */ IMMEDIATE_P2P_SUBSCRIPTION; },
+/* harmony export */ KEYPRESS_DELAY: function() { return /* binding */ KEYPRESS_DELAY; },
+/* harmony export */ KNOWN_HOSTS: function() { return /* binding */ KNOWN_HOSTS; },
+/* harmony export */ LINK_CONTACT_US: function() { return /* binding */ LINK_CONTACT_US; },
+/* harmony export */ LINK_PRIVACY_POLICY: function() { return /* binding */ LINK_PRIVACY_POLICY; },
+/* harmony export */ LINK_TERMS_OF_SERVICE: function() { return /* binding */ LINK_TERMS_OF_SERVICE; },
+/* harmony export */ LOGGING_ENABLED: function() { return /* binding */ LOGGING_ENABLED; },
+/* harmony export */ MAX_AVATAR_BYTES: function() { return /* binding */ MAX_AVATAR_BYTES; },
+/* harmony export */ MAX_DURATION: function() { return /* binding */ MAX_DURATION; },
+/* harmony export */ MAX_EXTERN_ATTACHMENT_SIZE: function() { return /* binding */ MAX_EXTERN_ATTACHMENT_SIZE; },
+/* harmony export */ MAX_IMAGE_DIM: function() { return /* binding */ MAX_IMAGE_DIM; },
+/* harmony export */ MAX_INBAND_ATTACHMENT_SIZE: function() { return /* binding */ MAX_INBAND_ATTACHMENT_SIZE; },
+/* harmony export */ MAX_ONLINE_IN_TOPIC: function() { return /* binding */ MAX_ONLINE_IN_TOPIC; },
+/* harmony export */ MAX_PEER_TITLE_LENGTH: function() { return /* binding */ MAX_PEER_TITLE_LENGTH; },
+/* harmony export */ MAX_TAG_COUNT: function() { return /* binding */ MAX_TAG_COUNT; },
+/* harmony export */ MAX_TAG_LENGTH: function() { return /* binding */ MAX_TAG_LENGTH; },
+/* harmony export */ MAX_TITLE_LENGTH: function() { return /* binding */ MAX_TITLE_LENGTH; },
+/* harmony export */ MAX_TOPIC_DESCRIPTION_LENGTH: function() { return /* binding */ MAX_TOPIC_DESCRIPTION_LENGTH; },
+/* harmony export */ MEDIA_BREAKPOINT: function() { return /* binding */ MEDIA_BREAKPOINT; },
+/* harmony export */ MESSAGES_PAGE: function() { return /* binding */ MESSAGES_PAGE; },
+/* harmony export */ MESSAGE_PREVIEW_LENGTH: function() { return /* binding */ MESSAGE_PREVIEW_LENGTH; },
+/* harmony export */ MIN_DURATION: function() { return /* binding */ MIN_DURATION; },
+/* harmony export */ MIN_SWIPE_DISTANCE: function() { return /* binding */ MIN_SWIPE_DISTANCE; },
+/* harmony export */ MIN_TAG_LENGTH: function() { return /* binding */ MIN_TAG_LENGTH; },
+/* harmony export */ NEW_GRP_ACCESS_MODE: function() { return /* binding */ NEW_GRP_ACCESS_MODE; },
+/* harmony export */ NO_ACCESS_MODE: function() { return /* binding */ NO_ACCESS_MODE; },
+/* harmony export */ NO_DIMENSIONS_VIDEO: function() { return /* binding */ NO_DIMENSIONS_VIDEO; },
+/* harmony export */ QRCODE_SIZE: function() { return /* binding */ QRCODE_SIZE; },
+/* harmony export */ QUOTED_REPLY_LENGTH: function() { return /* binding */ QUOTED_REPLY_LENGTH; },
+/* harmony export */ READ_DELAY: function() { return /* binding */ READ_DELAY; },
+/* harmony export */ REM_SIZE: function() { return /* binding */ REM_SIZE; },
+/* harmony export */ SELF_AVATAR_URI: function() { return /* binding */ SELF_AVATAR_URI; },
+/* harmony export */ TOAST_DURATION: function() { return /* binding */ TOAST_DURATION; },
+/* harmony export */ VIDEO_PREVIEW_DIM: function() { return /* binding */ VIDEO_PREVIEW_DIM; },
+/* harmony export */ VIDEO_THUMBNAIL_WIDTH: function() { return /* binding */ VIDEO_THUMBNAIL_WIDTH; },
+/* harmony export */ WAKE_UP_TICK: function() { return /* binding */ WAKE_UP_TICK; },
+/* harmony export */ WAKE_UP_TIMEOUT: function() { return /* binding */ WAKE_UP_TIMEOUT; },
+/* harmony export */ WALLPAPER_DEFAULTS: function() { return /* binding */ WALLPAPER_DEFAULTS; }
+/* harmony export */ });
+/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version.js */ "./src/version.js");
+
+const APP_NAME = 'TinodeWeb/' + (_version_js__WEBPACK_IMPORTED_MODULE_0__.PACKAGE_VERSION || '0.24');
+const API_KEY = 'AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K';
+const KNOWN_HOSTS = {
+ hosted: 'web.tinode.co',
+ local: 'localhost:6060'
+};
+const DEFAULT_HOST = KNOWN_HOSTS.hosted;
+const LOGGING_ENABLED = true;
+const KEYPRESS_DELAY = 3_000;
+const READ_DELAY = 1_500;
+const MIN_TAG_LENGTH = 2;
+const MAX_TAG_LENGTH = 96;
+const MAX_TAG_COUNT = 16;
+const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';
+const NEW_GRP_ACCESS_MODE = 'JRWPSAO';
+const CHANNEL_ACCESS_MODE = 'JR';
+const NO_ACCESS_MODE = 'N';
+const MEDIA_BREAKPOINT = 640;
+const REM_SIZE = 13;
+const AVATAR_SIZE = 384;
+const MAX_AVATAR_BYTES = 4096;
+const BROKEN_IMAGE_SIZE = 32;
+const NO_DIMENSIONS_VIDEO = 128;
+const MESSAGES_PAGE = 24;
+const MAX_INBAND_ATTACHMENT_SIZE = 262_144;
+const MAX_EXTERN_ATTACHMENT_SIZE = 1 << 23;
+const MAX_IMAGE_DIM = 1024;
+const IMAGE_PREVIEW_DIM = 64;
+const VIDEO_PREVIEW_DIM = 96;
+const IMAGE_THUMBNAIL_DIM = 36;
+const VIDEO_THUMBNAIL_WIDTH = 48;
+const MAX_ONLINE_IN_TOPIC = 4;
+const MAX_TITLE_LENGTH = 60;
+const MAX_TOPIC_DESCRIPTION_LENGTH = 360;
+const MAX_PEER_TITLE_LENGTH = 24;
+const MESSAGE_PREVIEW_LENGTH = 80;
+const QUOTED_REPLY_LENGTH = 30;
+const FORWARDED_PREVIEW_LENGTH = 84;
+const EDIT_PREVIEW_LENGTH = 48;
+const MIN_DURATION = 2_000;
+const MAX_DURATION = 600_000;
+const LINK_CONTACT_US = 'mailto:support@tinode.co';
+const LINK_PRIVACY_POLICY = 'https://tinode.co/privacy.html';
+const LINK_TERMS_OF_SERVICE = 'https://tinode.co/terms.html';
+const IMMEDIATE_P2P_SUBSCRIPTION = false;
+const CLICKABLE_URL_SCHEMES = ['http', 'https', 'ftp', 'ftps'];
+const QRCODE_SIZE = 128;
+const WAKE_UP_TIMEOUT = 80000;
+const WAKE_UP_TICK = 1000;
+const MIN_SWIPE_DISTANCE = REM_SIZE * 3;
+const SELF_AVATAR_URI = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZpZXdCb3g9IjAgMCAxNyAxNyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41NjIgMXYxNS40NTlsNC42ODYtMy4yNyA0Ljc1MiAzLjI2di0xNS40NDloLTkuNDM4ek0xMiAxNC41NTFsLTMuNzU2LTIuNTc4LTMuNjgxIDIuNTY4di0xMi41NDFoNy40Mzd2MTIuNTUxeiIgZmlsbD0iIzU1NTU1NSIgLz48L3N2Zz4=';
+const TOAST_DURATION = 3_000;
+const DEFAULT_COLOR_SCHEME = 'auto';
+const DEFAULT_TEXT_SIZE = 10;
+const DRAFTY_FR_MIME_TYPE_LEGACY = 'application/json';
+const WALLPAPER_DEFAULTS = {
+ type: 'patt',
+ index: 0,
+ path: 'img/bkg/'
+};
+
+/***/ }),
+
+/***/ "./src/constants.js":
+/*!**************************!*\
+ !*** ./src/constants.js ***!
+ \**************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ CALL_HEAD_STARTED: function() { return /* binding */ CALL_HEAD_STARTED; },
+/* harmony export */ CALL_STATE_INCOMING_RECEIVED: function() { return /* binding */ CALL_STATE_INCOMING_RECEIVED; },
+/* harmony export */ CALL_STATE_IN_PROGRESS: function() { return /* binding */ CALL_STATE_IN_PROGRESS; },
+/* harmony export */ CALL_STATE_NONE: function() { return /* binding */ CALL_STATE_NONE; },
+/* harmony export */ CALL_STATE_OUTGOING_INITATED: function() { return /* binding */ CALL_STATE_OUTGOING_INITATED; }
+/* harmony export */ });
+const CALL_STATE_NONE = 0;
+const CALL_STATE_OUTGOING_INITATED = 1;
+const CALL_STATE_INCOMING_RECEIVED = 2;
+const CALL_STATE_IN_PROGRESS = 3;
+const CALL_HEAD_STARTED = 'started';
+
+/***/ }),
+
+/***/ "./src/lib/blob-helpers.js":
+/*!*********************************!*\
+ !*** ./src/lib/blob-helpers.js ***!
+ \*********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ MIME_EXTENSIONS: function() { return /* binding */ MIME_EXTENSIONS; },
+/* harmony export */ SUPPORTED_IMAGE_FORMATS: function() { return /* binding */ SUPPORTED_IMAGE_FORMATS; },
+/* harmony export */ base64DecodedLen: function() { return /* binding */ base64DecodedLen; },
+/* harmony export */ base64EncodedLen: function() { return /* binding */ base64EncodedLen; },
+/* harmony export */ base64ReEncode: function() { return /* binding */ base64ReEncode; },
+/* harmony export */ base64ToBlob: function() { return /* binding */ base64ToBlob; },
+/* harmony export */ base64ToIntArray: function() { return /* binding */ base64ToIntArray; },
+/* harmony export */ blobToBase64: function() { return /* binding */ blobToBase64; },
+/* harmony export */ fileNameForMime: function() { return /* binding */ fileNameForMime; },
+/* harmony export */ filePasted: function() { return /* binding */ filePasted; },
+/* harmony export */ fileToBase64: function() { return /* binding */ fileToBase64; },
+/* harmony export */ fitImageSize: function() { return /* binding */ fitImageSize; },
+/* harmony export */ getMimeType: function() { return /* binding */ getMimeType; },
+/* harmony export */ imageCrop: function() { return /* binding */ imageCrop; },
+/* harmony export */ imageScaled: function() { return /* binding */ imageScaled; },
+/* harmony export */ importVCard: function() { return /* binding */ importVCard; },
+/* harmony export */ intArrayToBase64: function() { return /* binding */ intArrayToBase64; },
+/* harmony export */ makeImageUrl: function() { return /* binding */ makeImageUrl; }
+/* harmony export */ });
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_0__);
+
+const SUPPORTED_IMAGE_FORMATS = ['image/jpeg', 'image/gif', 'image/png', 'image/svg', 'image/svg+xml'];
+const MIME_EXTENSIONS = ['jpg', 'gif', 'png', 'svg', 'svg'];
+function makeImageUrl(photo) {
+ if (photo && typeof photo == 'object') {
+ if (photo.ref) {
+ return photo.ref;
+ }
+ if (photo.data && photo.type) {
+ const mime = photo.type.startsWith('image/') ? photo.type : 'image/' + photo.type;
+ return 'data:' + mime + ';base64,' + photo.data;
+ }
+ }
+ return null;
+}
+function fitImageSize(width, height, maxWidth, maxHeight, forceSquare) {
+ width = width | 0;
+ height = height | 0;
+ maxWidth = maxWidth | 0;
+ maxHeight = maxHeight | 0;
+ if (width <= 0 || height <= 0 || maxWidth <= 0 || maxHeight <= 0) {
+ return null;
+ }
+ if (forceSquare) {
+ maxWidth = maxHeight = Math.min(maxWidth, maxHeight);
+ }
+ const scale = Math.min(Math.min(width, maxWidth) / width, Math.min(height, maxHeight) / height);
+ const size = {
+ dstWidth: width * scale | 0,
+ dstHeight: height * scale | 0
+ };
+ if (forceSquare) {
+ size.dstWidth = size.dstHeight = Math.min(size.dstWidth, size.dstHeight);
+ size.srcWidth = size.srcHeight = Math.min(width, height);
+ size.xoffset = (width - size.srcWidth) / 2 | 0;
+ size.yoffset = (height - size.srcWidth) / 2 | 0;
+ } else {
+ size.xoffset = size.yoffset = 0;
+ size.srcWidth = width;
+ size.srcHeight = height;
+ }
+ return size;
+}
+function fileNameForMime(fname, mime) {
+ const idx = SUPPORTED_IMAGE_FORMATS.indexOf(mime);
+ if (idx < 0 || !fname) {
+ return fname;
+ }
+ const ext = MIME_EXTENSIONS[idx];
+ const at = fname.lastIndexOf('.');
+ if (at >= 0) {
+ fname = fname.substring(0, at);
+ }
+ return fname + '.' + ext;
+}
+function imageScaled(fileOrBlob, maxWidth, maxHeight, maxSize, forceSquare) {
+ return new Promise((resolve, reject) => {
+ const img = new Image();
+ img.crossOrigin = 'Anonymous';
+ img.onerror = function (err) {
+ reject(new Error("Image format unrecognized"));
+ };
+ img.onload = async function () {
+ URL.revokeObjectURL(img.src);
+ const dim = fitImageSize(img.width, img.height, maxWidth, maxHeight, forceSquare);
+ if (!dim) {
+ reject(new Error("Invalid image"));
+ return;
+ }
+ let canvas = document.createElement('canvas');
+ canvas.width = dim.dstWidth;
+ canvas.height = dim.dstHeight;
+ let ctx = canvas.getContext('2d');
+ ctx.imageSmoothingEnabled = true;
+ ctx.drawImage(img, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight, 0, 0, dim.dstWidth, dim.dstHeight);
+ const mime = SUPPORTED_IMAGE_FORMATS.includes(fileOrBlob.type) ? fileOrBlob.type : 'image/jpeg';
+ let blob = await new Promise(resolve => canvas.toBlob(resolve, mime));
+ if (!blob) {
+ reject(new Error("Unsupported image format"));
+ return;
+ }
+ while (maxSize > 0 && blob.length > maxSize) {
+ dim.dstWidth = dim.dstWidth * 0.70710678118 | 0;
+ dim.dstHeight = dim.dstHeight * 0.70710678118 | 0;
+ canvas.width = dim.dstWidth;
+ canvas.height = dim.dstHeight;
+ ctx = canvas.getContext('2d');
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ ctx.drawImage(img, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight, 0, 0, dim.dstWidth, dim.dstHeight);
+ blob = await new Promise(resolve => canvas.toBlob(resolve, mime));
+ }
+ canvas = null;
+ resolve({
+ mime: mime,
+ blob: blob,
+ width: dim.dstWidth,
+ height: dim.dstHeight,
+ name: fileNameForMime(fileOrBlob.name, mime)
+ });
+ };
+ img.src = URL.createObjectURL(fileOrBlob);
+ });
+}
+function imageCrop(mime, objURL, left, top, width, height, scale) {
+ return new Promise((resolve, reject) => {
+ const img = new Image();
+ img.crossOrigin = 'Anonymous';
+ img.onerror = _ => {
+ reject(new Error("Image format unrecognized"));
+ };
+ img.onload = _ => {
+ URL.revokeObjectURL(img.src);
+ let canvas = document.createElement('canvas');
+ canvas.width = width * scale;
+ canvas.height = height * scale;
+ let ctx = canvas.getContext('2d');
+ ctx.imageSmoothingEnabled = true;
+ ctx.drawImage(img, left, top, width, height, 0, 0, canvas.width, canvas.height);
+ mime = SUPPORTED_IMAGE_FORMATS.includes(mime) ? mime : 'image/jpeg';
+ canvas.toBlob(blob => {
+ canvas = null;
+ if (blob) {
+ resolve({
+ mime: mime,
+ blob: blob,
+ width: width,
+ height: height
+ });
+ } else {
+ reject(new Error("Unsupported image format"));
+ }
+ }, mime);
+ };
+ img.src = objURL;
+ });
+}
+function fileToBase64(file) {
+ return new Promise((resolve, reject) => {
+ const reader = new FileReader();
+ reader.onerror = _ => {
+ reject(reader.error);
+ };
+ reader.onload = _ => {
+ resolve({
+ mime: file.type,
+ bits: reader.result.split(',')[1],
+ name: file.name
+ });
+ };
+ reader.readAsDataURL(file);
+ });
+}
+function blobToBase64(blob) {
+ return new Promise((resolve, reject) => {
+ const reader = new FileReader();
+ reader.onerror = _ => {
+ reject(reader.error);
+ };
+ reader.onload = _ => {
+ resolve({
+ mime: blob.type,
+ bits: reader.result.split(',')[1]
+ });
+ };
+ reader.readAsDataURL(blob);
+ });
+}
+function filePasted(event, onImageSuccess, onAttachmentSuccess, onError) {
+ const items = (event.clipboardData || event.originalEvent.clipboardData || {}).items;
+ if (!items || !items.length) {
+ return false;
+ }
+ for (let i in items) {
+ const item = items[i];
+ if (item.kind === 'file') {
+ const file = item.getAsFile();
+ if (!file) {
+ console.error("Failed to get file object from pasted file item", item.kind, item.type);
+ onError("Failed to get file object from pasted file item");
+ continue;
+ }
+ if (file.type && file.type.split('/')[0] == 'image') {
+ onImageSuccess(file);
+ } else {
+ onAttachmentSuccess(file);
+ }
+ return true;
+ }
+ }
+ return false;
+}
+function getMimeType(header) {
+ const mime = /^data:(image\/[-+a-z0-9.]+);base64/.exec(header);
+ return mime && mime.length > 1 ? mime[1] : null;
+}
+function base64EncodedLen(n) {
+ return Math.floor((n + 2) / 3) * 4;
+}
+function base64DecodedLen(n) {
+ return Math.floor(n / 4) * 3;
+}
+function base64ReEncode(str) {
+ if (str) {
+ str = str.replace(/-/g, '+').replace(/_/g, '/');
+ try {
+ str = btoa(atob(str));
+ } catch (err) {
+ console.error("Failed to base64 re-encode string.", err);
+ str = null;
+ }
+ }
+ return str;
+}
+function base64ToBlob(str, mime) {
+ if (!str) {
+ return null;
+ }
+ try {
+ const bin = atob(str);
+ const length = bin.length;
+ const buf = new ArrayBuffer(length);
+ const arr = new Uint8Array(buf);
+ for (let i = 0; i < length; i++) {
+ arr[i] = bin.charCodeAt(i);
+ }
+ return new Blob([buf], {
+ type: mime
+ });
+ } catch (err) {
+ console.error("Failed to convert base64 to blob: ", err);
+ }
+ return null;
+}
+function intArrayToBase64(arr) {
+ if (!Array.isArray(arr)) {
+ return null;
+ }
+ try {
+ let bin = '';
+ new Uint8Array(arr).forEach(b => bin += String.fromCharCode(b));
+ return window.btoa(bin);
+ } catch (err) {}
+ return null;
+}
+function base64ToIntArray(b64) {
+ const arr = [];
+ try {
+ const bin = window.atob(b64);
+ [...bin].forEach(c => {
+ arr.push(c.charCodeAt(0));
+ });
+ return arr;
+ } catch (err) {}
+ return null;
+}
+function importVCard(fileOrBlob) {
+ return new Promise((resolve, reject) => {
+ const reader = new FileReader();
+ reader.onerror = _ => {
+ reject(reader.error);
+ };
+ reader.onload = _ => {
+ const card = tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.TheCard.importVCard(reader.result);
+ if (!card) {
+ reject(new Error("Failed to parse vCard"));
+ return;
+ }
+ resolve(card);
+ };
+ reader.readAsText(fileOrBlob);
+ });
+}
+
+/***/ }),
+
+/***/ "./src/lib/formatters.js":
+/*!*******************************!*\
+ !*** ./src/lib/formatters.js ***!
+ \*******************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ fullFormatter: function() { return /* binding */ fullFormatter; },
+/* harmony export */ previewFormatter: function() { return /* binding */ previewFormatter; },
+/* harmony export */ replyFormatter: function() { return /* binding */ replyFormatter; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _widgets_audio_player_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/audio-player.jsx */ "./src/widgets/audio-player.jsx");
+/* harmony import */ var _widgets_call_message_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/call-message.jsx */ "./src/widgets/call-message.jsx");
+/* harmony import */ var _widgets_call_status_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/call-status.jsx */ "./src/widgets/call-status.jsx");
+/* harmony import */ var _widgets_inline_video_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/inline-video.jsx */ "./src/widgets/inline-video.jsx");
+/* harmony import */ var _widgets_lazy_image_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../widgets/lazy-image.jsx */ "./src/widgets/lazy-image.jsx");
+/* harmony import */ var _widgets_the_card_mini_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../widgets/the-card-mini.jsx */ "./src/widgets/the-card-mini.jsx");
+/* harmony import */ var _widgets_uploading_image_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../widgets/uploading-image.jsx */ "./src/widgets/uploading-image.jsx");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./blob-helpers.js */ "./src/lib/blob-helpers.js");
+/* harmony import */ var _strformat_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./strformat.js */ "./src/lib/strformat.js");
+/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utils.js */ "./src/lib/utils.js");
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ drafty_form: {
+ id: 'drafty_form',
+ defaultMessage: 'Form: ',
+ description: 'Comment for form in Drafty'
+ },
+ drafty_attachment: {
+ id: 'drafty_attachment',
+ defaultMessage: 'Attachment',
+ description: 'Comment for attachment in Drafty'
+ },
+ drafty_image: {
+ id: 'drafty_image',
+ defaultMessage: 'Picture',
+ description: 'Comment for embedded images in Drafty'
+ },
+ drafty_video: {
+ id: 'drafty_video',
+ defaultMessage: 'Video recording',
+ description: 'Comment for videos embedded in Drafty'
+ },
+ drafty_unknown: {
+ id: 'drafty_unknown',
+ defaultMessage: 'Unsupported',
+ description: 'Unsupported entity in drafty'
+ }
+});
+function fullFormatter(style, data, values, key, stack) {
+ if (stack.includes('QQ')) {
+ return quoteFormatter.call(this, style, data, values, key);
+ }
+ if (!style) {
+ return values;
+ }
+ let el = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.tagName(style);
+ let attr = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attrValue(style, data) || {};
+ attr.key = key;
+ switch (style) {
+ case 'AU':
+ if (attr.src) {
+ attr.src = this.authorizeURL((0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.sanitizeUrlForMime)(attr.src, 'audio'));
+ attr.duration = data.duration > 0 ? data.duration | 0 : undefined;
+ attr.preview = data.preview;
+ attr.loading = 'lazy';
+ }
+ el = _widgets_audio_player_jsx__WEBPACK_IMPORTED_MODULE_3__["default"];
+ values = null;
+ break;
+ case 'BR':
+ values = null;
+ break;
+ case 'EX':
+ break;
+ case 'HL':
+ attr.className = 'highlight';
+ break;
+ case 'HD':
+ el = null;
+ values = null;
+ break;
+ case 'IM':
+ el = handleImageData.call(this, el, data, attr);
+ values = null;
+ break;
+ case 'BN':
+ attr.onClick = e => this.onHandleClick(e, 'form_button');
+ let inner = react__WEBPACK_IMPORTED_MODULE_0___default().Children.map(values, child => {
+ return typeof child == 'string' ? child : undefined;
+ });
+ if (!inner || inner.length == 0) {
+ inner = [attr.name];
+ }
+ attr['data-title'] = inner.join('');
+ break;
+ case 'LN':
+ if (attr) {
+ attr.href = typeof attr.href == 'string' ? (0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.sanitizeUrl)(attr.href, _config_js__WEBPACK_IMPORTED_MODULE_10__.CLICKABLE_URL_SCHEMES) : '';
+ }
+ break;
+ case 'MN':
+ attr.className = 'mention';
+ if (data) {
+ attr.className += ' ' + (0,_strformat_js__WEBPACK_IMPORTED_MODULE_12__.idToColorClass)(data.val, false, true);
+ }
+ break;
+ case 'FM':
+ attr.className = 'bot-form';
+ break;
+ case 'RW':
+ break;
+ case 'QQ':
+ attr.className = 'reply-quote';
+ attr.onClick = e => this.onHandleClick(e, 'quote');
+ break;
+ case 'TC':
+ el = _widgets_the_card_mini_jsx__WEBPACK_IMPORTED_MODULE_8__["default"];
+ attr.content = data;
+ attr.authorizeURL = this.authorizeURL;
+ attr.onChatClick = e => this.onHandleClick(e, 'contact_chat');
+ attr.onFindClick = e => this.onHandleClick(e, 'contact_find');
+ values = null;
+ break;
+ case 'VC':
+ el = _widgets_call_message_jsx__WEBPACK_IMPORTED_MODULE_4__["default"];
+ values = null;
+ if (data) {
+ attr.callState = data.state;
+ attr.incoming = data.incoming;
+ attr.duration = data.duration;
+ }
+ break;
+ case 'VD':
+ el = handleVideoData.call(this, el, data, attr);
+ values = null;
+ break;
+ default:
+ if (!el) {
+ el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
+ attr = {
+ key: key
+ };
+ let body = values;
+ if (!Array.isArray(values) || !values.join('').trim()) {
+ body = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('span', {
+ key: 'x1',
+ className: 'gray'
+ }, this.formatMessage(messages.drafty_unknown))];
+ }
+ values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('i', {
+ key: 'x0',
+ className: 'material-icons gray'
+ }, 'extension'), ' '].concat(body);
+ }
+ break;
+ }
+ if (!el) {
+ return values;
+ }
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(el, attr, values);
+}
+function handleImageData(el, data, attr) {
+ if (!data) {
+ attr.src = 'img/broken_image.png';
+ attr.style = {
+ width: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',
+ height: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px'
+ };
+ return el;
+ }
+ attr.className = 'inline-image';
+ const dim = (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.fitImageSize)(data.width, data.height, this.viewportWidth > 0 ? Math.min(this.viewportWidth - _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 6.5, _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 34.5) : _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 34.5, _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 24, false) || {
+ dstWidth: _config_js__WEBPACK_IMPORTED_MODULE_10__.BROKEN_IMAGE_SIZE,
+ dstHeight: _config_js__WEBPACK_IMPORTED_MODULE_10__.BROKEN_IMAGE_SIZE
+ };
+ attr.style = {
+ width: dim.dstWidth + 'px',
+ height: dim.dstHeight + 'px',
+ minWidth: dim.dstWidth + 'px',
+ minHeight: dim.dstHeight + 'px'
+ };
+ if (!tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isProcessing(data)) {
+ attr.src = this.authorizeURL((0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.sanitizeUrlForMime)(attr.src, 'image'));
+ attr.alt = data.name;
+ if (attr.src) {
+ if (Math.max(data.width || 0, data.height || 0) > _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM) {
+ attr.onClick = e => this.onHandleClick(e, 'image');
+ attr.className += ' image-clickable';
+ }
+ attr.loading = 'lazy';
+ } else {
+ attr.src = null;
+ }
+ } else {
+ el = _widgets_uploading_image_jsx__WEBPACK_IMPORTED_MODULE_9__["default"];
+ }
+ return el;
+}
+function handleVideoData(el, data, attr) {
+ if (!data) {
+ attr.src = 'img/broken_video.png';
+ attr.style = {
+ width: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',
+ height: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px'
+ };
+ return el;
+ }
+ attr.className = 'inline-image';
+ const dim = (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.fitImageSize)(data.width, data.height, this.viewportWidth > 0 ? Math.min(this.viewportWidth - _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 6.5, _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 34.5) : _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 34.5, _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 24, false) || {
+ dstWidth: _config_js__WEBPACK_IMPORTED_MODULE_10__.NO_DIMENSIONS_VIDEO,
+ dstHeight: _config_js__WEBPACK_IMPORTED_MODULE_10__.NO_DIMENSIONS_VIDEO
+ };
+ attr.style = {
+ width: dim.dstWidth + 'px',
+ height: dim.dstHeight + 'px',
+ minWidth: dim.dstWidth + 'px',
+ minHeight: dim.dstHeight + 'px'
+ };
+ if (!tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isProcessing(data)) {
+ attr.src = this.authorizeURL((0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.sanitizeUrlForMime)(attr.src, 'image'));
+ attr.alt = data.name;
+ if (data.ref || data.val) {
+ attr.onClick = e => this.onHandleClick(e, 'video');
+ attr.loading = 'lazy';
+ }
+ el = _widgets_inline_video_jsx__WEBPACK_IMPORTED_MODULE_6__["default"];
+ } else {
+ el = _widgets_uploading_image_jsx__WEBPACK_IMPORTED_MODULE_9__["default"];
+ }
+ return el;
+}
+function previewFormatter(style, data, values, key) {
+ if (!style) {
+ return values;
+ }
+ let el = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.tagName(style);
+ const attr = {
+ key: key
+ };
+ switch (style) {
+ case 'AU':
+ el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
+ values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('i', {
+ key: 'au',
+ className: 'material-icons'
+ }, 'mic'), ' ', (0,_strformat_js__WEBPACK_IMPORTED_MODULE_12__.secondsToTime)(data.duration / 1000)];
+ break;
+ case 'BR':
+ el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
+ values = [' '];
+ break;
+ case 'HL':
+ attr.className = 'highlight preview';
+ break;
+ case 'LN':
+ case 'MN':
+ el = 'span';
+ break;
+ case 'IM':
+ el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
+ values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('i', {
+ key: 'im',
+ className: 'material-icons'
+ }, 'photo'), ' ', this.formatMessage(messages.drafty_image)];
+ break;
+ case 'BN':
+ el = 'span';
+ attr.className = 'flat-button faux';
+ break;
+ case 'FM':
+ el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
+ values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('i', {
+ key: 'fm',
+ className: 'material-icons'
+ }, 'dashboard'), this.formatMessage(messages.drafty_form)].concat(' ', values || []);
+ break;
+ case 'RW':
+ el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
+ break;
+ case 'EX':
+ if (data) {
+ if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isFormResponseType(data.mime)) {
+ return null;
+ }
+ delete data.val;
+ delete data.ref;
+ }
+ el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
+ values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('i', {
+ key: 'ex',
+ className: 'material-icons'
+ }, 'attachment'), ' ', this.formatMessage(messages.drafty_attachment)];
+ break;
+ case 'VC':
+ el = _widgets_call_status_jsx__WEBPACK_IMPORTED_MODULE_5__["default"];
+ if (data) {
+ attr.callState = data.state;
+ attr.incoming = data.incoming;
+ attr.duration = data.duration;
+ }
+ values = null;
+ break;
+ case 'QQ':
+ case 'HD':
+ el = null;
+ values = null;
+ break;
+ case 'TC':
+ el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
+ values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('i', {
+ key: 'tc',
+ className: 'material-icons'
+ }, 'contact_mail'), ' ', tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getFn(data) || this.formatMessage(messages.drafty_unknown)];
+ break;
+ case 'VD':
+ el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
+ values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('i', {
+ key: 'im',
+ className: 'material-icons'
+ }, 'play_circle_outline'), ' ', this.formatMessage(messages.drafty_video)];
+ break;
+ default:
+ if (!el) {
+ el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
+ values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('i', {
+ key: 'x0',
+ className: 'material-icons gray'
+ }, 'extension'), ' ', this.formatMessage(messages.drafty_unknown)];
+ }
+ break;
+ }
+ if (!el) {
+ return values;
+ }
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(el, attr, values);
+}
+;
+function inlineImageAttr(attr, data) {
+ attr.style = {
+ width: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',
+ height: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',
+ maxWidth: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',
+ maxHeight: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px'
+ };
+ attr.className = 'inline-image';
+ attr.alt = this.formatMessage(messages.drafty_image);
+ if (!data) {
+ attr.src = 'img/broken_image.png';
+ } else {
+ attr.src = attr.src || 'img/broken_image.png';
+ }
+ attr.title = attr.alt;
+ return attr;
+}
+function inlineVideoAttr(attr, data) {
+ const dim = (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.fitImageSize)(data.width, data.height, _config_js__WEBPACK_IMPORTED_MODULE_10__.VIDEO_THUMBNAIL_WIDTH, _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM);
+ attr.style = {
+ width: dim.width + 'px',
+ height: dim.height + 'px',
+ maxWidth: _config_js__WEBPACK_IMPORTED_MODULE_10__.VIDEO_THUMBNAIL_WIDTH + 'px',
+ maxHeight: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px'
+ };
+ attr.className = 'inline-image';
+ attr.alt = this.formatMessage(messages.drafty_video);
+ attr.title = attr.alt;
+ if (!data) {
+ attr.src = 'img/broken_video.png';
+ } else {
+ attr.src = attr.src || 'img/broken_video.png';
+ }
+ return attr;
+}
+function quoteFormatter(style, data, values, key) {
+ if (['BR', 'EX', 'IM', 'MN', 'VD'].includes(style)) {
+ let el = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.tagName(style);
+ let attr = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attrValue(style, data) || {};
+ attr.key = key;
+ switch (style) {
+ case 'BR':
+ values = null;
+ break;
+ case 'IM':
+ attr = inlineImageAttr.call(this, attr, data);
+ values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', attr, null), ' ', attr.alt];
+ el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
+ attr = {
+ key: key
+ };
+ break;
+ case 'VD':
+ attr = inlineVideoAttr.call(this, attr, data);
+ values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', attr, null), ' ', attr.alt];
+ el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
+ attr = {
+ key: key
+ };
+ break;
+ case 'MN':
+ el = 'span';
+ attr.className = 'mention';
+ if (data) {
+ attr.className += ' ' + (0,_strformat_js__WEBPACK_IMPORTED_MODULE_12__.idToColorClass)(data.val, false, true);
+ }
+ break;
+ case 'EX':
+ let fname;
+ if (data) {
+ if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isFormResponseType(data.mime)) {
+ return null;
+ }
+ fname = data.name;
+ delete data.val;
+ delete data.ref;
+ }
+ el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
+ values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('i', {
+ key: 'ex',
+ className: 'material-icons'
+ }, 'attachment'), (0,_strformat_js__WEBPACK_IMPORTED_MODULE_12__.shortenFileName)(fname, 16) || this.formatMessage(messages.drafty_attachment)];
+ break;
+ }
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(el, attr, values);
+ }
+ return previewFormatter.call(this, style, data, values, key);
+}
+function quoteImageOrVideo(data, isVideo) {
+ let promise;
+ let bits, ref, mime;
+ if (isVideo) {
+ bits = data.preview;
+ mime = data.premime || 'image/jpeg';
+ ref = data.preref;
+ } else {
+ bits = data.val;
+ mime = data.mime;
+ ref = data.ref;
+ }
+ if (bits) {
+ const blob = (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.base64ToBlob)(bits, mime);
+ if (!blob) {
+ throw new Error("Invalid image");
+ }
+ promise = Promise.resolve(blob);
+ } else if (ref) {
+ promise = fetch(this.authorizeURL((0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.sanitizeUrlForMime)(ref, 'image'))).then(evt => {
+ if (evt.ok) {
+ return evt.blob();
+ } else {
+ throw new Error(`Image fetch unsuccessful: ${evt.status} ${evt.statusText}`);
+ }
+ });
+ } else {
+ throw new Error("Missing image data");
+ }
+ return promise.then(blob => {
+ return (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.imageScaled)(blob, isVideo ? _config_js__WEBPACK_IMPORTED_MODULE_10__.VIDEO_THUMBNAIL_WIDTH : _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM, _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM, -1, !isVideo);
+ }).then(scaled => {
+ if (isVideo) {
+ data.premime = scaled.mime;
+ } else {
+ data.mime = scaled.mime;
+ }
+ data.size = scaled.blob.size;
+ data.width = scaled.width;
+ data.height = scaled.height;
+ delete data.ref;
+ delete data.preref;
+ data.src = URL.createObjectURL(scaled.blob);
+ return (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.blobToBase64)(scaled.blob);
+ }).then(b64 => {
+ if (isVideo) {
+ data.preview = b64.bits;
+ } else {
+ data.val = b64.bits;
+ }
+ return data;
+ }).catch(err => {
+ delete data.val;
+ delete data.preview;
+ delete data.src;
+ data.width = _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM;
+ data.height = _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM;
+ throw err;
+ });
+}
+function replyFormatter(style, data, values, key, stack) {
+ if (style == 'IM' || style == 'VD') {
+ const isImage = style == 'IM';
+ const attr = isImage ? inlineImageAttr.call(this, {
+ key: key
+ }, data) : inlineVideoAttr.call(this, {
+ key: key
+ }, data);
+ let loadedPromise;
+ try {
+ loadedPromise = (0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.cancelablePromise)(quoteImageOrVideo.call(this, data, style == 'VD'));
+ } catch (error) {
+ console.warn("Failed to quote image:", error.message);
+ loadedPromise = (0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.cancelablePromise)(error);
+ }
+ attr.whenDone = loadedPromise;
+ values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_lazy_image_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], attr, null), ' ', attr.alt];
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {
+ key: key
+ }, values);
+ } else if (style == 'QQ') {
+ if (stack.includes('QQ')) {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement('span', {
+ key: key
+ }, [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('i', {
+ key: 'qq',
+ className: 'material-icons'
+ }, 'format_quote'), ' ']);
+ }
+ const attr = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attrValue('QQ', data) || {};
+ attr.key = key;
+ attr.className = 'reply-quote';
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.tagName('QQ'), attr, values);
+ }
+ return quoteFormatter.call(this, style, data, values, key);
+}
+
+/***/ }),
+
+/***/ "./src/lib/host-name.js":
+/*!******************************!*\
+ !*** ./src/lib/host-name.js ***!
+ \******************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ detectServerAddress: function() { return /* binding */ detectServerAddress; },
+/* harmony export */ isLocalHost: function() { return /* binding */ isLocalHost; },
+/* harmony export */ isSecureConnection: function() { return /* binding */ isSecureConnection; }
+/* harmony export */ });
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+
+function detectServerAddress() {
+ let host = _config_js__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_HOST;
+ if (typeof window.location == 'object') {
+ if (window.location.protocol == 'file:' || window.location.hostname == 'localhost') {
+ host = _config_js__WEBPACK_IMPORTED_MODULE_0__.KNOWN_HOSTS.local;
+ } else if (window.location.hostname) {
+ host = window.location.hostname + (window.location.port ? ':' + window.location.port : '');
+ }
+ }
+ return host;
+}
+function isSecureConnection() {
+ if (typeof window.location == 'object') {
+ return window.location.protocol == 'https:';
+ }
+ return false;
+}
+function isLocalHost() {
+ if (typeof window.location == 'object') {
+ return window.location.hostname == 'localhost';
+ }
+ return false;
+}
+
+/***/ }),
+
+/***/ "./src/lib/local-storage.js":
+/*!**********************************!*\
+ !*** ./src/lib/local-storage.js ***!
+ \**********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ LocalStorageUtil; }
+/* harmony export */ });
+class LocalStorageUtil {
+ static setObject(key, value) {
+ localStorage.setItem(key, JSON.stringify(value));
+ }
+ static getObject(key) {
+ const value = localStorage.getItem(key);
+ return value && JSON.parse(value);
+ }
+ static updateObject(key, value) {
+ const oldVal = this.getObject(key);
+ this.setObject(key, Object.assign(oldVal || {}, value));
+ }
+ static removeItem(key) {
+ localStorage.removeItem(key);
+ }
+}
+
+/***/ }),
+
+/***/ "./src/lib/navigation.js":
+/*!*******************************!*\
+ !*** ./src/lib/navigation.js ***!
+ \*******************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ HashNavigation; }
+/* harmony export */ });
+class HashNavigation {
+ static parseUrlHash(hash) {
+ const parts = hash.split('?', 2);
+ const params = {};
+ let path = [];
+ if (parts[0]) {
+ path = parts[0].replace('#', '').split('/');
+ }
+ if (parts[1]) {
+ parts[1].split('&').forEach(arg => {
+ const eq = arg.indexOf('=');
+ if (eq > 0) {
+ params[arg.slice(0, eq)] = decodeURIComponent(arg.slice(eq + 1));
+ }
+ });
+ }
+ return {
+ path: path,
+ params: params
+ };
+ }
+ static navigateTo(url) {
+ window.location.hash = url;
+ }
+ static composeUrlHash(path, params) {
+ let url = path.join('/');
+ const args = [];
+ for (const key in params) {
+ if (params.hasOwnProperty(key)) {
+ if (params[key] !== undefined) {
+ args.push(key + '=' + encodeURIComponent(params[key]));
+ }
+ }
+ }
+ if (args.length > 0) {
+ url += '?' + args.join('&');
+ }
+ return url;
+ }
+ static addUrlParam(hash, key, value) {
+ const parsed = HashNavigation.parseUrlHash(hash);
+ parsed.params[key] = value;
+ return HashNavigation.composeUrlHash(parsed.path, parsed.params);
+ }
+ static removeUrlParam(hash, key) {
+ const parsed = HashNavigation.parseUrlHash(hash);
+ delete parsed.params[key];
+ return HashNavigation.composeUrlHash(parsed.path, parsed.params);
+ }
+ static removeUrlParams(hash, keys) {
+ if (!Array.isArray(keys)) {
+ keys = [keys];
+ }
+ const parsed = HashNavigation.parseUrlHash(hash);
+ for (const key of keys) {
+ delete parsed.params[key];
+ }
+ return HashNavigation.composeUrlHash(parsed.path, parsed.params);
+ }
+ static setUrlSidePanel(hash, sidepanel) {
+ const parsed = HashNavigation.parseUrlHash(hash);
+ parsed.path[0] = sidepanel;
+ return HashNavigation.composeUrlHash(parsed.path, parsed.params);
+ }
+ static setUrlInfoPanel(hash, infopanel) {
+ const parsed = HashNavigation.parseUrlHash(hash);
+ if (infopanel) {
+ parsed.params.info = infopanel;
+ } else {
+ delete parsed.params.info;
+ }
+ return HashNavigation.composeUrlHash(parsed.path, parsed.params);
+ }
+ static setUrlTopic(hash, topic) {
+ const parsed = HashNavigation.parseUrlHash(hash);
+ parsed.path[1] = topic;
+ delete parsed.params.info;
+ return HashNavigation.composeUrlHash(parsed.path, parsed.params);
+ }
+}
+
+/***/ }),
+
+/***/ "./src/lib/strformat.js":
+/*!******************************!*\
+ !*** ./src/lib/strformat.js ***!
+ \******************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ bytesToHumanSize: function() { return /* binding */ bytesToHumanSize; },
+/* harmony export */ flagEmoji: function() { return /* binding */ flagEmoji; },
+/* harmony export */ idToColorClass: function() { return /* binding */ idToColorClass; },
+/* harmony export */ letterTileColorId: function() { return /* binding */ letterTileColorId; },
+/* harmony export */ relativeDateFormat: function() { return /* binding */ relativeDateFormat; },
+/* harmony export */ secondsToTime: function() { return /* binding */ secondsToTime; },
+/* harmony export */ shortDateFormat: function() { return /* binding */ shortDateFormat; },
+/* harmony export */ shortenFileName: function() { return /* binding */ shortenFileName; },
+/* harmony export */ truncateString: function() { return /* binding */ truncateString; }
+/* harmony export */ });
+function shortDateFormat(then, locale) {
+ locale = locale || window.navigator.userLanguage || window.navigator.language;
+ const now = new Date();
+ if (then.getFullYear() == now.getFullYear()) {
+ if (then.getMonth() == now.getMonth() && then.getDate() == now.getDate()) {
+ return then.toLocaleTimeString(locale, {
+ hour12: false,
+ hour: '2-digit',
+ minute: '2-digit'
+ });
+ }
+ return then.toLocaleDateString(locale, {
+ hour12: false,
+ month: 'short',
+ day: 'numeric',
+ hour: '2-digit',
+ minute: '2-digit'
+ });
+ }
+ return then.toLocaleDateString(locale, {
+ year: 'numeric',
+ month: 'short',
+ day: 'numeric'
+ });
+}
+function relativeDateFormat(then, locale) {
+ locale = locale || window.navigator.userLanguage || window.navigator.language;
+ const now = new Date();
+ const thenDays = Math.floor((then.getTime() - then.getTimezoneOffset() * 60_000) / 86_400_000);
+ const nowDays = Math.floor((now.getTime() - now.getTimezoneOffset() * 60_000) / 86_400_000);
+ const diff = thenDays - nowDays;
+ if (Math.abs(diff) < 2) {
+ return new Intl.RelativeTimeFormat(locale, {
+ numeric: 'auto'
+ }).format(diff, 'day');
+ }
+ return new Intl.DateTimeFormat(locale).format(then);
+}
+function secondsToTime(seconds, fixedMin) {
+ if (typeof seconds != 'number') {
+ return '';
+ }
+ let min = (Math.floor(seconds / 60) | 0) % 60;
+ let hours = Math.floor(seconds / 3600) | 0;
+ if (fixedMin || hours > 0) {
+ min = min < 10 ? `0${min}` : min;
+ }
+ let sec = (seconds | 0) % 60;
+ sec = sec < 10 ? `0${sec}` : sec;
+ if (hours == 0) {
+ return `${min}:${sec}`;
+ }
+ return `${hours}:${min}:${sec}`;
+}
+function bytesToHumanSize(bytes) {
+ if (!bytes || bytes == 0) {
+ return '0 Bytes';
+ }
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];
+ const bucket = Math.min(Math.floor(Math.log2(bytes) / 10) | 0, sizes.length - 1);
+ const count = bytes / Math.pow(1024, bucket);
+ const round = bucket > 0 ? count < 3 ? 2 : count < 30 ? 1 : 0 : 0;
+ return count.toFixed(round) + ' ' + sizes[bucket];
+}
+function shortenFileName(filename, maxLength) {
+ if (typeof filename != 'string') {
+ return filename;
+ }
+ return filename.length > maxLength ? filename.slice(0, maxLength / 2 - 1) + '…' + filename.slice(1 - maxLength / 2) : filename;
+}
+function stringToColorHash(value) {
+ let hash = 0;
+ value = '' + value;
+ for (let i = 0; i < value.length; i++) {
+ hash = (hash << 5) - hash + value.charCodeAt(i);
+ hash = hash & hash;
+ }
+ return hash;
+}
+function letterTileColorId(userId) {
+ return Math.abs(stringToColorHash(userId)) % 16;
+}
+function idToColorClass(id, light, fg) {
+ return (light ? 'lt-' : 'dk-') + (fg ? 'fg-' : 'bg-') + letterTileColorId(id);
+}
+function flagEmoji(countryCode) {
+ const codePoints = countryCode.toUpperCase().split('').map(char => 0x1F1A5 + char.charCodeAt());
+ return String.fromCodePoint(...codePoints);
+}
+function truncateString(str, maxLength) {
+ if (typeof str !== 'string') {
+ return str;
+ }
+ if (str.length <= maxLength) {
+ return str;
+ }
+ const isRTL = /[\u0590-\u05FF\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]/.test(str);
+ return isRTL ? '…' + str.slice(0, maxLength - 1) : str.slice(0, maxLength - 1) + '…';
+}
+
+/***/ }),
+
+/***/ "./src/lib/utils.js":
+/*!**************************!*\
+ !*** ./src/lib/utils.js ***!
+ \**************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ arrayEqual: function() { return /* binding */ arrayEqual; },
+/* harmony export */ asEmail: function() { return /* binding */ asEmail; },
+/* harmony export */ asPhone: function() { return /* binding */ asPhone; },
+/* harmony export */ cancelablePromise: function() { return /* binding */ cancelablePromise; },
+/* harmony export */ defaultWallpaper: function() { return /* binding */ defaultWallpaper; },
+/* harmony export */ deliveryMarker: function() { return /* binding */ deliveryMarker; },
+/* harmony export */ isUrlRelative: function() { return /* binding */ isUrlRelative; },
+/* harmony export */ sanitizeUrl: function() { return /* binding */ sanitizeUrl; },
+/* harmony export */ sanitizeUrlForMime: function() { return /* binding */ sanitizeUrlForMime; },
+/* harmony export */ theCard: function() { return /* binding */ theCard; },
+/* harmony export */ updateFavicon: function() { return /* binding */ updateFavicon; },
+/* harmony export */ urlAsAttachment: function() { return /* binding */ urlAsAttachment; },
+/* harmony export */ wallpaperNameFromUrl: function() { return /* binding */ wallpaperNameFromUrl; },
+/* harmony export */ wallpaperTypeFromUrl: function() { return /* binding */ wallpaperTypeFromUrl; }
+/* harmony export */ });
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+
+
+function updateFavicon(count) {
+ const oldIcon = document.getElementById('shortcut-icon');
+ const head = document.head || document.getElementsByTagName('head')[0];
+ const newIcon = document.createElement('link');
+ newIcon.type = 'image/png';
+ newIcon.id = 'shortcut-icon';
+ newIcon.rel = 'shortcut icon';
+ newIcon.href = 'img/logo32x32' + (count > 0 ? 'a' : '') + '.png';
+ if (oldIcon) {
+ head.removeChild(oldIcon);
+ }
+ head.appendChild(newIcon);
+ document.title = (count > 0 ? '(' + count + ') ' : '') + 'Tinode';
+}
+function theCard(fn, imageUrl, imageMimeType, note) {
+ let card = null;
+ fn = fn && fn.trim();
+ note = note && note.trim();
+ if (fn) {
+ card = {
+ fn: fn
+ };
+ }
+ if (typeof note == 'string') {
+ card = card || {};
+ card.note = note ? note : tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.DEL_CHAR;
+ }
+ if (imageUrl) {
+ card = card || {};
+ let mimeType = imageMimeType;
+ const matches = /^data:(image\/[-a-z0-9+.]+)?(;base64)?,/i.exec(imageUrl);
+ if (matches) {
+ mimeType = matches[1];
+ card.photo = {
+ data: imageUrl.substring(imageUrl.indexOf(',') + 1),
+ ref: tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.DEL_CHAR
+ };
+ } else {
+ card.photo = {
+ data: tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.DEL_CHAR,
+ ref: imageUrl
+ };
+ }
+ card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length);
+ }
+ return card;
+}
+function arrayEqual(a, b) {
+ if (a === b) {
+ return true;
+ }
+ if (!Array.isArray(a) || !Array.isArray(b)) {
+ return false;
+ }
+ if (a.length != b.length) {
+ return false;
+ }
+ a.sort();
+ b.sort();
+ for (let i = 0, l = a.length; i < l; i++) {
+ if (a[i] !== b[i]) {
+ return false;
+ }
+ }
+ return true;
+}
+function asPhone(val) {
+ val = val.trim();
+ if (/^(?:\+?(\d{1,3}))?[- (.]*(\d{3})[- ).]*(\d{3})[- .]*(\d{2})[- .]*(\d{2})?$/.test(val)) {
+ return val.replaceAll(/[- ().]*/g, '');
+ }
+ return null;
+}
+function asEmail(val) {
+ val = val.trim();
+ if (/^[a-z0-9_.+-]+@[a-z0-9-]+(\.[a-z0-9-]+)+$/i.test(val)) {
+ return val;
+ }
+ return null;
+}
+function isUrlRelative(url) {
+ return url && !/^\s*([a-z][a-z0-9+.-]*:|\/\/)/im.test(url.replace(/\\/g, '/'));
+}
+function sanitizeUrl(url, allowedSchemes) {
+ if (typeof url != 'string') {
+ return url;
+ }
+ url = url.replace(/[^\x21-\x7E]/gmi, '').trim();
+ url = url.replace(/\\/g, '/');
+ if (!/^([a-z][a-z0-9+.-]*:|\/\/)/i.test(url)) {
+ return url;
+ }
+ if (/^blob:http/.test(url)) {
+ return url;
+ }
+ const schemes = Array.isArray(allowedSchemes) ? allowedSchemes.join('|') : 'http|https';
+ const re = new RegExp('^((' + schemes + '):|//)', 'i');
+ if (!re.test(url)) {
+ return null;
+ }
+ return url;
+}
+function sanitizeUrlForMime(url, mimeMajor) {
+ if (!url) {
+ return null;
+ }
+ const sanitizedUrl = sanitizeUrl(url);
+ if (sanitizedUrl) {
+ return sanitizedUrl;
+ }
+ const re = new RegExp(`data:${mimeMajor}\/[-+.a-z0-9]+;base64,`, 'i');
+ if (re.test(url.trim())) {
+ return url;
+ }
+ return null;
+}
+function urlAsAttachment(url) {
+ if (url.startsWith('data:') || url.startsWith('blob:')) {
+ return url;
+ }
+ let query = '',
+ fragment = '';
+ const idxF = url.indexOf('#');
+ if (idxF > 0) {
+ fragment = url.substring(idxF + 1);
+ url = url.substring(0, idxF);
+ }
+ const idxQ = url.indexOf('?');
+ if (idxQ > 0) {
+ query = url.substring(idxQ + 1);
+ url = url.substring(0, idxQ);
+ }
+ const params = new URLSearchParams(query);
+ params.append('asatt', '1');
+ return `${url}?${params.toString()}` + (fragment ? `#${fragment}` : '');
+}
+function deliveryMarker(received) {
+ switch (received) {
+ case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_SENDING:
+ return {
+ name: 'access_time'
+ };
+ case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_FAILED:
+ case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_FATAL:
+ return {
+ name: 'warning',
+ color: 'danger-color'
+ };
+ case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_SENT:
+ return {
+ name: 'done'
+ };
+ case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_RECEIVED:
+ return {
+ name: 'done_all'
+ };
+ case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_READ:
+ return {
+ name: 'done_all',
+ color: 'blue'
+ };
+ }
+ return null;
+}
+function cancelablePromise(promise) {
+ let hasCanceled = false;
+ const wrappedPromise = promise instanceof Error ? Promise.reject(promise) : new Promise((resolve, reject) => {
+ promise.then(result => hasCanceled ? reject({
+ isCanceled: true
+ }) : resolve(result), error => hasCanceled ? reject({
+ isCanceled: true
+ }) : reject(error));
+ });
+ return {
+ promise: wrappedPromise,
+ cancel() {
+ hasCanceled = true;
+ }
+ };
+}
+;
+function defaultWallpaper() {
+ const wallpaperIndex = __webpack_require__(/*! ../../img/bkg/index.json */ "./img/bkg/index.json");
+ const wp = wallpaperIndex[_config_js__WEBPACK_IMPORTED_MODULE_1__.WALLPAPER_DEFAULTS.type][_config_js__WEBPACK_IMPORTED_MODULE_1__.WALLPAPER_DEFAULTS.index];
+ return {
+ name: `../${_config_js__WEBPACK_IMPORTED_MODULE_1__.WALLPAPER_DEFAULTS.path}${wp.name}`,
+ size: wp.size
+ };
+}
+function wallpaperNameFromUrl(wallpaperUrl) {
+ const parts = wallpaperUrl.split('/');
+ return parts[parts.length - 1];
+}
+function wallpaperTypeFromUrl(wallpaperUrl) {
+ const fname = wallpaperNameFromUrl(wallpaperUrl);
+ const wallpaperIndex = __webpack_require__(/*! ../../img/bkg/index.json */ "./img/bkg/index.json");
+ for (const type in wallpaperIndex) {
+ for (let i = 0; i < wallpaperIndex[type].length; i++) {
+ if (wallpaperIndex[type][i].name == fname) {
+ return type;
+ }
+ }
+ }
+ return null;
+}
+
+/***/ }),
+
+/***/ "./src/version.js":
+/*!************************!*\
+ !*** ./src/version.js ***!
+ \************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ PACKAGE_VERSION: function() { return /* binding */ PACKAGE_VERSION; }
+/* harmony export */ });
+const PACKAGE_VERSION = "0.25.3";
+
+/***/ }),
+
+/***/ "./src/views/acc-general-view.jsx":
+/*!****************************************!*\
+ !*** ./src/views/acc-general-view.jsx ***!
+ \****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ AccGeneralView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+class AccGeneralView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ colorSchema: props.colorSchema || 'auto',
+ textSize: props.textSize * 10 || '100',
+ sendOnEnter: props.sendOnEnter || 'plain'
+ };
+ this.isMac = (navigator.userAgentData && navigator.userAgentData.platform || navigator.platform).toLowerCase().startsWith('mac');
+ this.handleColorSchemaSelected = this.handleColorSchemaSelected.bind(this);
+ this.handleTextSizeChanged = this.handleTextSizeChanged.bind(this);
+ this.handleSendOnEnterSelected = this.handleSendOnEnterSelected.bind(this);
+ }
+ handleColorSchemaSelected(e) {
+ this.setState({
+ colorSchema: e.currentTarget.value
+ });
+ this.props.onChangeColorSchema(e.currentTarget.value);
+ }
+ handleTextSizeChanged(e) {
+ this.setState({
+ textSize: e.currentTarget.value
+ });
+ this.props.onTextSizeChanged(e.currentTarget.value / 10 | 0);
+ }
+ handleSendOnEnterSelected(e) {
+ this.setState({
+ sendOnEnter: e.currentTarget.value
+ });
+ this.props.onSendOnEnterChanged(e.currentTarget.value);
+ }
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ id: "settings-form",
+ className: "scrollable-panel",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-column",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("label", {
+ className: "small",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_color_schema",
+ defaultMessage: "Theme:",
+ description: "Label for selecting color scheme (dark, light) in Settings"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("ul", {
+ className: "quoted",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("li", {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("input", {
+ type: "radio",
+ id: "system",
+ name: "color-scheme-select",
+ value: "auto",
+ checked: this.state.colorSchema == 'auto',
+ onChange: this.handleColorSchemaSelected
+ }, void 0, false), "\xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("label", {
+ htmlFor: "system",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "color_schema_system",
+ defaultMessage: "System default",
+ description: "Name of the color schema"
+ }, void 0, false), "\xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("img", {
+ src: "img/routine.svg",
+ style: {
+ verticalAlign: 'top',
+ width: '1.6rem',
+ height: '1.6rem'
+ }
+ }, void 0, false)]
+ }, void 0, true)]
+ }, "system", true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("li", {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("input", {
+ type: "radio",
+ id: "light",
+ name: "color-scheme-select",
+ value: "light",
+ checked: this.state.colorSchema == 'light',
+ onChange: this.handleColorSchemaSelected
+ }, void 0, false), "\xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("label", {
+ htmlFor: "light",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "color_schema_light",
+ defaultMessage: "Light",
+ description: "Name of the color schema"
+ }, void 0, false), "\xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("i", {
+ className: "material-icons orange large",
+ children: "light_mode"
+ }, void 0, false)]
+ }, void 0, true)]
+ }, "light", true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("li", {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("input", {
+ type: "radio",
+ id: "dark",
+ name: "color-scheme-select",
+ value: "dark",
+ checked: this.state.colorSchema == 'dark',
+ onChange: this.handleColorSchemaSelected
+ }, void 0, false), "\xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("label", {
+ htmlFor: "dark",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "color_schema_dark",
+ defaultMessage: "Dark",
+ description: "Name of the color schema"
+ }, void 0, false), "\xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("i", {
+ className: "material-icons blue large",
+ children: "dark_mode"
+ }, void 0, false)]
+ }, void 0, true)]
+ }, "dark", true)]
+ }, void 0, true)
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "hr"
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-row clean-clickable",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("a", {
+ onClick: this.props.onSelectWallpapers,
+ className: "flat-button",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "wallpaper"
+ }, void 0, false), "\xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "wallpapers",
+ defaultMessage: "Wallpapers",
+ description: "Link or title for working with wallpapers."
+ }, void 0, false)]
+ }, void 0, true)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "hr"
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-column",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("label", {
+ className: "small",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_text_size",
+ defaultMessage: "Text size:",
+ description: "Label adjusting text size"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("input", {
+ type: "range",
+ id: "text_size",
+ name: "text_size",
+ min: "80",
+ max: "120",
+ step: "10",
+ list: "text_size_options",
+ value: this.state.textSize,
+ onChange: this.handleTextSizeChanged
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("datalist", {
+ id: "text_size_options",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("option", {
+ value: "80",
+ label: "80%"
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("option", {
+ value: "90",
+ label: "90%"
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("option", {
+ value: "100",
+ label: "100%"
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("option", {
+ value: "110",
+ label: "110%"
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("option", {
+ value: "120",
+ label: "120%"
+ }, void 0, false)]
+ }, void 0, true)
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "hr"
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("label", {
+ className: "small",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_keyboard",
+ defaultMessage: "Keyboard:",
+ description: "Label for send on enter settings"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("ul", {
+ className: "quoted",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("li", {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("input", {
+ type: "radio",
+ id: "plain",
+ name: "send-select",
+ value: "plain",
+ checked: this.state.sendOnEnter == 'plain',
+ onChange: this.handleSendOnEnterSelected
+ }, void 0, false), "\xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("label", {
+ htmlFor: "send_plain",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "send_plain",
+ defaultMessage: "Send on Enter",
+ description: "Config option to send message on hitting Enter"
+ }, void 0, false), "\xA0"]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
+ className: "small gray",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "send_plain_explained",
+ defaultMessage: "Press Shift + Enter for new line",
+ description: "Explanation how to enter newline when [Send on Enter] is enabled"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false)]
+ }, "plain", true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("li", {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("input", {
+ type: "radio",
+ id: "command",
+ name: "send-select",
+ value: "command",
+ checked: this.state.sendOnEnter == 'command',
+ onChange: this.handleSendOnEnterSelected
+ }, void 0, false), "\xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("label", {
+ htmlFor: "send_command",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "send_command",
+ defaultMessage: "Send on {key}",
+ values: {
+ key: this.isMac ? '⌘ + Enter' : 'Ctrl + Enter'
+ },
+ description: "Config option to send message on hitting CTRL(or Cmd)-Enter"
+ }, void 0, false), "\xA0"]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
+ className: "small gray",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "send_command_explained",
+ defaultMessage: "Press Enter for new line",
+ description: "Explanation how to enter newline when [Send on CTRL-Enter] is enabled"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false)]
+ }, "command", true)]
+ }, void 0, true)
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/acc-notifications-view.jsx":
+/*!**********************************************!*\
+ !*** ./src/views/acc-notifications-view.jsx ***!
+ \**********************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ AccNotificationsView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ "./src/widgets/checkbox.jsx");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+class AccNotificationsView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.handleCheckboxClick = this.handleCheckboxClick.bind(this);
+ }
+ handleCheckboxClick(what, checked) {
+ if (what == 'sound') {
+ this.props.onToggleMessageSounds(checked);
+ } else if (what == 'alert') {
+ this.props.onTogglePushNotifications(checked);
+ }
+ }
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
+ className: "scrollable-panel",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("label", {
+ htmlFor: "message-sound",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_message_sound",
+ defaultMessage: "Message sound:",
+ description: "Label for message sounds toggle"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
+ name: "sound",
+ id: "message-sound",
+ checked: this.props.messageSounds,
+ onChange: this.handleCheckboxClick
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("label", {
+ htmlFor: "desktop-alerts",
+ children: this.props.desktopAlertsEnabled ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_push_notifications",
+ defaultMessage: "Notification alerts:",
+ description: "Label for push notifications switch"
+ }, void 0, false) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_push_notifications_disabled",
+ defaultMessage: "Notification alerts (requires HTTPS):",
+ description: "Label for push notifications switch"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
+ name: "alert",
+ id: "desktop-alerts",
+ checked: this.props.desktopAlerts,
+ onChange: this.props.desktopAlertsEnabled ? this.handleCheckboxClick : null
+ }, void 0, false)]
+ }, void 0, true)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/acc-support-view.jsx":
+/*!****************************************!*\
+ !*** ./src/views/acc-support-view.jsx ***!
+ \****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ AccSupportView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+class AccSupportView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "scrollable-panel",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form-column",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("a", {
+ href: _config_js__WEBPACK_IMPORTED_MODULE_3__.LINK_CONTACT_US,
+ className: "flat-button",
+ target: "_blank",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "email"
+ }, void 0, false), " \xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "link_contact_us",
+ defaultMessage: "Contact Us",
+ description: "Ancor text for contacting us by email"
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("a", {
+ href: _config_js__WEBPACK_IMPORTED_MODULE_3__.LINK_TERMS_OF_SERVICE,
+ className: "flat-button",
+ target: "_blank",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "description"
+ }, void 0, false), " \xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "link_terms_of_service",
+ defaultMessage: "Terms of Service",
+ description: "Ancor text for terms of service link"
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("a", {
+ href: _config_js__WEBPACK_IMPORTED_MODULE_3__.LINK_PRIVACY_POLICY,
+ className: "flat-button",
+ target: "_blank",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "policy"
+ }, void 0, false), " \xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "link_privacy_policy",
+ defaultMessage: "Privacy Policy",
+ description: "Ancor text for privacy policy link"
+ }, void 0, false)]
+ }, void 0, true)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "hr"
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form-column",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
+ className: "small",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_client",
+ defaultMessage: "Client:",
+ description: "Label for a client version"
+ }, void 0, false)
+ }, void 0, false), _config_js__WEBPACK_IMPORTED_MODULE_3__.APP_NAME]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
+ className: "small",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_sdk",
+ defaultMessage: "SDK:"
+ }, void 0, false)
+ }, void 0, false), tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.getLibrary()]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
+ className: "small",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_server",
+ defaultMessage: "Server:",
+ description: "Label for a server version"
+ }, void 0, false)
+ }, void 0, false), this.props.serverVersion]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
+ className: "small",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_server_address",
+ defaultMessage: "Server address:"
+ }, void 0, false)
+ }, void 0, false), this.props.serverAddress]
+ }, void 0, true)]
+ }, void 0, true)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/contacts-view.jsx":
+/*!*************************************!*\
+ !*** ./src/views/contacts-view.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ ContactsView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/contact-list.jsx */ "./src/widgets/contact-list.jsx");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ archived_contacts_title: {
+ id: "archived_contacts",
+ defaultMessage: "Archived contacts ({count})",
+ description: "Label for archived chats"
+ }
+});
+class ContactsView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.handleAction = this.handleAction.bind(this);
+ this.state = ContactsView.deriveStateFromProps(props);
+ }
+ static deriveStateFromProps(props) {
+ const contacts = [];
+ let unreadThreads = 0;
+ let archivedCount = 0;
+ const me = props.tinode.getMeTopic();
+ props.chatList.forEach(c => {
+ const blocked = c.acs && !c.acs.isJoiner();
+ c.pinned = me.pinnedTopicRank(c.topic);
+ if (blocked && props.blocked) {
+ contacts.push(c);
+ }
+ if (blocked || props.blocked) {
+ return;
+ }
+ if (c.private && c.private.arch) {
+ if (props.archive) {
+ contacts.push(c);
+ } else {
+ archivedCount++;
+ }
+ } else if (!props.archive) {
+ contacts.push(c);
+ unreadThreads += c.unread > 0 ? 1 : 0;
+ }
+ });
+ contacts.sort((a, b) => {
+ const pin = b.pinned - a.pinned;
+ return pin != 0 ? pin : (b.touched || 0) - (a.touched || 0);
+ });
+ if (archivedCount > 0) {
+ contacts.push({
+ action: 'archive',
+ title: messages.archived_contacts_title,
+ values: {
+ count: archivedCount
+ }
+ });
+ }
+ return {
+ contactList: contacts,
+ unreadThreads: unreadThreads
+ };
+ }
+ componentDidUpdate(prevProps, prevState) {
+ if (prevProps.chatList != this.props.chatList || prevProps.archive != this.props.archive || prevProps.blocked != this.props.blocked) {
+ const newState = ContactsView.deriveStateFromProps(this.props);
+ this.setState(newState);
+ if (newState.unreadThreads != prevState.unreadThreads) {
+ (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_3__.updateFavicon)(newState.unreadThreads);
+ }
+ }
+ }
+ handleAction(action_ignored) {
+ this.props.onShowArchive();
+ }
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "contacts_not_found",
+ defaultMessage: "You have no chats\\n¯∖_(ツ)_/¯",
+ description: "HTML message shown in ContactList when no contacts are found",
+ children: no_contacts => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(_widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
+ tinode: this.props.tinode,
+ connected: this.props.connected,
+ contacts: this.state.contactList,
+ emptyListMessage: no_contacts,
+ topicSelected: this.props.topicSelected,
+ myUserId: this.props.myUserId,
+ showOnline: true,
+ showUnread: true,
+ onTopicSelected: this.props.onTopicSelected,
+ showContextMenu: this.props.showContextMenu,
+ onAction: this.handleAction
+ }, void 0, false)
+ }, void 0, false);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/login-view.jsx":
+/*!**********************************!*\
+ !*** ./src/views/login-view.jsx ***!
+ \**********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ LoginView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ "./src/widgets/checkbox.jsx");
+/* harmony import */ var _widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/visible-password.jsx */ "./src/widgets/visible-password.jsx");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+class LoginView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ login: props.login,
+ password: '',
+ hostName: props.serverAddress,
+ saveToken: props.persist
+ };
+ this.handleLoginChange = this.handleLoginChange.bind(this);
+ this.handlePasswordChange = this.handlePasswordChange.bind(this);
+ this.handleToggleSaveToken = this.handleToggleSaveToken.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ }
+ handleLoginChange(e) {
+ this.setState({
+ login: e.target.value
+ });
+ }
+ handlePasswordChange(e) {
+ this.setState({
+ password: e.target.value
+ });
+ }
+ handleToggleSaveToken() {
+ this.props.onPersistenceChange(!this.state.saveToken);
+ this.setState({
+ saveToken: !this.state.saveToken
+ });
+ }
+ handleSubmit(e) {
+ e.preventDefault();
+ this.props.onLogin(this.state.login.trim(), this.state.password.trim());
+ }
+ render() {
+ let submitClasses = 'primary';
+ if (this.props.disabled) {
+ submitClasses += ' disabled';
+ }
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("form", {
+ id: "login-form",
+ onSubmit: this.handleSubmit,
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "login_prompt",
+ defaultMessage: "Login",
+ description: "Placeholer for username/login",
+ children: login_prompt => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("input", {
+ type: "text",
+ id: "inputLogin",
+ placeholder: login_prompt,
+ autoComplete: "username",
+ autoCorrect: "off",
+ autoCapitalize: "none",
+ value: this.state.login,
+ onChange: this.handleLoginChange,
+ required: true,
+ autoFocus: true
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "password_prompt",
+ defaultMessage: "Password",
+ description: "Placeholder/prompt for entering password",
+ children: password_prompt => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(_widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
+ type: "password",
+ id: "inputPassword",
+ placeholder: password_prompt,
+ autoComplete: "current-password",
+ value: this.state.password,
+ onChange: this.handlePasswordChange,
+ required: true
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
+ id: "save-token",
+ name: "save-token",
+ checked: this.state.saveToken,
+ onChange: this.handleToggleSaveToken
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
+ htmlFor: "save-token",
+ children: ["\xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "stay_logged_in",
+ defaultMessage: "Stay logged in",
+ description: "Label for a checkbox"
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("a", {
+ href: "#reset",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "forgot_password_link",
+ defaultMessage: "Forgot password?",
+ description: "Link to Reset password form"
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "dialog-buttons",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("button", {
+ className: submitClasses,
+ type: "submit",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_sign_in",
+ defaultMessage: "Sign in",
+ description: "Button [Sign In]"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/new-topic-view.jsx":
+/*!**************************************!*\
+ !*** ./src/views/new-topic-view.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/contact-list.jsx */ "./src/widgets/contact-list.jsx");
+/* harmony import */ var _widgets_new_topic_by_id_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/new-topic-by-id.jsx */ "./src/widgets/new-topic-by-id.jsx");
+/* harmony import */ var _widgets_new_topic_group_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/new-topic-group.jsx */ "./src/widgets/new-topic-group.jsx");
+/* harmony import */ var _widgets_search_contacts_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/search-contacts.jsx */ "./src/widgets/search-contacts.jsx");
+/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/navigation.js */ "./src/lib/navigation.js");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ search_for_contacts: {
+ id: "search_for_contacts",
+ defaultMessage: "Use search to find contacts",
+ description: "Text shown in contacts view when user entered no search query."
+ },
+ search_no_results: {
+ id: "search_no_results",
+ defaultMessage: "Search returned no results",
+ description: "Text shown in contacts view when query returned no results."
+ },
+ search_placeholder: {
+ id: "search_placeholder",
+ defaultMessage: "List like alice@example.com, +17025550003...",
+ description: "Placeholder in contacts search field"
+ }
+});
+class NewTopicView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ const urlParams = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].parseUrlHash(window.location.hash).params;
+ const initialTab = urlParams['tab'] || 'find';
+ const initialQuery = initialTab == 'find' ? urlParams['q'] || null : null;
+ this.state = {
+ tabSelected: initialTab,
+ searchQuery: initialQuery
+ };
+ this.handleTabClick = this.handleTabClick.bind(this);
+ this.handleSearchContacts = this.handleSearchContacts.bind(this);
+ this.handleSearchResultSelected = this.handleSearchResultSelected.bind(this);
+ this.handleNewGroupSubmit = this.handleNewGroupSubmit.bind(this);
+ this.handleGroupByID = this.handleGroupByID.bind(this);
+ }
+ componentDidMount() {
+ this.props.onInitFind();
+ }
+ handleTabClick(e) {
+ e.preventDefault();
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].addUrlParam(window.location.hash, 'tab', e.currentTarget.dataset.id));
+ this.setState({
+ tabSelected: e.currentTarget.dataset.id
+ });
+ }
+ handleSearchContacts(query) {
+ query = query.trim() || tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.DEL_CHAR;
+ if (!/[\s,:]/.test(query) && query != tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.DEL_CHAR) {
+ const email = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.asEmail)(query);
+ if (email) {
+ query = `${tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_EMAIL}${email}`;
+ } else {
+ const tel = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.asPhone)(query);
+ if (tel) {
+ query = `${tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_PHONE}${tel}`;
+ } else {
+ if (query[0] == '@') {
+ query = query.substring(1);
+ }
+ query = `${tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_ALIAS}${query},${query}`;
+ }
+ }
+ }
+ this.props.onSearchContacts(query);
+ this.setState({
+ searchQuery: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isNullValue(query) ? null : query
+ });
+ }
+ handleSearchResultSelected(topicName) {
+ if (this.state.tabSelected == 'find') {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].removeUrlParams(window.location.hash, ['tab', 'q']));
+ this.props.onCreateTopic(topicName);
+ }
+ }
+ handleNewGroupSubmit(name, description, dataUrl, priv, tags, isChannel) {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].removeUrlParams(window.location.hash, ['tab', 'q']));
+ this.props.onCreateTopic(undefined, {
+ public: (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.theCard)(name, dataUrl, null, description),
+ private: priv,
+ tags: tags
+ }, isChannel);
+ }
+ handleGroupByID(topicName) {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].removeUrlParams(window.location.hash, ['tab', 'q']));
+ this.props.onCreateTopic(topicName);
+ }
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ const no_contacts_placeholder = formatMessage(this.state.searchQuery ? messages.search_no_results : messages.search_for_contacts);
+ const search_placeholder = formatMessage(messages.search_placeholder);
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("div", {
+ className: "flex-column",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("ul", {
+ className: "tabbar",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("li", {
+ className: this.state.tabSelected === 'find' ? 'active' : null,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("a", {
+ href: "#",
+ "data-id": "find",
+ onClick: this.handleTabClick,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "tabtitle_find_user",
+ defaultMessage: "find",
+ description: "Tab title Find"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("li", {
+ className: this.state.tabSelected === 'grp' ? 'active' : null,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("a", {
+ href: "#",
+ "data-id": "grp",
+ onClick: this.handleTabClick,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "tabtitle_new_group",
+ defaultMessage: "new group",
+ description: "Tab title New Group"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("li", {
+ className: this.state.tabSelected === 'byid' ? 'active' : null,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("a", {
+ href: "#",
+ "data-id": "byid",
+ onClick: this.handleTabClick,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "tabtitle_group_by_id",
+ defaultMessage: "by id",
+ description: "Tab title Find topic by ID"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true), this.state.tabSelected === 'grp' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(_widgets_new_topic_group_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
+ tinode: this.props.tinode,
+ onSubmit: this.handleNewGroupSubmit,
+ onError: this.props.onError
+ }, void 0, false) : this.state.tabSelected === 'byid' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(_widgets_new_topic_by_id_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
+ myURI: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.URI_TOPIC_ID_PREFIX + this.props.tinode.getCurrentUserID(),
+ onSubmit: this.handleGroupByID,
+ onError: this.props.onError
+ }, void 0, false) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("div", {
+ className: "flex-column",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(_widgets_search_contacts_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], {
+ placeholder: search_placeholder,
+ initialQuery: this.state.searchQuery || '',
+ onSearchContacts: this.handleSearchContacts
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(_widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
+ tinode: this.props.tinode,
+ contacts: this.props.searchResults,
+ myUserId: this.props.myUserId,
+ emptyListMessage: no_contacts_placeholder,
+ showSelfTopic: !this.state.searchQuery,
+ showOnline: false,
+ showUnread: false,
+ showContextMenu: false,
+ onTopicSelected: this.handleSearchResultSelected
+ }, void 0, false)]
+ }, void 0, true)]
+ }, void 0, true);
+ }
+}
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(NewTopicView));
+
+/***/ }),
+
+/***/ "./src/views/settings-view.jsx":
+/*!*************************************!*\
+ !*** ./src/views/settings-view.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ SettingsView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ "./src/widgets/checkbox.jsx");
+/* harmony import */ var _widgets_host_selector_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/host-selector.jsx */ "./src/widgets/host-selector.jsx");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+class SettingsView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ transport: props.transport || 'def',
+ serverAddress: props.serverAddress,
+ secureConnection: props.secureConnection
+ };
+ this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleTransportSelected = this.handleTransportSelected.bind(this);
+ this.handleServerAddressChange = this.handleServerAddressChange.bind(this);
+ this.handleToggleSecure = this.handleToggleSecure.bind(this);
+ }
+ handleSubmit(e) {
+ e.preventDefault();
+ this.props.onUpdate({
+ transport: this.state.transport,
+ serverAddress: this.state.serverAddress,
+ secureConnection: this.state.secureConnection
+ });
+ }
+ handleTransportSelected(e) {
+ this.setState({
+ transport: e.currentTarget.value
+ });
+ }
+ handleServerAddressChange(name) {
+ this.setState({
+ serverAddress: name
+ });
+ }
+ handleToggleSecure(e) {
+ this.setState({
+ secureConnection: !this.state.secureConnection
+ });
+ }
+ render() {
+ const names = {
+ def: "default",
+ ws: "websocket",
+ lp: "long polling"
+ };
+ const transportOptions = [];
+ ['def', 'ws', 'lp'].forEach(item => {
+ const id = 'transport-' + item;
+ const name = names[item];
+ transportOptions.push((0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("li", {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("input", {
+ type: "radio",
+ id: id,
+ name: "transport-select",
+ value: item,
+ checked: this.state.transport === item,
+ onChange: this.handleTransportSelected
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
+ htmlFor: id,
+ children: name
+ }, void 0, false)]
+ }, item, true));
+ });
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("form", {
+ id: "settings-form",
+ className: "panel-form",
+ onSubmit: this.handleSubmit,
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
+ className: "small",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_server_to_use",
+ defaultMessage: "Server to use:",
+ description: "Label for server selector in SettingsView"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(_widgets_host_selector_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
+ serverAddress: this.state.serverAddress,
+ onServerAddressChange: this.handleServerAddressChange
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
+ id: "secure-connection",
+ name: "secure-connection",
+ checked: this.state.secureConnection,
+ className: "quoted",
+ onChange: this.handleToggleSecure
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
+ htmlFor: "secure-connection",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_use_secure_connection",
+ defaultMessage: "Use secure connection",
+ description: "Label for WS/WSS connection type in SettingsView"
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
+ className: "small",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_wire_transport",
+ defaultMessage: "Wire transport:",
+ description: "Label for wire transport selection in SettingsView"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("ul", {
+ className: "quoted",
+ children: transportOptions
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "dialog-buttons",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("button", {
+ type: "submit",
+ className: "primary",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_update",
+ defaultMessage: "Update",
+ description: "Button [Update]"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/sidepanel-view.jsx":
+/*!**************************************!*\
+ !*** ./src/views/sidepanel-view.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/error-panel.jsx */ "./src/widgets/error-panel.jsx");
+/* harmony import */ var _widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/load-spinner.jsx */ "./src/widgets/load-spinner.jsx");
+/* harmony import */ var _widgets_side_navbar_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/side-navbar.jsx */ "./src/widgets/side-navbar.jsx");
+/* harmony import */ var _topic_common_view_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./topic-common-view.jsx */ "./src/views/topic-common-view.jsx");
+/* harmony import */ var _contacts_view_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./contacts-view.jsx */ "./src/views/contacts-view.jsx");
+/* harmony import */ var _acc_general_view_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./acc-general-view.jsx */ "./src/views/acc-general-view.jsx");
+/* harmony import */ var _acc_notifications_view_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./acc-notifications-view.jsx */ "./src/views/acc-notifications-view.jsx");
+/* harmony import */ var _acc_support_view_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./acc-support-view.jsx */ "./src/views/acc-support-view.jsx");
+/* harmony import */ var _login_view_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./login-view.jsx */ "./src/views/login-view.jsx");
+/* harmony import */ var _new_topic_view_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./new-topic-view.jsx */ "./src/views/new-topic-view.jsx");
+/* harmony import */ var _settings_view_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./settings-view.jsx */ "./src/views/settings-view.jsx");
+/* harmony import */ var _validation_view_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./validation-view.jsx */ "./src/views/validation-view.jsx");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+
+const AccountSettingsView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => Promise.all(/*! import() */[__webpack_require__.e("vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js"), __webpack_require__.e("vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-883e54"), __webpack_require__.e("src_widgets_phone-edit_jsx"), __webpack_require__.e("src_views_account-settings-view_jsx")]).then(__webpack_require__.bind(__webpack_require__, /*! ./account-settings-view.jsx */ "./src/views/account-settings-view.jsx")));
+
+const CreateAccountView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => Promise.all(/*! import() */[__webpack_require__.e("vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js"), __webpack_require__.e("vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-883e54"), __webpack_require__.e("src_widgets_phone-edit_jsx"), __webpack_require__.e("src_views_create-account-view_jsx")]).then(__webpack_require__.bind(__webpack_require__, /*! ./create-account-view.jsx */ "./src/views/create-account-view.jsx")));
+
+
+const AccSecurityView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ "src_views_acc-security-view_jsx").then(__webpack_require__.bind(__webpack_require__, /*! ./acc-security-view.jsx */ "./src/views/acc-security-view.jsx")));
+
+
+
+const PasswordResetView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => Promise.all(/*! import() */[__webpack_require__.e("vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js"), __webpack_require__.e("vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-883e54"), __webpack_require__.e("src_widgets_phone-edit_jsx"), __webpack_require__.e("src_views_password-reset-view_jsx")]).then(__webpack_require__.bind(__webpack_require__, /*! ./password-reset-view.jsx */ "./src/views/password-reset-view.jsx")));
+
+
+
+const WallpapersView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ "src_views_wallpapers_jsx").then(__webpack_require__.bind(__webpack_require__, /*! ./wallpapers.jsx */ "./src/views/wallpapers.jsx")));
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ login: {
+ id: 'sidepanel_title_login',
+ description: 'Sidepanel title for LoginView.',
+ defaultMessage: 'Sign In'
+ },
+ register: {
+ id: 'sidepanel_title_register',
+ description: 'Sidepanel title for CreateAccountView.',
+ defaultMessage: 'Create Account'
+ },
+ settings: {
+ id: 'sidepanel_title_settings',
+ description: 'Sidepanel title for SettingsView.',
+ defaultMessage: 'Settings'
+ },
+ edit: {
+ id: 'sidepanel_title_account_settings',
+ description: 'Sidepanel title for AccountSettingsView.',
+ defaultMessage: 'Account Settings'
+ },
+ general: {
+ id: 'panel_title_general',
+ description: 'Title for TopicCommon.',
+ defaultMessage: 'General'
+ },
+ security: {
+ id: 'panel_title_security',
+ description: 'Title for TopicSecirity and AccSecurity.',
+ defaultMessage: 'Security'
+ },
+ crop: {
+ id: 'panel_title_crop',
+ description: 'Title for AvatarCropView.',
+ defaultMessage: 'Drag to Adjust'
+ },
+ notif: {
+ id: 'sidepanel_title_acc_notifications',
+ description: 'Sidepanel title for AccNotificationsView.',
+ defaultMessage: 'Notifications'
+ },
+ acc_general: {
+ id: 'sidepanel_title_acc_general',
+ description: 'Sidepanel title for AccGeneralView.',
+ defaultMessage: 'General'
+ },
+ support: {
+ id: 'sidepanel_title_acc_support',
+ description: 'Sidepanel title for AccSupportView.',
+ defaultMessage: 'Support'
+ },
+ newtpk: {
+ id: 'sidepanel_title_newtpk',
+ description: 'Sidepanel title for NewTopicView.',
+ defaultMessage: 'Start New Chat'
+ },
+ cred: {
+ id: 'sidepanel_title_cred',
+ description: 'Sidepanel title for ValidationView.',
+ defaultMessage: 'Confirm Credentials'
+ },
+ reset: {
+ id: 'sidepanel_title_reset',
+ description: 'Sidepanel title for PasswordResetView.',
+ defaultMessage: 'Reset Password'
+ },
+ archive: {
+ id: 'sidepanel_title_archive',
+ description: 'Sidepanel title for ContactsView-Archive.',
+ defaultMessage: 'Archived Chats'
+ },
+ blocked: {
+ id: 'sidepanel_title_blocked',
+ description: 'Sidepanel title for ContactsView-Blocked.',
+ defaultMessage: 'Blocked Chats'
+ },
+ wallpapers: {
+ id: 'wallpapers',
+ description: 'Link or title for working with wallpapers.',
+ defaultMessage: 'Wallpapers'
+ }
+});
+class SidepanelView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.handleNewTopic = this.handleNewTopic.bind(this);
+ }
+ handleNewTopic() {
+ this.props.onNavigate('newtpk');
+ }
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ const view = this.props.state || (this.props.myUserId ? 'contacts' : 'login');
+ let title, avatar, badges;
+ if (view == 'contacts') {
+ title = this.props.title;
+ avatar = this.props.avatar ? this.props.avatar : true;
+ badges = this.props.trustedBadges;
+ } else {
+ title = formatMessage(messages[view]);
+ avatar = false;
+ badges = null;
+ }
+ let onCancel;
+ if (['login', 'contacts'].indexOf(view) == -1) {
+ onCancel = this.props.onCancel;
+ }
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
+ id: "sidepanel",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_widgets_side_navbar_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
+ state: view,
+ title: title,
+ avatar: avatar,
+ tinode: this.props.tinode,
+ trustedBadges: badges,
+ myUserId: this.props.myUserId,
+ onSignUp: this.props.onSignUp,
+ onSettings: this.props.onSettings,
+ onNewTopic: this.handleNewTopic,
+ onCancel: onCancel
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
+ level: this.props.errorLevel,
+ text: this.props.errorText,
+ action: this.props.errorAction,
+ actionText: this.props.errorActionText,
+ onClearError: this.props.onError
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
+ show: this.props.loadSpinnerVisible
+ }, void 0, false), view === 'login' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_login_view_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], {
+ login: this.props.login,
+ disabled: this.props.loginDisabled,
+ persist: this.props.persist,
+ onLogin: this.props.onLoginRequest,
+ onPersistenceChange: this.props.onPersistenceChange
+ }, void 0, false) : view === 'register' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
+ fallback: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "loading_note",
+ defaultMessage: "Loading...",
+ description: "Message shown when component is loading"
+ }, void 0, false)
+ }, void 0, false),
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(CreateAccountView, {
+ tinode: this.props.tinode,
+ reqCredMethod: this.props.reqCredMethod,
+ onShowCountrySelector: this.props.onShowCountrySelector,
+ onCreateAccount: this.props.onCreateAccount,
+ onCancel: this.props.onCancel,
+ onError: this.props.onError
+ }, void 0, false)
+ }, void 0, false) : view === 'settings' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_settings_view_jsx__WEBPACK_IMPORTED_MODULE_12__["default"], {
+ transport: this.props.transport,
+ serverAddress: this.props.serverAddress,
+ secureConnection: this.props.secureConnection,
+ onCancel: this.props.onCancel,
+ onUpdate: this.props.onGlobalSettings
+ }, void 0, false) : view === 'edit' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
+ fallback: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "loading_note",
+ defaultMessage: "Loading...",
+ description: "Message shown when component is loading"
+ }, void 0, false)
+ }, void 0, false),
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(AccountSettingsView, {
+ tinode: this.props.tinode,
+ myUserId: this.props.myUserId,
+ trustedBadges: this.props.trustedBadges,
+ reqCredMethod: this.props.reqCredMethod,
+ onShowCountrySelector: this.props.onShowCountrySelector,
+ onNavigate: this.props.onNavigate,
+ onCredAdd: this.props.onCredAdd,
+ onCredDelete: this.props.onCredDelete,
+ onCredConfirm: this.props.onCredConfirm,
+ onError: this.props.onError
+ }, void 0, false)
+ }, void 0, false) : view === 'general' || view === 'crop' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_topic_common_view_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
+ topic: "me",
+ tinode: this.props.tinode,
+ myUserId: this.props.myUserId,
+ reqCredMethod: this.props.reqCredMethod,
+ onUpdateTopicDesc: this.props.onUpdateAccountDesc,
+ onUpdateTagsRequest: this.props.onUpdateAccountTags,
+ onError: this.props.onError
+ }, void 0, false) : view === 'acc_general' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_acc_general_view_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], {
+ colorSchema: this.props.colorSchema,
+ onSelectWallpapers: this.props.onSelectWallpapers,
+ textSize: this.props.textSize,
+ sendOnEnter: this.props.sendOnEnter,
+ onChangeColorSchema: this.props.onChangeColorSchema,
+ onTextSizeChanged: this.props.onTextSizeChanged,
+ onSendOnEnterChanged: this.props.onSendOnEnterChanged
+ }, void 0, false) : view === 'notif' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_acc_notifications_view_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], {
+ messageSounds: this.props.messageSounds,
+ desktopAlerts: this.props.desktopAlerts,
+ desktopAlertsEnabled: this.props.desktopAlertsEnabled,
+ onTogglePushNotifications: this.props.onTogglePushNotifications,
+ onToggleMessageSounds: this.props.onToggleMessageSounds
+ }, void 0, false) : view === 'security' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
+ fallback: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "loading_note",
+ defaultMessage: "Loading...",
+ description: "Message shown when component is loading"
+ }, void 0, false)
+ }, void 0, false),
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(AccSecurityView, {
+ tinode: this.props.tinode,
+ incognitoMode: this.props.incognitoMode,
+ onUpdateAccountDesc: this.props.onUpdateAccountDesc,
+ onUpdatePassword: this.props.onUpdatePassword,
+ onLogout: this.props.onLogout,
+ onDeleteAccount: this.props.onDeleteAccount,
+ onShowAlert: this.props.onShowAlert,
+ onShowBlocked: this.props.onShowBlocked,
+ onToggleIncognitoMode: this.props.onToggleIncognitoMode
+ }, void 0, false)
+ }, void 0, false) : view === 'support' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_acc_support_view_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], {
+ serverAddress: this.props.serverAddress,
+ serverVersion: this.props.serverVersion
+ }, void 0, false) : view === 'wallpapers' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
+ fallback: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "loading_note",
+ defaultMessage: "Loading...",
+ description: "Message shown when component is loading"
+ }, void 0, false)
+ }, void 0, false),
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(WallpapersView, {
+ wallpaper: this.props.wallpaper,
+ wallpaperSize: this.props.wallpaperSize,
+ wallpaperBlur: this.props.wallpaperBlur,
+ colorSchema: this.props.colorSchema !== 'auto' ? this.props.colorSchema : this.props.systemColorSchema,
+ onWallpaperSelected: this.props.onWallpaperSelected
+ }, void 0, false)
+ }, void 0, false) : view === 'contacts' || view == 'archive' || view == 'blocked' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_contacts_view_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], {
+ tinode: this.props.tinode,
+ myUserId: this.props.myUserId,
+ connected: this.props.connected,
+ topicSelected: this.props.topicSelected,
+ archive: view == 'archive',
+ blocked: view == 'blocked',
+ chatList: this.props.chatList,
+ showContextMenu: this.props.showContextMenu,
+ onTopicSelected: this.props.onTopicSelected,
+ onShowArchive: this.props.onShowArchive
+ }, void 0, false) : view === 'newtpk' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_new_topic_view_jsx__WEBPACK_IMPORTED_MODULE_11__["default"], {
+ tinode: this.props.tinode,
+ searchResults: this.props.searchResults,
+ onInitFind: this.props.onInitFind,
+ onSearchContacts: this.props.onSearchContacts,
+ onCreateTopic: this.props.onCreateTopic,
+ onError: this.props.onError
+ }, void 0, false) : view === 'cred' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(_validation_view_jsx__WEBPACK_IMPORTED_MODULE_13__["default"], {
+ credCode: this.props.credCode,
+ credMethod: this.props.credMethod,
+ credToken: this.props.credToken,
+ onSubmit: this.props.onValidateCredentials,
+ onCancel: this.props.onCancel
+ }, void 0, false) : view === 'reset' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
+ fallback: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "loading_note",
+ defaultMessage: "Loading...",
+ description: "Message shown when component is loading"
+ }, void 0, false)
+ }, void 0, false),
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxDEV)(PasswordResetView, {
+ tinode: this.props.tinode,
+ reqCredMethod: this.props.reqCredMethod,
+ onShowCountrySelector: this.props.onShowCountrySelector,
+ onRequest: this.props.onPasswordResetRequest,
+ onReset: this.props.onResetPassword,
+ onCancel: this.props.onCancel,
+ onError: this.props.onError
+ }, void 0, false)
+ }, void 0, false) : null]
+ }, void 0, true);
+ }
+}
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(SidepanelView));
+
+/***/ }),
+
+/***/ "./src/views/tinode-web.jsx":
+/*!**********************************!*\
+ !*** ./src/views/tinode-web.jsx ***!
+ \**********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var firebase_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! firebase/app */ "./node_modules/firebase/app/dist/esm/index.esm.js");
+/* harmony import */ var firebase_messaging__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! firebase/messaging */ "./node_modules/firebase/messaging/dist/esm/index.esm.js");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_4__);
+/* harmony import */ var _widgets_alert_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/alert.jsx */ "./src/widgets/alert.jsx");
+/* harmony import */ var _widgets_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/context-menu.jsx */ "./src/widgets/context-menu.jsx");
+/* harmony import */ var _widgets_forward_dialog_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../widgets/forward-dialog.jsx */ "./src/widgets/forward-dialog.jsx");
+/* harmony import */ var _widgets_call_incoming_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../widgets/call-incoming.jsx */ "./src/widgets/call-incoming.jsx");
+/* harmony import */ var _sidepanel_view_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./sidepanel-view.jsx */ "./src/views/sidepanel-view.jsx");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../constants.js */ "./src/constants.js");
+/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../version.js */ "./src/version.js");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+/* harmony import */ var _lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../lib/host-name.js */ "./src/lib/host-name.js");
+/* harmony import */ var _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../lib/local-storage.js */ "./src/lib/local-storage.js");
+/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../lib/navigation.js */ "./src/lib/navigation.js");
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+
+
+
+
+const PhoneCountrySelector = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ "src_widgets_phone-country-selector_jsx").then(__webpack_require__.bind(__webpack_require__, /*! ../widgets/phone-country-selector.jsx */ "./src/widgets/phone-country-selector.jsx")));
+const InfoView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ "src_views_info-view_jsx").then(__webpack_require__.bind(__webpack_require__, /*! ./info-view.jsx */ "./src/views/info-view.jsx")));
+const MessagesView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ "src_views_messages-view_jsx").then(__webpack_require__.bind(__webpack_require__, /*! ./messages-view.jsx */ "./src/views/messages-view.jsx")));
+
+
+
+
+
+
+
+
+
+
+
+const POP_SOUND = new Audio('audio/msg.m4a');
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ reconnect_countdown: {
+ id: 'reconnect_countdown',
+ defaultMessage: 'Disconnected. Reconnecting in {seconds}…',
+ description: 'Message shown when an app update is available.'
+ },
+ reconnect_now: {
+ id: 'reconnect_now',
+ defaultMessage: 'Try now',
+ description: 'Prompt for reconnecting now'
+ },
+ push_init_failed: {
+ id: 'push_init_failed',
+ defaultMessage: 'Failed to initialize push notifications',
+ description: 'Error message when push notifications have failed to initialize.'
+ },
+ invalid_security_token: {
+ id: 'invalid_security_token',
+ defaultMessage: 'Invalid security token',
+ description: 'Error message when resetting password.'
+ },
+ no_connection: {
+ id: 'no_connection',
+ defaultMessage: 'No connection',
+ description: 'Warning that the user is offline.'
+ },
+ code_doesnot_match: {
+ id: 'code_doesnot_match',
+ defaultMessage: 'Code does not match',
+ description: 'Error message when the credential validation code is incorrect.'
+ },
+ menu_item_info: {
+ id: 'menu_item_info',
+ defaultMessage: 'Info',
+ description: 'Show extended topic information'
+ },
+ menu_item_audio_call: {
+ id: 'menu_item_audio_call',
+ defaultMessage: 'Call',
+ description: 'Start audio call'
+ },
+ menu_item_video_call: {
+ id: 'menu_item_video_call',
+ defaultMessage: 'Video call',
+ description: 'Start video call'
+ },
+ cred_confirmed_successfully: {
+ id: 'cred_confirmed_successfully',
+ defaultMessage: 'Confirmed successfully',
+ description: 'Notification message that the credential was successfully validated.'
+ },
+ password_reset_success: {
+ id: 'password_reset_success',
+ defaultMessage: 'Password reset successfully',
+ description: 'Notification message that the password was successfully reset.'
+ },
+ select_country: {
+ id: 'select_country',
+ defaultMessage: 'Select country',
+ description: 'Placeholder for the country selector'
+ }
+});
+class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.selfRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
+ this.state = this.getBlankState();
+ this.handleResize = this.handleResize.bind(this);
+ this.handleHashRoute = this.handleHashRoute.bind(this);
+ this.handleOnline = this.handleOnline.bind(this);
+ this.handleEscapeKey = this.handleEscapeKey.bind(this);
+ this.handleColorSchemeChange = this.handleColorSchemeChange.bind(this);
+ this.checkForAppUpdate = this.checkForAppUpdate.bind(this);
+ this.handleVisibilityEvent = this.handleVisibilityEvent.bind(this);
+ this.handleError = this.handleError.bind(this);
+ this.handleLoginRequest = this.handleLoginRequest.bind(this);
+ this.handlePersistenceChange = this.handlePersistenceChange.bind(this);
+ this.handleConnected = this.handleConnected.bind(this);
+ this.handleAutoreconnectIteration = this.handleAutoreconnectIteration.bind(this);
+ this.doLogin = this.doLogin.bind(this);
+ this.handleLoginSuccessful = this.handleLoginSuccessful.bind(this);
+ this.handleDisconnect = this.handleDisconnect.bind(this);
+ this.tnMeMetaDesc = this.tnMeMetaDesc.bind(this);
+ this.tnMeContactUpdate = this.tnMeContactUpdate.bind(this);
+ this.tnMeSubsUpdated = this.tnMeSubsUpdated.bind(this);
+ this.resetContactList = this.resetContactList.bind(this);
+ this.tnInitFind = this.tnInitFind.bind(this);
+ this.tnFndSubsUpdated = this.tnFndSubsUpdated.bind(this);
+ this.handleSearchContacts = this.handleSearchContacts.bind(this);
+ this.handleTopicSelected = this.handleTopicSelected.bind(this);
+ this.handleHideMessagesView = this.handleHideMessagesView.bind(this);
+ this.handleSendMessage = this.handleSendMessage.bind(this);
+ this.handleNewChatInvitation = this.handleNewChatInvitation.bind(this);
+ this.handleNewAccount = this.handleNewAccount.bind(this);
+ this.handleNewAccountRequest = this.handleNewAccountRequest.bind(this);
+ this.handleUpdatePasswordRequest = this.handleUpdatePasswordRequest.bind(this);
+ this.handleUpdateAccountTagsRequest = this.handleUpdateAccountTagsRequest.bind(this);
+ this.handleToggleIncognitoMode = this.handleToggleIncognitoMode.bind(this);
+ this.handleChangeColorSchema = this.handleChangeColorSchema.bind(this);
+ this.handleChangeTextSize = this.handleChangeTextSize.bind(this);
+ this.handleSendOnEnter = this.handleSendOnEnter.bind(this);
+ this.handleSelectWallpapers = this.handleSelectWallpapers.bind(this);
+ this.handleWallpaperSelected = this.handleWallpaperSelected.bind(this);
+ this.handleSettings = this.handleSettings.bind(this);
+ this.handleGlobalSettings = this.handleGlobalSettings.bind(this);
+ this.handleShowArchive = this.handleShowArchive.bind(this);
+ this.handleShowBlocked = this.handleShowBlocked.bind(this);
+ this.handleToggleMessageSounds = this.handleToggleMessageSounds.bind(this);
+ this.handleCredAdd = this.handleCredAdd.bind(this);
+ this.handleCredDelete = this.handleCredDelete.bind(this);
+ this.handleCredConfirm = this.handleCredConfirm.bind(this);
+ this.initFCMessaging = this.initFCMessaging.bind(this);
+ this.toggleFCMToken = this.toggleFCMToken.bind(this);
+ this.handlePushMessage = this.handlePushMessage.bind(this);
+ this.handleSidepanelCancel = this.handleSidepanelCancel.bind(this);
+ this.handleStartTopicRequest = this.handleStartTopicRequest.bind(this);
+ this.handleNewTopicCreated = this.handleNewTopicCreated.bind(this);
+ this.handleTopicUpdateRequest = this.handleTopicUpdateRequest.bind(this);
+ this.handleUnarchive = this.handleUnarchive.bind(this);
+ this.handleChangePermissions = this.handleChangePermissions.bind(this);
+ this.handleTagsUpdateRequest = this.handleTagsUpdateRequest.bind(this);
+ this.handleLogout = this.handleLogout.bind(this);
+ this.handleDeleteAccount = this.handleDeleteAccount.bind(this);
+ this.handleDeleteTopicRequest = this.handleDeleteTopicRequest.bind(this);
+ this.handleDeleteMessagesRequest = this.handleDeleteMessagesRequest.bind(this);
+ this.handleLeaveUnsubRequest = this.handleLeaveUnsubRequest.bind(this);
+ this.handleBlockTopicRequest = this.handleBlockTopicRequest.bind(this);
+ this.handleReportTopic = this.handleReportTopic.bind(this);
+ this.handleShareTheCard = this.handleShareTheCard.bind(this);
+ this.handleShowContextMenu = this.handleShowContextMenu.bind(this);
+ this.defaultTopicContextMenu = this.defaultTopicContextMenu.bind(this);
+ this.handleHideContextMenu = this.handleHideContextMenu.bind(this);
+ this.handleShowAlert = this.handleShowAlert.bind(this);
+ this.handleShowInfoView = this.handleShowInfoView.bind(this);
+ this.handleMemberUpdateRequest = this.handleMemberUpdateRequest.bind(this);
+ this.handleValidateCredentialsRequest = this.handleValidateCredentialsRequest.bind(this);
+ this.handlePasswordResetRequest = this.handlePasswordResetRequest.bind(this);
+ this.handleResetPassword = this.handleResetPassword.bind(this);
+ this.handleContextMenuAction = this.handleContextMenuAction.bind(this);
+ this.handleShowCountrySelector = this.handleShowCountrySelector.bind(this);
+ this.handleShowForwardDialog = this.handleShowForwardDialog.bind(this);
+ this.handleHideForwardDialog = this.handleHideForwardDialog.bind(this);
+ this.handleStartVideoCall = this.handleStartVideoCall.bind(this);
+ this.handleStartAudioCall = this.handleStartAudioCall.bind(this);
+ this.handleInfoMessage = this.handleInfoMessage.bind(this);
+ this.handleDataMessage = this.handleDataMessage.bind(this);
+ this.handleCallClose = this.handleCallClose.bind(this);
+ this.handleCallInvite = this.handleCallInvite.bind(this);
+ this.handleCallRinging = this.handleCallRinging.bind(this);
+ this.handleCallHangup = this.handleCallHangup.bind(this);
+ this.handleCallSendOffer = this.handleCallSendOffer.bind(this);
+ this.handleCallIceCandidate = this.handleCallIceCandidate.bind(this);
+ this.handleCallSendAnswer = this.handleCallSendAnswer.bind(this);
+ this.handleCallAccept = this.handleCallAccept.bind(this);
+ this.sendMessageToTopic = this.sendMessageToTopic.bind(this);
+ this.callTimeoutTimer = null;
+ }
+ getBlankState() {
+ const settings = _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('settings') || {};
+ const persist = !!_lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('keep-logged-in');
+ if (!settings.wallpaper) {
+ const wallpaper = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_18__.defaultWallpaper)();
+ settings.wallpaper = wallpaper.name || '';
+ settings.wallpaperSize = wallpaper.size || 0;
+ settings.wallpaperBlur = 0;
+ }
+ return {
+ connected: false,
+ ready: false,
+ autoLogin: false,
+ transport: settings.transport || null,
+ serverAddress: settings.serverAddress || (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.detectServerAddress)(),
+ secureConnection: settings.secureConnection === undefined ? (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isSecureConnection)() : settings.secureConnection,
+ serverVersion: "no connection",
+ messageSounds: !settings.messageSoundsOff,
+ incognitoMode: false,
+ colorSchema: settings.colorSchema || _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_COLOR_SCHEME,
+ systemColorSchema: window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light',
+ wallpaper: settings.wallpaper,
+ wallpaperSize: settings.wallpaperSize,
+ wallpaperBlur: 0,
+ textSize: settings.textSize || _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_TEXT_SIZE,
+ sendOnEnter: settings.sendOnEnter || 'plain',
+ desktopAlerts: persist && !!settings.desktopAlerts,
+ desktopAlertsEnabled: ((0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isSecureConnection)() || (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isLocalHost)()) && typeof firebase_app__WEBPACK_IMPORTED_MODULE_2__.initializeApp != 'undefined' && typeof navigator != 'undefined' && typeof FIREBASE_INIT != 'undefined',
+ firebaseToken: persist ? _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('firebase-token') : null,
+ applicationVisible: !document.hidden,
+ errorText: '',
+ errorLevel: null,
+ errorAction: undefined,
+ errorActionText: null,
+ sidePanelSelected: 'login',
+ sidePanelTitle: null,
+ sidePanelAvatar: null,
+ myTrustedBadges: [],
+ loadSpinnerVisible: false,
+ login: '',
+ password: '',
+ persist: persist,
+ myUserId: null,
+ liveConnection: navigator.onLine,
+ topicSelected: '',
+ topicSelectedOnline: false,
+ topicSelectedAcs: null,
+ newTopicParams: null,
+ loginDisabled: false,
+ displayMobile: window.innerWidth <= _config_js__WEBPACK_IMPORTED_MODULE_10__.MEDIA_BREAKPOINT,
+ infoPanel: undefined,
+ mobilePanel: 'sidepanel',
+ callTopic: undefined,
+ callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_NONE,
+ callAudioOnly: undefined,
+ callShouldStart: false,
+ contextMenuVisible: false,
+ contextMenuBounds: null,
+ contextMenuClickAt: null,
+ contextMenuParams: null,
+ contextMenuItems: [],
+ forwardDialogVisible: false,
+ forwardMessage: null,
+ alertVisible: false,
+ alertParams: {},
+ chatList: [],
+ searchResults: [],
+ searchableContacts: [],
+ reqCredMethod: undefined,
+ credMethod: undefined,
+ credCode: undefined,
+ credToken: undefined,
+ requestedTopic: undefined
+ };
+ }
+ componentDidMount() {
+ window.addEventListener('resize', this.handleResize);
+ this.handleOnlineOn = _ => {
+ this.handleOnline(true);
+ };
+ window.addEventListener('online', this.handleOnlineOn);
+ this.handleOnlineOff = _ => {
+ this.handleOnline(false);
+ };
+ window.addEventListener('offline', this.handleOnlineOff);
+ window.addEventListener('hashchange', this.handleHashRoute);
+ window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', this.handleColorSchemeChange);
+ document.addEventListener('visibilitychange', this.handleVisibilityEvent);
+ document.addEventListener('keydown', this.handleEscapeKey);
+ document.documentElement.style.colorScheme = this.state.colorSchema == 'auto' ? 'light dark' : this.state.colorSchema;
+ document.documentElement.style.setProperty('--message-text-size', `${this.state.textSize}pt`);
+ this.applyWallpaperSettings(this.state.wallpaper, this.state.wallpaperSize, this.state.wallpaperBlur, this.state.colorSchema == 'auto' ? this.state.systemColorSchema : this.state.colorSchema);
+ if (typeof BroadcastChannel == 'function') {
+ const serviceWorkerChannel = new BroadcastChannel('tinode-sw');
+ serviceWorkerChannel.addEventListener('message', this.handlePushMessage);
+ } else {
+ console.warn("Your browser does not support BroadcastChannel. Some features will not be available");
+ }
+ this.lastWakeUpCheck = new Date().getTime();
+ this.wakeUpTicker = setInterval(_ => {
+ const now = new Date().getTime();
+ if (now - this.lastWakeUpCheck > _config_js__WEBPACK_IMPORTED_MODULE_10__.WAKE_UP_TIMEOUT) {
+ this.handleOnlineOn();
+ }
+ this.lastWakeUpCheck = now;
+ }, _config_js__WEBPACK_IMPORTED_MODULE_10__.WAKE_UP_TICK);
+ this.setState({
+ viewportWidth: document.documentElement.clientWidth,
+ viewportHeight: document.documentElement.clientHeight
+ });
+ new Promise((resolve, reject) => {
+ this.tinode = TinodeWeb.tnSetup(this.state.serverAddress, (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isSecureConnection)(), this.state.transport, this.props.intl.locale, this.state.persist, resolve);
+ this.tinode.onConnect = this.handleConnected;
+ this.tinode.onDisconnect = this.handleDisconnect;
+ this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration;
+ this.tinode.onInfoMessage = this.handleInfoMessage;
+ this.tinode.onDataMessage = this.handleDataMessage;
+ }).then(_ => {
+ if (this.state.desktopAlertsEnabled) {
+ this.initFCMessaging().catch(_ => {});
+ }
+ this.resetContactList();
+ const token = this.state.persist ? _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('auth-token') : undefined;
+ if (token) {
+ this.setState({
+ autoLogin: true
+ });
+ token.expires = new Date(token.expires);
+ this.tinode.setAuthToken(token);
+ this.tinode.connect().catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+ const parsedNav = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].parseUrlHash(window.location.hash);
+ if (!['cred', 'reset', 'register'].includes(parsedNav.path[0])) {
+ this.setState({
+ requestedTopic: parsedNav.path[1]
+ });
+ const path = parsedNav.params && parsedNav.params.cred_done ? _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].addUrlParam('', 'cred_done', parsedNav.params.cred_done) : '';
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(path);
+ } else {
+ this.handleHashRoute();
+ }
+ });
+ }
+ componentWillUnmount() {
+ window.removeEventListener('resize', this.handleResize);
+ window.removeEventListener('hashchange', this.handleHashRoute);
+ window.removeEventListener('online', this.handleOnlineOn);
+ window.removeEventListener('offline', this.handleOnlineOff);
+ window.matchMedia('(prefers-color-scheme: dark)').removeEventListener('change', this.handleColorSchemeChange);
+ document.removeEventListener('visibilitychange', this.handleVisibilityEvent);
+ document.removeEventListener('keydown', this.handleEscapeKey);
+ clearInterval(this.wakeUpTicker);
+ }
+ static tnSetup(serverAddress, secureConnection, transport, locale, persistentCache, onSetupCompleted) {
+ const tinode = new tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode({
+ appName: _config_js__WEBPACK_IMPORTED_MODULE_10__.APP_NAME,
+ host: serverAddress,
+ apiKey: _config_js__WEBPACK_IMPORTED_MODULE_10__.API_KEY,
+ transport: transport,
+ secure: secureConnection,
+ persist: persistentCache
+ }, onSetupCompleted);
+ tinode.setHumanLanguage(locale);
+ tinode.enableLogging(_config_js__WEBPACK_IMPORTED_MODULE_10__.LOGGING_ENABLED, true);
+ return tinode;
+ }
+ handlePushMessage(payload) {
+ this.tinode.oobNotification(payload.data || {});
+ }
+ initFCMessaging() {
+ const {
+ formatMessage,
+ locale
+ } = this.props.intl;
+ const onError = (msg, err) => {
+ console.error(msg, err);
+ this.handleError(formatMessage(messages.push_init_failed), 'err');
+ this.setState({
+ firebaseToken: null
+ });
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
+ desktopAlerts: false
+ });
+ };
+ try {
+ this.fcm = (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.getMessaging)((0,firebase_app__WEBPACK_IMPORTED_MODULE_2__.initializeApp)(FIREBASE_INIT, _config_js__WEBPACK_IMPORTED_MODULE_10__.APP_NAME));
+ return navigator.serviceWorker.getRegistration('/service-worker.js').then(reg => {
+ return reg || navigator.serviceWorker.register('/service-worker.js').then(reg => {
+ this.checkForAppUpdate(reg);
+ return reg;
+ });
+ }).then(reg => {
+ (reg.active || reg.installing).postMessage(JSON.stringify({
+ locale: locale,
+ version: _version_js__WEBPACK_IMPORTED_MODULE_12__.PACKAGE_VERSION
+ }));
+ return TinodeWeb.requestFCMToken(this.fcm, reg);
+ }).then(token => {
+ const persist = _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('keep-logged-in');
+ if (token != this.state.firebaseToken) {
+ this.tinode.setDeviceToken(token);
+ if (persist) {
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].setObject('firebase-token', token);
+ }
+ }
+ this.setState({
+ firebaseToken: token,
+ desktopAlerts: true
+ });
+ if (persist) {
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
+ desktopAlerts: true
+ });
+ }
+ (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.onMessage)(this.fcm, payload => {
+ this.handlePushMessage(payload);
+ });
+ }).catch(err => {
+ onError(err);
+ throw err;
+ });
+ } catch (err) {
+ onError(err);
+ return Promise.reject(err);
+ }
+ }
+ static requestFCMToken(fcm, sw) {
+ return (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.getToken)(fcm, {
+ serviceWorkerRegistration: sw,
+ vapidKey: FIREBASE_INIT.messagingVapidKey
+ }).then(token => {
+ if (token) {
+ return token;
+ } else if (typeof Notification != 'undefined') {
+ return Notification.requestPermission().then(permission => {
+ if (permission === 'granted') {
+ return (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.getToken)(fcm, {
+ serviceWorkerRegistration: reg,
+ vapidKey: FIREBASE_INIT.messagingVapidKey
+ }).then(token => {
+ if (token) {
+ return token;
+ } else {
+ throw new Error("Failed to initialize notifications");
+ }
+ });
+ } else {
+ throw new Error("No permission to send notifications: " + permission);
+ }
+ });
+ }
+ throw new Error("Notifications are not supported");
+ });
+ }
+ handleResize() {
+ const mobile = document.documentElement.clientWidth <= _config_js__WEBPACK_IMPORTED_MODULE_10__.MEDIA_BREAKPOINT;
+ this.setState({
+ viewportWidth: document.documentElement.clientWidth,
+ viewportHeight: document.documentElement.clientHeight
+ });
+ if (this.state.displayMobile != mobile) {
+ this.setState({
+ displayMobile: mobile
+ });
+ }
+ }
+ handleEscapeKey(e) {
+ if (e.key === 'Escape' || e.keyCode === 27) {
+ this.setState({
+ topicSelected: null,
+ errorText: '',
+ errorLevel: null,
+ mobilePanel: 'sidepanel',
+ topicSelectedOnline: false,
+ topicSelectedAcs: null,
+ infoPanel: undefined,
+ forwardMessage: null,
+ contextMenuVisible: false,
+ forwardDialogVisible: false,
+ alertVisible: false
+ });
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic('', null));
+ }
+ }
+ checkForAppUpdate(reg) {
+ reg.onupdatefound = _ => {
+ const installingWorker = reg.installing;
+ installingWorker.onstatechange = _ => {
+ if (installingWorker.state == 'installed' && navigator.serviceWorker.controller) {
+ const msg = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.Fragment, {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "update_available",
+ defaultMessage: "Update available.",
+ description: "Message shown when an app update is available."
+ }, void 0, false), " ", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)("a", {
+ href: "",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "reload_update",
+ defaultMessage: "Reload",
+ description: "Call to action to reload application when update is available."
+ }, void 0, false)
+ }, void 0, false), "."]
+ }, void 0, true);
+ this.handleError(msg, 'info');
+ }
+ };
+ };
+ }
+ handleHashRoute() {
+ const hash = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].parseUrlHash(window.location.hash);
+ const newState = {
+ infoPanel: hash.params.info,
+ newTopicTabSelected: hash.params.tab
+ };
+ if (hash.path && hash.path.length > 0) {
+ if (['acc_general', 'archive', 'blocked', 'contacts', 'cred', 'crop', 'edit', 'general', 'newtpk', 'notif', 'register', 'reset', 'security', 'settings', 'support', 'wallpapers', ''].includes(hash.path[0])) {
+ newState.sidePanelSelected = hash.path[0];
+ } else {
+ console.warn("Unknown sidepanel view", hash.path[0]);
+ }
+ let topicName = hash.path[1] || null;
+ if (topicName != this.state.topicSelected) {
+ if (!tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.topicType(topicName)) {
+ topicName = null;
+ newState.mobilePanel = 'sidepanel';
+ } else {
+ newState.mobilePanel = 'topic-view';
+ }
+ Object.assign(newState, {
+ topicSelected: topicName,
+ topicSelectedAcs: this.tinode.getTopicAccessMode(topicName)
+ });
+ }
+ } else {
+ Object.assign(newState, {
+ sidePanelSelected: '',
+ topicSelected: null
+ });
+ }
+ if (hash.params.method) {
+ newState.credMethod = hash.params.method;
+ }
+ if (hash.params.code) {
+ newState.credCode = hash.params.code;
+ }
+ if (hash.params.token) {
+ newState.credToken = hash.params.token;
+ }
+ if (hash.params.cred_done) {
+ Object.assign(newState, TinodeWeb.stateForError(this.props.intl.formatMessage(messages.cred_confirmed_successfully), 'info'));
+ }
+ this.setState(newState);
+ }
+ handleOnline(online) {
+ if (online) {
+ this.handleError();
+ clearInterval(this.reconnectCountdown);
+ this.tinode.reconnect();
+ } else {
+ this.handleError(this.props.intl.formatMessage(messages.no_connection), 'warn');
+ }
+ this.setState({
+ liveConnection: online
+ });
+ }
+ handleVisibilityEvent() {
+ this.setState({
+ applicationVisible: !document.hidden
+ });
+ }
+ static stateForError(err, level, action, actionText) {
+ return {
+ errorText: err,
+ errorLevel: level,
+ errorAction: action,
+ errorActionText: actionText,
+ callShouldStart: false
+ };
+ }
+ handleError(err, level, action, actionText) {
+ this.setState(TinodeWeb.stateForError(err, level, action, actionText));
+ }
+ handleLoginRequest(login, password) {
+ this.setState({
+ loginDisabled: true,
+ login: login,
+ password: password,
+ loadSpinnerVisible: true,
+ autoLogin: true
+ });
+ this.handleError('', null);
+ if (this.tinode.isConnected()) {
+ this.doLogin(login, password, null, {
+ meth: this.state.credMethod,
+ resp: this.state.credCode
+ });
+ } else {
+ this.tinode.connect().catch(err => {
+ this.setState({
+ loginDisabled: false,
+ autoLogin: false,
+ loadSpinnerVisible: false
+ });
+ this.handleError(err.message, 'err');
+ });
+ }
+ if (this.state.desktopAlertsEnabled && !this.state.firebaseToken) {
+ this.initFCMessaging();
+ }
+ }
+ handlePersistenceChange(persist) {
+ if (persist) {
+ this.tinode.initStorage().then(_ => {
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].setObject('keep-logged-in', true);
+ this.setState({
+ persist: true
+ });
+ });
+ } else {
+ this.tinode.clearStorage().then(_ => {
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].setObject('keep-logged-in', false);
+ this.setState({
+ persist: false
+ });
+ });
+ }
+ }
+ handleConnected() {
+ clearInterval(this.reconnectCountdown);
+ this.handleError();
+ const params = this.tinode.getServerInfo();
+ this.setState({
+ serverVersion: params.ver + ' ' + (params.build ? params.build : 'none'),
+ reqCredMethod: ((params.reqCred || {}).auth || [])[0] || 'email'
+ });
+ if (this.state.autoLogin) {
+ this.doLogin(this.state.login, this.state.password, null, {
+ meth: this.state.credMethod,
+ resp: this.state.credCode
+ });
+ }
+ }
+ handleAutoreconnectIteration(sec, prom) {
+ clearInterval(this.reconnectCountdown);
+ if (sec < 0) {
+ this.handleError();
+ return;
+ }
+ if (prom) {
+ prom.then(_ => {
+ this.handleError();
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ return;
+ }
+ const {
+ formatMessage
+ } = this.props.intl;
+ let count = sec / 1000;
+ count = count | count;
+ this.reconnectCountdown = setInterval(_ => {
+ if (count < -10) {
+ clearInterval(this.reconnectCountdown);
+ this.tinode.reconnect();
+ return;
+ }
+ const fmtTime = count > 99 ? (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_17__.secondsToTime)(count) : count;
+ this.handleError(formatMessage(messages.reconnect_countdown, {
+ seconds: fmtTime
+ }), 'warn', _ => {
+ clearInterval(this.reconnectCountdown);
+ this.tinode.reconnect();
+ }, formatMessage(messages.reconnect_now));
+ count -= 1;
+ }, 1000);
+ }
+ handleDisconnect(err) {
+ this.setState({
+ connected: false,
+ ready: false,
+ topicSelectedOnline: false,
+ errorText: err && err.message ? err.message : "Disconnected",
+ errorLevel: err && err.message ? 'err' : 'warn',
+ loginDisabled: false,
+ contextMenuVisible: false,
+ forwardDialogVisible: false,
+ serverVersion: "no connection"
+ });
+ }
+ doLogin(login, password, tmpToken, cred) {
+ if (this.tinode.isAuthenticated()) {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo('');
+ return;
+ }
+ let token = tmpToken || (this.tinode.getAuthToken() || {}).token;
+ if (!(login && password) && !token) {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo('');
+ this.setState({
+ loginDisabled: false
+ });
+ return;
+ }
+ cred = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.credential(cred);
+ let connectionPromise = this.tinode.isConnected() ? Promise.resolve() : this.tinode.connect();
+ let loginPromise;
+ if (login && password) {
+ token = null;
+ this.setState({
+ password: null
+ });
+ loginPromise = connectionPromise.then(_ => this.tinode.loginBasic(login, password, cred));
+ } else {
+ loginPromise = connectionPromise.then(_ => this.tinode.loginToken(token, cred));
+ }
+ loginPromise.then(ctrl => {
+ if (ctrl.code >= 300 && ctrl.text === 'validate credentials') {
+ this.setState({
+ loadSpinnerVisible: false
+ });
+ if (cred) {
+ this.handleError(this.props.intl.formatMessage(messages.code_doesnot_match), 'warn');
+ }
+ TinodeWeb.navigateToCredentialsView(ctrl.params);
+ } else {
+ this.handleLoginSuccessful();
+ }
+ }).catch(err => {
+ const autoLogin = err.code >= 500;
+ this.setState({
+ loginDisabled: false,
+ credMethod: undefined,
+ credCode: undefined,
+ loadSpinnerVisible: false,
+ autoLogin: autoLogin
+ });
+ this.handleError(err.message, 'err');
+ console.warn("Login failed", err);
+ if (!autoLogin) {
+ if (token) {
+ this.handleLogout();
+ }
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo('');
+ }
+ });
+ }
+ static navigateToCredentialsView(params) {
+ const parsed = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].parseUrlHash(window.location.hash);
+ parsed.path[0] = 'cred';
+ parsed.params['method'] = params.cred[0];
+ parsed.params['token'] = params.token;
+ parsed.params['code'] = params.code;
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].composeUrlHash(parsed.path, parsed.params));
+ }
+ handleLoginSuccessful() {
+ this.handleError();
+ if (_lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('keep-logged-in')) {
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].setObject('auth-token', this.tinode.getAuthToken());
+ }
+ const goToTopic = this.state.requestedTopic || this.state.topicSelected;
+ const me = this.tinode.getMeTopic();
+ me.onMetaDesc = this.tnMeMetaDesc;
+ me.onContactUpdate = this.tnMeContactUpdate;
+ me.onSubsUpdated = this.tnMeSubsUpdated;
+ this.setState({
+ connected: true,
+ credMethod: undefined,
+ credCode: undefined,
+ credToken: undefined,
+ myUserId: this.tinode.getCurrentUserID(),
+ autoLogin: true,
+ requestedTopic: undefined
+ });
+ me.subscribe(me.startMetaQuery().withLaterSub().withDesc().withTags().withCred().build()).catch(err => {
+ this.tinode.disconnect();
+ localStorage.removeItem('auth-token');
+ this.handleError(err.message, 'err');
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo('');
+ }).finally(_ => {
+ this.setState({
+ loadSpinnerVisible: false
+ });
+ });
+ let urlHash = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, 'contacts');
+ if (goToTopic) {
+ urlHash = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic(urlHash, goToTopic);
+ }
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(urlHash);
+ }
+ tnMeMetaDesc(desc) {
+ if (!desc) {
+ return;
+ }
+ if (desc.public) {
+ this.setState({
+ sidePanelTitle: desc.public.fn,
+ sidePanelAvatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_13__.makeImageUrl)(desc.public.photo)
+ });
+ }
+ if (desc.trusted) {
+ const badges = [];
+ for (const [key, val] of Object.entries(desc.trusted)) {
+ if (val) {
+ badges.push(key);
+ }
+ }
+ this.setState({
+ myTrustedBadges: badges
+ });
+ }
+ if (desc.acs) {
+ this.setState({
+ incognitoMode: !desc.acs.isPresencer()
+ });
+ }
+ if (TinodeWeb.checkIfPinsUpdated(desc, this.state.chatList)) {
+ this.resetContactList();
+ }
+ }
+ tnMeContactUpdate(what, cont) {
+ if (what == 'on' || what == 'off') {
+ this.resetContactList();
+ if (this.state.topicSelected == cont.topic) {
+ this.setState({
+ topicSelectedOnline: what == 'on'
+ });
+ }
+ } else if (what == 'read') {
+ this.resetContactList();
+ } else if (what == 'msg' && cont) {
+ const topic = this.tinode.getTopic(cont.topic);
+ const archived = topic && topic.isArchived();
+ if (cont.unread > 0 && this.state.messageSounds && !archived) {
+ if (document.hidden || this.state.topicSelected != cont.topic) {
+ POP_SOUND.play().catch(_ => {});
+ }
+ }
+ this.resetContactList();
+ } else if (what == 'recv') {} else if (what == 'gone' || what == 'unsub') {
+ if (this.state.topicSelected == cont.topic) {
+ this.handleTopicSelected(null);
+ }
+ this.resetContactList();
+ } else if (what == 'acs') {
+ if (this.state.topicSelected == cont.topic) {
+ this.setState({
+ topicSelectedAcs: cont.acs
+ });
+ }
+ } else if (what == 'del') {} else if (what == 'upd' || what == 'call') {} else {
+ console.info("Unsupported (yet) presence update:", what, "in", (cont || {}).topic);
+ }
+ }
+ tnMeSubsUpdated(unused) {
+ this.resetContactList();
+ }
+ static prepareSearchableContacts(chatList, foundContacts) {
+ const merged = {};
+ for (const c of chatList) {
+ if (tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isP2PTopicName(c.topic)) {
+ merged[c.topic] = {
+ user: c.topic,
+ updated: c.updated,
+ public: c.public,
+ private: c.private,
+ acs: c.acs
+ };
+ }
+ }
+ for (const c of foundContacts) {
+ if (!merged[c.user]) {
+ merged[c.user] = c;
+ }
+ }
+ return Object.values(merged);
+ }
+ resetContactList() {
+ const newState = {
+ chatList: []
+ };
+ if (!this.state.ready) {
+ newState.ready = true;
+ }
+ const me = this.tinode.getMeTopic();
+ me.contacts(c => {
+ if (!c.topic && !c.user) {
+ c.topic = c.name;
+ }
+ newState.chatList.push(c);
+ if (this.state.topicSelected == c.topic) {
+ newState.topicSelectedOnline = c.online;
+ newState.topicSelectedAcs = c.acs;
+ }
+ });
+ const past = new Date(0);
+ newState.chatList.sort((a, b) => {
+ const pins = me.pinnedTopicRank(b.topic) - me.pinnedTopicRank(a.topic);
+ return pins != 0 ? pins : (b.touched || past).getTime() - (a.touched || past).getTime();
+ });
+ newState.searchableContacts = TinodeWeb.prepareSearchableContacts(newState.chatList, this.state.searchResults);
+ this.setState(newState);
+ }
+ static checkIfPinsUpdated(me, chatList) {
+ for (let i = 0; i < chatList.length; i++) {
+ const c = chatList[i];
+ if (!!me.pinnedTopicRank(c.topic) != c.pinned) {
+ return true;
+ }
+ }
+ return false;
+ }
+ tnInitFind() {
+ const fnd = this.tinode.getFndTopic();
+ fnd.onSubsUpdated = this.tnFndSubsUpdated;
+ if (fnd.isSubscribed()) {
+ this.tnFndSubsUpdated();
+ } else {
+ fnd.subscribe(fnd.startMetaQuery().withSub().build()).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+ }
+ tnFndSubsUpdated() {
+ const foundContacts = [];
+ this.tinode.getFndTopic().contacts(s => {
+ foundContacts.push(s);
+ });
+ this.setState({
+ searchResults: foundContacts,
+ searchableContacts: TinodeWeb.prepareSearchableContacts(this.state.chatList, foundContacts)
+ });
+ }
+ handleSearchContacts(query) {
+ const fnd = this.tinode.getFndTopic();
+ fnd.setMeta({
+ desc: {
+ public: query
+ }
+ }).then(_ => fnd.getMeta(fnd.startMetaQuery().withSub().build())).catch(err => this.handleError(err.message, 'err'));
+ }
+ handleTopicSelected(topicName) {
+ if (this.state.newTopicParams && this.state.newTopicParams._topicName != topicName) {
+ this.setState({
+ newTopicParams: null
+ });
+ }
+ if (topicName) {
+ this.setState({
+ errorText: '',
+ errorLevel: null,
+ mobilePanel: 'topic-view',
+ infoPanel: undefined
+ });
+ if (this.state.topicSelected != topicName) {
+ this.setState({
+ topicSelectedOnline: this.tinode.isTopicOnline(topicName),
+ topicSelectedAcs: this.tinode.getTopicAccessMode(topicName),
+ forwardMessage: null
+ });
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic('', topicName));
+ }
+ } else {
+ this.setState({
+ topicSelected: null,
+ errorText: '',
+ errorLevel: null,
+ mobilePanel: 'sidepanel',
+ topicSelectedOnline: false,
+ topicSelectedAcs: null,
+ infoPanel: undefined,
+ forwardMessage: null
+ });
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic('', null));
+ }
+ }
+ handleHideMessagesView() {
+ this.setState({
+ mobilePanel: 'sidepanel'
+ });
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic(window.location.hash, null));
+ }
+ handleSendMessage(msg, uploadCompletionPromise, uploader, head) {
+ const topic = this.tinode.getTopic(this.state.topicSelected);
+ return this.sendMessageToTopic(topic, msg, uploadCompletionPromise, uploader, head);
+ }
+ sendMessageToTopic(topic, msg, uploadCompletionPromise, uploader, head) {
+ msg = topic.createMessage(msg, false);
+ msg._uploader = uploader;
+ if (head) {
+ msg.head = Object.assign(msg.head || {}, head);
+ }
+ const completion = [];
+ if (uploadCompletionPromise) {
+ completion.push(uploadCompletionPromise);
+ }
+ if (!topic.isSubscribed()) {
+ const subscribePromise = topic.subscribe().then(_ => {
+ let calls = [];
+ topic.queuedMessages(pub => {
+ if (pub._sending || pub.seq == msg.seq) {
+ return;
+ }
+ if (pub.head && pub.head.webrtc) {
+ calls.push(pub.seq);
+ return;
+ }
+ if (topic.isSubscribed()) {
+ topic.publishMessage(pub);
+ }
+ });
+ if (calls.length > 0) {
+ topic.delMessagesList(calls, true);
+ }
+ });
+ completion.push(subscribePromise);
+ }
+ return topic.publishDraft(msg, Promise.all(completion)).then(ctrl => {
+ if (topic.isArchived()) {
+ topic.archive(false);
+ }
+ return ctrl;
+ }).catch(err => this.handleError(err.message, 'err'));
+ }
+ handleNewChatInvitation(topicName, action) {
+ const topic = this.tinode.getTopic(topicName);
+ let response = null;
+ switch (action) {
+ case 'accept':
+ const mode = topic.getAccessMode().getGiven();
+ response = topic.setMeta({
+ sub: {
+ mode: mode
+ }
+ });
+ if (topic.isP2PType()) {
+ response = response.then(_ => topic.setMeta({
+ sub: {
+ user: topicName,
+ mode: mode
+ }
+ }));
+ }
+ break;
+ case 'delete':
+ response = topic.delTopic(true);
+ break;
+ case 'block':
+ const am = topic.getAccessMode().updateWant('-JP').getWant();
+ response = topic.setMeta({
+ sub: {
+ mode: am
+ }
+ }).then(_ => this.handleTopicSelected(null));
+ break;
+ default:
+ console.warn("Unknown invitation action", '"' + action + '""');
+ }
+ if (response != null) {
+ response.catch(err => this.handleError(err.message, 'err'));
+ }
+ }
+ handleNewAccount() {
+ this.handleError();
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, 'register'));
+ }
+ handleNewAccountRequest(login_, password_, public_, cred_, tags_) {
+ this.handleError();
+ this.tinode.connect(this.state.serverAddress).then(_ => {
+ let attachments;
+ if (public_ && public_.photo && public_.photo.ref) {
+ attachments = [public_.photo.ref];
+ }
+ return this.tinode.createAccountBasic(login_, password_, {
+ public: public_,
+ tags: tags_,
+ cred: tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.credential(cred_),
+ attachments: attachments
+ });
+ }).then(ctrl => {
+ if (ctrl.code >= 300 && ctrl.text == 'validate credentials') {
+ TinodeWeb.navigateToCredentialsView(ctrl.params);
+ } else {
+ this.handleLoginSuccessful(this);
+ }
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+ handleToggleIncognitoMode(on) {
+ this.setState({
+ incognitoMode: null
+ });
+ const me = this.tinode.getMeTopic();
+ const am = me.getAccessMode().updateWant(on ? '-P' : '+P').getWant();
+ me.setMeta({
+ sub: {
+ mode: am
+ }
+ }).catch(err => {
+ this.setState({
+ incognitoMode: !on
+ });
+ this.handleError(err.message, 'err');
+ });
+ }
+ handleChangeColorSchema(schema) {
+ this.setState({
+ colorSchema: schema
+ });
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
+ colorSchema: schema
+ });
+ document.documentElement.style.colorScheme = schema == 'auto' ? 'light dark' : schema;
+ this.applyColorSchema(schema, this.state.systemColorSchema, this.state.wallpaperSize);
+ }
+ handleColorSchemeChange(event) {
+ const systemSchema = event.matches ? 'dark' : 'light';
+ this.setState({
+ systemColorSchema: systemSchema
+ });
+ this.applyColorSchema(this.state.colorSchema, systemSchema, this.state.wallpaperSize);
+ }
+ applyColorSchema(schema, systemSchema, size) {
+ const effectiveSchema = schema == 'auto' ? systemSchema : schema;
+ document.documentElement.style.setProperty('--wallpaper-invert', effectiveSchema == 'dark' && size ? '1' : '0');
+ document.documentElement.style.setProperty('--wallpaper-brightness', effectiveSchema == 'dark' && !size ? '0.5' : '1');
+ }
+ handleSelectWallpapers() {
+ this.handleError();
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, 'wallpapers'));
+ }
+ applyWallpaperSettings(wallpaper, size, blur, effectiveSchema) {
+ document.documentElement.style.setProperty('--wallpaper-url', `url('${wallpaper}')`);
+ document.documentElement.style.setProperty('--wallpaper-repeat', size ? 'repeat' : 'no-repeat');
+ document.documentElement.style.setProperty('--wallpaper-blur', size ? '0px' : `${blur}px`);
+ document.documentElement.style.setProperty('--wallpaper-size', size ? `${size}px` : 'cover');
+ document.documentElement.style.setProperty('--wallpaper-position', size ? 'unset' : 'center');
+ document.documentElement.style.setProperty('--wallpaper-invert', effectiveSchema == 'dark' && size ? '1' : '0');
+ document.documentElement.style.setProperty('--wallpaper-brightness', effectiveSchema == 'dark' && !size ? '0.5' : '1');
+ }
+ handleWallpaperSelected(wallpaper, size, blur) {
+ this.handleError();
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
+ wallpaper: wallpaper,
+ wallpaperSize: size,
+ wallpaperBlur: blur
+ });
+ this.setState({
+ wallpaper: wallpaper,
+ wallpaperSize: size,
+ wallpaperBlur: blur
+ });
+ this.applyWallpaperSettings(wallpaper, size, blur, this.state.colorSchema == 'auto' ? this.state.systemColorSchema : this.state.colorSchema);
+ }
+ handleChangeTextSize(size) {
+ this.setState({
+ textSize: size | 0
+ });
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
+ textSize: size
+ });
+ document.documentElement.style.setProperty('--message-text-size', `${size}pt`);
+ }
+ handleSendOnEnter(option) {
+ this.setState({
+ sendOnEnter: option
+ });
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
+ sendOnEnter: option
+ });
+ }
+ handleUpdateAccountTagsRequest(_, tags) {
+ this.tinode.getMeTopic().setMeta({
+ tags: tags
+ }).catch(err => this.handleError(err.message, 'err'));
+ }
+ handleSettings() {
+ this.handleError();
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, this.state.myUserId ? 'edit' : 'settings'));
+ }
+ handleGlobalSettings(settings) {
+ const serverAddress = settings.serverAddress || this.state.serverAddress;
+ const transport = settings.transport || this.state.transport;
+ const secureConnection = settings.secureConnection === undefined ? this.state.secureConnection : settings.secureConnection;
+ if (this.tinode) {
+ this.tinode.clearStorage();
+ this.tinode.onDisconnect = undefined;
+ this.tinode.disconnect();
+ }
+ this.tinode = TinodeWeb.tnSetup(serverAddress, secureConnection, transport, this.props.intl.locale, _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('keep-logged-in'));
+ this.tinode.onConnect = this.handleConnected;
+ this.tinode.onDisconnect = this.handleDisconnect;
+ this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration;
+ this.tinode.onInfoMessage = this.handleInfoMessage;
+ this.tinode.onDataMessage = this.handleDataMessage;
+ this.setState({
+ serverAddress: serverAddress,
+ transport: transport,
+ secureConnection: secureConnection
+ });
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].setObject('settings', {
+ serverAddress: serverAddress,
+ transport: transport,
+ secureConnection: secureConnection
+ });
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, ''));
+ }
+ handleShowArchive() {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, this.state.myUserId ? 'archive' : ''));
+ }
+ handleShowBlocked() {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, this.state.myUserId ? 'blocked' : ''));
+ }
+ toggleFCMToken(enabled) {
+ if (enabled) {
+ this.setState({
+ desktopAlerts: null
+ });
+ if (!this.state.firebaseToken) {
+ this.initFCMessaging();
+ } else {
+ this.setState({
+ desktopAlerts: true
+ });
+ if (_lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('keep-logged-in')) {
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
+ desktopAlerts: true
+ });
+ }
+ }
+ } else if (this.state.firebaseToken && this.fcm) {
+ (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.deleteToken)(this.fcm).catch(err => {
+ console.error("Unable to delete token.", err);
+ }).finally(_ => {
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
+ desktopAlerts: false
+ });
+ localStorage.removeItem('firebase-token');
+ this.setState({
+ desktopAlerts: false,
+ firebaseToken: null
+ });
+ this.tinode.setDeviceToken(null);
+ });
+ } else {
+ this.setState({
+ desktopAlerts: false,
+ firebaseToken: null
+ });
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
+ desktopAlerts: false
+ });
+ }
+ }
+ handleToggleMessageSounds(enabled) {
+ this.setState({
+ messageSounds: enabled
+ });
+ _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
+ messageSoundsOff: !enabled
+ });
+ }
+ handleCredAdd(method, value) {
+ const me = this.tinode.getMeTopic();
+ me.setMeta({
+ cred: {
+ meth: method,
+ val: value
+ }
+ }).catch(err => this.handleError(err.message, 'err'));
+ }
+ handleCredDelete(method, value) {
+ const me = this.tinode.getMeTopic();
+ me.delCredential(method, value).catch(err => this.handleError(err.message, 'err'));
+ }
+ handleCredConfirm(method, response) {
+ TinodeWeb.navigateToCredentialsView({
+ cred: [method],
+ code: response
+ });
+ }
+ handleSidepanelCancel() {
+ const parsed = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].parseUrlHash(window.location.hash);
+ let path = '';
+ if (['security', 'support', 'general', 'notif', 'acc_general'].includes(parsed.path[0])) {
+ path = 'edit';
+ } else if ('crop' == parsed.path[0]) {
+ path = 'general';
+ } else if ('blocked' == parsed.path[0]) {
+ path = 'security';
+ } else if ('wallpapers' == parsed.path[0]) {
+ path = 'acc_general';
+ } else if (this.state.myUserId) {
+ path = 'contacts';
+ }
+ parsed.path[0] = path;
+ if (parsed.params) {
+ delete parsed.params.code;
+ delete parsed.params.method;
+ delete parsed.params.tab;
+ delete parsed.params.scheme;
+ delete parsed.params.token;
+ }
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].composeUrlHash(parsed.path, parsed.params));
+ this.setState({
+ errorText: '',
+ errorLevel: null
+ });
+ }
+ basicNavigator(hash) {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, hash));
+ }
+ infoNavigator(hash) {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlInfoPanel(window.location.hash, hash));
+ }
+ handleStartTopicRequest(topicName, newTopicParams, isChannel) {
+ if (topicName && this.tinode.isTopicCached(topicName)) {
+ this.handleTopicSelected(topicName);
+ return;
+ }
+ const params = {};
+ if (tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isP2PTopicName(topicName)) {
+ params.sub = {
+ mode: _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_P2P_ACCESS_MODE
+ };
+ params.desc = {
+ defacs: {
+ auth: _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_P2P_ACCESS_MODE
+ }
+ };
+ } else {
+ topicName = topicName || this.tinode.newGroupTopicName(isChannel);
+ if (newTopicParams) {
+ params.desc = {
+ public: newTopicParams.public,
+ private: {
+ comment: newTopicParams.private
+ }
+ };
+ params.tags = newTopicParams.tags;
+ }
+ }
+ params._topicName = topicName;
+ this.setState({
+ newTopicParams: params
+ }, _ => {
+ this.handleTopicSelected(topicName);
+ });
+ }
+ handleNewTopicCreated(oldName, newName) {
+ let nextState = {};
+ if (this.state.callShouldStart) {
+ nextState = {
+ callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_IN_PROGRESS,
+ callShouldStart: false
+ };
+ }
+ if (this.state.topicSelected == oldName && oldName != newName) {
+ nextState.topicSelected = newName;
+ }
+ this.setState(nextState, _ => {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic('', newName));
+ });
+ }
+ handleTopicUpdateRequest(topicName, pub, priv, defacs) {
+ this.handleError();
+ const topic = this.tinode.getTopic(topicName);
+ if (topic) {
+ const params = {};
+ let attachments;
+ if (pub) {
+ if (pub.photo) {
+ if (pub.photo.ref && pub.photo.ref != tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR) {
+ attachments = [pub.photo.ref];
+ } else if (!pub.photo.data || pub.photo.data == tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR) {
+ pub.photo = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR;
+ }
+ }
+ params.public = pub;
+ }
+ if (typeof priv == 'string') {
+ params.private = priv === tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR ? tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR : {
+ comment: priv
+ };
+ }
+ if (defacs) {
+ params.defacs = defacs;
+ }
+ topic.setMeta({
+ desc: params,
+ attachments: attachments
+ }).catch(err => this.handleError(err.message, 'err'));
+ }
+ }
+ handleUnarchive(topicName) {
+ const topic = this.tinode.getTopic(topicName);
+ if (topic) {
+ topic.archive(false).catch(err => this.handleError(err.message, 'err'));
+ }
+ }
+ handleUpdatePasswordRequest(password) {
+ this.handleError();
+ if (password) {
+ this.tinode.updateAccountBasic(null, this.tinode.getCurrentLogin(), password).catch(err => this.handleError(err.message, 'err'));
+ }
+ }
+ handleChangePermissions(topicName, mode, uid) {
+ const topic = this.tinode.getTopic(topicName);
+ if (topic) {
+ const am = topic.getAccessMode();
+ if (uid) {
+ am.updateGiven(mode);
+ mode = am.getGiven();
+ } else {
+ am.updateWant(mode);
+ mode = am.getWant();
+ }
+ topic.setMeta({
+ sub: {
+ user: uid,
+ mode: mode
+ }
+ }).catch(err => this.handleError(err.message, 'err'));
+ }
+ }
+ handleTagsUpdateRequest(topicName, tags) {
+ const topic = this.tinode.getTopic(topicName);
+ if (topic) {
+ topic.setMeta({
+ tags: tags
+ }).catch(err => this.handleError(err.message, 'err'));
+ }
+ }
+ handleLogout() {
+ (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_18__.updateFavicon)(0);
+ localStorage.removeItem('auth-token');
+ localStorage.removeItem('firebase-token');
+ localStorage.removeItem('settings');
+ if (this.state.firebaseToken) {
+ (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.deleteToken)(this.fcm);
+ }
+ document.documentElement.style.colorScheme = _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_COLOR_SCHEME == 'auto' ? 'light dark' : _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_COLOR_SCHEME;
+ document.documentElement.style.setProperty('--message-text-size', `${_config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_TEXT_SIZE}pt`);
+ clearInterval(this.reconnectCountdown);
+ let cleared;
+ if (this.tinode) {
+ cleared = this.tinode.clearStorage();
+ this.tinode.onDisconnect = undefined;
+ this.tinode.disconnect();
+ } else {
+ cleared = Promose.resolve();
+ }
+ this.setState(this.getBlankState());
+ cleared.then(_ => {
+ this.tinode = TinodeWeb.tnSetup(this.state.serverAddress, (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isSecureConnection)(), this.state.transport, this.props.intl.locale, _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('keep-logged-in'), _ => {
+ this.tinode.onConnect = this.handleConnected;
+ this.tinode.onDisconnect = this.handleDisconnect;
+ this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration;
+ this.tinode.onInfoMessage = this.handleInfoMessage;
+ this.tinode.onDataMessage = this.handleDataMessage;
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo('');
+ });
+ });
+ }
+ handleDeleteAccount() {
+ this.tinode.delCurrentUser(true).then(_ => {
+ this.handleLogout();
+ });
+ }
+ handleDeleteTopicRequest(topicName) {
+ const topic = this.tinode.getTopic(topicName);
+ if (!topic) {
+ return;
+ }
+ topic.delTopic(true).then(_ => {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic(window.location.hash, ''));
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+ handleDeleteMessagesRequest(topicName) {
+ const topic = this.tinode.getTopic(topicName);
+ if (!topic) {
+ return;
+ }
+ topic.delMessagesAll(true).catch(err => this.handleError(err.message, 'err'));
+ }
+ handleLeaveUnsubRequest(topicName) {
+ const topic = this.tinode.getTopic(topicName);
+ if (!topic) {
+ return;
+ }
+ topic.leave(true).then(_ => {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic(window.location.hash, ''));
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+ handleBlockTopicRequest(topicName) {
+ const topic = this.tinode.getTopic(topicName);
+ if (!topic) {
+ return;
+ }
+ topic.updateMode(null, '-JP').then(_ => {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic(window.location.hash, ''));
+ }).catch(err => this.handleError(err.message, 'err'));
+ }
+ handleReportTopic(topicName) {
+ const topic = this.tinode.getTopic(topicName);
+ if (!topic) {
+ return;
+ }
+ this.tinode.report('report', topicName);
+ topic.updateMode(null, '-JP').then(_ => {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic(window.location.hash, ''));
+ }).catch(err => this.handleError(err.message, 'err'));
+ }
+ handleShowContextMenu(params, menuItems) {
+ this.setState({
+ contextMenuVisible: true,
+ contextMenuClickAt: {
+ x: params.x,
+ y: params.y
+ },
+ contextMenuParams: params,
+ contextMenuItems: menuItems || this.defaultTopicContextMenu(params.topicName),
+ contextMenuBounds: this.selfRef.current.getBoundingClientRect()
+ });
+ }
+ handleShowForwardDialog(params) {
+ if (this.state.sidePanelSelected == 'newtpk') {
+ this.handleSidepanelCancel();
+ }
+ const header = params.userName ? '➦ ' + params.userName : '';
+ const content = typeof params.content == 'string' ? tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.init(params.content) : tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.forwardedContent(params.content);
+ const preview = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.preview(content, _config_js__WEBPACK_IMPORTED_MODULE_10__.FORWARDED_PREVIEW_LENGTH, true);
+ const msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.append(tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.appendLineBreak(tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.mention(header, params.userFrom)), content);
+ const msgPreview = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.quote(header, params.userFrom, preview);
+ const head = {
+ forwarded: params.topicName + ':' + params.seq
+ };
+ this.setState({
+ forwardDialogVisible: true,
+ forwardMessage: {
+ head: head,
+ msg: msg,
+ preview: msgPreview
+ }
+ });
+ }
+ handleShareTheCard(card) {
+ this.setState({
+ forwardDialogVisible: true,
+ forwardMessage: {
+ content: card,
+ type: card.contentType
+ }
+ });
+ }
+ defaultTopicContextMenu(topicName) {
+ const topic = this.tinode.getTopic(topicName);
+ if (topic._deleted) {
+ return ['topic_delete'];
+ }
+ const me = this.tinode.getMeTopic();
+ let muted = false,
+ blocked = false,
+ self_blocked = false,
+ subscribed = false,
+ deleter = false,
+ archived = false,
+ pinned = false,
+ webrtc = false,
+ writer = false,
+ p2p = false,
+ self = false;
+ if (topic) {
+ subscribed = topic.isSubscribed();
+ archived = topic.isArchived();
+ pinned = me.pinnedTopicRank(topicName) > 0;
+ const acs = topic.getAccessMode();
+ if (acs) {
+ muted = acs.isMuted();
+ blocked = !acs.isJoiner();
+ self_blocked = !acs.isJoiner('want');
+ deleter = acs.isDeleter();
+ writer = acs.isWriter();
+ }
+ }
+ webrtc = writer && !!this.tinode.getServerParam('iceServers');
+ p2p = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isP2PTopicName(topicName);
+ self = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isSelfTopicName(topicName);
+ return [subscribed ? {
+ title: this.props.intl.formatMessage(messages.menu_item_info),
+ handler: this.handleShowInfoView
+ } : null, subscribed && p2p && webrtc ? {
+ title: this.props.intl.formatMessage(messages.menu_item_audio_call),
+ handler: this.handleStartAudioCall
+ } : null, subscribed && p2p && webrtc ? {
+ title: this.props.intl.formatMessage(messages.menu_item_video_call),
+ handler: this.handleStartVideoCall
+ } : null, subscribed ? 'messages_clear' : null, subscribed && deleter && !self ? 'messages_clear_hard' : null, self ? null : muted ? blocked ? null : 'topic_unmute' : 'topic_mute', self ? null : self_blocked ? 'topic_unblock' : 'topic_block', pinned ? 'topic_unpin' : 'topic_pin', archived ? 'topic_restore' : 'topic_archive', 'topic_delete'];
+ }
+ handleHideContextMenu() {
+ this.setState({
+ contextMenuVisible: false,
+ contextMenuClickAt: null,
+ contextMenuParams: null,
+ contextMenuBounds: null
+ });
+ }
+ handleHideForwardDialog(keepForwardedMessage) {
+ this.setState({
+ forwardDialogVisible: false,
+ forwardMessage: keepForwardedMessage ? this.state.forwardMessage : null
+ });
+ }
+ handleContextMenuAction(action, promise, params) {
+ if (action == 'topic_archive') {
+ if (promise && params.topicName && params.topicName == this.state.topicSelected) {
+ promise.then(_ => {
+ this.handleTopicSelected(null);
+ });
+ }
+ } else if (action == 'menu_item_forward') {
+ this.handleShowForwardDialog(params);
+ }
+ }
+ handleShowAlert(title, content, onConfirm, confirmText, onReject, rejectText) {
+ this.setState({
+ alertVisible: true,
+ alertParams: {
+ title: title,
+ content: content,
+ onConfirm: onConfirm,
+ confirm: confirmText,
+ onReject: onReject,
+ reject: rejectText
+ }
+ });
+ }
+ handleShowInfoView() {
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].addUrlParam(window.location.hash, 'info', 'info'));
+ this.setState({
+ infoPanel: 'info'
+ });
+ }
+ handleMemberUpdateRequest(topicName, added, removed) {
+ if (!topicName) {
+ return;
+ }
+ const topic = this.tinode.getTopic(topicName);
+ if (!topic) {
+ return;
+ }
+ if (added && added.length > 0) {
+ added.forEach(uid => {
+ topic.invite(uid, null).catch(err => this.handleError(err.message, 'err'));
+ });
+ }
+ if (removed && removed.length > 0) {
+ removed.forEach(uid => {
+ topic.delSubscription(uid).catch(err => this.handleError(err.message, 'err'));
+ });
+ }
+ }
+ handleValidateCredentialsRequest(cred, code, token) {
+ if (this.tinode.isAuthenticated()) {
+ this.tinode.getMeTopic().setMeta({
+ cred: {
+ meth: cred,
+ resp: code
+ }
+ }).then(_ => _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, 'contacts'))).catch(err => this.handleError(err.message, 'err'));
+ } else {
+ this.setState({
+ credMethod: cred,
+ credCode: code,
+ credToken: token
+ });
+ this.doLogin(null, null, token, {
+ meth: cred,
+ resp: code
+ });
+ }
+ }
+ handlePasswordResetRequest(method, value) {
+ return this.tinode.connect().then(_ => this.tinode.requestResetAuthSecret('basic', method, value)).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+ handleResetPassword(newPassword, tempAuth) {
+ const secret = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_13__.base64ReEncode)(tempAuth.secret);
+ if (!secret || !tempAuth.scheme) {
+ this.handleError(this.props.intl.formatMessage(messages.invalid_security_token), 'err');
+ } else {
+ this.tinode.connect().then(_ => this.tinode.updateAccountBasic(null, null, newPassword, {
+ scheme: tempAuth.scheme,
+ secret: secret
+ })).then(_ => {
+ this.handleError(this.props.intl.formatMessage(messages.password_reset_success), 'info');
+ _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo('');
+ }).catch(err => {
+ this.handleError(err.message, 'err');
+ });
+ }
+ }
+ handleShowCountrySelector(code, dial, selectedCallback) {
+ this.handleShowAlert(this.props.intl.formatMessage(messages.select_country), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
+ fallback: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "loading_note",
+ defaultMessage: "Loading...",
+ description: "Message shown when component is loading"
+ }, void 0, false)
+ }, void 0, false),
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(PhoneCountrySelector, {
+ selected: code,
+ onSubmit: (c, d) => {
+ this.setState({
+ alertVisible: false
+ });
+ selectedCallback(c, d);
+ }
+ }, void 0, false)
+ }, void 0, false), null, null, _ => {}, null);
+ }
+ handleStartVideoCall() {
+ this.setState({
+ callTopic: this.state.topicSelected,
+ callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_OUTGOING_INITATED,
+ callAudioOnly: false
+ });
+ }
+ handleStartAudioCall() {
+ this.setState({
+ callTopic: this.state.topicSelected,
+ callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_OUTGOING_INITATED,
+ callAudioOnly: true
+ });
+ }
+ handleCallInvite(callTopic, callSeq, callState, audioOnly) {
+ switch (callState) {
+ case _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_OUTGOING_INITATED:
+ const head = {
+ webrtc: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_HEAD_STARTED,
+ aonly: !!audioOnly
+ };
+ return this.handleSendMessage(tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.videoCall(audioOnly), undefined, undefined, head).then(ctrl => {
+ if (ctrl.code < 200 || ctrl.code >= 300 || !ctrl.params || !ctrl.params.seq) {
+ this.handleCallClose();
+ return ctrl;
+ }
+ this.setState({
+ callSeq: ctrl.params['seq']
+ });
+ return ctrl;
+ });
+ case _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_IN_PROGRESS:
+ const topic = this.tinode.getTopic(callTopic);
+ if (!topic) {
+ return;
+ }
+ topic.videoCall('accept', callSeq);
+ break;
+ }
+ }
+ handleCallRinging(callTopic, callSeq) {
+ const topic = this.tinode.getTopic(callTopic);
+ if (!topic) {
+ return;
+ }
+ topic.videoCall('ringing', callSeq);
+ }
+ handleCallHangup(callTopic, callSeq) {
+ const topic = this.tinode.getTopic(callTopic);
+ if (!topic) {
+ return;
+ }
+ topic.videoCall('hang-up', callSeq);
+ }
+ handleCallSendOffer(callTopic, callSeq, sdp) {
+ const topic = this.tinode.getTopic(callTopic);
+ if (!topic) {
+ return;
+ }
+ topic.videoCall('offer', callSeq, sdp);
+ }
+ handleCallIceCandidate(callTopic, callSeq, candidate) {
+ const topic = this.tinode.getTopic(callTopic);
+ if (!topic) {
+ return;
+ }
+ topic.videoCall('ice-candidate', callSeq, candidate);
+ }
+ handleCallSendAnswer(callTopic, callSeq, sdp) {
+ const topic = this.tinode.getTopic(callTopic);
+ if (!topic) {
+ return;
+ }
+ topic.videoCall('answer', callSeq, sdp);
+ }
+ handleCallClose() {
+ if (this.callTimeoutTimer) {
+ clearTimeout(this.callTimeoutTimer);
+ }
+ this.setState({
+ callTopic: undefined,
+ callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_NONE,
+ callAudioOnly: undefined
+ });
+ }
+ handleCallAccept(topicName, setCallTopic, callSeq) {
+ const topic = this.tinode.getTopic(topicName);
+ if (!topic) {
+ return;
+ }
+ if (topic.isSubscribed()) {
+ this.handleTopicSelected(setCallTopic ? topicName : this.state.callTopic);
+ const upd = {
+ callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_IN_PROGRESS
+ };
+ if (setCallTopic) {
+ upd.callTopic = topicName;
+ upd.callSeq = callSeq;
+ }
+ this.setState(upd);
+ } else {
+ this.setState({
+ callShouldStart: true
+ }, _ => this.handleTopicSelected(this.state.callTopic));
+ }
+ }
+ handleInfoMessage(info) {
+ if (info.what != 'call') {
+ return;
+ }
+ switch (info.event) {
+ case 'accept':
+ if (tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isMeTopicName(info.topic) && this.tinode.isMe(info.from)) {
+ this.setState({
+ callTopic: null,
+ callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_NONE,
+ callSeq: null,
+ callAudioOnly: undefined
+ });
+ return;
+ }
+ if (info.topic == this.state.callTopic) {
+ this.setState({
+ callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_IN_PROGRESS
+ });
+ }
+ break;
+ case 'hang-up':
+ this.handleCallClose();
+ break;
+ }
+ }
+ handleDataMessage(data) {
+ if (data.head && data.head.webrtc && data.head.webrtc == _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_HEAD_STARTED && tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isP2PTopicName(data.topic)) {
+ const topic = this.tinode.getTopic(data.topic);
+ if (topic) {
+ const msg = topic.latestMsgVersion(data.seq) || data;
+ if (msg.head && msg.head.webrtc && msg.head.webrtc == _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_HEAD_STARTED) {
+ if (data.from != this.state.myUserId) {
+ if (this.state.callState == _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_NONE) {
+ this.setState({
+ callTopic: data.topic,
+ callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_INCOMING_RECEIVED,
+ callSeq: data.seq,
+ callAudioOnly: !!msg.head.aonly
+ });
+ } else {
+ this.handleCallHangup(data.topic, data.seq);
+ }
+ }
+ }
+ } else {
+ console.warn("Received vc data message from unknown topic", data.topic);
+ }
+ }
+ }
+ render() {
+ const colorSchema = this.state.colorSchema !== 'auto' ? this.state.colorSchema : this.state.systemColorSchema;
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)("div", {
+ id: "app-container",
+ ref: this.selfRef,
+ children: [this.state.contextMenuVisible ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(_widgets_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], {
+ tinode: this.tinode,
+ bounds: this.state.contextMenuBounds,
+ clickAt: this.state.contextMenuClickAt,
+ params: this.state.contextMenuParams,
+ items: this.state.contextMenuItems,
+ hide: this.handleHideContextMenu,
+ onShowAlert: this.handleShowAlert,
+ onAction: this.handleContextMenuAction,
+ onTopicRemoved: topicName => {
+ if (topicName == this.state.topicSelected) {
+ this.handleTopicSelected(null);
+ }
+ },
+ onError: this.handleError
+ }, void 0, false) : null, this.state.forwardDialogVisible ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(_widgets_forward_dialog_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], {
+ tinode: this.tinode,
+ contacts: this.state.chatList,
+ topicSelected: this.state.topicSelected,
+ myUserId: this.state.myUserId,
+ hide: this.handleHideForwardDialog,
+ onInitFind: this.tnInitFind,
+ searchResults: this.state.searchResults,
+ onSearchContacts: this.handleSearchContacts,
+ onTopicSelected: this.handleStartTopicRequest
+ }, void 0, false) : null, this.state.callTopic && this.state.callState == _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_INCOMING_RECEIVED ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(_widgets_call_incoming_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], {
+ tinode: this.tinode,
+ topic: this.state.callTopic,
+ seq: this.state.callSeq,
+ callState: this.state.callState,
+ audioOnly: this.state.callAudioOnly,
+ onClose: this.handleCallClose,
+ onRinging: this.handleCallRinging,
+ onAcceptCall: this.handleCallAccept,
+ onReject: this.handleCallHangup
+ }, void 0, false) : null, this.state.alertVisible ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(_widgets_alert_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
+ title: this.state.alertParams.title,
+ content: this.state.alertParams.content,
+ onReject: this.state.alertParams.onReject ? _ => this.setState({
+ alertVisible: false
+ }) : null,
+ reject: this.state.alertParams.reject,
+ onConfirm: this.state.alertParams.onConfirm ? _ => {
+ this.setState({
+ alertVisible: false
+ });
+ this.state.alertParams.onConfirm();
+ } : null,
+ confirm: this.state.alertParams.confirm
+ }, void 0, false) : null, !this.state.displayMobile || this.state.mobilePanel == 'sidepanel' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(_sidepanel_view_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], {
+ tinode: this.tinode,
+ connected: this.state.connected,
+ displayMobile: this.state.displayMobile,
+ state: this.state.sidePanelSelected,
+ title: this.state.sidePanelTitle,
+ avatar: this.state.sidePanelAvatar,
+ trustedBadges: this.state.myTrustedBadges,
+ login: this.state.login,
+ persist: this.state.persist,
+ myUserId: this.state.myUserId,
+ loginDisabled: this.state.loginDisabled,
+ loadSpinnerVisible: this.state.loadSpinnerVisible,
+ errorText: this.state.errorText,
+ errorLevel: this.state.errorLevel,
+ errorAction: this.state.errorAction,
+ errorActionText: this.state.errorActionText,
+ topicSelected: this.state.topicSelected,
+ chatList: this.state.chatList,
+ credMethod: this.state.credMethod,
+ credCode: this.state.credCode,
+ credToken: this.state.credToken,
+ transport: this.state.transport,
+ messageSounds: this.state.messageSounds,
+ desktopAlerts: this.state.desktopAlerts,
+ desktopAlertsEnabled: this.state.desktopAlertsEnabled,
+ incognitoMode: this.state.incognitoMode,
+ serverAddress: this.state.serverAddress,
+ secureConnection: this.state.secureConnection,
+ serverVersion: this.state.serverVersion,
+ reqCredMethod: this.state.reqCredMethod,
+ textSize: this.state.textSize,
+ colorSchema: this.state.colorSchema,
+ wallpaper: this.state.wallpaper,
+ wallpaperSize: this.state.wallpaperSize,
+ wallpaperBlur: this.state.wallpaperBlur,
+ systemColorSchema: this.state.systemColorSchema,
+ sendOnEnter: this.state.sendOnEnter,
+ onGlobalSettings: this.handleGlobalSettings,
+ onSignUp: this.handleNewAccount,
+ onSettings: this.handleSettings,
+ onNavigate: this.basicNavigator,
+ onLoginRequest: this.handleLoginRequest,
+ onPersistenceChange: this.handlePersistenceChange,
+ onCreateAccount: this.handleNewAccountRequest,
+ onUpdateAccountDesc: this.handleTopicUpdateRequest,
+ onUpdatePassword: this.handleUpdatePasswordRequest,
+ onUpdateAccountTags: this.handleUpdateAccountTagsRequest,
+ onTogglePushNotifications: this.toggleFCMToken,
+ onToggleMessageSounds: this.handleToggleMessageSounds,
+ onToggleIncognitoMode: this.handleToggleIncognitoMode,
+ onChangeColorSchema: this.handleChangeColorSchema,
+ onTextSizeChanged: this.handleChangeTextSize,
+ onSendOnEnterChanged: this.handleSendOnEnter,
+ onSelectWallpapers: this.handleSelectWallpapers,
+ onWallpaperSelected: this.handleWallpaperSelected,
+ onCredAdd: this.handleCredAdd,
+ onCredDelete: this.handleCredDelete,
+ onCredConfirm: this.handleCredConfirm,
+ onTopicSelected: this.handleTopicSelected,
+ onCreateTopic: this.handleStartTopicRequest,
+ onLogout: this.handleLogout,
+ onDeleteAccount: this.handleDeleteAccount,
+ onShowAlert: this.handleShowAlert,
+ onCancel: this.handleSidepanelCancel,
+ onError: this.handleError,
+ onValidateCredentials: this.handleValidateCredentialsRequest,
+ onPasswordResetRequest: this.handlePasswordResetRequest,
+ onResetPassword: this.handleResetPassword,
+ onShowArchive: this.handleShowArchive,
+ onShowBlocked: this.handleShowBlocked,
+ onShowCountrySelector: this.handleShowCountrySelector,
+ onInitFind: this.tnInitFind,
+ searchResults: this.state.searchResults,
+ onSearchContacts: this.handleSearchContacts,
+ showContextMenu: this.handleShowContextMenu
+ }, void 0, false) : null, !this.state.displayMobile || this.state.mobilePanel == 'topic-view' && !this.state.infoPanel ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
+ fallback: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "loading_note",
+ defaultMessage: "Loading...",
+ description: "Message shown when component is loading"
+ }, void 0, false)
+ }, void 0, false),
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(MessagesView, {
+ tinode: this.tinode,
+ connected: this.state.connected,
+ ready: this.state.ready,
+ online: this.state.topicSelectedOnline,
+ acs: this.state.topicSelectedAcs,
+ displayMobile: this.state.displayMobile,
+ viewportWidth: this.state.viewportWidth,
+ viewportHeight: this.state.viewportHeight,
+ topic: this.state.topicSelected,
+ myUserId: this.state.myUserId,
+ myUserName: this.state.sidePanelTitle,
+ serverVersion: this.state.serverVersion,
+ serverAddress: this.state.serverAddress,
+ applicationVisible: this.state.applicationVisible,
+ colorSchema: colorSchema,
+ sendOnEnter: this.state.sendOnEnter,
+ wallpaper: this.state.wallpaper,
+ forwardMessage: this.state.forwardMessage,
+ onCancelForwardMessage: this.handleHideForwardDialog,
+ callTopic: this.state.callTopic,
+ callSeq: this.state.callSeq,
+ callState: this.state.callState,
+ callAudioOnly: this.state.callAudioOnly,
+ onCallHangup: this.handleCallHangup,
+ onAcceptCall: this.handleCallAccept,
+ onCallInvite: this.handleCallInvite,
+ onCallSendOffer: this.handleCallSendOffer,
+ onCallIceCandidate: this.handleCallIceCandidate,
+ onCallSendAnswer: this.handleCallSendAnswer,
+ errorText: this.state.errorText,
+ errorLevel: this.state.errorLevel,
+ errorAction: this.state.errorAction,
+ errorActionText: this.state.errorActionText,
+ newTopicParams: this.state.newTopicParams,
+ onHideMessagesView: this.handleHideMessagesView,
+ onError: this.handleError,
+ onNewTopicCreated: this.handleNewTopicCreated,
+ showContextMenu: this.handleShowContextMenu,
+ onChangePermissions: this.handleChangePermissions,
+ onNewChat: this.handleNewChatInvitation,
+ sendMessage: this.handleSendMessage,
+ onVideoCallClosed: this.handleCallClose
+ }, void 0, false)
+ }, void 0, false) : null, this.state.infoPanel ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
+ fallback: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "loading_note",
+ defaultMessage: "Loading...",
+ description: "Message shown when component is loading"
+ }, void 0, false)
+ }, void 0, false),
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxDEV)(InfoView, {
+ tinode: this.tinode,
+ connected: this.state.connected,
+ displayMobile: this.state.displayMobile,
+ topic: this.state.topicSelected,
+ searchableContacts: this.state.searchableContacts,
+ myUserId: this.state.myUserId,
+ panel: this.state.infoPanel,
+ errorText: this.state.errorText,
+ errorLevel: this.state.errorLevel,
+ errorAction: this.state.errorAction,
+ errorActionText: this.state.errorActionText,
+ onNavigate: this.infoNavigator,
+ onTopicDescUpdateRequest: this.handleTopicUpdateRequest,
+ onShowAlert: this.handleShowAlert,
+ onChangePermissions: this.handleChangePermissions,
+ onMemberUpdateRequest: this.handleMemberUpdateRequest,
+ onDeleteTopic: this.handleDeleteTopicRequest,
+ onDeleteMessages: this.handleDeleteMessagesRequest,
+ onLeaveTopic: this.handleLeaveUnsubRequest,
+ onBlockTopic: this.handleBlockTopicRequest,
+ onReportTopic: this.handleReportTopic,
+ onShareTheCard: this.handleShareTheCard,
+ onTopicTagsUpdateRequest: this.handleTagsUpdateRequest,
+ onTopicUnArchive: this.handleUnarchive,
+ onInitFind: this.tnInitFind,
+ onError: this.handleError,
+ showContextMenu: this.handleShowContextMenu
+ }, void 0, false)
+ }, void 0, false) : null]
+ }, void 0, true);
+ }
+}
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(TinodeWeb));
+
+/***/ }),
+
+/***/ "./src/views/topic-common-view.jsx":
+/*!*****************************************!*\
+ !*** ./src/views/topic-common-view.jsx ***!
+ \*****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ TopicCommonView; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _widgets_topic_desc_edit_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../widgets/topic-desc-edit.jsx */ "./src/widgets/topic-desc-edit.jsx");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+class TopicCommonView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ const topic = this.props.tinode.getTopic(this.props.topic);
+ const acs = topic.getAccessMode();
+ this.state = {
+ tags: []
+ };
+ this.previousTagsUpdated = undefined;
+ this.onTagsUpdated = this.onTagsUpdated.bind(this);
+ this.handleTagsUpdated = this.handleTagsUpdated.bind(this);
+ }
+ componentDidUpdate(props) {
+ const topic = this.props.tinode.getTopic(props.topic);
+ if (!topic) {
+ return;
+ }
+ if (topic.onTagsUpdated != this.onTagsUpdated) {
+ if (topic.getType() == 'grp') {
+ this.previousTagsUpdated = topic.onTagsUpdated;
+ topic.onTagsUpdated = this.onTagsUpdated;
+ } else {
+ this.previousTagsUpdated = undefined;
+ }
+ }
+ if (this.state.topic != props.topic) {
+ this.setState({
+ topic: props.topic
+ });
+ }
+ }
+ componentWillUnmount() {
+ const topic = this.props.tinode.getTopic(this.props.topic);
+ topic.onTagsUpdated = this.previousTagsUpdated;
+ }
+ onTagsUpdated(tags) {
+ this.setState({
+ tags: tags
+ });
+ if (this.previousTagsUpdated && this.previousTagsUpdated != this.onTagsUpdated) {
+ this.previousTagsUpdated(tags);
+ }
+ }
+ handleTagsUpdated(tags) {
+ if (!(0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_2__.arrayEqual)(this.state.tags.slice(0), tags.slice(0))) {
+ this.props.onUpdateTagsRequest(this.props.topic, tags);
+ }
+ }
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
+ className: "scrollable-panel",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(_widgets_topic_desc_edit_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
+ tinode: this.props.tinode,
+ topic: this.props.topic,
+ onUpdateTopicDesc: this.props.onUpdateTopicDesc,
+ onUpdateTags: this.handleTagsUpdated,
+ onError: this.props.onError
+ }, void 0, false)
+ }, void 0, false);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/views/validation-view.jsx":
+/*!***************************************!*\
+ !*** ./src/views/validation-view.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ phone: {
+ id: 'phone_dative',
+ defaultMessage: 'phone',
+ description: "Dative case of 'phone', i.e. 'phone' in 'by phone'"
+ },
+ email: {
+ id: 'email_dative',
+ defaultMessage: 'email',
+ description: "Dative case of 'email', i.e. 'email' in 'by email'"
+ }
+});
+class ValidationView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ code: props.credCode || '',
+ codeReceived: props.credCode
+ };
+ this.handleCodeChange = this.handleCodeChange.bind(this);
+ this.handleKeyPress = this.handleKeyPress.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleCancel = this.handleCancel.bind(this);
+ }
+ static getDerivedStateFromProps(nextProps, prevState) {
+ if (nextProps.credCode != prevState.codeReceived) {
+ return {
+ code: nextProps.credCode || '',
+ codeReceived: nextProps.credCode
+ };
+ }
+ return prevState;
+ }
+ componentDidMount() {
+ if (this.props.credCode) {
+ this.props.onSubmit(this.props.credMethod, this.props.credCode, this.props.credToken);
+ }
+ }
+ componentDidUpdate(prevProps, prevState) {
+ if (this.state.codeReceived && this.state.code && this.state.code != prevState.code) {
+ this.props.onSubmit(this.props.credMethod, this.state.code, this.props.credToken);
+ }
+ }
+ handleCodeChange(e) {
+ this.setState({
+ code: e.target.value.replace(/[^\d]/g, '')
+ });
+ }
+ handleKeyPress(e) {
+ if (e.key === 'Enter') {
+ this.handleSubmit(e);
+ } else if (e.key == 'Escape') {
+ this.handleCancel(e);
+ }
+ }
+ handleSubmit(e) {
+ e.preventDefault();
+ if (this.state.code && this.state.code.trim()) {
+ this.props.onSubmit(this.props.credMethod, this.state.code.trim(), this.props.credToken);
+ }
+ }
+ handleCancel(e) {
+ e.preventDefault();
+ this.props.onCancel();
+ }
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ const methods = {
+ 'email': formatMessage(messages.email),
+ 'tel': formatMessage(messages.phone)
+ };
+ const method = methods[this.props.credMethod] || this.props.credMethod;
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("label", {
+ className: "small gray",
+ htmlFor: "enter-confirmation-code",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "enter_confirmation_code_prompt",
+ defaultMessage: "Confirmation code",
+ description: "Request to enter confirmation code",
+ values: {
+ method: method
+ }
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "numeric_confirmation_code_prompt",
+ defaultMessage: "Numbers only",
+ description: "Prompt for numeric conformation code",
+ children: numbers_only => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("input", {
+ type: "text",
+ id: "enter-confirmation-code",
+ placeholder: numbers_only,
+ value: this.state.code,
+ onChange: this.handleCodeChange,
+ onKeyDown: this.handleKeyPress,
+ required: true
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "dialog-buttons",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("button", {
+ className: "secondary",
+ onClick: this.handleCancel,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_cancel",
+ defaultMessage: "Cancel",
+ description: "Button [Cancel]"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("button", {
+ className: "primary",
+ onClick: this.handleSubmit,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_confirm",
+ defaultMessage: "Confirm",
+ description: "Button [Confirm]"
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true)]
+ }, void 0, true);
+ }
+}
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ValidationView));
+
+/***/ }),
+
+/***/ "./src/widgets/alert.jsx":
+/*!*******************************!*\
+ !*** ./src/widgets/alert.jsx ***!
+ \*******************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ Alert; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+class Alert extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "alert-container",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "alert",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "title",
+ children: this.props.title
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "content",
+ children: this.props.content
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "dialog-buttons",
+ children: [this.props.onReject ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("button", {
+ className: "outline",
+ onClick: this.props.onReject,
+ children: this.props.reject || (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_cancel",
+ defaultMessage: "Cancel",
+ description: "Button [Cancel]"
+ }, void 0, false)
+ }, void 0, false) : null, this.props.onConfirm ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("button", {
+ className: "primary",
+ onClick: this.props.onConfirm,
+ children: this.props.confirm || (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_ok",
+ defaultMessage: "OK",
+ description: "Button [OK]"
+ }, void 0, false)
+ }, void 0, false) : null]
+ }, void 0, true)]
+ }, void 0, true)
+ }, void 0, false);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/audio-player.jsx":
+/*!**************************************!*\
+ !*** ./src/widgets/audio-player.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _lib_strformat__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/strformat */ "./src/lib/strformat.js");
+/* harmony import */ var _lib_blob_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/blob-helpers */ "./src/lib/blob-helpers.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+const CANVAS_UPSCALING = 2.0;
+const LINE_WIDTH = 3 * CANVAS_UPSCALING;
+const SPACING = 2 * CANVAS_UPSCALING;
+const BAR_COLOR = '#888A';
+const BAR_COLOR_DARK = '#666C';
+const THUMB_COLOR = '#1781d7';
+const MIN_PREVIEW_LENGTH = 16;
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ icon_title_play: {
+ id: 'icon_title_play',
+ defaultMessage: 'Play recording',
+ description: 'Icon tool tip for starting audio playback'
+ }
+});
+class AudioPlayer extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ let preview = (0,_lib_blob_helpers__WEBPACK_IMPORTED_MODULE_3__.base64ToIntArray)(this.props.preview);
+ if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {
+ preview = null;
+ }
+ this.state = {
+ canPlay: false,
+ playing: false,
+ currentTime: '0:00',
+ duration: this.props.duration > 0 ? (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.props.duration / 1000) : '-:--',
+ longMin: this.props.duration >= 600000,
+ preview: preview
+ };
+ this.initAudio = this.initAudio.bind(this);
+ this.initCanvas = this.initCanvas.bind(this);
+ this.resampleBars = this.resampleBars.bind(this);
+ this.visualize = this.visualize.bind(this);
+ this.handlePlay = this.handlePlay.bind(this);
+ this.handleSeek = this.handleSeek.bind(this);
+ this.handleError = this.handleError.bind(this);
+ this.audioPlayer = null;
+ this.viewBuffer = [];
+ this.canvasRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
+ }
+ componentDidMount() {
+ if (this.props.src) {
+ this.initAudio();
+ }
+ this.initCanvas();
+ }
+ componentWillUnmount() {
+ if (this.audioPlayer) {
+ this.audioPlayer.onloadedmetadata = null;
+ this.audioPlayer.ontimeupdate = null;
+ this.audioPlayer.onended = null;
+ this.audioPlayer.pause();
+ this.audioPlayer = null;
+ }
+ }
+ componentDidUpdate(prevProps) {
+ if (this.props.src != prevProps.src) {
+ this.initAudio();
+ }
+ if (this.props.preview != prevProps.preview) {
+ let preview = (0,_lib_blob_helpers__WEBPACK_IMPORTED_MODULE_3__.base64ToIntArray)(this.props.preview);
+ if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {
+ preview = null;
+ }
+ this.setState({
+ preview: preview
+ }, this.initCanvas);
+ }
+ }
+ initAudio() {
+ this.audioPlayer = new Audio(this.props.src);
+ this.audioPlayer.onloadedmetadata = _ => this.setState({
+ canPlay: true
+ });
+ this.audioPlayer.ontimeupdate = _ => this.setState({
+ currentTime: (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.audioPlayer.currentTime, this.state.longMin)
+ });
+ this.audioPlayer.onended = _ => {
+ this.audioPlayer.currentTime = 0;
+ this.setState({
+ playing: false,
+ currentTime: (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(0, this.state.longMin)
+ });
+ };
+ }
+ initCanvas() {
+ this.canvasRef.current.width = this.canvasRef.current.offsetWidth * CANVAS_UPSCALING;
+ this.canvasRef.current.height = this.canvasRef.current.offsetHeight * CANVAS_UPSCALING;
+ this.canvasContext = this.canvasRef.current.getContext('2d');
+ this.canvasContext.lineCap = 'round';
+ this.viewBuffer = this.resampleBars(this.state.preview);
+ this.visualize();
+ }
+ visualize() {
+ if (!this.canvasRef.current) {
+ return;
+ }
+ const width = this.effectiveWidth;
+ const height = this.canvasRef.current.height;
+ this.canvasContext.lineWidth = LINE_WIDTH;
+ const drawFrame = _ => {
+ if (!this.canvasRef.current || !this.audioPlayer) {
+ return;
+ }
+ this.canvasContext.clearRect(0, 0, this.canvasRef.current.width, height);
+ if (this.viewBuffer) {
+ if (this.state.playing) {
+ window.requestAnimationFrame(drawFrame);
+ }
+ const thumbAt = this.props.duration ? Math.max(0, Math.min(this.audioPlayer.currentTime * 1000 / this.props.duration, 1)) * (width - LINE_WIDTH * 2) : -1;
+ this.canvasContext.beginPath();
+ this.canvasContext.strokeStyle = BAR_COLOR_DARK;
+ for (let i = 0; i < this.viewBuffer.length; i++) {
+ let x = 1 + i * (LINE_WIDTH + SPACING) + LINE_WIDTH * 0.5;
+ let y = Math.max(this.viewBuffer[i] * height * 0.9, 1);
+ const color = x < thumbAt ? BAR_COLOR_DARK : BAR_COLOR;
+ if (this.canvasContext.strokeStyle != color) {
+ this.canvasContext.stroke();
+ this.canvasContext.beginPath();
+ this.canvasContext.strokeStyle = color;
+ }
+ this.canvasContext.moveTo(x, (height - y) * 0.5);
+ this.canvasContext.lineTo(x, (height + y) * 0.5);
+ }
+ this.canvasContext.stroke();
+ if (this.props.duration) {
+ this.canvasContext.beginPath();
+ this.canvasContext.arc(thumbAt + LINE_WIDTH * 2, height * 0.5, LINE_WIDTH * 2, 0, 2 * Math.PI);
+ this.canvasContext.fillStyle = THUMB_COLOR;
+ this.canvasContext.fill();
+ }
+ }
+ };
+ drawFrame();
+ }
+ resampleBars(original) {
+ const dstCount = (this.canvasRef.current.width - SPACING) / (LINE_WIDTH + SPACING) | 0;
+ this.effectiveWidth = dstCount * (LINE_WIDTH + SPACING) + SPACING;
+ if (!Array.isArray(original) || original.length == 0) {
+ return Array.apply(null, Array(dstCount)).map(_ => 0.01);
+ }
+ const factor = original.length / dstCount;
+ let amps = [];
+ let maxAmp = -1;
+ for (let i = 0; i < dstCount; i++) {
+ let lo = i * factor | 0;
+ let hi = (i + 1) * factor | 0;
+ if (hi == lo) {
+ amps[i] = original[lo];
+ } else {
+ let amp = 0.0;
+ for (let j = lo; j < hi; j++) {
+ amp += original[j];
+ }
+ amps[i] = Math.max(0, amp / (hi - lo));
+ }
+ maxAmp = Math.max(amps[i], maxAmp);
+ }
+ if (maxAmp > 0) {
+ return amps.map(a => a / maxAmp);
+ }
+ return Array.apply(null, Array(dstCount)).map(_ => 0.01);
+ }
+ handlePlay(e) {
+ e.preventDefault();
+ if (!this.state.canPlay) {
+ return;
+ }
+ if (this.state.playing) {
+ this.audioPlayer.pause();
+ this.setState({
+ playing: false
+ });
+ } else if (this.audioPlayer.readyState >= 2) {
+ this.audioPlayer.play();
+ this.setState({
+ playing: true
+ }, this.visualize);
+ }
+ }
+ handleError(err) {
+ console.error(err);
+ }
+ handleSeek(e) {
+ e.preventDefault();
+ if (e.target && this.props.duration) {
+ const rect = e.target.getBoundingClientRect();
+ const offset = (e.clientX - rect.left) / this.effectiveWidth * CANVAS_UPSCALING;
+ this.audioPlayer.currentTime = this.props.duration * offset / 1000;
+ this.setState({
+ currentTime: (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.audioPlayer.currentTime, this.state.longMin)
+ });
+ if (!this.state.playing) {
+ this.visualize();
+ }
+ }
+ }
+ render() {
+ const playClass = 'material-icons' + (this.props.short ? '' : ' large') + (this.state.canPlay ? '' : ' disabled');
+ const play = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("a", {
+ href: "#",
+ onClick: this.handlePlay,
+ title: this.props.intl.formatMessage(messages.icon_title_play),
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("i", {
+ className: playClass,
+ children: this.state.playing ? 'pause_circle' : this.state.canPlay ? 'play_circle' : 'not_interested'
+ }, void 0, false)
+ }, void 0, false);
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "audio-player",
+ children: this.props.short ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.Fragment, {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("canvas", {
+ className: "playback",
+ ref: this.canvasRef,
+ onClick: this.handleSeek
+ }, void 0, false), play]
+ }, void 0, true) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.Fragment, {
+ children: [play, (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("canvas", {
+ className: "playback",
+ ref: this.canvasRef,
+ onClick: this.handleSeek
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "timer",
+ children: [this.state.currentTime, "/", this.state.duration]
+ }, void 0, true)]
+ }, void 0, true)]
+ }, void 0, true)
+ }, void 0, false);
+ }
+}
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(AudioPlayer));
+
+/***/ }),
+
+/***/ "./src/widgets/avatar-crop.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/avatar-crop.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ AvatarCrop; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _cropper_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cropper.jsx */ "./src/widgets/cropper.jsx");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+class AvatarCrop extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ top: 0,
+ left: 0,
+ width: 0,
+ height: 0,
+ scale: 1
+ };
+ this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleChange = this.handleChange.bind(this);
+ }
+ handleChange(left, top, width, height, scale) {
+ this.setState({
+ left: left,
+ top: top,
+ width: width,
+ height: height,
+ scale: scale
+ });
+ }
+ handleSubmit() {
+ (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_3__.imageCrop)(this.props.mime, this.props.avatar, this.state.left, this.state.top, this.state.width, this.state.height, this.state.scale).then(img => {
+ this.props.onSubmit(img.mime, img.blob, img.width, img.height);
+ }).catch(err => {
+ this.props.onError(err);
+ });
+ }
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(_cropper_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
+ source: this.props.avatar,
+ onChange: this.handleChange
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "dialog-buttons",
+ children: [this.props.onCancel ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("button", {
+ className: "secondary",
+ onClick: this.props.onCancel,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_cancel",
+ defaultMessage: "Cancel",
+ description: "Button [Cancel]"
+ }, void 0, false)
+ }, void 0, false) : null, (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("button", {
+ className: "primary",
+ onClick: this.handleSubmit,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_ok",
+ defaultMessage: "OK",
+ description: "Button [OK]"
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/avatar-upload.jsx":
+/*!***************************************!*\
+ !*** ./src/widgets/avatar-upload.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ AvatarUpload; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
+/* harmony import */ var _load_spinner_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load-spinner.jsx */ "./src/widgets/load-spinner.jsx");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+
+class AvatarUpload extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ source: props.avatar
+ };
+ this.handleFileReceived = this.handleFileReceived.bind(this);
+ }
+ componentDidUpdate(prevProps) {
+ if (this.props.avatar != prevProps.avatar) {
+ this.setState({
+ source: this.props.avatar
+ });
+ }
+ }
+ handleFileReceived(e) {
+ const image = e.target.files[0];
+ this.props.onImageUpdated(image.type, URL.createObjectURL(image), image.name);
+ e.target.value = '';
+ }
+ render() {
+ const randId = 'file-input-avatar-' + ('' + Math.random()).substring(0, 4);
+ const className = 'avatar-upload' + (this.props.readOnly ? ' read-only' : '');
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("div", {
+ className: className,
+ children: [this.props.readOnly || !this.state.source ? null : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("a", {
+ href: "#",
+ className: "clear-avatar",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onImageUpdated();
+ },
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "clear"
+ }, void 0, false)
+ }, void 0, false), this.state.source ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("img", {
+ src: this.props.tinode.authorizeURL((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_3__.sanitizeUrlForMime)(this.state.source, 'image')),
+ className: "preview"
+ }, void 0, false) : this.props.readOnly && this.props.uid ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("div", {
+ className: "avatar-box",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
+ authorizeURL: this.props.tinode.authorizeURL,
+ avatar: true,
+ topic: this.props.uid,
+ title: this.props.title
+ }, void 0, false)
+ }, void 0, false) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("div", {
+ className: "blank",
+ children: [_config_js__WEBPACK_IMPORTED_MODULE_4__.AVATAR_SIZE, "×", _config_js__WEBPACK_IMPORTED_MODULE_4__.AVATAR_SIZE]
+ }, void 0, true), this.props.readOnly ? null : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("input", {
+ type: "file",
+ id: randId,
+ className: "inputfile hidden",
+ accept: "image/*",
+ onChange: this.handleFileReceived
+ }, void 0, false), this.props.readOnly ? null : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("label", {
+ htmlFor: randId,
+ className: "round",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "file_upload"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)(_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
+ show: this.props.uploading,
+ large: true,
+ clear: true,
+ centered: true
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/badge-list.jsx":
+/*!************************************!*\
+ !*** ./src/widgets/badge-list.jsx ***!
+ \************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+const icon_mapping = {
+ 'staff': 'verified_user'
+};
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ badge_verified: {
+ id: 'badge_verified',
+ defaultMessage: 'Verified/official',
+ description: 'Explanation of a verified account or topic badge'
+ },
+ badge_staff: {
+ id: 'badge_staff',
+ defaultMessage: 'Staff-managed',
+ description: 'Explanation of a staff-managed account or topic badge'
+ },
+ badge_danger: {
+ id: 'badge_danger',
+ defaultMessage: 'Untrustworthy',
+ description: 'Suspicious or untrustworthy account or topic badge'
+ }
+});
+class BadgeList extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ let badges = null;
+ if (this.props.trustedBadges && this.props.trustedBadges.length > 0) {
+ badges = [];
+ this.props.trustedBadges.forEach(b => {
+ const comment = this.props.short ? null : formatMessage(messages['badge_' + b]);
+ const style = 'material-icons ' + b + '-color';
+ badges.push((0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "trusted-badge",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("i", {
+ className: style,
+ children: icon_mapping[b] || b
+ }, void 0, false), " ", comment]
+ }, b, true));
+ });
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
+ children: badges
+ }, void 0, false);
+ }
+ return null;
+ }
+}
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(BadgeList));
+
+/***/ }),
+
+/***/ "./src/widgets/button-back.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/button-back.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ ButtonBack; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+class ButtonBack extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onBack();
+ },
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "arrow_back"
+ }, void 0, false)
+ }, void 0, false);
+ }
+}
+
+/***/ }),
+
+/***/ "./src/widgets/call-incoming.jsx":
+/*!***************************************!*\
+ !*** ./src/widgets/call-incoming.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ CallIncoming; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _badge_list_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./badge-list.jsx */ "./src/widgets/badge-list.jsx");
+/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants.js */ "./src/constants.js");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+
+
+
+const RING_SOUND = new Audio('audio/call-in.m4a');
+class CallIncoming extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ topic: null,
+ fullName: undefined,
+ avatar: null,
+ trustedBadges: [],
+ previousMetaDesc: undefined
+ };
+ this.resetDesc = this.resetDesc.bind(this);
+ this.onMetaDesc = this.onMetaDesc.bind(this);
+ this.handleRejectCall = this.handleRejectCall.bind(this);
+ this.handleAcceptCall = this.handleAcceptCall.bind(this);
+ this.ringTimer = null;
+ }
+ componentDidMount() {
+ const topic = this.props.tinode.getTopic(this.props.topic);
+ if (!topic) {
+ return;
+ }
+ this.resetDesc(topic);
+ if (this.props.callState == _constants_js__WEBPACK_IMPORTED_MODULE_4__.CALL_STATE_INCOMING_RECEIVED) {
+ RING_SOUND.play().catch(_ => {});
+ this.ringTimer = setInterval(_ => {
+ RING_SOUND.play().catch(_ => {});
+ }, 2000);
+ this.props.onRinging(this.props.topic, this.props.seq);
+ }
+ }
+ componentDidUpdate(props) {
+ const topic = this.props.tinode.getTopic(props.topic);
+ if (!topic) {
+ return;
+ }
+ if (this.onMetaDesc != topic.onMetaDesc) {
+ this.previousMetaDesc = topic.onMetaDesc;
+ topic.onMetaDesc = this.onMetaDesc;
+ }
+ if (this.state.topic != props.topic) {
+ this.setState({
+ topic: props.topic
+ });
+ this.resetDesc(topic, props);
+ }
+ }
+ componentWillUnmount() {
+ if (this.ringTimer != null) {
+ clearInterval(this.ringTimer);
+ RING_SOUND.pause();
+ }
+ const topic = this.props.tinode.getTopic(this.props.topic);
+ if (!topic) {
+ return;
+ }
+ this.setState({
+ topic: null
+ });
+ topic.onMetaDesc = this.previousMetaDesc;
+ }
+ resetDesc(topic) {
+ const badges = [];
+ if (topic.trusted) {
+ for (const [key, val] of Object.entries(topic.trusted)) {
+ if (val) {
+ badges.push(key);
+ }
+ }
+ }
+ this.setState({
+ fullName: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_6__.truncateString)(topic.public ? topic.public.fn : undefined, _config_js__WEBPACK_IMPORTED_MODULE_3__.MAX_TITLE_LENGTH),
+ avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__.makeImageUrl)(topic.public ? topic.public.photo : null),
+ trustedBadges: badges
+ });
+ }
+ onMetaDesc(desc) {
+ const topic = this.props.tinode.getTopic(this.props.topic);
+ if (!topic) {
+ return;
+ }
+ this.resetDesc(topic);
+ if (this.previousMetaDesc && this.previousMetaDesc != this.onMetaDesc) {
+ this.previousMetaDesc(desc);
+ }
+ }
+ handleAcceptCall() {
+ this.props.onAcceptCall(this.props.topic);
+ }
+ handleRejectCall() {
+ this.props.onReject(this.props.topic, this.props.seq);
+ this.props.onClose();
+ }
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("div", {
+ className: "alert-container",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("div", {
+ className: "incoming-call",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("div", {
+ className: "caller-card incoming pulse",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("div", {
+ className: "avatar-box",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
+ authorizeURL: this.props.tinode.authorizeURL,
+ avatar: this.state.avatar || true,
+ topic: this.props.topic,
+ title: this.state.fullName
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("div", {
+ className: "caller-name",
+ children: [(0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_6__.truncateString)(this.state.fullName, _config_js__WEBPACK_IMPORTED_MODULE_3__.MAX_PEER_TITLE_LENGTH), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(_badge_list_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
+ short: true,
+ trustedBadges: this.state.trustedBadges
+ }, void 0, false)]
+ }, void 0, true)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("div", {
+ id: "controls",
+ children: this.props.callState == _constants_js__WEBPACK_IMPORTED_MODULE_4__.CALL_STATE_INCOMING_RECEIVED ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.Fragment, {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("button", {
+ className: "danger",
+ onClick: this.handleRejectCall,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "call_end"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("button", {
+ className: "positive",
+ onClick: this.handleAcceptCall,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "call"
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true) : null
+ }, void 0, false)]
+ }, void 0, true)
+ }, void 0, false);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/call-message.jsx":
+/*!**************************************!*\
+ !*** ./src/widgets/call-message.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ CallMessage; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+class CallMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);
+ const successClass = 'material-icons medium ' + (isCallDropped ? 'red' : 'green');
+ const callIcon = this.props.incoming ? isCallDropped ? 'call_missed' : 'call_received' : isCallDropped ? 'call_missed_outgoing' : 'call_made';
+ const title = this.props.incoming ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "calls_incoming",
+ defaultMessage: "Incoming call",
+ description: "Incoming call label"
+ }, void 0, false) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "calls_outgoing",
+ defaultMessage: "Outgoing call",
+ description: "Outgoing call label"
+ }, void 0, false);
+ let duration;
+ if (isCallDropped) {
+ switch (this.props.callState) {
+ case 'busy':
+ duration = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "call_busy",
+ defaultMessage: "busy",
+ description: "Label for busy call line"
+ }, void 0, false);
+ break;
+ case 'declined':
+ duration = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "call_declined",
+ defaultMessage: "declined",
+ description: "Label for declined call"
+ }, void 0, false);
+ break;
+ case 'missed':
+ duration = this.props.incoming ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "call_missed",
+ defaultMessage: "missed",
+ description: "Label for missed incoming call"
+ }, void 0, false) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "call_cancelled",
+ defaultMessage: "cancelled",
+ description: "Label for cancelled outgoing call"
+ }, void 0, false);
+ break;
+ default:
+ duration = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "call_disconnected",
+ defaultMessage: "disconnected",
+ description: "Label for disconnected call"
+ }, void 0, false);
+ break;
+ }
+ } else {
+ duration = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("span", {
+ children: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.props.duration / 1000)
+ }, void 0, false);
+ }
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
+ className: "call-message",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("i", {
+ className: "material-icons big gray",
+ children: "call"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
+ className: "flex-column narrow",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
+ children: title
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
+ className: "duration",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("i", {
+ className: successClass,
+ children: callIcon
+ }, void 0, false), " ", duration]
+ }, void 0, true)]
+ }, void 0, true)]
+ }, void 0, true);
+ }
+}
+
+/***/ }),
+
+/***/ "./src/widgets/call-status.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/call-status.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ CallStatus; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+class CallStatus extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);
+ const icon2 = this.props.incoming ? isCallDropped ? 'call_missed' : 'call_received' : isCallDropped ? 'call_missed_outgoing' : 'call_made';
+ let duration;
+ if (isCallDropped) {
+ switch (this.props.callState) {
+ case 'busy':
+ duration = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "call_busy",
+ defaultMessage: "busy",
+ description: "Label for busy call line"
+ }, void 0, false);
+ break;
+ case 'declined':
+ duration = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "call_declined",
+ defaultMessage: "declined",
+ description: "Label for declined call"
+ }, void 0, false);
+ break;
+ case 'missed':
+ duration = this.props.incoming ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "call_missed",
+ defaultMessage: "missed",
+ description: "Label for missed incoming call"
+ }, void 0, false) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "call_cancelled",
+ defaultMessage: "cancelled",
+ description: "Label for cancelled outgoing call"
+ }, void 0, false);
+ break;
+ default:
+ duration = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "call_disconnected",
+ defaultMessage: "disconnected",
+ description: "Label for disconnected call"
+ }, void 0, false);
+ break;
+ }
+ } else if (['accepted', 'started'].includes(this.props.callState) && !this.props.duration) {
+ duration = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "call_in_progress",
+ defaultMessage: "in progress",
+ description: "Label for call in progress"
+ }, void 0, false);
+ } else {
+ duration = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("span", {
+ children: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.props.duration / 1000)
+ }, void 0, false);
+ }
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.Fragment, {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
+ className: "composed-material",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "call"
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("i", {
+ className: "material-icons second",
+ children: icon2
+ }, void 0, false)]
+ }, void 0, true), " ", duration]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/checkbox.jsx":
+/*!**********************************!*\
+ !*** ./src/widgets/checkbox.jsx ***!
+ \**********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ CheckBox; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+
+class CheckBox extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.handleChange = this.handleChange.bind(this);
+ }
+ handleChange() {
+ this.props.onChange(this.props.name, !this.props.checked);
+ }
+ render() {
+ let classList = ['material-icons'];
+ let iconName;
+ if (Array.isArray(this.props.className)) {
+ classList.push(...this.props.className);
+ } else if (this.props.className) {
+ classList.push(this.props.className);
+ }
+ if (this.props.onChange) {
+ if (this.props.checked) {
+ classList.push('blue', 'clickable');
+ iconName = 'check_box';
+ } else if (this.props.checked === false) {
+ classList.push('blue', 'clickable');
+ iconName = 'check_box_outline_blank';
+ } else {
+ classList.push('lt-blue');
+ iconName = 'indeterminate_check_box';
+ }
+ } else {
+ if (this.props.checked) {
+ iconName = 'check_box';
+ } else {
+ iconName = 'check_box_outline_blank';
+ }
+ }
+ let attrs = {
+ className: classList.join(' '),
+ id: this.props.id
+ };
+ if (this.props.onChange) {
+ attrs.onClick = this.handleChange;
+ }
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement('i', attrs, iconName);
+ }
+}
+
+/***/ }),
+
+/***/ "./src/widgets/chip-input.jsx":
+/*!************************************!*\
+ !*** ./src/widgets/chip-input.jsx ***!
+ \************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ ChipInput; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _chip_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chip.jsx */ "./src/widgets/chip.jsx");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+class ChipInput extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = ChipInput.deriveStateFromProps(props);
+ this.state.input = '';
+ this.state.focused = false;
+ this.handleTextInput = this.handleTextInput.bind(this);
+ this.removeChipAt = this.removeChipAt.bind(this);
+ this.handleChipCancel = this.handleChipCancel.bind(this);
+ this.handleFocusGained = this.handleFocusGained.bind(this);
+ this.handleFocusLost = this.handleFocusLost.bind(this);
+ this.handleKeyDown = this.handleKeyDown.bind(this);
+ }
+ static deriveStateFromProps(props) {
+ return {
+ sortedChips: ChipInput.sortChips(props.chips, props.staticMembers),
+ chipIndex: ChipInput.indexChips(props.chips)
+ };
+ }
+ componentDidUpdate(prevProps, prevState) {
+ if (prevProps.chips != this.props.chips || prevProps.staticMembers != this.props.staticMembers || prevProps.prompt != this.props.prompt) {
+ this.setState(ChipInput.deriveStateFromProps(this.props));
+ }
+ if (!prevState || this.props.chips.length > prevState.sortedChips.length) {
+ this.setState({
+ input: ''
+ });
+ }
+ }
+ static indexChips(chips) {
+ const index = {};
+ let count = 0;
+ chips.forEach(item => {
+ index[item.user] = count;
+ count++;
+ });
+ return index;
+ }
+ static sortChips(chips, keep) {
+ const required = [];
+ const normal = [];
+ chips.forEach(item => {
+ if (keep && keep.includes(item.user)) {
+ required.push(item);
+ } else {
+ normal.push(item);
+ }
+ });
+ return required.concat(normal);
+ }
+ handleTextInput(e) {
+ this.setState({
+ input: e.target.value
+ });
+ if (this.props.filterFunc) {
+ this.props.filterFunc(e.target.value);
+ }
+ }
+ removeChipAt(idx) {
+ const removed = this.state.sortedChips[idx];
+ this.props.onChipRemoved(removed.user, this.state.chipIndex[removed.user]);
+ }
+ handleChipCancel(item, idx) {
+ this.removeChipAt(idx);
+ }
+ handleFocusGained() {
+ this.setState({
+ focused: true
+ });
+ }
+ handleFocusLost() {
+ this.setState({
+ focused: false
+ });
+ if (this.props.onFocusLost) {
+ this.props.onFocusLost(this.state.input);
+ }
+ }
+ handleKeyDown(e) {
+ if (e.key === 'Backspace') {
+ if (this.state.input.length == 0 && this.state.sortedChips.length > 0) {
+ const at = this.state.sortedChips.length - 1;
+ if (this.state.sortedChips[at].user !== this.props.staticMembers) {
+ this.removeChipAt(at);
+ }
+ }
+ } else if (e.key === 'Enter') {
+ if (this.props.onEnter) {
+ this.props.onEnter(this.state.input);
+ }
+ } else if (e.key === 'Escape') {
+ if (this.props.onCancel) {
+ this.props.onCancel();
+ }
+ }
+ }
+ render() {
+ const chips = [];
+ let count = 0;
+ const staticMembers = this.props.staticMembers || [];
+ this.state.sortedChips.forEach(item => {
+ chips.push((0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)(_chip_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
+ tinode: this.props.tinode,
+ onCancel: this.handleChipCancel,
+ avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_2__.makeImageUrl)(item.public ? item.public.photo : null),
+ title: item.public ? item.public.fn : undefined,
+ noAvatar: this.props.avatarDisabled,
+ topic: item.user,
+ required: staticMembers.includes(item.user),
+ invalid: item.invalid,
+ index: count
+ }, item.user, false));
+ count++;
+ });
+ const className = "chip-input" + (this.state.focused ? ' focused' : '');
+ const autoFocus = !(this.props.tabIndex > 0);
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("div", {
+ className: className,
+ children: [chips, (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("input", {
+ type: "text",
+ placeholder: this.props.prompt,
+ onChange: this.handleTextInput,
+ onFocus: this.handleFocusGained,
+ onBlur: this.handleFocusLost,
+ onKeyDown: this.handleKeyDown,
+ value: this.state.input,
+ tabIndex: this.props.tabIndex,
+ autoFocus: autoFocus
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/chip.jsx":
+/*!******************************!*\
+ !*** ./src/widgets/chip.jsx ***!
+ \******************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ Chip; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+class Chip extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.handleCancel = this.handleCancel.bind(this);
+ }
+ handleCancel(e) {
+ e.preventDefault();
+ this.props.onCancel(this.props.topic, this.props.index);
+ }
+ render() {
+ const title = this.props.title || this.props.topic;
+ const className = this.props.invalid ? 'chip invalid' : 'chip';
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: className,
+ children: [this.props.noAvatar ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
+ className: "spacer"
+ }, void 0, false) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "avatar-box",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
+ authorizeURL: this.props.tinode.authorizeURL,
+ avatar: this.props.avatar || true,
+ topic: this.props.topic,
+ title: this.props.title
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
+ children: title
+ }, void 0, false), this.props.onCancel && !this.props.required ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("a", {
+ href: "#",
+ onClick: this.handleCancel,
+ children: "×"
+ }, void 0, false) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
+ className: "spacer"
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/contact-action.jsx":
+/*!****************************************!*\
+ !*** ./src/widgets/contact-action.jsx ***!
+ \****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+class ContactAction extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.handleClick = this.handleClick.bind(this);
+ }
+ handleClick(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ this.props.onAction(this.props.action);
+ }
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("li", {
+ onClick: this.handleClick,
+ className: "action",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "action-text",
+ children: formatMessage(this.props.title, this.props.values)
+ }, void 0, false)
+ }, void 0, false);
+ }
+}
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ContactAction));
+
+/***/ }),
+
+/***/ "./src/widgets/contact-badges.jsx":
+/*!****************************************!*\
+ !*** ./src/widgets/contact-badges.jsx ***!
+ \****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ ContactBadges; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+const icon_mapping = {
+ 'muted': 'notifications_off',
+ 'banned': 'block',
+ 'staff': 'verified_user'
+};
+class ContactBadges extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ let badges = null;
+ if (this.props.badges && this.props.badges.length > 0) {
+ badges = [];
+ this.props.badges.forEach(b => {
+ const color = b.color ? ' ' + b.color : '';
+ if (b.icon) {
+ badges.push((0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("i", {
+ className: 'material-icons as-badge' + color,
+ children: icon_mapping[b.icon] || b.icon
+ }, b.key || b.icon, false));
+ } else {
+ badges.push((0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("span", {
+ className: 'badge' + color,
+ children: b.name
+ }, b.key || b.name, false));
+ }
+ });
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment, {
+ children: badges
+ }, void 0, false);
+ }
+ return null;
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/contact-list.jsx":
+/*!**************************************!*\
+ !*** ./src/widgets/contact-list.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _contact_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact.jsx */ "./src/widgets/contact.jsx");
+/* harmony import */ var _contact_action_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./contact-action.jsx */ "./src/widgets/contact-action.jsx");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ badge_you: {
+ id: 'badge_you',
+ defaultMessage: 'you',
+ description: 'Badge for indicating the current user'
+ },
+ badge_owner: {
+ id: 'badge_owner',
+ defaultMessage: 'owner',
+ description: 'Badge for indicating the owner'
+ }
+});
+class ContactList extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ const {
+ formatMessage
+ } = this.props.intl;
+ const showCheckmark = Array.isArray(this.props.topicSelected);
+ const contactNodes = [];
+ let contactsCount = 0;
+ if (this.props.showSelfTopic) {
+ const selected = showCheckmark ? this.props.topicSelected.indexOf('slf') > -1 : this.props.topicSelected === 'slf';
+ contactNodes.push((0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(_contact_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
+ tinode: this.props.tinode,
+ avatar: true,
+ showMode: this.props.showMode,
+ selected: selected,
+ showCheckmark: showCheckmark,
+ onSelected: this.props.onTopicSelected,
+ showContextMenu: this.props.showContextMenu,
+ index: contactNodes.length,
+ item: "slf"
+ }, 'slf', false));
+ contactsCount++;
+ }
+ if (this.props.contacts && this.props.contacts.length > 0) {
+ const usedKeys = {};
+ this.props.contacts.forEach(c => {
+ if (c.action) {
+ contactNodes.push((0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(_contact_action_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
+ title: c.title,
+ action: c.action,
+ values: c.values,
+ onAction: this.props.onAction
+ }, c.action, false));
+ } else {
+ const key = this.props.showMode ? c.user : c.topic || c.user;
+ if (usedKeys[key]) {
+ return;
+ }
+ usedKeys[key] = true;
+ if (this.props.filterFunc && this.props.filter) {
+ const filterOn = [key];
+ if (c.private && c.private.comment) {
+ filterOn.push(('' + c.private.comment).toLowerCase());
+ }
+ if (c.public && c.public.fn) {
+ filterOn.push(('' + c.public.fn).toLowerCase());
+ }
+ if (!this.props.filterFunc(this.props.filter, filterOn)) {
+ return;
+ }
+ }
+ const isChannel = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isChannelTopicName(key);
+ const isGroup = !isChannel && tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isGroupTopicName(key);
+ const selected = showCheckmark ? this.props.topicSelected.indexOf(key) > -1 : this.props.topicSelected === key;
+ const badges = [];
+ if (this.props.showMode) {
+ if (key == this.props.myUserId) {
+ badges.push({
+ name: formatMessage(messages.badge_you),
+ color: 'green'
+ });
+ }
+ if (c.acs && c.acs.isOwner()) {
+ badges.push({
+ name: formatMessage(messages.badge_owner),
+ color: 'blue'
+ });
+ }
+ }
+ const comment = Array.isArray(c.private) ? c.private.join(',') : c.private ? c.private.comment : null;
+ let preview;
+ let forwarded;
+ let previewIsResponse;
+ let deliveryStatus;
+ if (!this.props.showMode && c.latestMessage) {
+ const msg = c.latestMessage();
+ if (msg) {
+ forwarded = msg.head ? msg.head.forwarded : null;
+ deliveryStatus = msg._status || c.msgStatus(msg, true);
+ previewIsResponse = msg.from != this.props.myUserId;
+ if (msg.content) {
+ preview = typeof msg.content == 'string' ? msg.content.substr(0, _config_js__WEBPACK_IMPORTED_MODULE_6__.MESSAGE_PREVIEW_LENGTH) : tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.preview(msg.content, _config_js__WEBPACK_IMPORTED_MODULE_6__.MESSAGE_PREVIEW_LENGTH);
+ }
+ }
+ }
+ contactNodes.push((0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(_contact_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
+ tinode: this.props.tinode,
+ title: c.public ? c.public.fn : null,
+ avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__.makeImageUrl)(c.public ? c.public.photo : null),
+ comment: comment,
+ preview: preview,
+ previewIsResponse: previewIsResponse,
+ forwarded: forwarded,
+ received: deliveryStatus,
+ unread: this.props.showUnread ? c.unread : 0,
+ now: c.online && this.props.connected,
+ acs: c.acs,
+ showMode: this.props.showMode,
+ badges: badges,
+ showCheckmark: showCheckmark,
+ selected: selected,
+ pinned: c.pinned,
+ showOnline: this.props.showOnline && !isChannel,
+ isChannel: isChannel,
+ isGroup: isGroup,
+ showContextMenu: this.props.showContextMenu,
+ isVerified: c.trusted && c.trusted.verified,
+ isStaff: c.trusted && c.trusted.staff,
+ isDangerous: c.trusted && c.trusted.danger,
+ deleted: c._deleted,
+ onSelected: this.props.onTopicSelected,
+ item: key,
+ index: contactNodes.length
+ }, key, false));
+ contactsCount++;
+ }
+ }, this);
+ }
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("div", {
+ className: this.props.noScroll ? null : "scrollable-panel",
+ children: [contactsCount == 0 ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("div", {
+ className: "center-medium-text",
+ style: {
+ whiteSpace: 'pre-line'
+ },
+ children: this.props.emptyListMessage
+ }, void 0, false) : null, contactNodes.length > 0 ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("ul", {
+ className: "contact-box",
+ children: contactNodes
+ }, void 0, false) : null]
+ }, void 0, true);
+ }
+}
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ContactList));
+
+/***/ }),
+
+/***/ "./src/widgets/contact.jsx":
+/*!*********************************!*\
+ !*** ./src/widgets/contact.jsx ***!
+ \*********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact-badges.jsx */ "./src/widgets/contact-badges.jsx");
+/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
+/* harmony import */ var _unread_badge_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./unread-badge.jsx */ "./src/widgets/unread-badge.jsx");
+/* harmony import */ var _lib_formatters_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/formatters.js */ "./src/lib/formatters.js");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ self_topic_name: {
+ id: 'self_topic_name',
+ defaultMessage: 'Saved messages',
+ description: 'Name of self topic for UI'
+ },
+ self_topic_comment: {
+ id: 'self_topic_comment',
+ defaultMessage: 'Notes, messages, links, files saved for posterity',
+ description: 'Comment for self topic for UI'
+ }
+});
+class Contact extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.handleClick = this.handleClick.bind(this);
+ this.handleContextClick = this.handleContextClick.bind(this);
+ }
+ handleClick(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ if (this.props.onSelected) {
+ this.props.onSelected(this.props.item, this.props.index);
+ }
+ }
+ handleContextClick(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ this.props.showContextMenu({
+ topicName: this.props.item,
+ topicTitle: this.props.title,
+ y: e.pageY,
+ x: e.pageX
+ });
+ }
+ render() {
+ let title = this.props.title;
+ const self = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isSelfTopicName(this.props.item);
+ if (!title) {
+ if (self) {
+ title = this.props.intl.formatMessage(messages.self_topic_name);
+ } else {
+ title = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("i", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "unnamed_topic",
+ defaultMessage: "Unnamed",
+ description: "Title shown when the topic has no name"
+ }, void 0, false)
+ }, void 0, false);
+ }
+ } else if (title.length > 30) {
+ title = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__.truncateString)(title, 30);
+ }
+ const online = this.props.now ? 'online' : 'offline';
+ const avatar = this.props.avatar ? this.props.avatar : true;
+ const badges = this.props.badges ? this.props.badges.slice() : [];
+ const icon_badges = [];
+ if (this.props.isVerified) {
+ icon_badges.push({
+ icon: 'verified',
+ color: 'verified-color'
+ });
+ }
+ if (this.props.isStaff) {
+ icon_badges.push({
+ icon: 'staff',
+ color: 'staff-color'
+ });
+ }
+ if (this.props.isDangerous) {
+ icon_badges.push({
+ icon: 'dangerous',
+ color: 'danger-color'
+ });
+ }
+ if (this.props.acs) {
+ if (this.props.showMode) {
+ badges.push({
+ name: this.props.acs.getMode(),
+ key: 'mode'
+ });
+ }
+ if (this.props.acs.isMuted()) {
+ icon_badges.push({
+ icon: 'muted'
+ });
+ }
+ if (!this.props.acs.isJoiner()) {
+ icon_badges.push({
+ icon: 'banned'
+ });
+ }
+ }
+ let preview;
+ if (typeof this.props.preview == 'string') {
+ preview = this.props.preview;
+ } else if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isValid(this.props.preview)) {
+ preview = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.format(this.props.preview, _lib_formatters_js__WEBPACK_IMPORTED_MODULE_6__.previewFormatter, {
+ formatMessage: this.props.intl.formatMessage,
+ previewIsResponse: this.props.previewIsResponse
+ }));
+ } else if (this.props.preview) {
+ preview = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.Fragment, {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("i", {
+ className: "material-icons gray",
+ children: "warning_amber"
+ }, void 0, false), " ", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("i", {
+ className: "gray",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "invalid_content",
+ defaultMessage: "invalid content",
+ description: "Shown when the message is unreadable"
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true);
+ }
+ const icon = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_7__.deliveryMarker)(this.props.received);
+ const marker = icon ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("i", {
+ className: 'material-icons small space-right' + (icon.color ? ' ' + icon.color : ''),
+ children: icon.name
+ }, void 0, false) : null;
+ const titleClass = 'contact-title' + (this.props.deleted ? ' deleted' : '');
+ const comment = preview || this.props.comment || (self ? this.props.intl.formatMessage(messages.self_topic_comment) : '\u00A0');
+ const bgColor = this.props.showCheckmark ? null : this.props.selected ? 'selected' : this.props.pinned ? 'tpinned' : null;
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("li", {
+ className: bgColor,
+ onClick: this.handleClick,
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("div", {
+ className: "avatar-box",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
+ authorizeURL: this.props.tinode.authorizeURL,
+ avatar: avatar,
+ title: this.props.title,
+ topic: this.props.item,
+ deleted: this.props.deleted
+ }, void 0, false), this.props.deleted ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("i", {
+ className: "deleted material-icons",
+ children: "cancel"
+ }, void 0, false) : !self && this.props.showOnline ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("span", {
+ className: online
+ }, void 0, false) : this.props.showCheckmark && this.props.selected ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("i", {
+ className: "checkmark material-icons",
+ children: "check_circle"
+ }, void 0, false) : null]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("div", {
+ className: "text-box",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("div", {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("span", {
+ className: titleClass,
+ children: title
+ }, void 0, false), this.props.isGroup ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("i", {
+ className: "material-icons as-badge",
+ children: "group"
+ }, void 0, false) : null, this.props.isChannel ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("i", {
+ className: "material-icons as-badge",
+ children: "podcasts"
+ }, void 0, false) : null, !self ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
+ badges: icon_badges
+ }, void 0, false) : null, !this.props.deleted ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(_unread_badge_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
+ count: this.props.unread
+ }, void 0, false) : null]
+ }, void 0, true), this.props.showMode ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("span", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
+ badges: badges
+ }, void 0, false)
+ }, void 0, false) : this.props.small ? null : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("div", {
+ className: "contact-comment",
+ children: [marker, (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("span", {
+ children: comment
+ }, void 0, false)]
+ }, void 0, true)]
+ }, void 0, true), this.props.showContextMenu ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("span", {
+ className: "menuTrigger",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("a", {
+ href: "#",
+ onClick: this.handleContextClick,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "expand_more"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false) : null]
+ }, void 0, true);
+ }
+}
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(Contact));
+
+/***/ }),
+
+/***/ "./src/widgets/context-menu.jsx":
+/*!**************************************!*\
+ !*** ./src/widgets/context-menu.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ info: {
+ id: 'menu_item_info',
+ defaultMessage: 'Info',
+ description: 'Show extended topic information'
+ },
+ clear_messages: {
+ id: 'menu_item_clear_messages',
+ defaultMessage: 'Clear messages',
+ description: 'Delete all messages'
+ },
+ clear_for_all: {
+ id: 'menu_item_clear_messages_for_all',
+ defaultMessage: 'Clear for All',
+ description: 'Delete all message(s) for all members'
+ },
+ delete: {
+ id: 'menu_item_delete',
+ defaultMessage: 'Delete',
+ description: 'Delete selected messages'
+ },
+ delete_for_all: {
+ id: 'menu_item_delete_for_all',
+ defaultMessage: 'Delete for All',
+ description: 'Delete selected message(s) for all members'
+ },
+ send_retry: {
+ id: 'menu_item_send_retry',
+ defaultMessage: 'Retry',
+ description: 'Retry sending message'
+ },
+ mute: {
+ id: 'menu_item_mute',
+ defaultMessage: 'Mute',
+ description: 'Turn off notifications'
+ },
+ unmute: {
+ id: 'menu_item_unmute',
+ defaultMessage: 'Unmute',
+ description: 'Turn notifications on'
+ },
+ reply: {
+ id: 'menu_item_reply',
+ defaultMessage: 'Reply',
+ description: 'Reply to message'
+ },
+ forward: {
+ id: 'menu_item_forward',
+ defaultMessage: 'Forward',
+ description: 'Forward message'
+ },
+ edit: {
+ id: 'menu_item_edit',
+ defaultMessage: 'Edit',
+ description: 'Edit message'
+ },
+ topic_delete: {
+ id: 'menu_item_delete_topic',
+ defaultMessage: 'Delete',
+ description: 'Delete entire topic'
+ },
+ topic_delete_warning: {
+ id: 'topic_delete_warning',
+ defaultMessage: 'Are you sure you want to delete this conversation? It cannot be undone.',
+ description: 'Alert warning when deleting entire topic'
+ },
+ delete_messages_warning: {
+ id: 'delete_messages_warning',
+ defaultMessage: 'Are you sure you want to delete all messages for everyone? It cannot be undone.',
+ description: 'Alert dialog warning when hard-deleting all messages.'
+ },
+ unblock: {
+ id: 'menu_item_unblock',
+ defaultMessage: 'Unblock',
+ description: 'Unblock topic or user'
+ },
+ block: {
+ id: 'menu_item_block',
+ defaultMessage: 'Block',
+ description: 'Block topic or user'
+ },
+ topic_block_warning: {
+ id: 'topic_block_warning',
+ defaultMessage: 'Are you sure you want to block this conversation?',
+ description: 'Alert warning when blocking a topic.'
+ },
+ member_delete: {
+ id: 'menu_item_member_delete',
+ defaultMessage: 'Remove',
+ description: 'Remove user from topic'
+ },
+ archive: {
+ id: 'menu_item_archive_topic',
+ defaultMessage: 'Archive',
+ description: 'Move topic from the list of active chats to archive'
+ },
+ unarchive: {
+ id: 'menu_item_restore_topic',
+ defaultMessage: 'Restore',
+ description: 'Restore topic from archive'
+ },
+ edit_permissions: {
+ id: 'menu_item_edit_permissions',
+ defaultMessage: 'Edit permissions',
+ description: 'Menu item [Edit permissions]'
+ },
+ clear_messages_warning: {
+ id: 'clear_messages_warning',
+ defaultMessage: 'Are you sure you want to clear all messages? It cannot be undone.',
+ description: 'Alert dialog warning when deleting all messages.'
+ },
+ pin_message: {
+ id: 'pin_message',
+ defaultMessage: 'Pin',
+ description: 'Menu item [Pin] for pinning message to the top.'
+ },
+ unpin_message: {
+ id: 'unpin_message',
+ defaultMessage: 'Unpin',
+ description: 'Menu item [Unpin] for un-pinning the message.'
+ },
+ pin_chat: {
+ id: 'pin_chat',
+ defaultMessage: 'Pin',
+ description: 'Menu item [Pin] for pinning chat to the top.'
+ },
+ unpin_chat: {
+ id: 'unpin_chat',
+ defaultMessage: 'Unpin',
+ description: 'Menu item [Unpin] for un-pinning the chat.'
+ }
+});
+class ContextMenu extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.selfRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
+ const {
+ formatMessage
+ } = props.intl;
+ this.handlePageClick = this.handlePageClick.bind(this);
+ this.handleEscapeKey = this.handleEscapeKey.bind(this);
+ this.handleClick = this.handleClick.bind(this);
+ this.MenuItems = {
+ 'topic_info': {
+ id: 'topic_info',
+ title: formatMessage(messages.info),
+ handler: null
+ },
+ 'messages_clear': {
+ id: 'messages_clear',
+ title: formatMessage(messages.clear_messages),
+ handler: (params, errorHandler) => {
+ return props.onShowAlert(params.topicTitle || formatMessage(messages.clear_messages), formatMessage(messages.clear_messages_warning), _ => {
+ this.deleteMessages(true, false, params, errorHandler);
+ }, null, true, null);
+ }
+ },
+ 'messages_clear_hard': {
+ id: 'messages_clear_hard',
+ title: formatMessage(messages.clear_for_all),
+ handler: (params, errorHandler) => {
+ return props.onShowAlert(params.topicTitle || formatMessage(messages.clear_for_all), formatMessage(messages.delete_messages_warning), _ => {
+ return this.deleteMessages(true, true, params, errorHandler);
+ }, null, true, null);
+ }
+ },
+ 'message_delete': {
+ id: 'message_delete',
+ title: formatMessage(messages.delete),
+ handler: (params, errorHandler) => {
+ return this.deleteMessages(false, false, params, errorHandler);
+ }
+ },
+ 'message_delete_hard': {
+ id: 'message_delete_hard',
+ title: formatMessage(messages.delete_for_all),
+ handler: (params, errorHandler) => {
+ return this.deleteMessages(false, true, params, errorHandler);
+ }
+ },
+ 'message_delete_generic': {
+ id: 'message_delete_generic',
+ title: formatMessage(messages.delete),
+ handler: (params, errorHandler) => {
+ return this.deleteMessages(false, true, params, errorHandler);
+ }
+ },
+ 'menu_item_send_retry': {
+ id: 'menu_item_send_retry',
+ title: formatMessage(messages.send_retry),
+ handler: (params, errorHandler) => {
+ return this.retryMessage(params, errorHandler);
+ }
+ },
+ 'menu_item_reply': {
+ id: 'menu_item_reply',
+ title: formatMessage(messages.reply),
+ handler: (params, errorHandler) => {
+ return this.replyToMessage(params, errorHandler);
+ }
+ },
+ 'menu_item_forward': {
+ id: 'menu_item_forward',
+ title: formatMessage(messages.forward),
+ handler: _ => {}
+ },
+ 'menu_item_edit': {
+ id: 'menu_item_edit',
+ title: formatMessage(messages.edit),
+ handler: (params, errorHandler) => {
+ return this.editMessage(params, errorHandler);
+ }
+ },
+ 'menu_item_pin': {
+ id: 'menu_item_pin',
+ title: formatMessage(messages.pin_message),
+ handler: (params, errorHandler) => {
+ return this.pinMessage(true, params, errorHandler);
+ }
+ },
+ 'menu_item_unpin': {
+ id: 'menu_item_unpin',
+ title: formatMessage(messages.unpin_message),
+ handler: (params, errorHandler) => {
+ return this.pinMessage(false, params, errorHandler);
+ }
+ },
+ 'topic_unmute': {
+ id: 'topic_unmute',
+ title: formatMessage(messages.unmute),
+ handler: this.topicPermissionSetter.bind(this, '+P')
+ },
+ 'topic_mute': {
+ id: 'topic_mute',
+ title: formatMessage(messages.mute),
+ handler: this.topicPermissionSetter.bind(this, '-P')
+ },
+ 'topic_unblock': {
+ id: 'topic_unblock',
+ title: formatMessage(messages.unblock),
+ handler: this.topicPermissionSetter.bind(this, '+JP')
+ },
+ 'topic_block': {
+ id: 'topic_block',
+ title: formatMessage(messages.block),
+ handler: (params, errorHandler) => {
+ return props.onShowAlert(params.topicTitle || formatMessage(messages.block), formatMessage(messages.topic_block_warning), _ => this.topicPermissionSetter('-JP', params, errorHandler).then(ctrl => {
+ this.props.onTopicRemoved(params.topicName);
+ return ctrl;
+ }), null, true, null);
+ }
+ },
+ 'topic_delete': {
+ id: 'topic_delete',
+ title: formatMessage(messages.topic_delete),
+ handler: (params, errorHandler) => {
+ return props.onShowAlert(params.topicTitle || formatMessage(messages.topic_delete), formatMessage(messages.topic_delete_warning), _ => {
+ const topic = this.props.tinode.getTopic(params.topicName);
+ if (!topic) {
+ console.warn("Topic not found: ", params.topicName);
+ return;
+ }
+ return topic.delTopic(true).catch(err => {
+ if (errorHandler) {
+ errorHandler(err.message, 'err');
+ }
+ });
+ }, null, true, null);
+ }
+ },
+ 'topic_archive': {
+ id: 'topic_archive',
+ title: formatMessage(messages.archive),
+ handler: (params, errorHandler) => {
+ const topic = this.props.tinode.getTopic(params.topicName);
+ if (!topic) {
+ console.warn("Topic not found: ", params.topicName);
+ return;
+ }
+ return topic.archive(true).catch(err => {
+ if (errorHandler) {
+ errorHandler(err.message, 'err');
+ }
+ });
+ }
+ },
+ 'topic_restore': {
+ id: 'topic_restore',
+ title: formatMessage(messages.unarchive),
+ handler: (params, errorHandler) => {
+ const topic = this.props.tinode.getTopic(params.topicName);
+ if (!topic) {
+ console.warn("Topic not found: ", params.topicName);
+ return;
+ }
+ return topic.archive(false).catch(err => {
+ if (errorHandler) {
+ errorHandler(err.message, 'err');
+ }
+ });
+ }
+ },
+ 'topic_pin': {
+ id: 'topic_pin',
+ title: formatMessage(messages.pin_chat),
+ handler: (params, errorHandler) => {
+ const me = this.props.tinode.getMeTopic();
+ if (!me) {
+ console.warn("'me' topic not found");
+ return;
+ }
+ return me.pinTopic(params.topicName, true).catch(err => {
+ if (errorHandler) {
+ errorHandler(err.message, 'err');
+ }
+ });
+ }
+ },
+ 'topic_unpin': {
+ id: 'topic_unpin',
+ title: formatMessage(messages.unpin_chat),
+ handler: (params, errorHandler) => {
+ const me = this.props.tinode.getMeTopic();
+ if (!me) {
+ console.warn("'me' topic not found");
+ return;
+ }
+ return me.pinTopic(params.topicName, false).catch(err => {
+ if (errorHandler) {
+ errorHandler(err.message, 'err');
+ }
+ });
+ }
+ },
+ 'permissions': {
+ id: 'permissions',
+ title: formatMessage(messages.edit_permissions),
+ handler: null
+ },
+ 'member_delete': {
+ id: 'member_delete',
+ title: formatMessage(messages.member_delete),
+ handler: (params, errorHandler) => {
+ const topic = this.props.tinode.getTopic(params.topicName);
+ if (!topic || !params.user) {
+ console.warn("Topic or user not found: '" + params.topicName + "', '" + params.user + "'");
+ return;
+ }
+ return topic.delSubscription(params.user).catch(err => {
+ if (errorHandler) {
+ errorHandler(err.message, 'err');
+ }
+ });
+ }
+ },
+ 'member_mute': {
+ id: 'member_mute',
+ title: formatMessage(messages.mute),
+ handler: this.topicPermissionSetter.bind(this, '-P')
+ },
+ 'member_unmute': {
+ id: 'member_unmute',
+ title: formatMessage(messages.unmute),
+ handler: this.topicPermissionSetter.bind(this, '+P')
+ },
+ 'member_block': {
+ id: 'member_block',
+ title: formatMessage(messages.block),
+ handler: this.topicPermissionSetter.bind(this, '-JP')
+ },
+ 'member_unblock': {
+ id: 'member_unblock',
+ title: formatMessage(messages.unblock),
+ handler: this.topicPermissionSetter.bind(this, '+JP')
+ }
+ };
+ }
+ componentDidMount() {
+ document.addEventListener('mousedown', this.handlePageClick, false);
+ document.addEventListener('keyup', this.handleEscapeKey, false);
+ }
+ componentWillUnmount() {
+ document.removeEventListener('mousedown', this.handlePageClick, false);
+ document.removeEventListener('keyup', this.handleEscapeKey, false);
+ }
+ handlePageClick(e) {
+ if (this.selfRef.current.contains(e.target)) {
+ return;
+ }
+ e.preventDefault();
+ e.stopPropagation();
+ this.props.hide();
+ }
+ handleEscapeKey(e) {
+ if (e.keyCode === 27) {
+ this.props.hide();
+ }
+ }
+ handleClick(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ this.props.hide();
+ let item = this.props.items[e.currentTarget.dataset.id];
+ if (typeof item == 'string') {
+ item = this.MenuItems[item];
+ }
+ if (!item) {
+ console.error("Invalid menu item ID", e.currentTarget.dataset.id);
+ } else {
+ this.props.onAction(item.id, item.handler(this.props.params, this.props.onError), this.props.params);
+ }
+ }
+ deleteMessages(all, hard, params, errorHandler) {
+ const topic = this.props.tinode.getTopic(params.topicName);
+ if (!topic) {
+ console.warn("Topic not found: ", params.topicName);
+ return;
+ }
+ if (!all && topic.cancelSend(params.seq)) {
+ return;
+ }
+ const promise = all ? topic.delMessagesAll(hard) : params.replace > 0 ? topic.delMessagesEdits(params.replace, hard) : topic.delMessagesList([params.seq], hard);
+ return promise.catch(err => {
+ if (errorHandler) {
+ errorHandler(err.message, 'err');
+ }
+ });
+ }
+ retryMessage(params, errorHandler) {
+ const topic = this.props.tinode.getTopic(params.topicName);
+ if (!topic || !topic.flushMessage(params.seq)) {
+ return;
+ }
+ const msg = topic.createMessage(params.content, false);
+ return topic.publishDraft(msg).catch(err => {
+ if (errorHandler) {
+ errorHandler(err.message, 'err');
+ }
+ });
+ }
+ pinMessage(pin, params, errorHandler) {
+ const topic = this.props.tinode.getTopic(params.topicName);
+ if (!topic) {
+ return;
+ }
+ topic.pinMessage(params.seq, pin).catch(err => errorHandler ? errorHandler(err.message, 'err') : null);
+ }
+ topicPermissionSetter(mode, params, errorHandler) {
+ const topic = this.props.tinode.getTopic(params.topicName);
+ if (!topic) {
+ console.warn("Topic not found", params.topicName);
+ return;
+ }
+ let result = topic.updateMode(params.user, mode);
+ if (errorHandler) {
+ result = result.catch(err => errorHandler(err.message, 'err'));
+ }
+ return result;
+ }
+ replyToMessage(params, errorHandler) {
+ params.pickReply(params.seq, params.content, params.userFrom, params.userName, errorHandler);
+ }
+ editMessage(params, errorHandler) {
+ params.editMessage(params.replace || params.seq, params.content, errorHandler);
+ }
+ render() {
+ const menu = [];
+ let count = 0;
+ this.props.items.forEach(item => {
+ if (typeof item == 'string') {
+ item = this.MenuItems[item];
+ }
+ if (item && item.title) {
+ const className = item.disabled ? 'disabled' : undefined;
+ menu.push(item.title == '-' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("li", {
+ className: "separator"
+ }, count, false) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("li", {
+ className: className,
+ onClick: this.handleClick,
+ "data-id": count,
+ children: item.title
+ }, count, false));
+ }
+ count++;
+ });
+ const hSize = 12 * _config_js__WEBPACK_IMPORTED_MODULE_2__.REM_SIZE;
+ const vSize = _config_js__WEBPACK_IMPORTED_MODULE_2__.REM_SIZE * (0.7 + menu.length * 2.5);
+ const left = this.props.bounds.right - this.props.clickAt.x < hSize ? this.props.clickAt.x - this.props.bounds.left - hSize : this.props.clickAt.x - this.props.bounds.left;
+ const top = this.props.bounds.bottom - this.props.clickAt.y < vSize ? this.props.clickAt.y - this.props.bounds.top - vSize : this.props.clickAt.y - this.props.bounds.top;
+ const position = {
+ left: left + 'px',
+ top: top + 'px'
+ };
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxDEV)("ul", {
+ className: "menu",
+ style: position,
+ ref: this.selfRef,
+ children: menu
+ }, void 0, false);
+ }
+}
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ContextMenu));
+
+/***/ }),
+
+/***/ "./src/widgets/cropper.jsx":
+/*!*********************************!*\
+ !*** ./src/widgets/cropper.jsx ***!
+ \*********************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ Cropper; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+const DEFAULT_MAX_ZOOM = 8;
+class Cropper extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ panX: 0,
+ panY: 0,
+ originX: 0,
+ originY: 0,
+ zoom: 1,
+ minZoom: 0.001,
+ maxZoom: DEFAULT_MAX_ZOOM
+ };
+ this.overlay = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
+ this.cutout = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
+ this.preview = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
+ this.boundingBox = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
+ this.imageWidth = 0;
+ this.imageHeight = 0;
+ this.mouseX = 0;
+ this.mouseY = 0;
+ this.prevDistance = 0;
+ this.cutoutRect = {};
+ this.bBoxRect = {};
+ this.originX = 0;
+ this.originY = 0;
+ this.initScaling = this.initScaling.bind(this);
+ this.onZoom = this.onZoom.bind(this);
+ this.handleZoom = this.handleZoom.bind(this);
+ this.mouseDown = this.mouseDown.bind(this);
+ this.mouseUp = this.mouseUp.bind(this);
+ this.mouseMove = this.mouseMove.bind(this);
+ this.mouseTouch = this.mouseTouch.bind(this);
+ this.positionAll = this.positionAll.bind(this);
+ this.translate = this.translate.bind(this);
+ }
+ componentDidMount() {
+ this.overlay.current.addEventListener('mousedown', this.mouseDown, {
+ passive: true
+ });
+ this.overlay.current.addEventListener('touchstart', this.mouseDown, {
+ passive: true
+ });
+ this.bBoxRect = this.boundingBox.current.getBoundingClientRect();
+ this.originX = this.bBoxRect.width / 2;
+ this.originY = this.bBoxRect.height / 2;
+ this.cutoutRect = this.cutout.current.getBoundingClientRect();
+ }
+ componentWillUnmount() {
+ if (this.overlay.current) {
+ this.overlay.current.removeEventListener('mousedown', this.mouseDown);
+ this.overlay.current.removeEventListener('touchstart', this.mouseDown);
+ }
+ }
+ positionAll(panX, panY, zoom) {
+ this.setState({
+ panX: panX,
+ panY: panY,
+ zoom: zoom,
+ originX: this.originX - panX,
+ originY: this.originY - panY
+ });
+ const left = (this.originX - panX) * zoom - this.originX;
+ const top = (this.originY - panY) * zoom - this.originY;
+ this.props.onChange((left + this.cutoutRect.left - this.bBoxRect.left) / zoom, (top + this.cutoutRect.top - this.bBoxRect.top) / zoom, this.cutoutRect.width / zoom, this.cutoutRect.height / zoom, zoom);
+ }
+ static checkBound(currPan, img, cutout, delta) {
+ let nextDiff = Math.min(0, cutout[0] - img[0] - delta, img[1] - cutout[1] + delta);
+ if (nextDiff == 0) {
+ currPan += delta;
+ } else if (Math.min(0, cutout[0] - img[0], img[1] - cutout[1]) < nextDiff) {
+ currPan += delta;
+ }
+ return currPan;
+ }
+ initScaling() {
+ const imgRect = this.preview.current.getBoundingClientRect();
+ this.imageWidth = imgRect.width;
+ this.imageHeight = imgRect.height;
+ const minZoom = Math.max(this.cutoutRect.width / imgRect.width, this.cutoutRect.height / imgRect.height);
+ this.setState({
+ minZoom: minZoom,
+ maxZoom: minZoom * DEFAULT_MAX_ZOOM
+ });
+ const zoom = Math.max(this.bBoxRect.width / imgRect.width, this.bBoxRect.height / imgRect.height);
+ const panX = this.cutoutRect.left - this.bBoxRect.left - (imgRect.width - this.cutoutRect.width) / 2;
+ const panY = this.cutoutRect.top - this.bBoxRect.top - (imgRect.height - this.cutoutRect.height) / 2;
+ this.positionAll(panX, panY, zoom);
+ }
+ onZoom(e) {
+ this.handleZoom(e.target.value);
+ }
+ handleZoom(zoom) {
+ let panX = this.state.panX;
+ let panY = this.state.panY;
+ const imgLeft = this.originX - (this.originX - panX) * zoom;
+ const imgRight = imgLeft + this.imageWidth * zoom;
+ const imgTop = this.originY - (this.originY - panY) * zoom;
+ const imgBottom = imgTop + this.imageHeight * zoom;
+ const coLeft = this.cutoutRect.left - this.bBoxRect.left;
+ const coRight = coLeft + this.cutoutRect.width;
+ const coTop = this.cutoutRect.top - this.bBoxRect.top;
+ const coBottom = coTop + this.cutoutRect.height;
+ if (coLeft < imgLeft) {
+ panX -= (imgLeft - coLeft) / zoom;
+ } else if (coRight > imgRight) {
+ panX += (coRight - imgRight) / zoom;
+ }
+ if (coTop < imgTop) {
+ panY -= (imgTop - coTop) / zoom;
+ } else if (coBottom > imgBottom) {
+ panY += (coBottom - imgBottom) / zoom;
+ }
+ this.positionAll(panX, panY, zoom);
+ }
+ mouseDown(e) {
+ if (e.touches) {
+ this.mouseX = e.touches[0].pageX;
+ this.mouseY = e.touches[0].pageY;
+ } else {
+ this.mouseX = e.pageX;
+ this.mouseY = e.pageY;
+ }
+ window.addEventListener('mousemove', this.mouseMove, {
+ passive: false
+ });
+ window.addEventListener('touchmove', this.mouseTouch, {
+ passive: false
+ });
+ window.addEventListener('mouseup', this.mouseUp, {
+ passive: true
+ });
+ window.addEventListener('touchend', this.mouseUp, {
+ passive: true
+ });
+ document.body.style['userSelect'] = 'none';
+ }
+ translate(pageX, pageY) {
+ const dX = (pageX - this.mouseX) / this.state.zoom;
+ const dY = (pageY - this.mouseY) / this.state.zoom;
+ this.mouseX = pageX;
+ this.mouseY = pageY;
+ const imgRect = this.preview.current.getBoundingClientRect();
+ const panX = Cropper.checkBound(this.state.panX, [imgRect.left, imgRect.right], [this.cutoutRect.left, this.cutoutRect.right], dX);
+ const panY = Cropper.checkBound(this.state.panY, [imgRect.top, imgRect.bottom], [this.cutoutRect.top, this.cutoutRect.bottom], dY);
+ this.positionAll(panX, panY, this.state.zoom);
+ }
+ mouseMove(e) {
+ e.preventDefault();
+ this.translate(e.pageX, e.pageY);
+ }
+ mouseTouch(e) {
+ e.preventDefault();
+ if (e.touches.length == 1) {
+ this.translate(e.touches[0].pageX, e.touches[0].pageY);
+ return;
+ }
+ const [touch0, touch1] = e.touches;
+ const distance = Math.sqrt((touch0.pageX - touch1.pageX) * (touch0.pageX - touch1.pageX) + (touch0.pageY - touch1.pageY) * (touch0.pageY - touch1.pageY));
+ if (!this.prevDistance) {
+ this.prevDistance = distance / this.state.zoom;
+ }
+ let scale = distance / this.prevDistance;
+ this.handleZoom(Math.max(this.minZoom, Math.min(this.maxZoom, scale)));
+ }
+ mouseUp(e) {
+ window.removeEventListener('mousemove', this.mouseMove);
+ window.removeEventListener('touchmove', this.mouseTouch);
+ window.removeEventListener('mouseup', this.mouseUp);
+ window.removeEventListener('touchend', this.mouseUp);
+ document.body.style['userSelect'] = '';
+ this.positionAll(this.state.panX, this.state.panY, this.state.zoom);
+ }
+ render() {
+ const t3d = `translate3d(${this.state.panX}px, ${this.state.panY}px, 0) scale(${this.state.zoom})`;
+ const orig = `${this.state.originX}px ${this.state.originY}px`;
+ const overlay = {
+ top: `${this.originY - this.state.originY * this.state.zoom}px`,
+ left: `${this.originX - this.state.originX * this.state.zoom}px`,
+ width: `${this.imageWidth * this.state.zoom}px`,
+ height: `${this.imageHeight * this.state.zoom}px`
+ };
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
+ className: "cropper",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
+ className: "bounding-box",
+ ref: this.boundingBox,
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("img", {
+ src: this.props.source,
+ className: "preview",
+ alt: "",
+ style: {
+ transform: t3d,
+ transformOrigin: orig
+ },
+ ref: this.preview,
+ onLoad: this.initScaling
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
+ className: "cutout circle",
+ ref: this.cutout
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
+ className: "overlay",
+ style: overlay,
+ ref: this.overlay
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
+ className: "zoom-wrapper",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("input", {
+ type: "range",
+ className: "zoomer",
+ step: "0.001",
+ min: this.state.minZoom,
+ max: this.state.maxZoom,
+ value: this.state.zoom,
+ onChange: this.onZoom
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+
+/***/ }),
+
+/***/ "./src/widgets/error-panel.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/error-panel.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ ErrorPanel; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _menu_cancel_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./menu-cancel.jsx */ "./src/widgets/menu-cancel.jsx");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+class ErrorPanel extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ show: false
+ };
+ this.hide = this.hide.bind(this);
+ }
+ componentDidUpdate(prevProps) {
+ if (prevProps.level !== this.props.level) {
+ this.setState({
+ show: !!this.props.level
+ });
+ }
+ }
+ hide() {
+ this.setState({
+ show: false
+ });
+ if (this.props.onClearError) {
+ this.props.onClearError();
+ }
+ }
+ render() {
+ const icons = {
+ err: 'error',
+ warn: 'warning',
+ info: 'info'
+ };
+ const level = icons[this.props.level] || '';
+ const className = 'info-box ' + level;
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: className,
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "icon",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("i", {
+ className: "material-icons",
+ children: level
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
+ children: [this.props.text, this.props.action ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
+ children: ["\xA0 ", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("a", {
+ href: "#",
+ style: {
+ whiteSpace: 'nowrap'
+ },
+ onClick: e => {
+ e.preventDefault();
+ this.props.action();
+ },
+ children: this.props.actionText
+ }, void 0, false)]
+ }, void 0, true) : null]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "cancel",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(_menu_cancel_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
+ onCancel: this.hide
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/file-progress.jsx":
+/*!***************************************!*\
+ !*** ./src/widgets/file-progress.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ FileProgress; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+class FileProgress extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "uploader",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
+ style: {
+ width: this.props.progress * 100 + "%"
+ }
+ }, void 0, false)
+ }, void 0, false), this.props.progress < 0.999 ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onCancel();
+ },
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "close"
+ }, void 0, false), " ", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "action_cancel",
+ defaultMessage: "cancel",
+ description: "Call to action [cancel]"
+ }, void 0, false)]
+ }, void 0, true) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "upload_finishing",
+ defaultMessage: "finishing...",
+ description: "Notification that upload is finishing"
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+
+/***/ }),
+
+/***/ "./src/widgets/forward-dialog.jsx":
+/*!****************************************!*\
+ !*** ./src/widgets/forward-dialog.jsx ***!
+ \****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ ForwardDialog; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact-list.jsx */ "./src/widgets/contact-list.jsx");
+/* harmony import */ var _search_contacts_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./search-contacts.jsx */ "./src/widgets/search-contacts.jsx");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+
+class ForwardDialog extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ query: null
+ };
+ this.handleEscapeKey = this.handleEscapeKey.bind(this);
+ this.handleClose = this.handleClose.bind(this);
+ this.handleSearchContacts = this.handleSearchContacts.bind(this);
+ this.handleContactSelected = this.handleContactSelected.bind(this);
+ }
+ componentDidMount() {
+ this.props.onInitFind();
+ }
+ handleEscapeKey(e) {
+ if (e.keyCode === 27) {
+ this.props.hide(false);
+ }
+ }
+ handleClose(e) {
+ e.preventDefault();
+ this.props.hide(false);
+ }
+ handleSearchContacts(query) {
+ this.setState({
+ query: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isNullValue(query) ? null : query
+ });
+ this.props.onSearchContacts(query);
+ }
+ handleContactSelected(uid) {
+ this.props.onTopicSelected(uid);
+ this.props.hide(true);
+ }
+ render() {
+ let contacts = this.state.query != null ? this.props.searchResults : this.props.contacts;
+ contacts = contacts.filter(c => {
+ return c.name != this.props.topicSelected && c.acs.isJoiner() && c.acs.isWriter();
+ });
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("div", {
+ className: "alert-container",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("div", {
+ className: "forward-dialog",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("div", {
+ className: "title with-control",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "forward_to",
+ defaultMessage: "Forward to",
+ desription: "Title of the contact selector dialog when forwarding a message"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("a", {
+ href: "#",
+ onClick: this.handleClose,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "close"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "forward_to_search_placeholder",
+ defaultMessage: "Search contacts",
+ description: "Contact search prompt when forwarding a message.",
+ children: search_placeholder => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)(_search_contacts_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
+ placeholder: search_placeholder,
+ onSearchContacts: this.handleSearchContacts
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "search_no_results",
+ defaultMessage: "Search returned no results",
+ description: "Text shown in contacts view when query returned no results.",
+ children: not_found_placeholder => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)(_contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
+ tinode: this.props.tinode,
+ contacts: contacts,
+ myUserId: this.props.myUserId,
+ emptyListMessage: not_found_placeholder,
+ showOnline: false,
+ showUnread: false,
+ showContextMenu: false,
+ onTopicSelected: this.handleContactSelected
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true)
+ }, void 0, false);
+ }
+}
+
+/***/ }),
+
+/***/ "./src/widgets/host-selector.jsx":
+/*!***************************************!*\
+ !*** ./src/widgets/host-selector.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ HostSelector; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+class HostSelector extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ hostName: props.serverAddress,
+ changed: false
+ };
+ this.handleHostNameChange = this.handleHostNameChange.bind(this);
+ this.handleEditingFinished = this.handleEditingFinished.bind(this);
+ this.handleKeyDown = this.handleKeyDown.bind(this);
+ }
+ handleHostNameChange(e) {
+ this.setState({
+ hostName: e.target.value,
+ changed: true
+ });
+ }
+ handleEditingFinished() {
+ if (this.state.changed) {
+ this.setState({
+ changed: false
+ });
+ this.props.onServerAddressChange(this.state.hostName.trim());
+ }
+ }
+ handleKeyDown(e) {
+ if (e.key == 'Enter') {
+ this.handleEditingFinished();
+ }
+ }
+ render() {
+ const hostOptions = [];
+ for (let key in _config_js__WEBPACK_IMPORTED_MODULE_1__.KNOWN_HOSTS) {
+ let item = _config_js__WEBPACK_IMPORTED_MODULE_1__.KNOWN_HOSTS[key];
+ hostOptions.push((0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("option", {
+ value: item
+ }, item, false));
+ }
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("input", {
+ type: "search",
+ id: "host-name",
+ placeholder: this.props.hostName,
+ list: "known-hosts",
+ className: "quoted",
+ value: this.state.hostName,
+ onChange: this.handleHostNameChange,
+ onBlur: this.handleEditingFinished,
+ onKeyDown: this.handleKeyDown,
+ required: true
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("datalist", {
+ id: "known-hosts",
+ children: hostOptions
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+
+/***/ }),
+
+/***/ "./src/widgets/in-place-edit.jsx":
+/*!***************************************!*\
+ !*** ./src/widgets/in-place-edit.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ InPlaceEdit; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _visible_password_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./visible-password.jsx */ "./src/widgets/visible-password.jsx");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+class InPlaceEdit extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.selfRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
+ this.state = {
+ active: props.active,
+ initialValue: props.value || '',
+ value: props.value || '',
+ valid: true
+ };
+ this.handeTextChange = this.handeTextChange.bind(this);
+ this.handleKeyDown = this.handleKeyDown.bind(this);
+ this.handleStartEditing = this.handleStartEditing.bind(this);
+ this.handleEditingFinished = this.handleEditingFinished.bind(this);
+ this.handlePasswordFinished = this.handlePasswordFinished.bind(this);
+ }
+ componentDidUpdate(prevProps, prevState) {
+ const newValue = this.props.value || '';
+ if (prevState.initialValue != newValue && !prevState.active) {
+ this.setState({
+ initialValue: newValue,
+ value: newValue
+ });
+ }
+ }
+ handeTextChange(e) {
+ this.setState({
+ value: e.target.value || ''
+ });
+ if (this.props.validator) {
+ Promise.resolve(this.props.validator(e.target.value)).then(valid => {
+ this.setState({
+ valid: valid
+ });
+ }).catch(err => {
+ if (err) {
+ this.setState({
+ valid: false
+ });
+ }
+ });
+ }
+ }
+ handleKeyDown(e) {
+ if (e.keyCode === 27) {
+ this.setState({
+ value: this.props.value,
+ active: false
+ });
+ } else if (e.keyCode === 13) {
+ this.handleEditingFinished(e);
+ }
+ }
+ handleStartEditing() {
+ if (!this.props.readOnly) {
+ this.setState({
+ active: true
+ }, _ => {
+ if (this.selfRef.current) {
+ this.selfRef.current.focus();
+ }
+ });
+ }
+ }
+ handleEditingFinished(event) {
+ const value = this.state.value.trim();
+ if (this.props.required && (!event.target.checkValidity() || !value)) {
+ this.setState({
+ value: this.props.value,
+ active: false
+ });
+ return;
+ }
+ this.setState({
+ active: false
+ });
+ if ((value || this.props.value) && value !== this.props.value && this.state.valid) {
+ this.props.onFinished(value);
+ }
+ }
+ handlePasswordFinished(value) {
+ this.setState({
+ active: false
+ });
+ if (value && value !== this.props.value) {
+ this.props.onFinished(value);
+ }
+ }
+ render() {
+ if (!this.state.active) {
+ let spanText = this.props.type == 'password' ? '••••••••' : this.state.value;
+ let spanClass = 'in-place-edit' + (this.props.readOnly ? ' disabled' : '');
+ if (!spanText) {
+ spanText = this.props.placeholder;
+ spanClass += ' placeholder';
+ }
+ if (!this.props.multiline || this.props.multiline == 1) {
+ spanClass += ' short';
+ }
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
+ className: spanClass,
+ onClick: this.handleStartEditing,
+ children: [this.props.iconLeft && (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("i", {
+ className: "material-icons light-gray",
+ children: this.props.iconLeft
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
+ children: spanText
+ }, void 0, false), this.props.iconRight && (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("i", {
+ className: "material-icons light-gray",
+ children: this.props.iconRight
+ }, void 0, false)]
+ }, void 0, true);
+ }
+ let element;
+ const attr = {};
+ if (this.props.type == 'password') {
+ element = _visible_password_jsx__WEBPACK_IMPORTED_MODULE_1__["default"];
+ attr.onFinished = this.handlePasswordFinished;
+ } else {
+ if (this.props.multiline > 1) {
+ element = 'textarea';
+ attr.rows = this.props.multiline;
+ attr.className = 'in-place-edit';
+ } else {
+ element = 'input';
+ attr.type = this.props.type || 'text';
+ attr.className = 'in-place-edit' + (this.props.iconLeft ? ' with-icon-left' : this.props.iconRight ? ' with-icon-right' : '');
+ if (this.props.maxLength) {
+ attr.maxLength = this.props.maxLength;
+ }
+ }
+ attr.value = this.state.value;
+ attr.className += this.state.valid ? '' : ' invalid';
+ attr.ref = this.selfRef;
+ attr.onChange = this.handeTextChange;
+ attr.onKeyDown = this.handleKeyDown;
+ attr.onBlur = this.handleEditingFinished;
+ }
+ attr.placeholder = this.props.placeholder;
+ attr.required = this.props.required ? 'required' : '';
+ attr.autoComplete = this.props.autoComplete;
+ attr.autoFocus = true;
+ if (this.props.spellCheck !== undefined) {
+ attr.spellCheck = this.props.spellCheck ? 'true' : 'false';
+ }
+ if (this.props.iconLeft || this.props.iconRight) {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment, {
+ children: [this.props.iconLeft && (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("i", {
+ className: "material-icons light-gray",
+ children: this.props.iconLeft
+ }, void 0, false), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(element, attr, null), this.props.iconRight && (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("i", {
+ className: "material-icons light-gray",
+ children: this.props.iconRight
+ }, void 0, false)]
+ }, void 0, true);
+ }
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(element, attr, null);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/inline-video.jsx":
+/*!**************************************!*\
+ !*** ./src/widgets/inline-video.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ InlineVideo; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+class InlineVideo extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.videoRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
+ this.handleClick = this.handleClick.bind(this);
+ }
+ handleClick(e) {
+ if (this.props.onClick) {
+ this.props.onClick(e);
+ }
+ }
+ render() {
+ const duration = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_1__.secondsToTime)(this.props['data-duration'] / 1000);
+ const className = 'inline-video' + (this.props.onClick ? ' image-clickable' : '');
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: className,
+ children: [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', this.props), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "play-control",
+ children: this.props.onClick ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("i", {
+ className: "material-icons white x-big",
+ children: "play_arrow"
+ }, void 0, false) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("img", {
+ src: "img/broken_video.png",
+ style: {
+ filter: 'invert(100%)'
+ },
+ width: "36",
+ height: "36"
+ }, void 0, false)
+ }, void 0, false), duration ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "duration",
+ children: duration
+ }, void 0, false) : null]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/lazy-image.jsx":
+/*!************************************!*\
+ !*** ./src/widgets/lazy-image.jsx ***!
+ \************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ LazyImage; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+
+class LazyImage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ src: this.props.isvideo ? 'img/blankvid.png' : 'img/blankimg.png',
+ style: Object.assign({
+ padding: '4px'
+ }, this.props.style),
+ className: this.props.className,
+ alt: this.props.alt,
+ onClick: this.props.onClick
+ };
+ }
+ componentDidMount() {
+ this.props.whenDone.promise.then(data => this.setState({
+ src: data.src,
+ style: {
+ ...this.state.style,
+ padding: 0
+ }
+ })).catch(_ => this.setState({
+ src: this.props.isvideo ? 'img/broken_video.png' : 'img/broken_image.png'
+ }));
+ }
+ componentWillUnmount() {
+ this.props.whenDone.cancel();
+ }
+ componentDidUpdate(prevProps) {
+ if (prevProps.whenDone != this.props.whenDone) {
+ this.setState({
+ src: this.props.isvideo ? 'img/blankvid.png' : 'img/blankimg.png',
+ style: {
+ ...this.state.style,
+ padding: '4px'
+ }
+ });
+ this.props.whenDone.promise.then(data => this.setState({
+ src: data.src,
+ style: {
+ ...this.state.style,
+ padding: 0
+ }
+ })).catch(_ => this.setState({
+ src: this.props.isvideo ? 'img/broken_video.png' : 'img/broken_image.png'
+ }));
+ }
+ }
+ render() {
+ return react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', this.state);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/letter-tile.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/letter-tile.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ LetterTile; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+
+class LetterTile extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ let avatar;
+ if (this.props.avatar === true) {
+ if (tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.isSelfTopicName(this.props.topic)) {
+ avatar = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("img", {
+ className: "avatar self",
+ alt: "avatar",
+ src: _config_js__WEBPACK_IMPORTED_MODULE_4__.SELF_AVATAR_URI
+ }, void 0, false);
+ } else {
+ const isGroup = tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.isGroupTopicName(this.props.topic);
+ const iconColor = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__.idToColorClass)(this.props.topic, isGroup);
+ if (this.props.topic && this.props.title && this.props.title.trim()) {
+ const letter = this.props.title.trim().charAt(0);
+ const className = 'lettertile ' + iconColor + (this.props.deleted ? ' disabled' : '');
+ avatar = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("div", {
+ className: className,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("div", {
+ children: letter
+ }, void 0, false)
+ }, void 0, false);
+ } else {
+ const className = 'material-icons ' + iconColor + (this.props.deleted ? ' disabled' : '');
+ avatar = isGroup ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("i", {
+ className: className,
+ children: "group"
+ }, void 0, false) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("i", {
+ className: className,
+ children: "person"
+ }, void 0, false);
+ }
+ }
+ } else if (this.props.avatar) {
+ const url = this.props.authorizeURL((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_3__.sanitizeUrlForMime)(this.props.avatar, 'image'));
+ const className = 'avatar' + (this.props.deleted ? ' deleted' : '');
+ avatar = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxDEV)("img", {
+ className: className,
+ alt: "avatar",
+ src: url,
+ onError: e => {
+ e.target.onerror = null;
+ e.target.src = "img/broken_image.png";
+ }
+ }, void 0, false);
+ } else {
+ avatar = null;
+ }
+ return avatar;
+ }
+}
+
+/***/ }),
+
+/***/ "./src/widgets/load-spinner.jsx":
+/*!**************************************!*\
+ !*** ./src/widgets/load-spinner.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ LoadSpinner; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+class LoadSpinner extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ const className = 'load-spinner-box' + (this.props.large ? ' large' : '') + (this.props.clear ? ' clear' : '') + (this.props.centered ? ' centered' : '');
+ return this.props.show ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
+ className: className,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
+ className: "loader-spinner"
+ }, void 0, false)
+ }, void 0, false) : null;
+ }
+}
+
+/***/ }),
+
+/***/ "./src/widgets/menu-cancel.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/menu-cancel.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ MenuCancel; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+class MenuCancel extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onCancel();
+ },
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "close"
+ }, void 0, false)
+ }, void 0, false);
+ }
+}
+
+/***/ }),
+
+/***/ "./src/widgets/menu-contacts.jsx":
+/*!***************************************!*\
+ !*** ./src/widgets/menu-contacts.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ MenuContacts; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+class MenuContacts extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onNewTopic();
+ },
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "chat"
+ }, void 0, false)
+ }, void 0, false), "\xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onSettings();
+ },
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "settings"
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/menu-start.jsx":
+/*!************************************!*\
+ !*** ./src/widgets/menu-start.jsx ***!
+ \************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ MenuStart; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+class MenuStart extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onSignUp();
+ },
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "person_add"
+ }, void 0, false)
+ }, void 0, false), "\xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("a", {
+ href: "#",
+ onClick: e => {
+ e.preventDefault();
+ this.props.onSettings();
+ },
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "settings"
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/new-topic-by-id.jsx":
+/*!*****************************************!*\
+ !*** ./src/widgets/new-topic-by-id.jsx ***!
+ \*****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var qrcodejs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! qrcodejs */ "qrcodejs");
+/* harmony import */ var qrcodejs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(qrcodejs__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config */ "./src/config.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_2__.defineMessages)({
+ invalid_id: {
+ id: 'error_invalid_id',
+ defaultMessage: 'Invalid ID',
+ description: 'Error message'
+ }
+});
+class NewTopicById extends (react__WEBPACK_IMPORTED_MODULE_1___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.qrCodeRef = react__WEBPACK_IMPORTED_MODULE_1___default().createRef();
+ this.state = {
+ groupId: ''
+ };
+ this.handleChange = this.handleChange.bind(this);
+ this.handleKeyPress = this.handleKeyPress.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ }
+ componentDidMount() {
+ new (qrcodejs__WEBPACK_IMPORTED_MODULE_0___default())(this.qrCodeRef.current, {
+ text: this.props.myURI,
+ width: _config__WEBPACK_IMPORTED_MODULE_3__.QRCODE_SIZE,
+ height: _config__WEBPACK_IMPORTED_MODULE_3__.QRCODE_SIZE
+ });
+ }
+ handleChange(e) {
+ this.setState({
+ groupId: e.target.value
+ });
+ }
+ handleKeyPress(e) {
+ if (e.key === 'Enter') {
+ this.handleSubmit(e);
+ }
+ }
+ handleSubmit(e) {
+ e.preventDefault();
+ if (this.state.groupId) {
+ const name = this.state.groupId.trim();
+ const prefix = name.substring(0, 3);
+ if (name.length > 3 && ['usr', 'grp', 'chn'].includes(prefix)) {
+ this.props.onSubmit(name);
+ } else {
+ this.props.onError(this.props.intl.formatMessage(messages.invalid_id), 'err');
+ }
+ }
+ }
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_2__.FormattedMessage, {
+ id: "group_user_id_prompt",
+ defaultMessage: "Group or User ID",
+ description: "Prompt for entering user or group ID",
+ children: prompt => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("input", {
+ type: "text",
+ placeholder: prompt,
+ value: this.state.groupId,
+ onChange: this.handleChange,
+ onKeyDown: this.handleKeyPress,
+ required: true,
+ autoFocus: true
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "dialog-buttons",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("button", {
+ className: "primary",
+ onClick: this.handleSubmit,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_2__.FormattedMessage, {
+ id: "button_subscribe",
+ defaultMessage: "Subscribe",
+ description: "Button [Subscribe]"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("br", {}, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "panel-form-column",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
+ className: "small",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_2__.FormattedMessage, {
+ id: "label_scan_id",
+ defaultMessage: "Scan my ID:",
+ description: "Label [Scan my ID:]"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "qr-code",
+ ref: this.qrCodeRef
+ }, void 0, false)]
+ }, void 0, true)]
+ }, void 0, true);
+ }
+}
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_2__.injectIntl)(NewTopicById));
+
+/***/ }),
+
+/***/ "./src/widgets/new-topic-group.jsx":
+/*!*****************************************!*\
+ !*** ./src/widgets/new-topic-group.jsx ***!
+ \*****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ NewTopicGroup; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./avatar-crop.jsx */ "./src/widgets/avatar-crop.jsx");
+/* harmony import */ var _avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./avatar-upload.jsx */ "./src/widgets/avatar-upload.jsx");
+/* harmony import */ var _checkbox_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./checkbox.jsx */ "./src/widgets/checkbox.jsx");
+/* harmony import */ var _tag_manager_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tag-manager.jsx */ "./src/widgets/tag-manager.jsx");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+
+
+
+
+
+class NewTopicGroup extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.fullName = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
+ this.state = {
+ fullName: '',
+ private: '',
+ description: '',
+ imageUrl: null,
+ tags: [],
+ isChannel: false,
+ newAvatar: null,
+ newAvatarMime: null
+ };
+ this.handleFieldEdit = this.handleFieldEdit.bind(this);
+ this.handleImageChanged = this.handleImageChanged.bind(this);
+ this.handleAvatarCropped = this.handleAvatarCropped.bind(this);
+ this.handleAvatarCropCancel = this.handleAvatarCropCancel.bind(this);
+ this.uploadAvatar = this.uploadAvatar.bind(this);
+ this.handleTagsChanged = this.handleTagsChanged.bind(this);
+ this.handleChannelToggle = this.handleChannelToggle.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ }
+ componentDidMount() {}
+ handleFieldEdit(name, e) {
+ this.setState({
+ [name]: e.target.value || ''
+ });
+ }
+ handleImageChanged(mime, img) {
+ this.setState({
+ newAvatar: img,
+ newAvatarMime: mime
+ });
+ }
+ handleAvatarCropped(mime, blob, width, height) {
+ const url = blob ? URL.createObjectURL(blob) : null;
+ this.setState({
+ imageUrl: url,
+ newAvatar: null,
+ newAvatarMime: null
+ });
+ if (blob) {
+ this.uploadAvatar(mime, blob, width, height);
+ }
+ }
+ handleAvatarCropCancel() {
+ this.setState({
+ newAvatar: null,
+ newAvatarMime: null
+ });
+ }
+ uploadAvatar(mime, blob, width, height) {
+ const readyToUpload = image => {
+ let {
+ mime,
+ blob
+ } = image;
+ if (blob.size > _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_AVATAR_BYTES) {
+ const uploader = this.props.tinode.getLargeFileHelper();
+ uploader.upload(blob).then(url => this.setState({
+ imageUrl: url
+ })).catch(err => this.props.onError(err.message, 'err'));
+ } else {
+ (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_7__.blobToBase64)(blob).then(b64 => this.setState({
+ imageUrl: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_7__.makeImageUrl)({
+ data: b64.bits,
+ type: mime
+ })
+ }));
+ }
+ };
+ if (width > _config_js__WEBPACK_IMPORTED_MODULE_6__.AVATAR_SIZE || height > _config_js__WEBPACK_IMPORTED_MODULE_6__.AVATAR_SIZE || width != height) {
+ (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_7__.imageScaled)(blob, _config_js__WEBPACK_IMPORTED_MODULE_6__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_6__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_EXTERN_ATTACHMENT_SIZE, true).then(scaled => readyToUpload(scaled)).catch(err => this.props.onError(err.message, 'err'));
+ } else {
+ readyToUpload({
+ mime: mime,
+ blob: blob,
+ width: width,
+ height: height
+ });
+ }
+ }
+ handleTagsChanged(tags) {
+ this.setState({
+ tags: tags
+ });
+ }
+ handleChannelToggle() {
+ this.setState({
+ isChannel: !this.state.isChannel
+ });
+ }
+ handleSubmit(e) {
+ e.preventDefault();
+ const fn = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__.truncateString)(this.state.fullName.trim(), _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_TITLE_LENGTH);
+ const comment = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__.truncateString)(this.state.private.trim(), _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_TITLE_LENGTH);
+ const description = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__.truncateString)(this.state.description.trim(), _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_TOPIC_DESCRIPTION_LENGTH);
+ if (fn) {
+ this.props.onSubmit(fn, description, this.state.imageUrl, comment, this.state.tags, this.state.isChannel);
+ }
+ }
+ render() {
+ if (this.state.newAvatar) {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(_avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
+ avatar: this.state.newAvatar,
+ mime: this.state.newAvatarMime,
+ onSubmit: this.handleAvatarCropped,
+ onCancel: this.handleAvatarCropCancel,
+ onError: this.props.onError
+ }, void 0, false);
+ }
+ let submitClasses = 'primary';
+ if (this.props.disabled) {
+ submitClasses += ' disabled';
+ }
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("form", {
+ className: "panel-form",
+ onSubmit: this.handleSubmit,
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("div", {
+ className: "panel-form-column",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("center", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
+ tinode: this.props.tinode,
+ avatar: this.state.imageUrl,
+ onError: this.props.onError,
+ onImageUpdated: this.handleImageChanged
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("div", {
+ className: "group",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("label", {
+ className: "small",
+ htmlFor: "new-topic-fn",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_topic_name",
+ defaultMessage: "Name",
+ description: "Label for editing topic name"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "topic_name_editing_placeholder",
+ defaultMessage: "Freeform name of the group",
+ description: "Prompt for entering topic name",
+ children: placeholder => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("input", {
+ type: "text",
+ id: "new-topic-fn",
+ placeholder: placeholder,
+ ref: this.fullName,
+ value: this.state.fullName,
+ onChange: this.handleFieldEdit.bind(this, 'fullName'),
+ autoFocus: true,
+ required: true,
+ tabIndex: 0
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("div", {
+ className: "group",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("label", {
+ className: "small",
+ htmlFor: "new-topic-priv",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_private",
+ defaultMessage: "Private comment",
+ description: "Label for editing 'private'"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "private_editing_placeholder",
+ defaultMessage: "Visible to you only",
+ description: "Placeholder for editing 'private'",
+ children: placeholder => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("input", {
+ type: "text",
+ id: "new-topic-priv",
+ placeholder: placeholder,
+ value: this.state.private,
+ onChange: this.handleFieldEdit.bind(this, 'private'),
+ tabIndex: 1
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("div", {
+ className: "group",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("label", {
+ className: "small",
+ htmlFor: "new-topic-desc",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_description",
+ defaultMessage: "Description",
+ description: "Label for description of user or topic"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "description_editing_placeholder",
+ defaultMessage: "Description (optional)",
+ description: "Placeholder for editing topic description",
+ children: placeholder => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("input", {
+ type: "text",
+ id: "new-topic-desc",
+ placeholder: placeholder,
+ value: this.state.description,
+ onChange: this.handleFieldEdit.bind(this, 'description'),
+ tabIndex: 2
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(_checkbox_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
+ checked: this.state.isChannel,
+ tabIndex: 3,
+ onChange: this.handleChannelToggle
+ }, void 0, false), "\xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("label", {
+ onClick: this.handleChannelToggle,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "channel_prompt",
+ defaultMessage: "This is a channel",
+ description: "Checkbox label when creating a channel"
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "title_tag_manager",
+ defaultMessage: "Tags (search & discovery)",
+ description: "Section title for TagManager",
+ children: title => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(_tag_manager_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
+ tinode: this.props.tinode,
+ tags: this.state.tags,
+ activated: true,
+ onTagsChanged: this.handleTagsChanged,
+ tabIndex: 4,
+ title: title
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("div", {
+ className: "dialog-buttons",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)("button", {
+ className: submitClasses,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_create",
+ defaultMessage: "Create",
+ description: "Button [Create]"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/search-contacts.jsx":
+/*!*****************************************!*\
+ !*** ./src/widgets/search-contacts.jsx ***!
+ \*****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ SearchContacts; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+class SearchContacts extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ edited: false,
+ search: this.props.initialQuery || ''
+ };
+ this.handleSearchChange = this.handleSearchChange.bind(this);
+ this.handleSearch = this.handleSearch.bind(this);
+ this.handleClear = this.handleClear.bind(this);
+ this.handleKeyDown = this.handleKeyDown.bind(this);
+ }
+ componentWillUnmount() {
+ if (this.state.edited) {
+ this.setState({
+ search: '',
+ edited: false
+ });
+ this.props.onSearchContacts(tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.DEL_CHAR);
+ }
+ }
+ handleSearchChange(e) {
+ this.setState({
+ search: e.target.value
+ });
+ }
+ handleSearch(e) {
+ e.preventDefault();
+ const query = this.state.search.trim();
+ this.setState({
+ edited: query.length > 0
+ });
+ this.props.onSearchContacts(query.length > 0 ? query : tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.DEL_CHAR);
+ }
+ handleClear(e) {
+ e.preventDefault();
+ if (this.state.edited) {
+ this.props.onSearchContacts(tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.DEL_CHAR);
+ }
+ this.setState({
+ search: '',
+ edited: false
+ });
+ }
+ handleKeyDown(e) {
+ if (e.key === 'Enter') {
+ this.handleSearch(e);
+ } else if (e.key === 'Escape') {
+ e.stopPropagation();
+ this.handleClear(e);
+ }
+ }
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("i", {
+ className: "material-icons search",
+ children: "search"
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("input", {
+ className: "search",
+ type: "text",
+ placeholder: this.props.placeholder,
+ value: this.state.search,
+ onChange: this.handleSearchChange,
+ onKeyDown: this.handleKeyDown,
+ required: true,
+ autoFocus: true
+ }, void 0, false), this.state.search ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("a", {
+ href: "#",
+ onClick: this.handleClear,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "highlight_off"
+ }, void 0, false)
+ }, void 0, false) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("span", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "\xA0"
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true)
+ }, void 0, false);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/side-navbar.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/side-navbar.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ SideNavbar; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
+/* harmony import */ var _button_back_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./button-back.jsx */ "./src/widgets/button-back.jsx");
+/* harmony import */ var _contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact-badges.jsx */ "./src/widgets/contact-badges.jsx");
+/* harmony import */ var _menu_contacts_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./menu-contacts.jsx */ "./src/widgets/menu-contacts.jsx");
+/* harmony import */ var _menu_start_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./menu-start.jsx */ "./src/widgets/menu-start.jsx");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+
+
+
+class SideNavbar extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ const icon_badges = [];
+ if (this.props.trustedBadges) {
+ this.props.trustedBadges.forEach(b => {
+ icon_badges.push({
+ icon: b,
+ color: 'badge-inv'
+ });
+ });
+ }
+ let avatar = null;
+ if (this.props.tinode) {
+ avatar = this.props.tinode.authorizeURL((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_6__.sanitizeUrlForMime)(this.props.avatar, 'image'));
+ }
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("div", {
+ id: "side-caption-panel",
+ className: "caption-panel",
+ children: [this.props.onCancel ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(_button_back_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
+ onBack: this.props.onCancel
+ }, void 0, false) : null, avatar ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("div", {
+ id: "self-avatar",
+ className: "avatar-box",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
+ authorizeURL: this.props.tinode.authorizeURL,
+ avatar: avatar,
+ topic: this.props.myUserId,
+ title: this.props.title
+ }, void 0, false)
+ }, void 0, false) : null, (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)("div", {
+ id: "sidepanel-title",
+ className: "panel-title",
+ children: [this.props.title, (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
+ badges: icon_badges
+ }, void 0, false)]
+ }, void 0, true), this.props.state === 'login' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(_menu_start_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
+ onSignUp: this.props.onSignUp,
+ onSettings: this.props.onSettings
+ }, void 0, false) : this.props.state === 'contacts' ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxDEV)(_menu_contacts_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
+ onNewTopic: this.props.onNewTopic,
+ onSettings: this.props.onSettings
+ }, void 0, false) : null]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/tag-manager.jsx":
+/*!*************************************!*\
+ !*** ./src/widgets/tag-manager.jsx ***!
+ \*************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ TagManager; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var _chip_input_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chip-input.jsx */ "./src/widgets/chip-input.jsx");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_3__);
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+
+
+class TagManager extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ this.state = {
+ tags: this.props.tags || [],
+ alias: tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.tagByPrefix(this.props.tags, tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.TAG_ALIAS) || '',
+ tagInput: '',
+ activated: this.props.activated
+ };
+ this.handleTagInput = this.handleTagInput.bind(this);
+ this.handleAddTag = this.handleAddTag.bind(this);
+ this.handleRemoveTag = this.handleRemoveTag.bind(this);
+ this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleCancel = this.handleCancel.bind(this);
+ }
+ static getDerivedStateFromProps(nextProps, prevState) {
+ const tags = nextProps.tags || [];
+ if (!(0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_5__.arrayEqual)(tags, prevState.tags) && !prevState.activated) {
+ return {
+ tags: tags || [],
+ alias: tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.tagByPrefix(tags, tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.TAG_ALIAS) || ''
+ };
+ }
+ return null;
+ }
+ handleTagInput(text) {
+ this.setState({
+ tagInput: text
+ });
+ if (text.length > 0) {
+ const last = text[text.length - 1];
+ if (text[0] == '"') {
+ if (text.length > 1 && last == '"') {
+ this.handleAddTag(text.substring(1, text.length - 1));
+ }
+ } else if (last == ',' || last == ' ' || last == ';' || last == '"') {
+ this.handleAddTag(text.substring(0, text.length - 1).trim());
+ }
+ }
+ }
+ handleAddTag(tag) {
+ const maxTagCount = this.props.tinode.getServerParam(tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.MAX_TAG_COUNT, _config_js__WEBPACK_IMPORTED_MODULE_4__.MAX_TAG_COUNT);
+ if (tag.length > 0 && this.state.tags.length < maxTagCount) {
+ const tags = this.state.tags.slice(0);
+ tags.push(tag);
+ this.setState({
+ tags: tags,
+ tagInput: ''
+ });
+ if (this.props.onTagsChanged) {
+ this.props.onTagsChanged(tags);
+ }
+ return tags;
+ }
+ return this.state.tags;
+ }
+ handleRemoveTag(tag, index) {
+ const tags = this.state.tags.slice(0);
+ tags.splice(index, 1);
+ this.setState({
+ tags: tags
+ });
+ if (this.props.onTagsChanged) {
+ this.props.onTagsChanged(tags);
+ }
+ }
+ handleSubmit() {
+ let tags = this.handleAddTag(this.state.tagInput.trim());
+ tags = tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.setUniqueTag(tags, this.state.alias);
+ this.props.onSubmit(tags);
+ this.setState({
+ activated: false,
+ tags: this.props.tags || []
+ });
+ }
+ handleCancel() {
+ this.setState({
+ activated: false,
+ tagInput: '',
+ tags: this.props.tags || []
+ });
+ if (this.props.onCancel) {
+ this.props.onCancel();
+ }
+ }
+ render() {
+ const minTagLength = this.props.tinode.getServerParam(tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.MIN_TAG_LENGTH, _config_js__WEBPACK_IMPORTED_MODULE_4__.MIN_TAG_LENGTH);
+ const maxTagLength = this.props.tinode.getServerParam(tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.MAX_TAG_LENGTH, _config_js__WEBPACK_IMPORTED_MODULE_4__.MAX_TAG_LENGTH);
+ let tags = [];
+ if (this.state.activated) {
+ this.state.tags.forEach(tag => {
+ if (tag != this.state.alias) {
+ tags.push({
+ user: tag,
+ invalid: tag.length < minTagLength || tag.length > maxTagLength
+ });
+ }
+ });
+ } else {
+ this.state.tags.forEach(tag => {
+ if (tag != this.state.alias) {
+ tags.push((0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("span", {
+ className: "badge",
+ children: tag
+ }, tags.length, false));
+ }
+ });
+ if (tags.length == 0) {
+ tags = (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("i", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "tags_not_found",
+ defaultMessage: "No tags defined. Add some.",
+ description: ""
+ }, void 0, false)
+ }, void 0, false);
+ }
+ }
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("div", {
+ className: "panel-form-column",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("div", {
+ className: "panel-form-row",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("label", {
+ className: "small",
+ children: this.props.title
+ }, void 0, false)
+ }, void 0, false), this.state.activated ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("div", {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "tags_editor_no_tags",
+ defaultMessage: "Add some tags",
+ description: "Tag editor prompt when no tags are found.",
+ children: add_tags_prompt => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)(_chip_input_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
+ tinode: this.props.tinode,
+ chips: tags,
+ avatarDisabled: true,
+ prompt: add_tags_prompt,
+ tabIndex: this.props.tabIndex,
+ onEnter: this.handleAddTag,
+ onFocusLost: this.handleAddTag,
+ onCancel: this.handleCancel,
+ onChipRemoved: this.handleRemoveTag,
+ filterFunc: this.handleTagInput
+ }, void 0, false)
+ }, void 0, false), this.props.onSubmit || this.props.onCancel ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("div", {
+ id: "tag-manager-buttons",
+ className: "dialog-buttons panel-form-row",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("button", {
+ className: "outline",
+ onClick: this.handleCancel,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_cancel",
+ defaultMessage: "Cancel",
+ description: "Button [Cancel]"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("button", {
+ className: "primary",
+ onClick: this.handleSubmit,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "button_ok",
+ defaultMessage: "OK",
+ description: "Button [OK]"
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true) : null]
+ }, void 0, true) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("div", {
+ className: "quoted",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("a", {
+ href: "#",
+ className: "flat-button",
+ onClick: e => {
+ e.preventDefault();
+ this.setState({
+ activated: true
+ });
+ },
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)("i", {
+ className: "material-icons",
+ children: "edit"
+ }, void 0, false), " \xA0", (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "title_manage_tags",
+ defaultMessage: "Manage",
+ description: "Section title for the list of tags"
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment, {
+ children: tags
+ }, void 0, false)]
+ }, void 0, true)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/the-card-mini.jsx":
+/*!***************************************!*\
+ !*** ./src/widgets/the-card-mini.jsx ***!
+ \***************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ unknown_name: {
+ id: 'unknown_name',
+ defaultMessage: 'Unknown',
+ description: 'Name to show when the name is missing'
+ }
+});
+class TheCardMini extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.handleDownload = this.handleDownload.bind(this);
+ this.handleMessage = this.handleMessage.bind(this);
+ }
+ handleDownload(e) {
+ e.preventDefault();
+ try {
+ const vcard = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.exportVCard(this.props.content);
+ const blob = new Blob([vcard], {
+ type: 'text/vcard'
+ });
+ const url = URL.createObjectURL(blob);
+ const a = document.createElement('a');
+ a.style.display = 'none';
+ a.href = url;
+ a.download = (this.props.content.fn || 'contact') + '.vcf';
+ document.body.appendChild(a);
+ a.click();
+ window.URL.revokeObjectURL(url);
+ document.body.removeChild(a);
+ } catch (err) {
+ console.error("Failed to download vcard", err);
+ if (this.props.onError) {
+ this.props.onError("Failed to download vcard", 'err');
+ }
+ }
+ }
+ handleMessage(e) {}
+ render() {
+ const card = this.props.content;
+ if (!card) {
+ return null;
+ }
+ const uid = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getFirstTinodeID(card);
+ const contacts = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getEmails(card).concat(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getPhones(card));
+ const org = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getOrg(card);
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "contact-card",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "contact-body",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "avatar-box",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
+ authorizeURL: this.props.authorizeURL,
+ topic: uid || 'usr123XXX',
+ avatar: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getPhotoUrl(card) || true,
+ title: card.fn
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "name-box",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "name",
+ children: card.fn || (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ ...messages.unknown_name
+ }, void 0, false)
+ }, void 0, false), org && (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "org",
+ children: org
+ }, void 0, false)]
+ }, void 0, true)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "contact-actions",
+ children: [uid ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.Fragment, {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("a", {
+ className: "flat-button",
+ "data-val": uid,
+ onClick: this.props.onChatClick,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "chat_now",
+ defaultMessage: "Chat",
+ description: "Label for message button in contact card"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "divider"
+ }, void 0, false)]
+ }, void 0, true) : contacts.length > 0 ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.Fragment, {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("a", {
+ className: "flat-button",
+ "data-val": contacts.join(','),
+ onClick: this.props.onFindClick,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "find_user",
+ defaultMessage: "Find",
+ description: "Label for search button in contact card"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
+ className: "divider"
+ }, void 0, false)]
+ }, void 0, true) : null, (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("a", {
+ className: "flat-button",
+ onClick: this.handleDownload,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "save_action",
+ defaultMessage: "Save",
+ description: "Label for Save button"
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true)]
+ }, void 0, true);
+ }
+}
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(TheCardMini));
+
+/***/ }),
+
+/***/ "./src/widgets/topic-desc-edit.jsx":
+/*!*****************************************!*\
+ !*** ./src/widgets/topic-desc-edit.jsx ***!
+ \*****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
+/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
+/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var _avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./avatar-crop.jsx */ "./src/widgets/avatar-crop.jsx");
+/* harmony import */ var _avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./avatar-upload.jsx */ "./src/widgets/avatar-upload.jsx");
+/* harmony import */ var _in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./in-place-edit.jsx */ "./src/widgets/in-place-edit.jsx");
+/* harmony import */ var _tag_manager_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tag-manager.jsx */ "./src/widgets/tag-manager.jsx");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
+/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
+/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
+/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+
+
+
+
+
+
+
+
+
+const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
+ alias_invalid: {
+ id: 'alias_invalid',
+ defaultMessage: '(invalid)',
+ description: 'Error message for invalid alias'
+ },
+ alias_already_taken: {
+ id: 'alias_already_taken',
+ defaultMessage: '(already taken)',
+ description: 'Error message for alias already taken'
+ },
+ self_topic_name: {
+ id: 'self_topic_name',
+ defaultMessage: 'Saved messages',
+ description: 'Name of self topic for UI'
+ },
+ self_topic_comment: {
+ id: 'self_topic_comment',
+ defaultMessage: 'Notes, messages, links, files saved for posterity',
+ description: 'Comment for self topic for UI'
+ }
+});
+const ALIAS_AVAILABILITY_CHECK_DELAY = 1000;
+class TopicDescEdit extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
+ constructor(props) {
+ super(props);
+ const topic = this.props.tinode.getTopic(this.props.topic);
+ const acs = topic.getAccessMode();
+ const isSelf = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isSelfTopicName(this.props.topic);
+ this.state = {
+ isMe: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isMeTopicName(this.props.topic),
+ isSelf: isSelf,
+ owner: acs && acs.isOwner(),
+ fullName: topic.public ? topic.public.fn : isSelf ? this.props.intl.formatMessage(messages.self_topic_name) : null,
+ private: topic.private ? topic.private.comment : null,
+ description: topic.public ? topic.public.note : isSelf ? this.props.intl.formatMessage(messages.self_topic_comment) : null,
+ avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.makeImageUrl)(topic.public ? topic.public.photo : null),
+ tags: topic.tags() || [],
+ newAvatar: null,
+ newAvatarMime: null,
+ aliasError: ''
+ };
+ this.previousOnTags = null;
+ this.aliasCheckTimer = null;
+ this.aliasCheckPromise = null;
+ this.tnNewTags = this.tnNewTags.bind(this);
+ this.handleFullNameUpdate = this.handleFullNameUpdate.bind(this);
+ this.handleImageUpdated = this.handleImageUpdated.bind(this);
+ this.handleAvatarCropped = this.handleAvatarCropped.bind(this);
+ this.handleAvatarCropCancel = this.handleAvatarCropCancel.bind(this);
+ this.uploadAvatar = this.uploadAvatar.bind(this);
+ this.handlePrivateUpdate = this.handlePrivateUpdate.bind(this);
+ this.handleAliasUpdate = this.handleAliasUpdate.bind(this);
+ this.handleDescriptionUpdate = this.handleDescriptionUpdate.bind(this);
+ this.handleTagsUpdated = this.handleTagsUpdated.bind(this);
+ this.validateAlias = this.validateAlias.bind(this);
+ this.cancelValidator = this.cancelValidator.bind(this);
+ }
+ componentDidMount() {
+ const topic = this.props.tinode.getTopic(this.props.topic);
+ this.previousOnTags = topic.onTagsUpdated;
+ topic.onTagsUpdated = this.tnNewTags;
+ }
+ componentWillUnmount() {
+ const topic = this.props.tinode.getTopic(this.props.topic);
+ topic.onTagsUpdated = this.previousOnTags;
+ this.cancelValidator();
+ }
+ tnNewTags(tags) {
+ this.setState({
+ tags: tags
+ });
+ }
+ handleFullNameUpdate(fn) {
+ fn = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_9__.truncateString)(fn.trim(), _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_TITLE_LENGTH);
+ if (fn && this.state.fullName !== fn) {
+ this.setState({
+ fullName: fn
+ });
+ this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(fn, null));
+ }
+ }
+ handlePrivateUpdate(comment) {
+ comment = comment.trim().substring(0, _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_TITLE_LENGTH);
+ if (this.state.private !== comment) {
+ this.setState({
+ private: comment
+ });
+ this.props.onUpdateTopicDesc(this.props.topic, null, comment || tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.DEL_CHAR);
+ }
+ }
+ handleDescriptionUpdate(desc) {
+ desc = desc.trim().substring(0, _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_TOPIC_DESCRIPTION_LENGTH);
+ if (desc) {
+ this.setState({
+ description: desc
+ });
+ this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(null, null, null, desc));
+ }
+ }
+ handleImageUpdated(mime, img) {
+ this.setState({
+ newAvatar: img,
+ newAvatarMime: mime
+ });
+ if (!img) {
+ this.setState({
+ avatar: null
+ });
+ this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(null, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.DEL_CHAR));
+ }
+ }
+ handleAvatarCropped(mime, blob, width, height) {
+ const url = blob ? URL.createObjectURL(blob) : null;
+ this.setState({
+ avatar: url,
+ newAvatar: null,
+ newAvatarMime: null
+ });
+ if (blob) {
+ this.uploadAvatar(mime, blob, width, height);
+ }
+ }
+ uploadAvatar(mime, blob, width, height) {
+ const readyToUpload = image => {
+ let {
+ mime,
+ blob
+ } = image;
+ if (blob.size > _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_AVATAR_BYTES) {
+ const uploader = this.props.tinode.getLargeFileHelper();
+ uploader.upload(blob).then(url => this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(null, url))).catch(err => this.props.onError(err.message, 'err'));
+ } else {
+ (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.blobToBase64)(blob).then(b64 => {
+ const du = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.makeImageUrl)({
+ data: b64.bits,
+ type: mime
+ });
+ this.setState({
+ source: du
+ });
+ this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(null, du));
+ });
+ }
+ };
+ if (width > _config_js__WEBPACK_IMPORTED_MODULE_7__.AVATAR_SIZE || height > _config_js__WEBPACK_IMPORTED_MODULE_7__.AVATAR_SIZE || width != height) {
+ (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.imageScaled)(blob, _config_js__WEBPACK_IMPORTED_MODULE_7__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_7__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_EXTERN_ATTACHMENT_SIZE, true).then(scaled => readyToUpload(scaled)).catch(err => this.props.onError(err.message, 'err'));
+ } else {
+ readyToUpload({
+ mime: mime,
+ blob: blob,
+ width: width,
+ height: height
+ });
+ }
+ }
+ handleAvatarCropCancel() {
+ this.setState({
+ newAvatar: null,
+ newAvatarMime: null
+ });
+ }
+ handleAliasUpdate(alias) {
+ alias = (alias || '').trim();
+ const tags = alias ? tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.setUniqueTag(this.state.tags, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_ALIAS + alias.toLowerCase()) : tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.clearTagPrefix(this.state.tags, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_ALIAS);
+ this.handleTagsUpdated(tags);
+ }
+ validateAlias(alias) {
+ this.cancelValidator();
+ alias = alias.trim();
+ if (!alias) {
+ this.setState({
+ aliasError: ''
+ });
+ return true;
+ }
+ const valid = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isValidTagValue(alias);
+ if (!valid) {
+ this.setState({
+ aliasError: this.props.intl.formatMessage(messages.alias_invalid)
+ });
+ return false;
+ }
+ this.setState({
+ aliasError: ''
+ });
+ const fnd = this.props.tinode.getFndTopic();
+ if (!fnd) {
+ this.setState({
+ aliasError: ''
+ });
+ return true;
+ }
+ this.aliasCheckPromise = {};
+ const validationPromise = new Promise((resolve, reject) => {
+ this.aliasCheckPromise.resolve = resolve;
+ this.aliasCheckPromise.reject = reject;
+ });
+ this.aliasCheckTimer = setTimeout(_ => {
+ this.aliasCheckTimer = null;
+ fnd.checkTagUniqueness(`${tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_ALIAS}${alias}`, this.props.topic).then(ok => {
+ this.aliasCheckPromise.resolve(ok);
+ this.setState({
+ aliasError: ok ? '' : this.props.intl.formatMessage(messages.alias_already_taken)
+ });
+ }).catch(err => {
+ this.aliasCheckPromise.reject(err);
+ this.setState({
+ aliasError: err.message
+ });
+ });
+ }, ALIAS_AVAILABILITY_CHECK_DELAY);
+ return validationPromise;
+ }
+ cancelValidator() {
+ if (this.aliasCheckTimer) {
+ clearTimeout(this.aliasCheckTimer);
+ this.aliasCheckTimer = null;
+ this.aliasCheckPromise.reject(null);
+ }
+ }
+ handleTagsUpdated(tags) {
+ if ((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.arrayEqual)(this.state.tags.slice(0), tags.slice(0))) {
+ return;
+ }
+ this.props.onUpdateTags(tags);
+ }
+ render() {
+ if (this.state.newAvatar) {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(_avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
+ avatar: this.state.newAvatar,
+ mime: this.state.newAvatarMime,
+ onSubmit: this.handleAvatarCropped,
+ onCancel: this.handleAvatarCropCancel,
+ onError: this.props.onError
+ }, void 0, false);
+ }
+ const editable = this.state.isMe || this.state.owner && !this.state.isSelf;
+ let alias = this.state.tags && this.state.tags.find(t => t.startsWith('alias:'));
+ if (alias) {
+ alias = alias.substring(6);
+ }
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.Fragment, {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ className: "panel-form-column",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("center", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
+ tinode: this.props.tinode,
+ avatar: this.state.avatar,
+ readOnly: !editable,
+ uid: this.props.topic,
+ title: this.state.fullName,
+ onImageUpdated: this.handleImageUpdated,
+ onError: this.props.onError
+ }, void 0, false)
+ }, void 0, false), this.state.isMe ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ className: "group",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("label", {
+ className: "small",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_your_name",
+ defaultMessage: "Your name",
+ description: "Label for full name editing"
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "full_name_prompt",
+ defaultMessage: "Full name, e.g. John Doe",
+ description: "Input placeholder for person's full name",
+ children: full_name_placeholder => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
+ placeholder: full_name_placeholder,
+ value: this.state.fullName,
+ required: true,
+ onFinished: this.handleFullNameUpdate
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true) : (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.Fragment, {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ className: "group",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("label", {
+ className: "small",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_topic_name",
+ defaultMessage: "Name",
+ description: "Label for editing topic name"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "topic_name_editing_placeholder",
+ defaultMessage: "Freeform name of the group",
+ description: "Prompt for entering topic name",
+ children: group_name_placeholder => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
+ placeholder: group_name_placeholder,
+ readOnly: !editable,
+ value: this.state.fullName,
+ required: true,
+ maxLength: 32,
+ onFinished: this.handleFullNameUpdate
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ className: "group",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("label", {
+ className: "small",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_private",
+ defaultMessage: "Private comment",
+ description: "Label for editing 'private'"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "private_editing_placeholder",
+ defaultMessage: "Visible to you only",
+ description: "Placeholder for editing 'private'",
+ children: private_placeholder => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
+ placeholder: private_placeholder,
+ value: this.state.private,
+ onFinished: this.handlePrivateUpdate
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true)]
+ }, void 0, true), editable || alias ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ className: "group",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("label", {
+ className: 'small ' + (this.state.aliasError ? 'invalid' : ''),
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_alias_edit",
+ defaultMessage: "Alias",
+ description: "Label for editing user or topic alias"
+ }, void 0, false), " ", this.state.aliasError]
+ }, void 0, true)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "alias_editing_placeholder",
+ defaultMessage: "Alias (optional)",
+ description: "Placeholder for editing user or topic alias",
+ children: private_placeholder => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
+ placeholder: private_placeholder,
+ readOnly: !editable,
+ value: alias,
+ validator: this.validateAlias,
+ iconLeft: "alternate_email",
+ maxLength: 24,
+ spellCheck: false,
+ onFinished: this.handleAliasUpdate
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true) : null, editable || this.state.description ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ className: "group",
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("label", {
+ className: "small",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "label_description",
+ defaultMessage: "Description",
+ description: "Label for description of user or topic"
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "description_editing_placeholder",
+ defaultMessage: "Description (optional)",
+ description: "Placeholder for editing topic description",
+ children: private_placeholder => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
+ placeholder: private_placeholder,
+ readOnly: !editable,
+ value: this.state.description,
+ multiline: 2,
+ onFinished: this.handleDescriptionUpdate
+ }, void 0, false)
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true) : null]
+ }, void 0, true), editable && !this.state.isMe ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.Fragment, {
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)("div", {
+ className: "hr"
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
+ id: "title_tag_manager",
+ defaultMessage: "Tags (search & discovery)",
+ description: "Section title for TagManager",
+ children: title_tag_manager => (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxDEV)(_tag_manager_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], {
+ tinode: this.props.tinode,
+ title: title_tag_manager,
+ activated: false,
+ tags: this.state.tags,
+ onSubmit: this.handleTagsUpdated
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true) : null]
+ }, void 0, true);
+ }
+}
+;
+/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(TopicDescEdit));
+
+/***/ }),
+
+/***/ "./src/widgets/unread-badge.jsx":
+/*!**************************************!*\
+ !*** ./src/widgets/unread-badge.jsx ***!
+ \**************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ UnreadBadge; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+class UnreadBadge extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ render() {
+ return this.props.count > 0 ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("span", {
+ className: "unread",
+ children: this.props.count > 9 ? "9+" : this.props.count
+ }, void 0, false) : null;
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/uploading-image.jsx":
+/*!*****************************************!*\
+ !*** ./src/widgets/uploading-image.jsx ***!
+ \*****************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ UploadingImage; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _file_progress_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./file-progress.jsx */ "./src/widgets/file-progress.jsx");
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+
+class UploadingImage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ }
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "inline-image",
+ children: [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', this.props), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)("div", {
+ className: "rounded-container",
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxDEV)(_file_progress_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
+ progress: this.props.progress,
+ onCancel: this.props.onCancelUpload
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+;
+
+/***/ }),
+
+/***/ "./src/widgets/visible-password.jsx":
+/*!******************************************!*\
+ !*** ./src/widgets/visible-password.jsx ***!
+ \******************************************/
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": function() { return /* binding */ VisiblePassword; }
+/* harmony export */ });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
+
+
+class VisiblePassword extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
+ constructor(props) {
+ super(props);
+ this.inputRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
+ this.state = {
+ value: this.props.value || '',
+ visible: false
+ };
+ this.handleVisibility = this.handleVisibility.bind(this);
+ this.handeTextChange = this.handeTextChange.bind(this);
+ this.handleKeyDown = this.handleKeyDown.bind(this);
+ this.handleEditingFinished = this.handleEditingFinished.bind(this);
+ }
+ componentDidMount() {
+ if (this.props.autoFocus) {
+ this.inputRef.current.focus();
+ }
+ }
+ handeTextChange(e) {
+ this.setState({
+ value: e.target.value
+ });
+ if (this.props.onChange) {
+ this.props.onChange(e);
+ }
+ }
+ handleVisibility(e) {
+ e.preventDefault();
+ this.setState({
+ visible: !this.state.visible
+ });
+ }
+ handleKeyDown(e) {
+ if (e.keyCode == 27) {
+ this.setState({
+ value: this.props.value || '',
+ visible: false
+ });
+ if (this.props.onFinished) {
+ this.props.onFinished();
+ }
+ } else if (e.keyCode == 13) {
+ this.handleEditingFinished();
+ }
+ }
+ handleEditingFinished(e) {
+ if (e) {
+ let currentTarget = e.currentTarget;
+ setTimeout(_ => {
+ if (!currentTarget.contains(document.activeElement)) {
+ if (this.props.onFinished) {
+ this.props.onFinished(this.state.value);
+ }
+ }
+ }, 0);
+ } else if (this.props.onFinished) {
+ this.props.onFinished(this.state.value.trim());
+ }
+ }
+ render() {
+ return (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("div", {
+ tabIndex: "-1",
+ className: "group-focus",
+ onBlur: this.handleEditingFinished,
+ children: [(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("input", {
+ className: "with-icon-right",
+ type: this.state.visible ? 'text' : 'password',
+ value: this.state.value,
+ placeholder: this.props.placeholder,
+ maxLength: 32,
+ required: this.props.required ? 'required' : '',
+ autoFocus: this.props.autoFocus ? 'autoFocus' : '',
+ autoComplete: this.props.autoComplete,
+ onChange: this.handeTextChange,
+ onKeyDown: this.handleKeyDown,
+ ref: this.inputRef
+ }, void 0, false), (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("span", {
+ onClick: this.handleVisibility,
+ children: (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxDEV)("i", {
+ className: "material-icons clickable light-gray",
+ children: this.state.visible ? 'visibility' : 'visibility_off'
+ }, void 0, false)
+ }, void 0, false)]
+ }, void 0, true);
+ }
+}
+
+/***/ }),
+
+/***/ "./node_modules/react-dom/client.js":
+/*!******************************************!*\
+ !*** ./node_modules/react-dom/client.js ***!
+ \******************************************/
+/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
+
+
+
+var m = __webpack_require__(/*! react-dom */ "react-dom");
+if (false) // removed by dead control flow
+{} else {
+ var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
+ exports.createRoot = function(c, o) {
+ i.usingClientEntryPoint = true;
+ try {
+ return m.createRoot(c, o);
+ } finally {
+ i.usingClientEntryPoint = false;
+ }
+ };
+ exports.hydrateRoot = function(c, h, o) {
+ i.usingClientEntryPoint = true;
+ try {
+ return m.hydrateRoot(c, h, o);
+ } finally {
+ i.usingClientEntryPoint = false;
+ }
+ };
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/react/cjs/react-jsx-dev-runtime.development.js":
+/*!*********************************************************************!*\
+ !*** ./node_modules/react/cjs/react-jsx-dev-runtime.development.js ***!
+ \*********************************************************************/
+/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
+
+/**
+ * @license React
+ * react-jsx-dev-runtime.development.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+
+
+if (true) {
+ (function() {
+'use strict';
+
+var React = __webpack_require__(/*! react */ "react");
+
+// ATTENTION
+// When adding new symbols to this file,
+// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
+// The Symbol used to tag the ReactElement-like types.
+var REACT_ELEMENT_TYPE = Symbol.for('react.element');
+var REACT_PORTAL_TYPE = Symbol.for('react.portal');
+var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');
+var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');
+var REACT_PROFILER_TYPE = Symbol.for('react.profiler');
+var REACT_PROVIDER_TYPE = Symbol.for('react.provider');
+var REACT_CONTEXT_TYPE = Symbol.for('react.context');
+var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');
+var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');
+var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');
+var REACT_MEMO_TYPE = Symbol.for('react.memo');
+var REACT_LAZY_TYPE = Symbol.for('react.lazy');
+var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');
+var MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
+var FAUX_ITERATOR_SYMBOL = '@@iterator';
+function getIteratorFn(maybeIterable) {
+ if (maybeIterable === null || typeof maybeIterable !== 'object') {
+ return null;
+ }
+
+ var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
+
+ if (typeof maybeIterator === 'function') {
+ return maybeIterator;
+ }
+
+ return null;
+}
+
+var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
+
+function error(format) {
+ {
+ {
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+ args[_key2 - 1] = arguments[_key2];
+ }
+
+ printWarning('error', format, args);
+ }
+ }
+}
+
+function printWarning(level, format, args) {
+ // When changing this logic, you might want to also
+ // update consoleWithStackDev.www.js as well.
+ {
+ var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
+ var stack = ReactDebugCurrentFrame.getStackAddendum();
+
+ if (stack !== '') {
+ format += '%s';
+ args = args.concat([stack]);
+ } // eslint-disable-next-line react-internal/safe-string-coercion
+
+
+ var argsWithFormat = args.map(function (item) {
+ return String(item);
+ }); // Careful: RN currently depends on this prefix
+
+ argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
+ // breaks IE9: https://github.com/facebook/react/issues/13610
+ // eslint-disable-next-line react-internal/no-production-logging
+
+ Function.prototype.apply.call(console[level], console, argsWithFormat);
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+var enableScopeAPI = false; // Experimental Create Event Handle API.
+var enableCacheElement = false;
+var enableTransitionTracing = false; // No known bugs, but needs performance testing
+
+var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber
+// stuff. Intended to enable React core members to more easily debug scheduling
+// issues in DEV builds.
+
+var enableDebugTracing = false; // Track which Fiber(s) schedule render work.
+
+var REACT_MODULE_REFERENCE;
+
+{
+ REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');
+}
+
+function isValidElementType(type) {
+ if (typeof type === 'string' || typeof type === 'function') {
+ return true;
+ } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).
+
+
+ if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {
+ return true;
+ }
+
+ if (typeof type === 'object' && type !== null) {
+ if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object
+ // types supported by any Flight configuration anywhere since
+ // we don't know which Flight build this will end up being used
+ // with.
+ type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+function getWrappedName(outerType, innerType, wrapperName) {
+ var displayName = outerType.displayName;
+
+ if (displayName) {
+ return displayName;
+ }
+
+ var functionName = innerType.displayName || innerType.name || '';
+ return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName;
+} // Keep in sync with react-reconciler/getComponentNameFromFiber
+
+
+function getContextName(type) {
+ return type.displayName || 'Context';
+} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.
+
+
+function getComponentNameFromType(type) {
+ if (type == null) {
+ // Host root, text node or just invalid type.
+ return null;
+ }
+
+ {
+ if (typeof type.tag === 'number') {
+ error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');
+ }
+ }
+
+ if (typeof type === 'function') {
+ return type.displayName || type.name || null;
+ }
+
+ if (typeof type === 'string') {
+ return type;
+ }
+
+ switch (type) {
+ case REACT_FRAGMENT_TYPE:
+ return 'Fragment';
+
+ case REACT_PORTAL_TYPE:
+ return 'Portal';
+
+ case REACT_PROFILER_TYPE:
+ return 'Profiler';
+
+ case REACT_STRICT_MODE_TYPE:
+ return 'StrictMode';
+
+ case REACT_SUSPENSE_TYPE:
+ return 'Suspense';
+
+ case REACT_SUSPENSE_LIST_TYPE:
+ return 'SuspenseList';
+
+ }
+
+ if (typeof type === 'object') {
+ switch (type.$$typeof) {
+ case REACT_CONTEXT_TYPE:
+ var context = type;
+ return getContextName(context) + '.Consumer';
+
+ case REACT_PROVIDER_TYPE:
+ var provider = type;
+ return getContextName(provider._context) + '.Provider';
+
+ case REACT_FORWARD_REF_TYPE:
+ return getWrappedName(type, type.render, 'ForwardRef');
+
+ case REACT_MEMO_TYPE:
+ var outerName = type.displayName || null;
+
+ if (outerName !== null) {
+ return outerName;
+ }
+
+ return getComponentNameFromType(type.type) || 'Memo';
+
+ case REACT_LAZY_TYPE:
+ {
+ var lazyComponent = type;
+ var payload = lazyComponent._payload;
+ var init = lazyComponent._init;
+
+ try {
+ return getComponentNameFromType(init(payload));
+ } catch (x) {
+ return null;
+ }
+ }
+
+ // eslint-disable-next-line no-fallthrough
+ }
+ }
+
+ return null;
+}
+
+var assign = Object.assign;
+
+// Helpers to patch console.logs to avoid logging during side-effect free
+// replaying on render function. This currently only patches the object
+// lazily which won't cover if the log function was extracted eagerly.
+// We could also eagerly patch the method.
+var disabledDepth = 0;
+var prevLog;
+var prevInfo;
+var prevWarn;
+var prevError;
+var prevGroup;
+var prevGroupCollapsed;
+var prevGroupEnd;
+
+function disabledLog() {}
+
+disabledLog.__reactDisabledLog = true;
+function disableLogs() {
+ {
+ if (disabledDepth === 0) {
+ /* eslint-disable react-internal/no-production-logging */
+ prevLog = console.log;
+ prevInfo = console.info;
+ prevWarn = console.warn;
+ prevError = console.error;
+ prevGroup = console.group;
+ prevGroupCollapsed = console.groupCollapsed;
+ prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099
+
+ var props = {
+ configurable: true,
+ enumerable: true,
+ value: disabledLog,
+ writable: true
+ }; // $FlowFixMe Flow thinks console is immutable.
+
+ Object.defineProperties(console, {
+ info: props,
+ log: props,
+ warn: props,
+ error: props,
+ group: props,
+ groupCollapsed: props,
+ groupEnd: props
+ });
+ /* eslint-enable react-internal/no-production-logging */
+ }
+
+ disabledDepth++;
+ }
+}
+function reenableLogs() {
+ {
+ disabledDepth--;
+
+ if (disabledDepth === 0) {
+ /* eslint-disable react-internal/no-production-logging */
+ var props = {
+ configurable: true,
+ enumerable: true,
+ writable: true
+ }; // $FlowFixMe Flow thinks console is immutable.
+
+ Object.defineProperties(console, {
+ log: assign({}, props, {
+ value: prevLog
+ }),
+ info: assign({}, props, {
+ value: prevInfo
+ }),
+ warn: assign({}, props, {
+ value: prevWarn
+ }),
+ error: assign({}, props, {
+ value: prevError
+ }),
+ group: assign({}, props, {
+ value: prevGroup
+ }),
+ groupCollapsed: assign({}, props, {
+ value: prevGroupCollapsed
+ }),
+ groupEnd: assign({}, props, {
+ value: prevGroupEnd
+ })
+ });
+ /* eslint-enable react-internal/no-production-logging */
+ }
+
+ if (disabledDepth < 0) {
+ error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');
+ }
+ }
+}
+
+var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
+var prefix;
+function describeBuiltInComponentFrame(name, source, ownerFn) {
+ {
+ if (prefix === undefined) {
+ // Extract the VM specific prefix used by each line.
+ try {
+ throw Error();
+ } catch (x) {
+ var match = x.stack.trim().match(/\n( *(at )?)/);
+ prefix = match && match[1] || '';
+ }
+ } // We use the prefix to ensure our stacks line up with native stack frames.
+
+
+ return '\n' + prefix + name;
+ }
+}
+var reentry = false;
+var componentFrameCache;
+
+{
+ var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;
+ componentFrameCache = new PossiblyWeakMap();
+}
+
+function describeNativeComponentFrame(fn, construct) {
+ // If something asked for a stack inside a fake render, it should get ignored.
+ if ( !fn || reentry) {
+ return '';
+ }
+
+ {
+ var frame = componentFrameCache.get(fn);
+
+ if (frame !== undefined) {
+ return frame;
+ }
+ }
+
+ var control;
+ reentry = true;
+ var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.
+
+ Error.prepareStackTrace = undefined;
+ var previousDispatcher;
+
+ {
+ previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function
+ // for warnings.
+
+ ReactCurrentDispatcher.current = null;
+ disableLogs();
+ }
+
+ try {
+ // This should throw.
+ if (construct) {
+ // Something should be setting the props in the constructor.
+ var Fake = function () {
+ throw Error();
+ }; // $FlowFixMe
+
+
+ Object.defineProperty(Fake.prototype, 'props', {
+ set: function () {
+ // We use a throwing setter instead of frozen or non-writable props
+ // because that won't throw in a non-strict mode function.
+ throw Error();
+ }
+ });
+
+ if (typeof Reflect === 'object' && Reflect.construct) {
+ // We construct a different control for this case to include any extra
+ // frames added by the construct call.
+ try {
+ Reflect.construct(Fake, []);
+ } catch (x) {
+ control = x;
+ }
+
+ Reflect.construct(fn, [], Fake);
+ } else {
+ try {
+ Fake.call();
+ } catch (x) {
+ control = x;
+ }
+
+ fn.call(Fake.prototype);
+ }
+ } else {
+ try {
+ throw Error();
+ } catch (x) {
+ control = x;
+ }
+
+ fn();
+ }
+ } catch (sample) {
+ // This is inlined manually because closure doesn't do it for us.
+ if (sample && control && typeof sample.stack === 'string') {
+ // This extracts the first frame from the sample that isn't also in the control.
+ // Skipping one frame that we assume is the frame that calls the two.
+ var sampleLines = sample.stack.split('\n');
+ var controlLines = control.stack.split('\n');
+ var s = sampleLines.length - 1;
+ var c = controlLines.length - 1;
+
+ while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {
+ // We expect at least one stack frame to be shared.
+ // Typically this will be the root most one. However, stack frames may be
+ // cut off due to maximum stack limits. In this case, one maybe cut off
+ // earlier than the other. We assume that the sample is longer or the same
+ // and there for cut off earlier. So we should find the root most frame in
+ // the sample somewhere in the control.
+ c--;
+ }
+
+ for (; s >= 1 && c >= 0; s--, c--) {
+ // Next we find the first one that isn't the same which should be the
+ // frame that called our sample function and the control.
+ if (sampleLines[s] !== controlLines[c]) {
+ // In V8, the first line is describing the message but other VMs don't.
+ // If we're about to return the first line, and the control is also on the same
+ // line, that's a pretty good indicator that our sample threw at same line as
+ // the control. I.e. before we entered the sample frame. So we ignore this result.
+ // This can happen if you passed a class to function component, or non-function.
+ if (s !== 1 || c !== 1) {
+ do {
+ s--;
+ c--; // We may still have similar intermediate frames from the construct call.
+ // The next one that isn't the same should be our match though.
+
+ if (c < 0 || sampleLines[s] !== controlLines[c]) {
+ // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier.
+ var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled ""
+ // but we have a user-provided "displayName"
+ // splice it in to make the stack more readable.
+
+
+ if (fn.displayName && _frame.includes('')) {
+ _frame = _frame.replace('', fn.displayName);
+ }
+
+ {
+ if (typeof fn === 'function') {
+ componentFrameCache.set(fn, _frame);
+ }
+ } // Return the line we found.
+
+
+ return _frame;
+ }
+ } while (s >= 1 && c >= 0);
+ }
+
+ break;
+ }
+ }
+ }
+ } finally {
+ reentry = false;
+
+ {
+ ReactCurrentDispatcher.current = previousDispatcher;
+ reenableLogs();
+ }
+
+ Error.prepareStackTrace = previousPrepareStackTrace;
+ } // Fallback to just using the name if we couldn't make it throw.
+
+
+ var name = fn ? fn.displayName || fn.name : '';
+ var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';
+
+ {
+ if (typeof fn === 'function') {
+ componentFrameCache.set(fn, syntheticFrame);
+ }
+ }
+
+ return syntheticFrame;
+}
+function describeFunctionComponentFrame(fn, source, ownerFn) {
+ {
+ return describeNativeComponentFrame(fn, false);
+ }
+}
+
+function shouldConstruct(Component) {
+ var prototype = Component.prototype;
+ return !!(prototype && prototype.isReactComponent);
+}
+
+function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {
+
+ if (type == null) {
+ return '';
+ }
+
+ if (typeof type === 'function') {
+ {
+ return describeNativeComponentFrame(type, shouldConstruct(type));
+ }
+ }
+
+ if (typeof type === 'string') {
+ return describeBuiltInComponentFrame(type);
+ }
+
+ switch (type) {
+ case REACT_SUSPENSE_TYPE:
+ return describeBuiltInComponentFrame('Suspense');
+
+ case REACT_SUSPENSE_LIST_TYPE:
+ return describeBuiltInComponentFrame('SuspenseList');
+ }
+
+ if (typeof type === 'object') {
+ switch (type.$$typeof) {
+ case REACT_FORWARD_REF_TYPE:
+ return describeFunctionComponentFrame(type.render);
+
+ case REACT_MEMO_TYPE:
+ // Memo may contain any component type so we recursively resolve it.
+ return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);
+
+ case REACT_LAZY_TYPE:
+ {
+ var lazyComponent = type;
+ var payload = lazyComponent._payload;
+ var init = lazyComponent._init;
+
+ try {
+ // Lazy may contain any component type so we recursively resolve it.
+ return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);
+ } catch (x) {}
+ }
+ }
+ }
+
+ return '';
+}
+
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+var loggedTypeFailures = {};
+var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
+
+function setCurrentlyValidatingElement(element) {
+ {
+ if (element) {
+ var owner = element._owner;
+ var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
+ ReactDebugCurrentFrame.setExtraStackFrame(stack);
+ } else {
+ ReactDebugCurrentFrame.setExtraStackFrame(null);
+ }
+ }
+}
+
+function checkPropTypes(typeSpecs, values, location, componentName, element) {
+ {
+ // $FlowFixMe This is okay but Flow doesn't know it.
+ var has = Function.call.bind(hasOwnProperty);
+
+ for (var typeSpecName in typeSpecs) {
+ if (has(typeSpecs, typeSpecName)) {
+ var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to
+ // fail the render phase where it didn't fail before. So we log it.
+ // After these have been cleaned up, we'll let them throw.
+
+ try {
+ // This is intentionally an invariant that gets caught. It's the same
+ // behavior as without this statement except with a better message.
+ if (typeof typeSpecs[typeSpecName] !== 'function') {
+ // eslint-disable-next-line react-internal/prod-error-codes
+ var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');
+ err.name = 'Invariant Violation';
+ throw err;
+ }
+
+ error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');
+ } catch (ex) {
+ error$1 = ex;
+ }
+
+ if (error$1 && !(error$1 instanceof Error)) {
+ setCurrentlyValidatingElement(element);
+
+ error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);
+
+ setCurrentlyValidatingElement(null);
+ }
+
+ if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {
+ // Only monitor this failure once because there tends to be a lot of the
+ // same error.
+ loggedTypeFailures[error$1.message] = true;
+ setCurrentlyValidatingElement(element);
+
+ error('Failed %s type: %s', location, error$1.message);
+
+ setCurrentlyValidatingElement(null);
+ }
+ }
+ }
+ }
+}
+
+var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare
+
+function isArray(a) {
+ return isArrayImpl(a);
+}
+
+/*
+ * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol
+ * and Temporal.* types. See https://github.com/facebook/react/pull/22064.
+ *
+ * The functions in this module will throw an easier-to-understand,
+ * easier-to-debug exception with a clear errors message message explaining the
+ * problem. (Instead of a confusing exception thrown inside the implementation
+ * of the `value` object).
+ */
+// $FlowFixMe only called in DEV, so void return is not possible.
+function typeName(value) {
+ {
+ // toStringTag is needed for namespaced types like Temporal.Instant
+ var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;
+ var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';
+ return type;
+ }
+} // $FlowFixMe only called in DEV, so void return is not possible.
+
+
+function willCoercionThrow(value) {
+ {
+ try {
+ testStringCoercion(value);
+ return false;
+ } catch (e) {
+ return true;
+ }
+ }
+}
+
+function testStringCoercion(value) {
+ // If you ended up here by following an exception call stack, here's what's
+ // happened: you supplied an object or symbol value to React (as a prop, key,
+ // DOM attribute, CSS property, string ref, etc.) and when React tried to
+ // coerce it to a string using `'' + value`, an exception was thrown.
+ //
+ // The most common types that will cause this exception are `Symbol` instances
+ // and Temporal objects like `Temporal.Instant`. But any object that has a
+ // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this
+ // exception. (Library authors do this to prevent users from using built-in
+ // numeric operators like `+` or comparison operators like `>=` because custom
+ // methods are needed to perform accurate arithmetic or comparison.)
+ //
+ // To fix the problem, coerce this object or symbol value to a string before
+ // passing it to React. The most reliable way is usually `String(value)`.
+ //
+ // To find which value is throwing, check the browser or debugger console.
+ // Before this exception was thrown, there should be `console.error` output
+ // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the
+ // problem and how that type was used: key, atrribute, input value prop, etc.
+ // In most cases, this console output also shows the component and its
+ // ancestor components where the exception happened.
+ //
+ // eslint-disable-next-line react-internal/safe-string-coercion
+ return '' + value;
+}
+function checkKeyStringCoercion(value) {
+ {
+ if (willCoercionThrow(value)) {
+ error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));
+
+ return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
+ }
+ }
+}
+
+var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
+var RESERVED_PROPS = {
+ key: true,
+ ref: true,
+ __self: true,
+ __source: true
+};
+var specialPropKeyWarningShown;
+var specialPropRefWarningShown;
+var didWarnAboutStringRefs;
+
+{
+ didWarnAboutStringRefs = {};
+}
+
+function hasValidRef(config) {
+ {
+ if (hasOwnProperty.call(config, 'ref')) {
+ var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
+
+ if (getter && getter.isReactWarning) {
+ return false;
+ }
+ }
+ }
+
+ return config.ref !== undefined;
+}
+
+function hasValidKey(config) {
+ {
+ if (hasOwnProperty.call(config, 'key')) {
+ var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
+
+ if (getter && getter.isReactWarning) {
+ return false;
+ }
+ }
+ }
+
+ return config.key !== undefined;
+}
+
+function warnIfStringRefCannotBeAutoConverted(config, self) {
+ {
+ if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {
+ var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);
+
+ if (!didWarnAboutStringRefs[componentName]) {
+ error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);
+
+ didWarnAboutStringRefs[componentName] = true;
+ }
+ }
+ }
+}
+
+function defineKeyPropWarningGetter(props, displayName) {
+ {
+ var warnAboutAccessingKey = function () {
+ if (!specialPropKeyWarningShown) {
+ specialPropKeyWarningShown = true;
+
+ error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
+ }
+ };
+
+ warnAboutAccessingKey.isReactWarning = true;
+ Object.defineProperty(props, 'key', {
+ get: warnAboutAccessingKey,
+ configurable: true
+ });
+ }
+}
+
+function defineRefPropWarningGetter(props, displayName) {
+ {
+ var warnAboutAccessingRef = function () {
+ if (!specialPropRefWarningShown) {
+ specialPropRefWarningShown = true;
+
+ error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
+ }
+ };
+
+ warnAboutAccessingRef.isReactWarning = true;
+ Object.defineProperty(props, 'ref', {
+ get: warnAboutAccessingRef,
+ configurable: true
+ });
+ }
+}
+/**
+ * Factory method to create a new React element. This no longer adheres to
+ * the class pattern, so do not use new to call it. Also, instanceof check
+ * will not work. Instead test $$typeof field against Symbol.for('react.element') to check
+ * if something is a React Element.
+ *
+ * @param {*} type
+ * @param {*} props
+ * @param {*} key
+ * @param {string|object} ref
+ * @param {*} owner
+ * @param {*} self A *temporary* helper to detect places where `this` is
+ * different from the `owner` when React.createElement is called, so that we
+ * can warn. We want to get rid of owner and replace string `ref`s with arrow
+ * functions, and as long as `this` and owner are the same, there will be no
+ * change in behavior.
+ * @param {*} source An annotation object (added by a transpiler or otherwise)
+ * indicating filename, line number, and/or other information.
+ * @internal
+ */
+
+
+var ReactElement = function (type, key, ref, self, source, owner, props) {
+ var element = {
+ // This tag allows us to uniquely identify this as a React Element
+ $$typeof: REACT_ELEMENT_TYPE,
+ // Built-in properties that belong on the element
+ type: type,
+ key: key,
+ ref: ref,
+ props: props,
+ // Record the component responsible for creating this element.
+ _owner: owner
+ };
+
+ {
+ // The validation flag is currently mutative. We put it on
+ // an external backing store so that we can freeze the whole object.
+ // This can be replaced with a WeakMap once they are implemented in
+ // commonly used development environments.
+ element._store = {}; // To make comparing ReactElements easier for testing purposes, we make
+ // the validation flag non-enumerable (where possible, which should
+ // include every environment we run tests in), so the test framework
+ // ignores it.
+
+ Object.defineProperty(element._store, 'validated', {
+ configurable: false,
+ enumerable: false,
+ writable: true,
+ value: false
+ }); // self and source are DEV only properties.
+
+ Object.defineProperty(element, '_self', {
+ configurable: false,
+ enumerable: false,
+ writable: false,
+ value: self
+ }); // Two elements created in two different places should be considered
+ // equal for testing purposes and therefore we hide it from enumeration.
+
+ Object.defineProperty(element, '_source', {
+ configurable: false,
+ enumerable: false,
+ writable: false,
+ value: source
+ });
+
+ if (Object.freeze) {
+ Object.freeze(element.props);
+ Object.freeze(element);
+ }
+ }
+
+ return element;
+};
+/**
+ * https://github.com/reactjs/rfcs/pull/107
+ * @param {*} type
+ * @param {object} props
+ * @param {string} key
+ */
+
+function jsxDEV(type, config, maybeKey, source, self) {
+ {
+ var propName; // Reserved names are extracted
+
+ var props = {};
+ var key = null;
+ var ref = null; // Currently, key can be spread in as a prop. This causes a potential
+ // issue if key is also explicitly declared (ie.
+ // or ). We want to deprecate key spread,
+ // but as an intermediary step, we will use jsxDEV for everything except
+ // , because we aren't currently able to tell if
+ // key is explicitly declared to be undefined or not.
+
+ if (maybeKey !== undefined) {
+ {
+ checkKeyStringCoercion(maybeKey);
+ }
+
+ key = '' + maybeKey;
+ }
+
+ if (hasValidKey(config)) {
+ {
+ checkKeyStringCoercion(config.key);
+ }
+
+ key = '' + config.key;
+ }
+
+ if (hasValidRef(config)) {
+ ref = config.ref;
+ warnIfStringRefCannotBeAutoConverted(config, self);
+ } // Remaining properties are added to a new props object
+
+
+ for (propName in config) {
+ if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
+ props[propName] = config[propName];
+ }
+ } // Resolve default props
+
+
+ if (type && type.defaultProps) {
+ var defaultProps = type.defaultProps;
+
+ for (propName in defaultProps) {
+ if (props[propName] === undefined) {
+ props[propName] = defaultProps[propName];
+ }
+ }
+ }
+
+ if (key || ref) {
+ var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
+
+ if (key) {
+ defineKeyPropWarningGetter(props, displayName);
+ }
+
+ if (ref) {
+ defineRefPropWarningGetter(props, displayName);
+ }
+ }
+
+ return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
+ }
+}
+
+var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;
+var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;
+
+function setCurrentlyValidatingElement$1(element) {
+ {
+ if (element) {
+ var owner = element._owner;
+ var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
+ ReactDebugCurrentFrame$1.setExtraStackFrame(stack);
+ } else {
+ ReactDebugCurrentFrame$1.setExtraStackFrame(null);
+ }
+ }
+}
+
+var propTypesMisspellWarningShown;
+
+{
+ propTypesMisspellWarningShown = false;
+}
+/**
+ * Verifies the object is a ReactElement.
+ * See https://reactjs.org/docs/react-api.html#isvalidelement
+ * @param {?object} object
+ * @return {boolean} True if `object` is a ReactElement.
+ * @final
+ */
+
+
+function isValidElement(object) {
+ {
+ return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
+ }
+}
+
+function getDeclarationErrorAddendum() {
+ {
+ if (ReactCurrentOwner$1.current) {
+ var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);
+
+ if (name) {
+ return '\n\nCheck the render method of `' + name + '`.';
+ }
+ }
+
+ return '';
+ }
+}
+
+function getSourceInfoErrorAddendum(source) {
+ {
+ if (source !== undefined) {
+ var fileName = source.fileName.replace(/^.*[\\\/]/, '');
+ var lineNumber = source.lineNumber;
+ return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.';
+ }
+
+ return '';
+ }
+}
+/**
+ * Warn if there's no key explicitly set on dynamic arrays of children or
+ * object keys are not valid. This allows us to keep track of children between
+ * updates.
+ */
+
+
+var ownerHasKeyUseWarning = {};
+
+function getCurrentComponentErrorInfo(parentType) {
+ {
+ var info = getDeclarationErrorAddendum();
+
+ if (!info) {
+ var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
+
+ if (parentName) {
+ info = "\n\nCheck the top-level render call using <" + parentName + ">.";
+ }
+ }
+
+ return info;
+ }
+}
+/**
+ * Warn if the element doesn't have an explicit key assigned to it.
+ * This element is in an array. The array could grow and shrink or be
+ * reordered. All children that haven't already been validated are required to
+ * have a "key" property assigned to it. Error statuses are cached so a warning
+ * will only be shown once.
+ *
+ * @internal
+ * @param {ReactElement} element Element that requires a key.
+ * @param {*} parentType element's parent's type.
+ */
+
+
+function validateExplicitKey(element, parentType) {
+ {
+ if (!element._store || element._store.validated || element.key != null) {
+ return;
+ }
+
+ element._store.validated = true;
+ var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
+
+ if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {
+ return;
+ }
+
+ ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a
+ // property, it may be the creator of the child that's responsible for
+ // assigning it a key.
+
+ var childOwner = '';
+
+ if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {
+ // Give the component that originally created this child.
+ childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + ".";
+ }
+
+ setCurrentlyValidatingElement$1(element);
+
+ error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);
+
+ setCurrentlyValidatingElement$1(null);
+ }
+}
+/**
+ * Ensure that every element either is passed in a static location, in an
+ * array with an explicit keys property defined, or in an object literal
+ * with valid key property.
+ *
+ * @internal
+ * @param {ReactNode} node Statically passed child of any type.
+ * @param {*} parentType node's parent's type.
+ */
+
+
+function validateChildKeys(node, parentType) {
+ {
+ if (typeof node !== 'object') {
+ return;
+ }
+
+ if (isArray(node)) {
+ for (var i = 0; i < node.length; i++) {
+ var child = node[i];
+
+ if (isValidElement(child)) {
+ validateExplicitKey(child, parentType);
+ }
+ }
+ } else if (isValidElement(node)) {
+ // This element was passed in a valid location.
+ if (node._store) {
+ node._store.validated = true;
+ }
+ } else if (node) {
+ var iteratorFn = getIteratorFn(node);
+
+ if (typeof iteratorFn === 'function') {
+ // Entry iterators used to provide implicit keys,
+ // but now we print a separate warning for them later.
+ if (iteratorFn !== node.entries) {
+ var iterator = iteratorFn.call(node);
+ var step;
+
+ while (!(step = iterator.next()).done) {
+ if (isValidElement(step.value)) {
+ validateExplicitKey(step.value, parentType);
+ }
+ }
+ }
+ }
+ }
+ }
+}
+/**
+ * Given an element, validate that its props follow the propTypes definition,
+ * provided by the type.
+ *
+ * @param {ReactElement} element
+ */
+
+
+function validatePropTypes(element) {
+ {
+ var type = element.type;
+
+ if (type === null || type === undefined || typeof type === 'string') {
+ return;
+ }
+
+ var propTypes;
+
+ if (typeof type === 'function') {
+ propTypes = type.propTypes;
+ } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.
+ // Inner props are checked in the reconciler.
+ type.$$typeof === REACT_MEMO_TYPE)) {
+ propTypes = type.propTypes;
+ } else {
+ return;
+ }
+
+ if (propTypes) {
+ // Intentionally inside to avoid triggering lazy initializers:
+ var name = getComponentNameFromType(type);
+ checkPropTypes(propTypes, element.props, 'prop', name, element);
+ } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {
+ propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:
+
+ var _name = getComponentNameFromType(type);
+
+ error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');
+ }
+
+ if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {
+ error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');
+ }
+ }
+}
+/**
+ * Given a fragment, validate that it can only be provided with fragment props
+ * @param {ReactElement} fragment
+ */
+
+
+function validateFragmentProps(fragment) {
+ {
+ var keys = Object.keys(fragment.props);
+
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+
+ if (key !== 'children' && key !== 'key') {
+ setCurrentlyValidatingElement$1(fragment);
+
+ error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);
+
+ setCurrentlyValidatingElement$1(null);
+ break;
+ }
+ }
+
+ if (fragment.ref !== null) {
+ setCurrentlyValidatingElement$1(fragment);
+
+ error('Invalid attribute `ref` supplied to `React.Fragment`.');
+
+ setCurrentlyValidatingElement$1(null);
+ }
+ }
+}
+
+var didWarnAboutKeySpread = {};
+function jsxWithValidation(type, props, key, isStaticChildren, source, self) {
+ {
+ var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to
+ // succeed and there will likely be errors in render.
+
+ if (!validType) {
+ var info = '';
+
+ if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
+ info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports.";
+ }
+
+ var sourceInfo = getSourceInfoErrorAddendum(source);
+
+ if (sourceInfo) {
+ info += sourceInfo;
+ } else {
+ info += getDeclarationErrorAddendum();
+ }
+
+ var typeString;
+
+ if (type === null) {
+ typeString = 'null';
+ } else if (isArray(type)) {
+ typeString = 'array';
+ } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {
+ typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />";
+ info = ' Did you accidentally export a JSX literal instead of a component?';
+ } else {
+ typeString = typeof type;
+ }
+
+ error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);
+ }
+
+ var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.
+ // TODO: Drop this when these are no longer allowed as the type argument.
+
+ if (element == null) {
+ return element;
+ } // Skip key warning if the type isn't valid since our key validation logic
+ // doesn't expect a non-string/function type and can throw confusing errors.
+ // We don't want exception behavior to differ between dev and prod.
+ // (Rendering will throw with a helpful message and as soon as the type is
+ // fixed, the key warnings will appear.)
+
+
+ if (validType) {
+ var children = props.children;
+
+ if (children !== undefined) {
+ if (isStaticChildren) {
+ if (isArray(children)) {
+ for (var i = 0; i < children.length; i++) {
+ validateChildKeys(children[i], type);
+ }
+
+ if (Object.freeze) {
+ Object.freeze(children);
+ }
+ } else {
+ error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');
+ }
+ } else {
+ validateChildKeys(children, type);
+ }
+ }
+ }
+
+ {
+ if (hasOwnProperty.call(props, 'key')) {
+ var componentName = getComponentNameFromType(type);
+ var keys = Object.keys(props).filter(function (k) {
+ return k !== 'key';
+ });
+ var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';
+
+ if (!didWarnAboutKeySpread[componentName + beforeExample]) {
+ var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';
+
+ error('A props object containing a "key" prop is being spread into JSX:\n' + ' let props = %s;\n' + ' <%s {...props} />\n' + 'React keys must be passed directly to JSX without using spread:\n' + ' let props = %s;\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);
+
+ didWarnAboutKeySpread[componentName + beforeExample] = true;
+ }
+ }
+ }
+
+ if (type === REACT_FRAGMENT_TYPE) {
+ validateFragmentProps(element);
+ } else {
+ validatePropTypes(element);
+ }
+
+ return element;
+ }
+} // These two functions exist to still get child warnings in dev
+
+var jsxDEV$1 = jsxWithValidation ;
+
+exports.Fragment = REACT_FRAGMENT_TYPE;
+exports.jsxDEV = jsxDEV$1;
+ })();
+}
+
+
+/***/ }),
+
+/***/ "./node_modules/react/jsx-dev-runtime.js":
+/*!***********************************************!*\
+ !*** ./node_modules/react/jsx-dev-runtime.js ***!
+ \***********************************************/
+/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
+
+
+
+if (false) // removed by dead control flow
+{} else {
+ module.exports = __webpack_require__(/*! ./cjs/react-jsx-dev-runtime.development.js */ "./node_modules/react/cjs/react-jsx-dev-runtime.development.js");
+}
+
+
+/***/ }),
+
+/***/ "qrcodejs":
+/*!*************************!*\
+ !*** external "QRCode" ***!
+ \*************************/
+/***/ (function(module) {
+
+module.exports = QRCode;
+
+/***/ }),
+
+/***/ "react":
+/*!************************!*\
+ !*** external "React" ***!
+ \************************/
+/***/ (function(module) {
+
+module.exports = React;
+
+/***/ }),
+
+/***/ "react-dom":
+/*!***************************!*\
+ !*** external "ReactDOM" ***!
+ \***************************/
+/***/ (function(module) {
+
+module.exports = ReactDOM;
+
+/***/ }),
+
+/***/ "react-intl":
/*!****************************!*\
- !*** ./img/bkg/index.json ***!
+ !*** external "ReactIntl" ***!
\****************************/
/***/ (function(module) {
-module.exports = /*#__PURE__*/JSON.parse('{"patt":[{"name":"a00.png","size":200},{"name":"a01.jpg","size":384},{"name":"a02.jpg","size":384},{"name":"a03.jpg","size":384},{"name":"a04.png","size":400},{"name":"a05.jpg","size":400},{"name":"a06.jpg","size":256},{"name":"a07.jpg","size":384},{"name":"a08.jpg","size":384},{"name":"a09.jpg","size":400},{"name":"a10.jpg","size":256},{"name":"a11.png","size":200}],"img":[{"name":"w01.jpg","pr":"p01.jpg"},{"name":"w02.jpg","pr":"p02.jpg"},{"name":"w03.jpg","pr":"p03.jpg"},{"name":"w04.jpg","pr":"p04.jpg"},{"name":"w05.jpg","pr":"p05.jpg"},{"name":"w06.jpg","pr":"p06.jpg"},{"name":"w07.jpg","pr":"p07.jpg"},{"name":"w08.jpg","pr":"p08.jpg"},{"name":"w09.jpg","pr":"p09.jpg"},{"name":"w10.jpg","pr":"p10.jpg"},{"name":"w11.jpg","pr":"p11.jpg"},{"name":"w12.jpg","pr":"p12.jpg"},{"name":"w13.jpg","pr":"p13.jpg"},{"name":"w14.jpg","pr":"p14.jpg"},{"name":"w15.jpg","pr":"p15.jpg"},{"name":"w16.jpg","pr":"p16.jpg"},{"name":"w17.jpg","pr":"p17.jpg"},{"name":"w18.jpg","pr":"p18.jpg"},{"name":"w19.jpg","pr":"p19.jpg"},{"name":"w20.jpg","pr":"p20.jpg"},{"name":"w21.jpg","pr":"p21.jpg"},{"name":"w22.jpg","pr":"p22.jpg"},{"name":"w23.jpg","pr":"p23.jpg"},{"name":"w24.jpg","pr":"p24.jpg"}]}');
+module.exports = ReactIntl;
+
+/***/ }),
+
+/***/ "tinode-sdk":
+/*!*************************!*\
+ !*** external "tinode" ***!
+ \*************************/
+/***/ (function(module) {
+
+module.exports = tinode;
/***/ }),
@@ -4382,2401 +18371,6 @@ registerMessagingInWindow();
//# sourceMappingURL=index.esm2017.js.map
-/***/ }),
-
-/***/ "./node_modules/@firebase/util/dist/index.esm2017.js":
-/*!***********************************************************!*\
- !*** ./node_modules/@firebase/util/dist/index.esm2017.js ***!
- \***********************************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ CONSTANTS: function() { return /* binding */ CONSTANTS; },
-/* harmony export */ DecodeBase64StringError: function() { return /* binding */ DecodeBase64StringError; },
-/* harmony export */ Deferred: function() { return /* binding */ Deferred; },
-/* harmony export */ ErrorFactory: function() { return /* binding */ ErrorFactory; },
-/* harmony export */ FirebaseError: function() { return /* binding */ FirebaseError; },
-/* harmony export */ MAX_VALUE_MILLIS: function() { return /* binding */ MAX_VALUE_MILLIS; },
-/* harmony export */ RANDOM_FACTOR: function() { return /* binding */ RANDOM_FACTOR; },
-/* harmony export */ Sha1: function() { return /* binding */ Sha1; },
-/* harmony export */ areCookiesEnabled: function() { return /* binding */ areCookiesEnabled; },
-/* harmony export */ assert: function() { return /* binding */ assert; },
-/* harmony export */ assertionError: function() { return /* binding */ assertionError; },
-/* harmony export */ async: function() { return /* binding */ async; },
-/* harmony export */ base64: function() { return /* binding */ base64; },
-/* harmony export */ base64Decode: function() { return /* binding */ base64Decode; },
-/* harmony export */ base64Encode: function() { return /* binding */ base64Encode; },
-/* harmony export */ base64urlEncodeWithoutPadding: function() { return /* binding */ base64urlEncodeWithoutPadding; },
-/* harmony export */ calculateBackoffMillis: function() { return /* binding */ calculateBackoffMillis; },
-/* harmony export */ contains: function() { return /* binding */ contains; },
-/* harmony export */ createMockUserToken: function() { return /* binding */ createMockUserToken; },
-/* harmony export */ createSubscribe: function() { return /* binding */ createSubscribe; },
-/* harmony export */ decode: function() { return /* binding */ decode; },
-/* harmony export */ deepCopy: function() { return /* binding */ deepCopy; },
-/* harmony export */ deepEqual: function() { return /* binding */ deepEqual; },
-/* harmony export */ deepExtend: function() { return /* binding */ deepExtend; },
-/* harmony export */ errorPrefix: function() { return /* binding */ errorPrefix; },
-/* harmony export */ extractQuerystring: function() { return /* binding */ extractQuerystring; },
-/* harmony export */ getDefaultAppConfig: function() { return /* binding */ getDefaultAppConfig; },
-/* harmony export */ getDefaultEmulatorHost: function() { return /* binding */ getDefaultEmulatorHost; },
-/* harmony export */ getDefaultEmulatorHostnameAndPort: function() { return /* binding */ getDefaultEmulatorHostnameAndPort; },
-/* harmony export */ getDefaults: function() { return /* binding */ getDefaults; },
-/* harmony export */ getExperimentalSetting: function() { return /* binding */ getExperimentalSetting; },
-/* harmony export */ getGlobal: function() { return /* binding */ getGlobal; },
-/* harmony export */ getModularInstance: function() { return /* binding */ getModularInstance; },
-/* harmony export */ getUA: function() { return /* binding */ getUA; },
-/* harmony export */ isAdmin: function() { return /* binding */ isAdmin; },
-/* harmony export */ isBrowser: function() { return /* binding */ isBrowser; },
-/* harmony export */ isBrowserExtension: function() { return /* binding */ isBrowserExtension; },
-/* harmony export */ isCloudWorkstation: function() { return /* binding */ isCloudWorkstation; },
-/* harmony export */ isCloudflareWorker: function() { return /* binding */ isCloudflareWorker; },
-/* harmony export */ isElectron: function() { return /* binding */ isElectron; },
-/* harmony export */ isEmpty: function() { return /* binding */ isEmpty; },
-/* harmony export */ isIE: function() { return /* binding */ isIE; },
-/* harmony export */ isIndexedDBAvailable: function() { return /* binding */ isIndexedDBAvailable; },
-/* harmony export */ isMobileCordova: function() { return /* binding */ isMobileCordova; },
-/* harmony export */ isNode: function() { return /* binding */ isNode; },
-/* harmony export */ isNodeSdk: function() { return /* binding */ isNodeSdk; },
-/* harmony export */ isReactNative: function() { return /* binding */ isReactNative; },
-/* harmony export */ isSafari: function() { return /* binding */ isSafari; },
-/* harmony export */ isSafariOrWebkit: function() { return /* binding */ isSafariOrWebkit; },
-/* harmony export */ isUWP: function() { return /* binding */ isUWP; },
-/* harmony export */ isValidFormat: function() { return /* binding */ isValidFormat; },
-/* harmony export */ isValidTimestamp: function() { return /* binding */ isValidTimestamp; },
-/* harmony export */ isWebWorker: function() { return /* binding */ isWebWorker; },
-/* harmony export */ issuedAtTime: function() { return /* binding */ issuedAtTime; },
-/* harmony export */ jsonEval: function() { return /* binding */ jsonEval; },
-/* harmony export */ map: function() { return /* binding */ map; },
-/* harmony export */ ordinal: function() { return /* binding */ ordinal; },
-/* harmony export */ pingServer: function() { return /* binding */ pingServer; },
-/* harmony export */ promiseWithTimeout: function() { return /* binding */ promiseWithTimeout; },
-/* harmony export */ querystring: function() { return /* binding */ querystring; },
-/* harmony export */ querystringDecode: function() { return /* binding */ querystringDecode; },
-/* harmony export */ safeGet: function() { return /* binding */ safeGet; },
-/* harmony export */ stringLength: function() { return /* binding */ stringLength; },
-/* harmony export */ stringToByteArray: function() { return /* binding */ stringToByteArray; },
-/* harmony export */ stringify: function() { return /* binding */ stringify; },
-/* harmony export */ updateEmulatorBanner: function() { return /* binding */ updateEmulatorBanner; },
-/* harmony export */ validateArgCount: function() { return /* binding */ validateArgCount; },
-/* harmony export */ validateCallback: function() { return /* binding */ validateCallback; },
-/* harmony export */ validateContextObject: function() { return /* binding */ validateContextObject; },
-/* harmony export */ validateIndexedDBOpenable: function() { return /* binding */ validateIndexedDBOpenable; },
-/* harmony export */ validateNamespace: function() { return /* binding */ validateNamespace; }
-/* harmony export */ });
-/* harmony import */ var _postinstall_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./postinstall.mjs */ "./node_modules/@firebase/util/dist/postinstall.mjs");
-
-
-/**
- * @license
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @fileoverview Firebase constants. Some of these (@defines) can be overridden at compile-time.
- */
-const CONSTANTS = {
- /**
- * @define {boolean} Whether this is the client Node.js SDK.
- */
- NODE_CLIENT: false,
- /**
- * @define {boolean} Whether this is the Admin Node.js SDK.
- */
- NODE_ADMIN: false,
- /**
- * Firebase SDK Version
- */
- SDK_VERSION: '${JSCORE_VERSION}'
-};
-
-/**
- * @license
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Throws an error if the provided assertion is falsy
- */
-const assert = function (assertion, message) {
- if (!assertion) {
- throw assertionError(message);
- }
-};
-/**
- * Returns an Error object suitable for throwing.
- */
-const assertionError = function (message) {
- return new Error('Firebase Database (' +
- CONSTANTS.SDK_VERSION +
- ') INTERNAL ASSERT FAILED: ' +
- message);
-};
-
-/**
- * @license
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-const stringToByteArray$1 = function (str) {
- // TODO(user): Use native implementations if/when available
- const out = [];
- let p = 0;
- for (let i = 0; i < str.length; i++) {
- let c = str.charCodeAt(i);
- if (c < 128) {
- out[p++] = c;
- }
- else if (c < 2048) {
- out[p++] = (c >> 6) | 192;
- out[p++] = (c & 63) | 128;
- }
- else if ((c & 0xfc00) === 0xd800 &&
- i + 1 < str.length &&
- (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {
- // Surrogate Pair
- c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);
- out[p++] = (c >> 18) | 240;
- out[p++] = ((c >> 12) & 63) | 128;
- out[p++] = ((c >> 6) & 63) | 128;
- out[p++] = (c & 63) | 128;
- }
- else {
- out[p++] = (c >> 12) | 224;
- out[p++] = ((c >> 6) & 63) | 128;
- out[p++] = (c & 63) | 128;
- }
- }
- return out;
-};
-/**
- * Turns an array of numbers into the string given by the concatenation of the
- * characters to which the numbers correspond.
- * @param bytes Array of numbers representing characters.
- * @return Stringification of the array.
- */
-const byteArrayToString = function (bytes) {
- // TODO(user): Use native implementations if/when available
- const out = [];
- let pos = 0, c = 0;
- while (pos < bytes.length) {
- const c1 = bytes[pos++];
- if (c1 < 128) {
- out[c++] = String.fromCharCode(c1);
- }
- else if (c1 > 191 && c1 < 224) {
- const c2 = bytes[pos++];
- out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
- }
- else if (c1 > 239 && c1 < 365) {
- // Surrogate Pair
- const c2 = bytes[pos++];
- const c3 = bytes[pos++];
- const c4 = bytes[pos++];
- const u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -
- 0x10000;
- out[c++] = String.fromCharCode(0xd800 + (u >> 10));
- out[c++] = String.fromCharCode(0xdc00 + (u & 1023));
- }
- else {
- const c2 = bytes[pos++];
- const c3 = bytes[pos++];
- out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
- }
- }
- return out.join('');
-};
-// We define it as an object literal instead of a class because a class compiled down to es5 can't
-// be treeshaked. https://github.com/rollup/rollup/issues/1691
-// Static lookup maps, lazily populated by init_()
-// TODO(dlarocque): Define this as a class, since we no longer target ES5.
-const base64 = {
- /**
- * Maps bytes to characters.
- */
- byteToCharMap_: null,
- /**
- * Maps characters to bytes.
- */
- charToByteMap_: null,
- /**
- * Maps bytes to websafe characters.
- * @private
- */
- byteToCharMapWebSafe_: null,
- /**
- * Maps websafe characters to bytes.
- * @private
- */
- charToByteMapWebSafe_: null,
- /**
- * Our default alphabet, shared between
- * ENCODED_VALS and ENCODED_VALS_WEBSAFE
- */
- ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',
- /**
- * Our default alphabet. Value 64 (=) is special; it means "nothing."
- */
- get ENCODED_VALS() {
- return this.ENCODED_VALS_BASE + '+/=';
- },
- /**
- * Our websafe alphabet.
- */
- get ENCODED_VALS_WEBSAFE() {
- return this.ENCODED_VALS_BASE + '-_.';
- },
- /**
- * Whether this browser supports the atob and btoa functions. This extension
- * started at Mozilla but is now implemented by many browsers. We use the
- * ASSUME_* variables to avoid pulling in the full useragent detection library
- * but still allowing the standard per-browser compilations.
- *
- */
- HAS_NATIVE_SUPPORT: typeof atob === 'function',
- /**
- * Base64-encode an array of bytes.
- *
- * @param input An array of bytes (numbers with
- * value in [0, 255]) to encode.
- * @param webSafe Boolean indicating we should use the
- * alternative alphabet.
- * @return The base64 encoded string.
- */
- encodeByteArray(input, webSafe) {
- if (!Array.isArray(input)) {
- throw Error('encodeByteArray takes an array as a parameter');
- }
- this.init_();
- const byteToCharMap = webSafe
- ? this.byteToCharMapWebSafe_
- : this.byteToCharMap_;
- const output = [];
- for (let i = 0; i < input.length; i += 3) {
- const byte1 = input[i];
- const haveByte2 = i + 1 < input.length;
- const byte2 = haveByte2 ? input[i + 1] : 0;
- const haveByte3 = i + 2 < input.length;
- const byte3 = haveByte3 ? input[i + 2] : 0;
- const outByte1 = byte1 >> 2;
- const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);
- let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);
- let outByte4 = byte3 & 0x3f;
- if (!haveByte3) {
- outByte4 = 64;
- if (!haveByte2) {
- outByte3 = 64;
- }
- }
- output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);
- }
- return output.join('');
- },
- /**
- * Base64-encode a string.
- *
- * @param input A string to encode.
- * @param webSafe If true, we should use the
- * alternative alphabet.
- * @return The base64 encoded string.
- */
- encodeString(input, webSafe) {
- // Shortcut for Mozilla browsers that implement
- // a native base64 encoder in the form of "btoa/atob"
- if (this.HAS_NATIVE_SUPPORT && !webSafe) {
- return btoa(input);
- }
- return this.encodeByteArray(stringToByteArray$1(input), webSafe);
- },
- /**
- * Base64-decode a string.
- *
- * @param input to decode.
- * @param webSafe True if we should use the
- * alternative alphabet.
- * @return string representing the decoded value.
- */
- decodeString(input, webSafe) {
- // Shortcut for Mozilla browsers that implement
- // a native base64 encoder in the form of "btoa/atob"
- if (this.HAS_NATIVE_SUPPORT && !webSafe) {
- return atob(input);
- }
- return byteArrayToString(this.decodeStringToByteArray(input, webSafe));
- },
- /**
- * Base64-decode a string.
- *
- * In base-64 decoding, groups of four characters are converted into three
- * bytes. If the encoder did not apply padding, the input length may not
- * be a multiple of 4.
- *
- * In this case, the last group will have fewer than 4 characters, and
- * padding will be inferred. If the group has one or two characters, it decodes
- * to one byte. If the group has three characters, it decodes to two bytes.
- *
- * @param input Input to decode.
- * @param webSafe True if we should use the web-safe alphabet.
- * @return bytes representing the decoded value.
- */
- decodeStringToByteArray(input, webSafe) {
- this.init_();
- const charToByteMap = webSafe
- ? this.charToByteMapWebSafe_
- : this.charToByteMap_;
- const output = [];
- for (let i = 0; i < input.length;) {
- const byte1 = charToByteMap[input.charAt(i++)];
- const haveByte2 = i < input.length;
- const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;
- ++i;
- const haveByte3 = i < input.length;
- const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;
- ++i;
- const haveByte4 = i < input.length;
- const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;
- ++i;
- if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {
- throw new DecodeBase64StringError();
- }
- const outByte1 = (byte1 << 2) | (byte2 >> 4);
- output.push(outByte1);
- if (byte3 !== 64) {
- const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);
- output.push(outByte2);
- if (byte4 !== 64) {
- const outByte3 = ((byte3 << 6) & 0xc0) | byte4;
- output.push(outByte3);
- }
- }
- }
- return output;
- },
- /**
- * Lazy static initialization function. Called before
- * accessing any of the static map variables.
- * @private
- */
- init_() {
- if (!this.byteToCharMap_) {
- this.byteToCharMap_ = {};
- this.charToByteMap_ = {};
- this.byteToCharMapWebSafe_ = {};
- this.charToByteMapWebSafe_ = {};
- // We want quick mappings back and forth, so we precompute two maps.
- for (let i = 0; i < this.ENCODED_VALS.length; i++) {
- this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);
- this.charToByteMap_[this.byteToCharMap_[i]] = i;
- this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);
- this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;
- // Be forgiving when decoding and correctly decode both encodings.
- if (i >= this.ENCODED_VALS_BASE.length) {
- this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;
- this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;
- }
- }
- }
- }
-};
-/**
- * An error encountered while decoding base64 string.
- */
-class DecodeBase64StringError extends Error {
- constructor() {
- super(...arguments);
- this.name = 'DecodeBase64StringError';
- }
-}
-/**
- * URL-safe base64 encoding
- */
-const base64Encode = function (str) {
- const utf8Bytes = stringToByteArray$1(str);
- return base64.encodeByteArray(utf8Bytes, true);
-};
-/**
- * URL-safe base64 encoding (without "." padding in the end).
- * e.g. Used in JSON Web Token (JWT) parts.
- */
-const base64urlEncodeWithoutPadding = function (str) {
- // Use base64url encoding and remove padding in the end (dot characters).
- return base64Encode(str).replace(/\./g, '');
-};
-/**
- * URL-safe base64 decoding
- *
- * NOTE: DO NOT use the global atob() function - it does NOT support the
- * base64Url variant encoding.
- *
- * @param str To be decoded
- * @return Decoded result, if possible
- */
-const base64Decode = function (str) {
- try {
- return base64.decodeString(str, true);
- }
- catch (e) {
- console.error('base64Decode failed: ', e);
- }
- return null;
-};
-
-/**
- * @license
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Do a deep-copy of basic JavaScript Objects or Arrays.
- */
-function deepCopy(value) {
- return deepExtend(undefined, value);
-}
-/**
- * Copy properties from source to target (recursively allows extension
- * of Objects and Arrays). Scalar values in the target are over-written.
- * If target is undefined, an object of the appropriate type will be created
- * (and returned).
- *
- * We recursively copy all child properties of plain Objects in the source- so
- * that namespace- like dictionaries are merged.
- *
- * Note that the target can be a function, in which case the properties in
- * the source Object are copied onto it as static properties of the Function.
- *
- * Note: we don't merge __proto__ to prevent prototype pollution
- */
-function deepExtend(target, source) {
- if (!(source instanceof Object)) {
- return source;
- }
- switch (source.constructor) {
- case Date:
- // Treat Dates like scalars; if the target date object had any child
- // properties - they will be lost!
- const dateValue = source;
- return new Date(dateValue.getTime());
- case Object:
- if (target === undefined) {
- target = {};
- }
- break;
- case Array:
- // Always copy the array source and overwrite the target.
- target = [];
- break;
- default:
- // Not a plain Object - treat it as a scalar.
- return source;
- }
- for (const prop in source) {
- // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202
- if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {
- continue;
- }
- target[prop] = deepExtend(target[prop], source[prop]);
- }
- return target;
-}
-function isValidKey(key) {
- return key !== '__proto__';
-}
-
-/**
- * @license
- * Copyright 2022 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Polyfill for `globalThis` object.
- * @returns the `globalThis` object for the given environment.
- * @public
- */
-function getGlobal() {
- if (typeof self !== 'undefined') {
- return self;
- }
- if (typeof window !== 'undefined') {
- return window;
- }
- if (typeof __webpack_require__.g !== 'undefined') {
- return __webpack_require__.g;
- }
- throw new Error('Unable to locate global object.');
-}
-
-/**
- * @license
- * Copyright 2022 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-const getDefaultsFromGlobal = () => getGlobal().__FIREBASE_DEFAULTS__;
-/**
- * Attempt to read defaults from a JSON string provided to
- * process(.)env(.)__FIREBASE_DEFAULTS__ or a JSON file whose path is in
- * process(.)env(.)__FIREBASE_DEFAULTS_PATH__
- * The dots are in parens because certain compilers (Vite?) cannot
- * handle seeing that variable in comments.
- * See https://github.com/firebase/firebase-js-sdk/issues/6838
- */
-const getDefaultsFromEnvVariable = () => {
- if (typeof process === 'undefined' || typeof process.env === 'undefined') {
- return;
- }
- const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;
- if (defaultsJsonString) {
- return JSON.parse(defaultsJsonString);
- }
-};
-const getDefaultsFromCookie = () => {
- if (typeof document === 'undefined') {
- return;
- }
- let match;
- try {
- match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);
- }
- catch (e) {
- // Some environments such as Angular Universal SSR have a
- // `document` object but error on accessing `document.cookie`.
- return;
- }
- const decoded = match && base64Decode(match[1]);
- return decoded && JSON.parse(decoded);
-};
-/**
- * Get the __FIREBASE_DEFAULTS__ object. It checks in order:
- * (1) if such an object exists as a property of `globalThis`
- * (2) if such an object was provided on a shell environment variable
- * (3) if such an object exists in a cookie
- * @public
- */
-const getDefaults = () => {
- try {
- return ((0,_postinstall_mjs__WEBPACK_IMPORTED_MODULE_0__.getDefaultsFromPostinstall)() ||
- getDefaultsFromGlobal() ||
- getDefaultsFromEnvVariable() ||
- getDefaultsFromCookie());
- }
- catch (e) {
- /**
- * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due
- * to any environment case we have not accounted for. Log to
- * info instead of swallowing so we can find these unknown cases
- * and add paths for them if needed.
- */
- console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);
- return;
- }
-};
-/**
- * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object
- * for the given product.
- * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available
- * @public
- */
-const getDefaultEmulatorHost = (productName) => { var _a, _b; return (_b = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.emulatorHosts) === null || _b === void 0 ? void 0 : _b[productName]; };
-/**
- * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object
- * for the given product.
- * @returns a pair of hostname and port like `["::1", 4000]` if available
- * @public
- */
-const getDefaultEmulatorHostnameAndPort = (productName) => {
- const host = getDefaultEmulatorHost(productName);
- if (!host) {
- return undefined;
- }
- const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.
- if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {
- throw new Error(`Invalid host ${host} with no separate hostname and port!`);
- }
- // eslint-disable-next-line no-restricted-globals
- const port = parseInt(host.substring(separatorIndex + 1), 10);
- if (host[0] === '[') {
- // Bracket-quoted `[ipv6addr]:port` => return "ipv6addr" (without brackets).
- return [host.substring(1, separatorIndex - 1), port];
- }
- else {
- return [host.substring(0, separatorIndex), port];
- }
-};
-/**
- * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.
- * @public
- */
-const getDefaultAppConfig = () => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.config; };
-/**
- * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties
- * prefixed by "_")
- * @public
- */
-const getExperimentalSetting = (name) => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a[`_${name}`]; };
-
-/**
- * @license
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-class Deferred {
- constructor() {
- this.reject = () => { };
- this.resolve = () => { };
- this.promise = new Promise((resolve, reject) => {
- this.resolve = resolve;
- this.reject = reject;
- });
- }
- /**
- * Our API internals are not promisified and cannot because our callback APIs have subtle expectations around
- * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback
- * and returns a node-style callback which will resolve or reject the Deferred's promise.
- */
- wrapCallback(callback) {
- return (error, value) => {
- if (error) {
- this.reject(error);
- }
- else {
- this.resolve(value);
- }
- if (typeof callback === 'function') {
- // Attaching noop handler just in case developer wasn't expecting
- // promises
- this.promise.catch(() => { });
- // Some of our callbacks don't expect a value and our own tests
- // assert that the parameter length is 1
- if (callback.length === 1) {
- callback(error);
- }
- else {
- callback(error, value);
- }
- }
- };
- }
-}
-
-/**
- * @license
- * Copyright 2025 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Checks whether host is a cloud workstation or not.
- * @public
- */
-function isCloudWorkstation(url) {
- // `isCloudWorkstation` is called without protocol in certain connect*Emulator functions
- // In HTTP request builders, it's called with the protocol.
- // If called with protocol prefix, it's a valid URL, so we extract the hostname
- // If called without, we assume the string is the hostname.
- try {
- const host = url.startsWith('http://') || url.startsWith('https://')
- ? new URL(url).hostname
- : url;
- return host.endsWith('.cloudworkstations.dev');
- }
- catch (_a) {
- return false;
- }
-}
-/**
- * Makes a fetch request to the given server.
- * Mostly used for forwarding cookies in Firebase Studio.
- * @public
- */
-async function pingServer(endpoint) {
- const result = await fetch(endpoint, {
- credentials: 'include'
- });
- return result.ok;
-}
-
-/**
- * @license
- * Copyright 2021 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-function createMockUserToken(token, projectId) {
- if (token.uid) {
- throw new Error('The "uid" field is no longer supported by mockUserToken. Please use "sub" instead for Firebase Auth User ID.');
- }
- // Unsecured JWTs use "none" as the algorithm.
- const header = {
- alg: 'none',
- type: 'JWT'
- };
- const project = projectId || 'demo-project';
- const iat = token.iat || 0;
- const sub = token.sub || token.user_id;
- if (!sub) {
- throw new Error("mockUserToken must contain 'sub' or 'user_id' field!");
- }
- const payload = Object.assign({
- // Set all required fields to decent defaults
- iss: `https://securetoken.google.com/${project}`, aud: project, iat, exp: iat + 3600, auth_time: iat, sub, user_id: sub, firebase: {
- sign_in_provider: 'custom',
- identities: {}
- } }, token);
- // Unsecured JWTs use the empty string as a signature.
- const signature = '';
- return [
- base64urlEncodeWithoutPadding(JSON.stringify(header)),
- base64urlEncodeWithoutPadding(JSON.stringify(payload)),
- signature
- ].join('.');
-}
-const emulatorStatus = {};
-// Checks whether any products are running on an emulator
-function getEmulatorSummary() {
- const summary = {
- prod: [],
- emulator: []
- };
- for (const key of Object.keys(emulatorStatus)) {
- if (emulatorStatus[key]) {
- summary.emulator.push(key);
- }
- else {
- summary.prod.push(key);
- }
- }
- return summary;
-}
-function getOrCreateEl(id) {
- let parentDiv = document.getElementById(id);
- let created = false;
- if (!parentDiv) {
- parentDiv = document.createElement('div');
- parentDiv.setAttribute('id', id);
- created = true;
- }
- return { created, element: parentDiv };
-}
-let previouslyDismissed = false;
-/**
- * Updates Emulator Banner. Primarily used for Firebase Studio
- * @param name
- * @param isRunningEmulator
- * @public
- */
-function updateEmulatorBanner(name, isRunningEmulator) {
- if (typeof window === 'undefined' ||
- typeof document === 'undefined' ||
- !isCloudWorkstation(window.location.host) ||
- emulatorStatus[name] === isRunningEmulator ||
- emulatorStatus[name] || // If already set to use emulator, can't go back to prod.
- previouslyDismissed) {
- return;
- }
- emulatorStatus[name] = isRunningEmulator;
- function prefixedId(id) {
- return `__firebase__banner__${id}`;
- }
- const bannerId = '__firebase__banner';
- const summary = getEmulatorSummary();
- const showError = summary.prod.length > 0;
- function tearDown() {
- const element = document.getElementById(bannerId);
- if (element) {
- element.remove();
- }
- }
- function setupBannerStyles(bannerEl) {
- bannerEl.style.display = 'flex';
- bannerEl.style.background = '#7faaf0';
- bannerEl.style.position = 'fixed';
- bannerEl.style.bottom = '5px';
- bannerEl.style.left = '5px';
- bannerEl.style.padding = '.5em';
- bannerEl.style.borderRadius = '5px';
- bannerEl.style.alignItems = 'center';
- }
- function setupIconStyles(prependIcon, iconId) {
- prependIcon.setAttribute('width', '24');
- prependIcon.setAttribute('id', iconId);
- prependIcon.setAttribute('height', '24');
- prependIcon.setAttribute('viewBox', '0 0 24 24');
- prependIcon.setAttribute('fill', 'none');
- prependIcon.style.marginLeft = '-6px';
- }
- function setupCloseBtn() {
- const closeBtn = document.createElement('span');
- closeBtn.style.cursor = 'pointer';
- closeBtn.style.marginLeft = '16px';
- closeBtn.style.fontSize = '24px';
- closeBtn.innerHTML = ' ×';
- closeBtn.onclick = () => {
- previouslyDismissed = true;
- tearDown();
- };
- return closeBtn;
- }
- function setupLinkStyles(learnMoreLink, learnMoreId) {
- learnMoreLink.setAttribute('id', learnMoreId);
- learnMoreLink.innerText = 'Learn more';
- learnMoreLink.href =
- 'https://firebase.google.com/docs/studio/preview-apps#preview-backend';
- learnMoreLink.setAttribute('target', '__blank');
- learnMoreLink.style.paddingLeft = '5px';
- learnMoreLink.style.textDecoration = 'underline';
- }
- function setupDom() {
- const banner = getOrCreateEl(bannerId);
- const firebaseTextId = prefixedId('text');
- const firebaseText = document.getElementById(firebaseTextId) || document.createElement('span');
- const learnMoreId = prefixedId('learnmore');
- const learnMoreLink = document.getElementById(learnMoreId) ||
- document.createElement('a');
- const prependIconId = prefixedId('preprendIcon');
- const prependIcon = document.getElementById(prependIconId) ||
- document.createElementNS('http://www.w3.org/2000/svg', 'svg');
- if (banner.created) {
- // update styles
- const bannerEl = banner.element;
- setupBannerStyles(bannerEl);
- setupLinkStyles(learnMoreLink, learnMoreId);
- const closeBtn = setupCloseBtn();
- setupIconStyles(prependIcon, prependIconId);
- bannerEl.append(prependIcon, firebaseText, learnMoreLink, closeBtn);
- document.body.appendChild(bannerEl);
- }
- if (showError) {
- firebaseText.innerText = `Preview backend disconnected.`;
- prependIcon.innerHTML = `
-
-
-
-
-
-
- `;
- }
- else {
- prependIcon.innerHTML = `
-
-
-
-
-
-
- `;
- firebaseText.innerText = 'Preview backend running in this workspace.';
- }
- firebaseText.setAttribute('id', firebaseTextId);
- }
- if (document.readyState === 'loading') {
- window.addEventListener('DOMContentLoaded', setupDom);
- }
- else {
- setupDom();
- }
-}
-
-/**
- * @license
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Returns navigator.userAgent string or '' if it's not defined.
- * @return user agent string
- */
-function getUA() {
- if (typeof navigator !== 'undefined' &&
- typeof navigator['userAgent'] === 'string') {
- return navigator['userAgent'];
- }
- else {
- return '';
- }
-}
-/**
- * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.
- *
- * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap
- * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally
- * wait for a callback.
- */
-function isMobileCordova() {
- return (typeof window !== 'undefined' &&
- // @ts-ignore Setting up an broadly applicable index signature for Window
- // just to deal with this case would probably be a bad idea.
- !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&
- /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));
-}
-/**
- * Detect Node.js.
- *
- * @return true if Node.js environment is detected or specified.
- */
-// Node detection logic from: https://github.com/iliakan/detect-node/
-function isNode() {
- var _a;
- const forceEnvironment = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.forceEnvironment;
- if (forceEnvironment === 'node') {
- return true;
- }
- else if (forceEnvironment === 'browser') {
- return false;
- }
- try {
- return (Object.prototype.toString.call(__webpack_require__.g.process) === '[object process]');
- }
- catch (e) {
- return false;
- }
-}
-/**
- * Detect Browser Environment.
- * Note: This will return true for certain test frameworks that are incompletely
- * mimicking a browser, and should not lead to assuming all browser APIs are
- * available.
- */
-function isBrowser() {
- return typeof window !== 'undefined' || isWebWorker();
-}
-/**
- * Detect Web Worker context.
- */
-function isWebWorker() {
- return (typeof WorkerGlobalScope !== 'undefined' &&
- typeof self !== 'undefined' &&
- self instanceof WorkerGlobalScope);
-}
-/**
- * Detect Cloudflare Worker context.
- */
-function isCloudflareWorker() {
- return (typeof navigator !== 'undefined' &&
- navigator.userAgent === 'Cloudflare-Workers');
-}
-function isBrowserExtension() {
- const runtime = typeof chrome === 'object'
- ? chrome.runtime
- : typeof browser === 'object'
- ? browser.runtime
- : undefined;
- return typeof runtime === 'object' && runtime.id !== undefined;
-}
-/**
- * Detect React Native.
- *
- * @return true if ReactNative environment is detected.
- */
-function isReactNative() {
- return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');
-}
-/** Detects Electron apps. */
-function isElectron() {
- return getUA().indexOf('Electron/') >= 0;
-}
-/** Detects Internet Explorer. */
-function isIE() {
- const ua = getUA();
- return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;
-}
-/** Detects Universal Windows Platform apps. */
-function isUWP() {
- return getUA().indexOf('MSAppHost/') >= 0;
-}
-/**
- * Detect whether the current SDK build is the Node version.
- *
- * @return true if it's the Node SDK build.
- */
-function isNodeSdk() {
- return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;
-}
-/** Returns true if we are running in Safari. */
-function isSafari() {
- return (!isNode() &&
- !!navigator.userAgent &&
- navigator.userAgent.includes('Safari') &&
- !navigator.userAgent.includes('Chrome'));
-}
-/** Returns true if we are running in Safari or WebKit */
-function isSafariOrWebkit() {
- return (!isNode() &&
- !!navigator.userAgent &&
- (navigator.userAgent.includes('Safari') ||
- navigator.userAgent.includes('WebKit')) &&
- !navigator.userAgent.includes('Chrome'));
-}
-/**
- * This method checks if indexedDB is supported by current browser/service worker context
- * @return true if indexedDB is supported by current browser/service worker context
- */
-function isIndexedDBAvailable() {
- try {
- return typeof indexedDB === 'object';
- }
- catch (e) {
- return false;
- }
-}
-/**
- * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject
- * if errors occur during the database open operation.
- *
- * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox
- * private browsing)
- */
-function validateIndexedDBOpenable() {
- return new Promise((resolve, reject) => {
- try {
- let preExist = true;
- const DB_CHECK_NAME = 'validate-browser-context-for-indexeddb-analytics-module';
- const request = self.indexedDB.open(DB_CHECK_NAME);
- request.onsuccess = () => {
- request.result.close();
- // delete database only when it doesn't pre-exist
- if (!preExist) {
- self.indexedDB.deleteDatabase(DB_CHECK_NAME);
- }
- resolve(true);
- };
- request.onupgradeneeded = () => {
- preExist = false;
- };
- request.onerror = () => {
- var _a;
- reject(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || '');
- };
- }
- catch (error) {
- reject(error);
- }
- });
-}
-/**
- *
- * This method checks whether cookie is enabled within current browser
- * @return true if cookie is enabled within current browser
- */
-function areCookiesEnabled() {
- if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {
- return false;
- }
- return true;
-}
-
-/**
- * @license
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @fileoverview Standardized Firebase Error.
- *
- * Usage:
- *
- * // TypeScript string literals for type-safe codes
- * type Err =
- * 'unknown' |
- * 'object-not-found'
- * ;
- *
- * // Closure enum for type-safe error codes
- * // at-enum {string}
- * var Err = {
- * UNKNOWN: 'unknown',
- * OBJECT_NOT_FOUND: 'object-not-found',
- * }
- *
- * let errors: Map = {
- * 'generic-error': "Unknown error",
- * 'file-not-found': "Could not find file: {$file}",
- * };
- *
- * // Type-safe function - must pass a valid error code as param.
- * let error = new ErrorFactory('service', 'Service', errors);
- *
- * ...
- * throw error.create(Err.GENERIC);
- * ...
- * throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});
- * ...
- * // Service: Could not file file: foo.txt (service/file-not-found).
- *
- * catch (e) {
- * assert(e.message === "Could not find file: foo.txt.");
- * if ((e as FirebaseError)?.code === 'service/file-not-found') {
- * console.log("Could not read file: " + e['file']);
- * }
- * }
- */
-const ERROR_NAME = 'FirebaseError';
-// Based on code from:
-// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types
-class FirebaseError extends Error {
- constructor(
- /** The error code for this error. */
- code, message,
- /** Custom data for this error. */
- customData) {
- super(message);
- this.code = code;
- this.customData = customData;
- /** The custom name for all FirebaseErrors. */
- this.name = ERROR_NAME;
- // Fix For ES5
- // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
- // TODO(dlarocque): Replace this with `new.target`: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget
- // which we can now use since we no longer target ES5.
- Object.setPrototypeOf(this, FirebaseError.prototype);
- // Maintains proper stack trace for where our error was thrown.
- // Only available on V8.
- if (Error.captureStackTrace) {
- Error.captureStackTrace(this, ErrorFactory.prototype.create);
- }
- }
-}
-class ErrorFactory {
- constructor(service, serviceName, errors) {
- this.service = service;
- this.serviceName = serviceName;
- this.errors = errors;
- }
- create(code, ...data) {
- const customData = data[0] || {};
- const fullCode = `${this.service}/${code}`;
- const template = this.errors[code];
- const message = template ? replaceTemplate(template, customData) : 'Error';
- // Service Name: Error message (service/code).
- const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;
- const error = new FirebaseError(fullCode, fullMessage, customData);
- return error;
- }
-}
-function replaceTemplate(template, data) {
- return template.replace(PATTERN, (_, key) => {
- const value = data[key];
- return value != null ? String(value) : `<${key}?>`;
- });
-}
-const PATTERN = /\{\$([^}]+)}/g;
-
-/**
- * @license
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Evaluates a JSON string into a javascript object.
- *
- * @param {string} str A string containing JSON.
- * @return {*} The javascript object representing the specified JSON.
- */
-function jsonEval(str) {
- return JSON.parse(str);
-}
-/**
- * Returns JSON representing a javascript object.
- * @param {*} data JavaScript object to be stringified.
- * @return {string} The JSON contents of the object.
- */
-function stringify(data) {
- return JSON.stringify(data);
-}
-
-/**
- * @license
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Decodes a Firebase auth. token into constituent parts.
- *
- * Notes:
- * - May return with invalid / incomplete claims if there's no native base64 decoding support.
- * - Doesn't check if the token is actually valid.
- */
-const decode = function (token) {
- let header = {}, claims = {}, data = {}, signature = '';
- try {
- const parts = token.split('.');
- header = jsonEval(base64Decode(parts[0]) || '');
- claims = jsonEval(base64Decode(parts[1]) || '');
- signature = parts[2];
- data = claims['d'] || {};
- delete claims['d'];
- }
- catch (e) { }
- return {
- header,
- claims,
- data,
- signature
- };
-};
-/**
- * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the
- * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.
- *
- * Notes:
- * - May return a false negative if there's no native base64 decoding support.
- * - Doesn't check if the token is actually valid.
- */
-const isValidTimestamp = function (token) {
- const claims = decode(token).claims;
- const now = Math.floor(new Date().getTime() / 1000);
- let validSince = 0, validUntil = 0;
- if (typeof claims === 'object') {
- if (claims.hasOwnProperty('nbf')) {
- validSince = claims['nbf'];
- }
- else if (claims.hasOwnProperty('iat')) {
- validSince = claims['iat'];
- }
- if (claims.hasOwnProperty('exp')) {
- validUntil = claims['exp'];
- }
- else {
- // token will expire after 24h by default
- validUntil = validSince + 86400;
- }
- }
- return (!!now &&
- !!validSince &&
- !!validUntil &&
- now >= validSince &&
- now <= validUntil);
-};
-/**
- * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.
- *
- * Notes:
- * - May return null if there's no native base64 decoding support.
- * - Doesn't check if the token is actually valid.
- */
-const issuedAtTime = function (token) {
- const claims = decode(token).claims;
- if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {
- return claims['iat'];
- }
- return null;
-};
-/**
- * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.
- *
- * Notes:
- * - May return a false negative if there's no native base64 decoding support.
- * - Doesn't check if the token is actually valid.
- */
-const isValidFormat = function (token) {
- const decoded = decode(token), claims = decoded.claims;
- return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');
-};
-/**
- * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.
- *
- * Notes:
- * - May return a false negative if there's no native base64 decoding support.
- * - Doesn't check if the token is actually valid.
- */
-const isAdmin = function (token) {
- const claims = decode(token).claims;
- return typeof claims === 'object' && claims['admin'] === true;
-};
-
-/**
- * @license
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-function contains(obj, key) {
- return Object.prototype.hasOwnProperty.call(obj, key);
-}
-function safeGet(obj, key) {
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
- return obj[key];
- }
- else {
- return undefined;
- }
-}
-function isEmpty(obj) {
- for (const key in obj) {
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
- return false;
- }
- }
- return true;
-}
-function map(obj, fn, contextObj) {
- const res = {};
- for (const key in obj) {
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
- res[key] = fn.call(contextObj, obj[key], key, obj);
- }
- }
- return res;
-}
-/**
- * Deep equal two objects. Support Arrays and Objects.
- */
-function deepEqual(a, b) {
- if (a === b) {
- return true;
- }
- const aKeys = Object.keys(a);
- const bKeys = Object.keys(b);
- for (const k of aKeys) {
- if (!bKeys.includes(k)) {
- return false;
- }
- const aProp = a[k];
- const bProp = b[k];
- if (isObject(aProp) && isObject(bProp)) {
- if (!deepEqual(aProp, bProp)) {
- return false;
- }
- }
- else if (aProp !== bProp) {
- return false;
- }
- }
- for (const k of bKeys) {
- if (!aKeys.includes(k)) {
- return false;
- }
- }
- return true;
-}
-function isObject(thing) {
- return thing !== null && typeof thing === 'object';
-}
-
-/**
- * @license
- * Copyright 2022 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Rejects if the given promise doesn't resolve in timeInMS milliseconds.
- * @internal
- */
-function promiseWithTimeout(promise, timeInMS = 2000) {
- const deferredPromise = new Deferred();
- setTimeout(() => deferredPromise.reject('timeout!'), timeInMS);
- promise.then(deferredPromise.resolve, deferredPromise.reject);
- return deferredPromise.promise;
-}
-
-/**
- * @license
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a
- * params object (e.g. {arg: 'val', arg2: 'val2'})
- * Note: You must prepend it with ? when adding it to a URL.
- */
-function querystring(querystringParams) {
- const params = [];
- for (const [key, value] of Object.entries(querystringParams)) {
- if (Array.isArray(value)) {
- value.forEach(arrayVal => {
- params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));
- });
- }
- else {
- params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
- }
- }
- return params.length ? '&' + params.join('&') : '';
-}
-/**
- * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object
- * (e.g. {arg: 'val', arg2: 'val2'})
- */
-function querystringDecode(querystring) {
- const obj = {};
- const tokens = querystring.replace(/^\?/, '').split('&');
- tokens.forEach(token => {
- if (token) {
- const [key, value] = token.split('=');
- obj[decodeURIComponent(key)] = decodeURIComponent(value);
- }
- });
- return obj;
-}
-/**
- * Extract the query string part of a URL, including the leading question mark (if present).
- */
-function extractQuerystring(url) {
- const queryStart = url.indexOf('?');
- if (!queryStart) {
- return '';
- }
- const fragmentStart = url.indexOf('#', queryStart);
- return url.substring(queryStart, fragmentStart > 0 ? fragmentStart : undefined);
-}
-
-/**
- * @license
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @fileoverview SHA-1 cryptographic hash.
- * Variable names follow the notation in FIPS PUB 180-3:
- * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.
- *
- * Usage:
- * var sha1 = new sha1();
- * sha1.update(bytes);
- * var hash = sha1.digest();
- *
- * Performance:
- * Chrome 23: ~400 Mbit/s
- * Firefox 16: ~250 Mbit/s
- *
- */
-/**
- * SHA-1 cryptographic hash constructor.
- *
- * The properties declared here are discussed in the above algorithm document.
- * @constructor
- * @final
- * @struct
- */
-class Sha1 {
- constructor() {
- /**
- * Holds the previous values of accumulated variables a-e in the compress_
- * function.
- * @private
- */
- this.chain_ = [];
- /**
- * A buffer holding the partially computed hash result.
- * @private
- */
- this.buf_ = [];
- /**
- * An array of 80 bytes, each a part of the message to be hashed. Referred to
- * as the message schedule in the docs.
- * @private
- */
- this.W_ = [];
- /**
- * Contains data needed to pad messages less than 64 bytes.
- * @private
- */
- this.pad_ = [];
- /**
- * @private {number}
- */
- this.inbuf_ = 0;
- /**
- * @private {number}
- */
- this.total_ = 0;
- this.blockSize = 512 / 8;
- this.pad_[0] = 128;
- for (let i = 1; i < this.blockSize; ++i) {
- this.pad_[i] = 0;
- }
- this.reset();
- }
- reset() {
- this.chain_[0] = 0x67452301;
- this.chain_[1] = 0xefcdab89;
- this.chain_[2] = 0x98badcfe;
- this.chain_[3] = 0x10325476;
- this.chain_[4] = 0xc3d2e1f0;
- this.inbuf_ = 0;
- this.total_ = 0;
- }
- /**
- * Internal compress helper function.
- * @param buf Block to compress.
- * @param offset Offset of the block in the buffer.
- * @private
- */
- compress_(buf, offset) {
- if (!offset) {
- offset = 0;
- }
- const W = this.W_;
- // get 16 big endian words
- if (typeof buf === 'string') {
- for (let i = 0; i < 16; i++) {
- // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS
- // have a bug that turns the post-increment ++ operator into pre-increment
- // during JIT compilation. We have code that depends heavily on SHA-1 for
- // correctness and which is affected by this bug, so I've removed all uses
- // of post-increment ++ in which the result value is used. We can revert
- // this change once the Safari bug
- // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and
- // most clients have been updated.
- W[i] =
- (buf.charCodeAt(offset) << 24) |
- (buf.charCodeAt(offset + 1) << 16) |
- (buf.charCodeAt(offset + 2) << 8) |
- buf.charCodeAt(offset + 3);
- offset += 4;
- }
- }
- else {
- for (let i = 0; i < 16; i++) {
- W[i] =
- (buf[offset] << 24) |
- (buf[offset + 1] << 16) |
- (buf[offset + 2] << 8) |
- buf[offset + 3];
- offset += 4;
- }
- }
- // expand to 80 words
- for (let i = 16; i < 80; i++) {
- const t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];
- W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;
- }
- let a = this.chain_[0];
- let b = this.chain_[1];
- let c = this.chain_[2];
- let d = this.chain_[3];
- let e = this.chain_[4];
- let f, k;
- // TODO(user): Try to unroll this loop to speed up the computation.
- for (let i = 0; i < 80; i++) {
- if (i < 40) {
- if (i < 20) {
- f = d ^ (b & (c ^ d));
- k = 0x5a827999;
- }
- else {
- f = b ^ c ^ d;
- k = 0x6ed9eba1;
- }
- }
- else {
- if (i < 60) {
- f = (b & c) | (d & (b | c));
- k = 0x8f1bbcdc;
- }
- else {
- f = b ^ c ^ d;
- k = 0xca62c1d6;
- }
- }
- const t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;
- e = d;
- d = c;
- c = ((b << 30) | (b >>> 2)) & 0xffffffff;
- b = a;
- a = t;
- }
- this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;
- this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;
- this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;
- this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;
- this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;
- }
- update(bytes, length) {
- // TODO(johnlenz): tighten the function signature and remove this check
- if (bytes == null) {
- return;
- }
- if (length === undefined) {
- length = bytes.length;
- }
- const lengthMinusBlock = length - this.blockSize;
- let n = 0;
- // Using local instead of member variables gives ~5% speedup on Firefox 16.
- const buf = this.buf_;
- let inbuf = this.inbuf_;
- // The outer while loop should execute at most twice.
- while (n < length) {
- // When we have no data in the block to top up, we can directly process the
- // input buffer (assuming it contains sufficient data). This gives ~25%
- // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that
- // the data is provided in large chunks (or in multiples of 64 bytes).
- if (inbuf === 0) {
- while (n <= lengthMinusBlock) {
- this.compress_(bytes, n);
- n += this.blockSize;
- }
- }
- if (typeof bytes === 'string') {
- while (n < length) {
- buf[inbuf] = bytes.charCodeAt(n);
- ++inbuf;
- ++n;
- if (inbuf === this.blockSize) {
- this.compress_(buf);
- inbuf = 0;
- // Jump to the outer loop so we use the full-block optimization.
- break;
- }
- }
- }
- else {
- while (n < length) {
- buf[inbuf] = bytes[n];
- ++inbuf;
- ++n;
- if (inbuf === this.blockSize) {
- this.compress_(buf);
- inbuf = 0;
- // Jump to the outer loop so we use the full-block optimization.
- break;
- }
- }
- }
- }
- this.inbuf_ = inbuf;
- this.total_ += length;
- }
- /** @override */
- digest() {
- const digest = [];
- let totalBits = this.total_ * 8;
- // Add pad 0x80 0x00*.
- if (this.inbuf_ < 56) {
- this.update(this.pad_, 56 - this.inbuf_);
- }
- else {
- this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));
- }
- // Add # bits.
- for (let i = this.blockSize - 1; i >= 56; i--) {
- this.buf_[i] = totalBits & 255;
- totalBits /= 256; // Don't use bit-shifting here!
- }
- this.compress_(this.buf_);
- let n = 0;
- for (let i = 0; i < 5; i++) {
- for (let j = 24; j >= 0; j -= 8) {
- digest[n] = (this.chain_[i] >> j) & 255;
- ++n;
- }
- }
- return digest;
- }
-}
-
-/**
- * Helper to make a Subscribe function (just like Promise helps make a
- * Thenable).
- *
- * @param executor Function which can make calls to a single Observer
- * as a proxy.
- * @param onNoObservers Callback when count of Observers goes to zero.
- */
-function createSubscribe(executor, onNoObservers) {
- const proxy = new ObserverProxy(executor, onNoObservers);
- return proxy.subscribe.bind(proxy);
-}
-/**
- * Implement fan-out for any number of Observers attached via a subscribe
- * function.
- */
-class ObserverProxy {
- /**
- * @param executor Function which can make calls to a single Observer
- * as a proxy.
- * @param onNoObservers Callback when count of Observers goes to zero.
- */
- constructor(executor, onNoObservers) {
- this.observers = [];
- this.unsubscribes = [];
- this.observerCount = 0;
- // Micro-task scheduling by calling task.then().
- this.task = Promise.resolve();
- this.finalized = false;
- this.onNoObservers = onNoObservers;
- // Call the executor asynchronously so subscribers that are called
- // synchronously after the creation of the subscribe function
- // can still receive the very first value generated in the executor.
- this.task
- .then(() => {
- executor(this);
- })
- .catch(e => {
- this.error(e);
- });
- }
- next(value) {
- this.forEachObserver((observer) => {
- observer.next(value);
- });
- }
- error(error) {
- this.forEachObserver((observer) => {
- observer.error(error);
- });
- this.close(error);
- }
- complete() {
- this.forEachObserver((observer) => {
- observer.complete();
- });
- this.close();
- }
- /**
- * Subscribe function that can be used to add an Observer to the fan-out list.
- *
- * - We require that no event is sent to a subscriber synchronously to their
- * call to subscribe().
- */
- subscribe(nextOrObserver, error, complete) {
- let observer;
- if (nextOrObserver === undefined &&
- error === undefined &&
- complete === undefined) {
- throw new Error('Missing Observer.');
- }
- // Assemble an Observer object when passed as callback functions.
- if (implementsAnyMethods(nextOrObserver, [
- 'next',
- 'error',
- 'complete'
- ])) {
- observer = nextOrObserver;
- }
- else {
- observer = {
- next: nextOrObserver,
- error,
- complete
- };
- }
- if (observer.next === undefined) {
- observer.next = noop;
- }
- if (observer.error === undefined) {
- observer.error = noop;
- }
- if (observer.complete === undefined) {
- observer.complete = noop;
- }
- const unsub = this.unsubscribeOne.bind(this, this.observers.length);
- // Attempt to subscribe to a terminated Observable - we
- // just respond to the Observer with the final error or complete
- // event.
- if (this.finalized) {
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- this.task.then(() => {
- try {
- if (this.finalError) {
- observer.error(this.finalError);
- }
- else {
- observer.complete();
- }
- }
- catch (e) {
- // nothing
- }
- return;
- });
- }
- this.observers.push(observer);
- return unsub;
- }
- // Unsubscribe is synchronous - we guarantee that no events are sent to
- // any unsubscribed Observer.
- unsubscribeOne(i) {
- if (this.observers === undefined || this.observers[i] === undefined) {
- return;
- }
- delete this.observers[i];
- this.observerCount -= 1;
- if (this.observerCount === 0 && this.onNoObservers !== undefined) {
- this.onNoObservers(this);
- }
- }
- forEachObserver(fn) {
- if (this.finalized) {
- // Already closed by previous event....just eat the additional values.
- return;
- }
- // Since sendOne calls asynchronously - there is no chance that
- // this.observers will become undefined.
- for (let i = 0; i < this.observers.length; i++) {
- this.sendOne(i, fn);
- }
- }
- // Call the Observer via one of it's callback function. We are careful to
- // confirm that the observe has not been unsubscribed since this asynchronous
- // function had been queued.
- sendOne(i, fn) {
- // Execute the callback asynchronously
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- this.task.then(() => {
- if (this.observers !== undefined && this.observers[i] !== undefined) {
- try {
- fn(this.observers[i]);
- }
- catch (e) {
- // Ignore exceptions raised in Observers or missing methods of an
- // Observer.
- // Log error to console. b/31404806
- if (typeof console !== 'undefined' && console.error) {
- console.error(e);
- }
- }
- }
- });
- }
- close(err) {
- if (this.finalized) {
- return;
- }
- this.finalized = true;
- if (err !== undefined) {
- this.finalError = err;
- }
- // Proxy is no longer needed - garbage collect references
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
- this.task.then(() => {
- this.observers = undefined;
- this.onNoObservers = undefined;
- });
- }
-}
-/** Turn synchronous function into one called asynchronously. */
-// eslint-disable-next-line @typescript-eslint/ban-types
-function async(fn, onError) {
- return (...args) => {
- Promise.resolve(true)
- .then(() => {
- fn(...args);
- })
- .catch((error) => {
- if (onError) {
- onError(error);
- }
- });
- };
-}
-/**
- * Return true if the object passed in implements any of the named methods.
- */
-function implementsAnyMethods(obj, methods) {
- if (typeof obj !== 'object' || obj === null) {
- return false;
- }
- for (const method of methods) {
- if (method in obj && typeof obj[method] === 'function') {
- return true;
- }
- }
- return false;
-}
-function noop() {
- // do nothing
-}
-
-/**
- * @license
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Check to make sure the appropriate number of arguments are provided for a public function.
- * Throws an error if it fails.
- *
- * @param fnName The function name
- * @param minCount The minimum number of arguments to allow for the function call
- * @param maxCount The maximum number of argument to allow for the function call
- * @param argCount The actual number of arguments provided.
- */
-const validateArgCount = function (fnName, minCount, maxCount, argCount) {
- let argError;
- if (argCount < minCount) {
- argError = 'at least ' + minCount;
- }
- else if (argCount > maxCount) {
- argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;
- }
- if (argError) {
- const error = fnName +
- ' failed: Was called with ' +
- argCount +
- (argCount === 1 ? ' argument.' : ' arguments.') +
- ' Expects ' +
- argError +
- '.';
- throw new Error(error);
- }
-};
-/**
- * Generates a string to prefix an error message about failed argument validation
- *
- * @param fnName The function name
- * @param argName The name of the argument
- * @return The prefix to add to the error thrown for validation.
- */
-function errorPrefix(fnName, argName) {
- return `${fnName} failed: ${argName} argument `;
-}
-/**
- * @param fnName
- * @param argumentNumber
- * @param namespace
- * @param optional
- */
-function validateNamespace(fnName, namespace, optional) {
- if (optional && !namespace) {
- return;
- }
- if (typeof namespace !== 'string') {
- //TODO: I should do more validation here. We only allow certain chars in namespaces.
- throw new Error(errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.');
- }
-}
-function validateCallback(fnName, argumentName,
-// eslint-disable-next-line @typescript-eslint/ban-types
-callback, optional) {
- if (optional && !callback) {
- return;
- }
- if (typeof callback !== 'function') {
- throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid function.');
- }
-}
-function validateContextObject(fnName, argumentName, context, optional) {
- if (optional && !context) {
- return;
- }
- if (typeof context !== 'object' || context === null) {
- throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid context object.');
- }
-}
-
-/**
- * @license
- * Copyright 2017 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they
-// automatically replaced '\r\n' with '\n', and they didn't handle surrogate pairs,
-// so it's been modified.
-// Note that not all Unicode characters appear as single characters in JavaScript strings.
-// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters
-// use 2 characters in JavaScript. All 4-byte UTF-8 characters begin with a first
-// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate
-// pair).
-// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3
-/**
- * @param {string} str
- * @return {Array}
- */
-const stringToByteArray = function (str) {
- const out = [];
- let p = 0;
- for (let i = 0; i < str.length; i++) {
- let c = str.charCodeAt(i);
- // Is this the lead surrogate in a surrogate pair?
- if (c >= 0xd800 && c <= 0xdbff) {
- const high = c - 0xd800; // the high 10 bits.
- i++;
- assert(i < str.length, 'Surrogate pair missing trail surrogate.');
- const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.
- c = 0x10000 + (high << 10) + low;
- }
- if (c < 128) {
- out[p++] = c;
- }
- else if (c < 2048) {
- out[p++] = (c >> 6) | 192;
- out[p++] = (c & 63) | 128;
- }
- else if (c < 65536) {
- out[p++] = (c >> 12) | 224;
- out[p++] = ((c >> 6) & 63) | 128;
- out[p++] = (c & 63) | 128;
- }
- else {
- out[p++] = (c >> 18) | 240;
- out[p++] = ((c >> 12) & 63) | 128;
- out[p++] = ((c >> 6) & 63) | 128;
- out[p++] = (c & 63) | 128;
- }
- }
- return out;
-};
-/**
- * Calculate length without actually converting; useful for doing cheaper validation.
- * @param {string} str
- * @return {number}
- */
-const stringLength = function (str) {
- let p = 0;
- for (let i = 0; i < str.length; i++) {
- const c = str.charCodeAt(i);
- if (c < 128) {
- p++;
- }
- else if (c < 2048) {
- p += 2;
- }
- else if (c >= 0xd800 && c <= 0xdbff) {
- // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.
- p += 4;
- i++; // skip trail surrogate.
- }
- else {
- p += 3;
- }
- }
- return p;
-};
-
-/**
- * @license
- * Copyright 2019 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * The amount of milliseconds to exponentially increase.
- */
-const DEFAULT_INTERVAL_MILLIS = 1000;
-/**
- * The factor to backoff by.
- * Should be a number greater than 1.
- */
-const DEFAULT_BACKOFF_FACTOR = 2;
-/**
- * The maximum milliseconds to increase to.
- *
- * Visible for testing
- */
-const MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.
-/**
- * The percentage of backoff time to randomize by.
- * See
- * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic
- * for context.
- *
- *
Visible for testing
- */
-const RANDOM_FACTOR = 0.5;
-/**
- * Based on the backoff method from
- * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.
- * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.
- */
-function calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {
- // Calculates an exponentially increasing value.
- // Deviation: calculates value from count and a constant interval, so we only need to save value
- // and count to restore state.
- const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);
- // A random "fuzz" to avoid waves of retries.
- // Deviation: randomFactor is required.
- const randomWait = Math.round(
- // A fraction of the backoff value to add/subtract.
- // Deviation: changes multiplication order to improve readability.
- RANDOM_FACTOR *
- currBaseValue *
- // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines
- // if we add or subtract.
- (Math.random() - 0.5) *
- 2);
- // Limits backoff to max to avoid effectively permanent backoff.
- return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);
-}
-
-/**
- * @license
- * Copyright 2020 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Provide English ordinal letters after a number
- */
-function ordinal(i) {
- if (!Number.isFinite(i)) {
- return `${i}`;
- }
- return i + indicator(i);
-}
-function indicator(i) {
- i = Math.abs(i);
- const cent = i % 100;
- if (cent >= 10 && cent <= 20) {
- return 'th';
- }
- const dec = i % 10;
- if (dec === 1) {
- return 'st';
- }
- if (dec === 2) {
- return 'nd';
- }
- if (dec === 3) {
- return 'rd';
- }
- return 'th';
-}
-
-/**
- * @license
- * Copyright 2021 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-function getModularInstance(service) {
- if (service && service._delegate) {
- return service._delegate;
- }
- else {
- return service;
- }
-}
-
-
-//# sourceMappingURL=index.esm2017.js.map
-
-
/***/ }),
/***/ "./node_modules/@firebase/util/dist/postinstall.mjs":
@@ -7191,10158 +18785,13 @@ const unwrap = (value) => reverseTransformCache.get(value);
/***/ }),
-/***/ "./node_modules/react-dom/client.js":
-/*!******************************************!*\
- !*** ./node_modules/react-dom/client.js ***!
- \******************************************/
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-
-
-var m = __webpack_require__(/*! react-dom */ "react-dom");
-if (false) // removed by dead control flow
-{} else {
- var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
- exports.createRoot = function(c, o) {
- i.usingClientEntryPoint = true;
- try {
- return m.createRoot(c, o);
- } finally {
- i.usingClientEntryPoint = false;
- }
- };
- exports.hydrateRoot = function(c, h, o) {
- i.usingClientEntryPoint = true;
- try {
- return m.hydrateRoot(c, h, o);
- } finally {
- i.usingClientEntryPoint = false;
- }
- };
-}
-
-
-/***/ }),
-
-/***/ "./src/config.js":
-/*!***********************!*\
- !*** ./src/config.js ***!
- \***********************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ API_KEY: function() { return /* binding */ API_KEY; },
-/* harmony export */ APP_NAME: function() { return /* binding */ APP_NAME; },
-/* harmony export */ AVATAR_SIZE: function() { return /* binding */ AVATAR_SIZE; },
-/* harmony export */ BROKEN_IMAGE_SIZE: function() { return /* binding */ BROKEN_IMAGE_SIZE; },
-/* harmony export */ CHANNEL_ACCESS_MODE: function() { return /* binding */ CHANNEL_ACCESS_MODE; },
-/* harmony export */ CLICKABLE_URL_SCHEMES: function() { return /* binding */ CLICKABLE_URL_SCHEMES; },
-/* harmony export */ DEFAULT_COLOR_SCHEME: function() { return /* binding */ DEFAULT_COLOR_SCHEME; },
-/* harmony export */ DEFAULT_HOST: function() { return /* binding */ DEFAULT_HOST; },
-/* harmony export */ DEFAULT_P2P_ACCESS_MODE: function() { return /* binding */ DEFAULT_P2P_ACCESS_MODE; },
-/* harmony export */ DEFAULT_TEXT_SIZE: function() { return /* binding */ DEFAULT_TEXT_SIZE; },
-/* harmony export */ DRAFTY_FR_MIME_TYPE_LEGACY: function() { return /* binding */ DRAFTY_FR_MIME_TYPE_LEGACY; },
-/* harmony export */ EDIT_PREVIEW_LENGTH: function() { return /* binding */ EDIT_PREVIEW_LENGTH; },
-/* harmony export */ FORWARDED_PREVIEW_LENGTH: function() { return /* binding */ FORWARDED_PREVIEW_LENGTH; },
-/* harmony export */ IMAGE_PREVIEW_DIM: function() { return /* binding */ IMAGE_PREVIEW_DIM; },
-/* harmony export */ IMAGE_THUMBNAIL_DIM: function() { return /* binding */ IMAGE_THUMBNAIL_DIM; },
-/* harmony export */ IMMEDIATE_P2P_SUBSCRIPTION: function() { return /* binding */ IMMEDIATE_P2P_SUBSCRIPTION; },
-/* harmony export */ KEYPRESS_DELAY: function() { return /* binding */ KEYPRESS_DELAY; },
-/* harmony export */ KNOWN_HOSTS: function() { return /* binding */ KNOWN_HOSTS; },
-/* harmony export */ LINK_CONTACT_US: function() { return /* binding */ LINK_CONTACT_US; },
-/* harmony export */ LINK_PRIVACY_POLICY: function() { return /* binding */ LINK_PRIVACY_POLICY; },
-/* harmony export */ LINK_TERMS_OF_SERVICE: function() { return /* binding */ LINK_TERMS_OF_SERVICE; },
-/* harmony export */ LOGGING_ENABLED: function() { return /* binding */ LOGGING_ENABLED; },
-/* harmony export */ MAX_AVATAR_BYTES: function() { return /* binding */ MAX_AVATAR_BYTES; },
-/* harmony export */ MAX_DURATION: function() { return /* binding */ MAX_DURATION; },
-/* harmony export */ MAX_EXTERN_ATTACHMENT_SIZE: function() { return /* binding */ MAX_EXTERN_ATTACHMENT_SIZE; },
-/* harmony export */ MAX_IMAGE_DIM: function() { return /* binding */ MAX_IMAGE_DIM; },
-/* harmony export */ MAX_INBAND_ATTACHMENT_SIZE: function() { return /* binding */ MAX_INBAND_ATTACHMENT_SIZE; },
-/* harmony export */ MAX_ONLINE_IN_TOPIC: function() { return /* binding */ MAX_ONLINE_IN_TOPIC; },
-/* harmony export */ MAX_PEER_TITLE_LENGTH: function() { return /* binding */ MAX_PEER_TITLE_LENGTH; },
-/* harmony export */ MAX_TAG_COUNT: function() { return /* binding */ MAX_TAG_COUNT; },
-/* harmony export */ MAX_TAG_LENGTH: function() { return /* binding */ MAX_TAG_LENGTH; },
-/* harmony export */ MAX_TITLE_LENGTH: function() { return /* binding */ MAX_TITLE_LENGTH; },
-/* harmony export */ MAX_TOPIC_DESCRIPTION_LENGTH: function() { return /* binding */ MAX_TOPIC_DESCRIPTION_LENGTH; },
-/* harmony export */ MEDIA_BREAKPOINT: function() { return /* binding */ MEDIA_BREAKPOINT; },
-/* harmony export */ MESSAGES_PAGE: function() { return /* binding */ MESSAGES_PAGE; },
-/* harmony export */ MESSAGE_PREVIEW_LENGTH: function() { return /* binding */ MESSAGE_PREVIEW_LENGTH; },
-/* harmony export */ MIN_DURATION: function() { return /* binding */ MIN_DURATION; },
-/* harmony export */ MIN_SWIPE_DISTANCE: function() { return /* binding */ MIN_SWIPE_DISTANCE; },
-/* harmony export */ MIN_TAG_LENGTH: function() { return /* binding */ MIN_TAG_LENGTH; },
-/* harmony export */ NEW_GRP_ACCESS_MODE: function() { return /* binding */ NEW_GRP_ACCESS_MODE; },
-/* harmony export */ NO_ACCESS_MODE: function() { return /* binding */ NO_ACCESS_MODE; },
-/* harmony export */ NO_DIMENSIONS_VIDEO: function() { return /* binding */ NO_DIMENSIONS_VIDEO; },
-/* harmony export */ QRCODE_SIZE: function() { return /* binding */ QRCODE_SIZE; },
-/* harmony export */ QUOTED_REPLY_LENGTH: function() { return /* binding */ QUOTED_REPLY_LENGTH; },
-/* harmony export */ READ_DELAY: function() { return /* binding */ READ_DELAY; },
-/* harmony export */ REM_SIZE: function() { return /* binding */ REM_SIZE; },
-/* harmony export */ SELF_AVATAR_URI: function() { return /* binding */ SELF_AVATAR_URI; },
-/* harmony export */ TOAST_DURATION: function() { return /* binding */ TOAST_DURATION; },
-/* harmony export */ VIDEO_PREVIEW_DIM: function() { return /* binding */ VIDEO_PREVIEW_DIM; },
-/* harmony export */ VIDEO_THUMBNAIL_WIDTH: function() { return /* binding */ VIDEO_THUMBNAIL_WIDTH; },
-/* harmony export */ WAKE_UP_TICK: function() { return /* binding */ WAKE_UP_TICK; },
-/* harmony export */ WAKE_UP_TIMEOUT: function() { return /* binding */ WAKE_UP_TIMEOUT; },
-/* harmony export */ WALLPAPER_DEFAULTS: function() { return /* binding */ WALLPAPER_DEFAULTS; }
-/* harmony export */ });
-/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version.js */ "./src/version.js");
-
-const APP_NAME = 'TinodeWeb/' + (_version_js__WEBPACK_IMPORTED_MODULE_0__.PACKAGE_VERSION || '0.24');
-const API_KEY = 'AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K';
-const KNOWN_HOSTS = {
- hosted: 'web.tinode.co',
- local: 'localhost:6060'
-};
-const DEFAULT_HOST = KNOWN_HOSTS.hosted;
-const LOGGING_ENABLED = true;
-const KEYPRESS_DELAY = 3_000;
-const READ_DELAY = 1_500;
-const MIN_TAG_LENGTH = 2;
-const MAX_TAG_LENGTH = 96;
-const MAX_TAG_COUNT = 16;
-const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';
-const NEW_GRP_ACCESS_MODE = 'JRWPSAO';
-const CHANNEL_ACCESS_MODE = 'JR';
-const NO_ACCESS_MODE = 'N';
-const MEDIA_BREAKPOINT = 640;
-const REM_SIZE = 13;
-const AVATAR_SIZE = 384;
-const MAX_AVATAR_BYTES = 4096;
-const BROKEN_IMAGE_SIZE = 32;
-const NO_DIMENSIONS_VIDEO = 128;
-const MESSAGES_PAGE = 24;
-const MAX_INBAND_ATTACHMENT_SIZE = 262_144;
-const MAX_EXTERN_ATTACHMENT_SIZE = 1 << 23;
-const MAX_IMAGE_DIM = 1024;
-const IMAGE_PREVIEW_DIM = 64;
-const VIDEO_PREVIEW_DIM = 96;
-const IMAGE_THUMBNAIL_DIM = 36;
-const VIDEO_THUMBNAIL_WIDTH = 48;
-const MAX_ONLINE_IN_TOPIC = 4;
-const MAX_TITLE_LENGTH = 60;
-const MAX_TOPIC_DESCRIPTION_LENGTH = 360;
-const MAX_PEER_TITLE_LENGTH = 24;
-const MESSAGE_PREVIEW_LENGTH = 80;
-const QUOTED_REPLY_LENGTH = 30;
-const FORWARDED_PREVIEW_LENGTH = 84;
-const EDIT_PREVIEW_LENGTH = 48;
-const MIN_DURATION = 2_000;
-const MAX_DURATION = 600_000;
-const LINK_CONTACT_US = 'mailto:support@tinode.co';
-const LINK_PRIVACY_POLICY = 'https://tinode.co/privacy.html';
-const LINK_TERMS_OF_SERVICE = 'https://tinode.co/terms.html';
-const IMMEDIATE_P2P_SUBSCRIPTION = false;
-const CLICKABLE_URL_SCHEMES = ['http', 'https', 'ftp', 'ftps'];
-const QRCODE_SIZE = 128;
-const WAKE_UP_TIMEOUT = 80000;
-const WAKE_UP_TICK = 1000;
-const MIN_SWIPE_DISTANCE = REM_SIZE * 3;
-const SELF_AVATAR_URI = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZpZXdCb3g9IjAgMCAxNyAxNyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41NjIgMXYxNS40NTlsNC42ODYtMy4yNyA0Ljc1MiAzLjI2di0xNS40NDloLTkuNDM4ek0xMiAxNC41NTFsLTMuNzU2LTIuNTc4LTMuNjgxIDIuNTY4di0xMi41NDFoNy40Mzd2MTIuNTUxeiIgZmlsbD0iIzU1NTU1NSIgLz48L3N2Zz4=';
-const TOAST_DURATION = 3_000;
-const DEFAULT_COLOR_SCHEME = 'auto';
-const DEFAULT_TEXT_SIZE = 10;
-const DRAFTY_FR_MIME_TYPE_LEGACY = 'application/json';
-const WALLPAPER_DEFAULTS = {
- type: 'patt',
- index: 0,
- path: 'img/bkg/'
-};
-
-/***/ }),
-
-/***/ "./src/constants.js":
-/*!**************************!*\
- !*** ./src/constants.js ***!
- \**************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ CALL_HEAD_STARTED: function() { return /* binding */ CALL_HEAD_STARTED; },
-/* harmony export */ CALL_STATE_INCOMING_RECEIVED: function() { return /* binding */ CALL_STATE_INCOMING_RECEIVED; },
-/* harmony export */ CALL_STATE_IN_PROGRESS: function() { return /* binding */ CALL_STATE_IN_PROGRESS; },
-/* harmony export */ CALL_STATE_NONE: function() { return /* binding */ CALL_STATE_NONE; },
-/* harmony export */ CALL_STATE_OUTGOING_INITATED: function() { return /* binding */ CALL_STATE_OUTGOING_INITATED; }
-/* harmony export */ });
-const CALL_STATE_NONE = 0;
-const CALL_STATE_OUTGOING_INITATED = 1;
-const CALL_STATE_INCOMING_RECEIVED = 2;
-const CALL_STATE_IN_PROGRESS = 3;
-const CALL_HEAD_STARTED = 'started';
-
-/***/ }),
-
-/***/ "./src/lib/blob-helpers.js":
-/*!*********************************!*\
- !*** ./src/lib/blob-helpers.js ***!
- \*********************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ MIME_EXTENSIONS: function() { return /* binding */ MIME_EXTENSIONS; },
-/* harmony export */ SUPPORTED_IMAGE_FORMATS: function() { return /* binding */ SUPPORTED_IMAGE_FORMATS; },
-/* harmony export */ base64DecodedLen: function() { return /* binding */ base64DecodedLen; },
-/* harmony export */ base64EncodedLen: function() { return /* binding */ base64EncodedLen; },
-/* harmony export */ base64ReEncode: function() { return /* binding */ base64ReEncode; },
-/* harmony export */ base64ToBlob: function() { return /* binding */ base64ToBlob; },
-/* harmony export */ base64ToIntArray: function() { return /* binding */ base64ToIntArray; },
-/* harmony export */ blobToBase64: function() { return /* binding */ blobToBase64; },
-/* harmony export */ fileNameForMime: function() { return /* binding */ fileNameForMime; },
-/* harmony export */ filePasted: function() { return /* binding */ filePasted; },
-/* harmony export */ fileToBase64: function() { return /* binding */ fileToBase64; },
-/* harmony export */ fitImageSize: function() { return /* binding */ fitImageSize; },
-/* harmony export */ getMimeType: function() { return /* binding */ getMimeType; },
-/* harmony export */ imageCrop: function() { return /* binding */ imageCrop; },
-/* harmony export */ imageScaled: function() { return /* binding */ imageScaled; },
-/* harmony export */ importVCard: function() { return /* binding */ importVCard; },
-/* harmony export */ intArrayToBase64: function() { return /* binding */ intArrayToBase64; },
-/* harmony export */ makeImageUrl: function() { return /* binding */ makeImageUrl; }
-/* harmony export */ });
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_0__);
-
-const SUPPORTED_IMAGE_FORMATS = ['image/jpeg', 'image/gif', 'image/png', 'image/svg', 'image/svg+xml'];
-const MIME_EXTENSIONS = ['jpg', 'gif', 'png', 'svg', 'svg'];
-function makeImageUrl(photo) {
- if (photo && typeof photo == 'object') {
- if (photo.ref) {
- return photo.ref;
- }
- if (photo.data && photo.type) {
- const mime = photo.type.startsWith('image/') ? photo.type : 'image/' + photo.type;
- return 'data:' + mime + ';base64,' + photo.data;
- }
- }
- return null;
-}
-function fitImageSize(width, height, maxWidth, maxHeight, forceSquare) {
- width = width | 0;
- height = height | 0;
- maxWidth = maxWidth | 0;
- maxHeight = maxHeight | 0;
- if (width <= 0 || height <= 0 || maxWidth <= 0 || maxHeight <= 0) {
- return null;
- }
- if (forceSquare) {
- maxWidth = maxHeight = Math.min(maxWidth, maxHeight);
- }
- const scale = Math.min(Math.min(width, maxWidth) / width, Math.min(height, maxHeight) / height);
- const size = {
- dstWidth: width * scale | 0,
- dstHeight: height * scale | 0
- };
- if (forceSquare) {
- size.dstWidth = size.dstHeight = Math.min(size.dstWidth, size.dstHeight);
- size.srcWidth = size.srcHeight = Math.min(width, height);
- size.xoffset = (width - size.srcWidth) / 2 | 0;
- size.yoffset = (height - size.srcWidth) / 2 | 0;
- } else {
- size.xoffset = size.yoffset = 0;
- size.srcWidth = width;
- size.srcHeight = height;
- }
- return size;
-}
-function fileNameForMime(fname, mime) {
- const idx = SUPPORTED_IMAGE_FORMATS.indexOf(mime);
- if (idx < 0 || !fname) {
- return fname;
- }
- const ext = MIME_EXTENSIONS[idx];
- const at = fname.lastIndexOf('.');
- if (at >= 0) {
- fname = fname.substring(0, at);
- }
- return fname + '.' + ext;
-}
-function imageScaled(fileOrBlob, maxWidth, maxHeight, maxSize, forceSquare) {
- return new Promise((resolve, reject) => {
- const img = new Image();
- img.crossOrigin = 'Anonymous';
- img.onerror = function (err) {
- reject(new Error("Image format unrecognized"));
- };
- img.onload = async function () {
- URL.revokeObjectURL(img.src);
- const dim = fitImageSize(img.width, img.height, maxWidth, maxHeight, forceSquare);
- if (!dim) {
- reject(new Error("Invalid image"));
- return;
- }
- let canvas = document.createElement('canvas');
- canvas.width = dim.dstWidth;
- canvas.height = dim.dstHeight;
- let ctx = canvas.getContext('2d');
- ctx.imageSmoothingEnabled = true;
- ctx.drawImage(img, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight, 0, 0, dim.dstWidth, dim.dstHeight);
- const mime = SUPPORTED_IMAGE_FORMATS.includes(fileOrBlob.type) ? fileOrBlob.type : 'image/jpeg';
- let blob = await new Promise(resolve => canvas.toBlob(resolve, mime));
- if (!blob) {
- reject(new Error("Unsupported image format"));
- return;
- }
- while (maxSize > 0 && blob.length > maxSize) {
- dim.dstWidth = dim.dstWidth * 0.70710678118 | 0;
- dim.dstHeight = dim.dstHeight * 0.70710678118 | 0;
- canvas.width = dim.dstWidth;
- canvas.height = dim.dstHeight;
- ctx = canvas.getContext('2d');
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- ctx.drawImage(img, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight, 0, 0, dim.dstWidth, dim.dstHeight);
- blob = await new Promise(resolve => canvas.toBlob(resolve, mime));
- }
- canvas = null;
- resolve({
- mime: mime,
- blob: blob,
- width: dim.dstWidth,
- height: dim.dstHeight,
- name: fileNameForMime(fileOrBlob.name, mime)
- });
- };
- img.src = URL.createObjectURL(fileOrBlob);
- });
-}
-function imageCrop(mime, objURL, left, top, width, height, scale) {
- return new Promise((resolve, reject) => {
- const img = new Image();
- img.crossOrigin = 'Anonymous';
- img.onerror = _ => {
- reject(new Error("Image format unrecognized"));
- };
- img.onload = _ => {
- URL.revokeObjectURL(img.src);
- let canvas = document.createElement('canvas');
- canvas.width = width * scale;
- canvas.height = height * scale;
- let ctx = canvas.getContext('2d');
- ctx.imageSmoothingEnabled = true;
- ctx.drawImage(img, left, top, width, height, 0, 0, canvas.width, canvas.height);
- mime = SUPPORTED_IMAGE_FORMATS.includes(mime) ? mime : 'image/jpeg';
- canvas.toBlob(blob => {
- canvas = null;
- if (blob) {
- resolve({
- mime: mime,
- blob: blob,
- width: width,
- height: height
- });
- } else {
- reject(new Error("Unsupported image format"));
- }
- }, mime);
- };
- img.src = objURL;
- });
-}
-function fileToBase64(file) {
- return new Promise((resolve, reject) => {
- const reader = new FileReader();
- reader.onerror = _ => {
- reject(reader.error);
- };
- reader.onload = _ => {
- resolve({
- mime: file.type,
- bits: reader.result.split(',')[1],
- name: file.name
- });
- };
- reader.readAsDataURL(file);
- });
-}
-function blobToBase64(blob) {
- return new Promise((resolve, reject) => {
- const reader = new FileReader();
- reader.onerror = _ => {
- reject(reader.error);
- };
- reader.onload = _ => {
- resolve({
- mime: blob.type,
- bits: reader.result.split(',')[1]
- });
- };
- reader.readAsDataURL(blob);
- });
-}
-function filePasted(event, onImageSuccess, onAttachmentSuccess, onError) {
- const items = (event.clipboardData || event.originalEvent.clipboardData || {}).items;
- if (!items || !items.length) {
- return false;
- }
- for (let i in items) {
- const item = items[i];
- if (item.kind === 'file') {
- const file = item.getAsFile();
- if (!file) {
- console.error("Failed to get file object from pasted file item", item.kind, item.type);
- onError("Failed to get file object from pasted file item");
- continue;
- }
- if (file.type && file.type.split('/')[0] == 'image') {
- onImageSuccess(file);
- } else {
- onAttachmentSuccess(file);
- }
- return true;
- }
- }
- return false;
-}
-function getMimeType(header) {
- const mime = /^data:(image\/[-+a-z0-9.]+);base64/.exec(header);
- return mime && mime.length > 1 ? mime[1] : null;
-}
-function base64EncodedLen(n) {
- return Math.floor((n + 2) / 3) * 4;
-}
-function base64DecodedLen(n) {
- return Math.floor(n / 4) * 3;
-}
-function base64ReEncode(str) {
- if (str) {
- str = str.replace(/-/g, '+').replace(/_/g, '/');
- try {
- str = btoa(atob(str));
- } catch (err) {
- console.error("Failed to base64 re-encode string.", err);
- str = null;
- }
- }
- return str;
-}
-function base64ToBlob(str, mime) {
- if (!str) {
- return null;
- }
- try {
- const bin = atob(str);
- const length = bin.length;
- const buf = new ArrayBuffer(length);
- const arr = new Uint8Array(buf);
- for (let i = 0; i < length; i++) {
- arr[i] = bin.charCodeAt(i);
- }
- return new Blob([buf], {
- type: mime
- });
- } catch (err) {
- console.error("Failed to convert base64 to blob: ", err);
- }
- return null;
-}
-function intArrayToBase64(arr) {
- if (!Array.isArray(arr)) {
- return null;
- }
- try {
- let bin = '';
- new Uint8Array(arr).forEach(b => bin += String.fromCharCode(b));
- return window.btoa(bin);
- } catch (err) {}
- return null;
-}
-function base64ToIntArray(b64) {
- const arr = [];
- try {
- const bin = window.atob(b64);
- [...bin].forEach(c => {
- arr.push(c.charCodeAt(0));
- });
- return arr;
- } catch (err) {}
- return null;
-}
-function importVCard(fileOrBlob) {
- return new Promise((resolve, reject) => {
- const reader = new FileReader();
- reader.onerror = _ => {
- reject(reader.error);
- };
- reader.onload = _ => {
- const card = tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.TheCard.importVCard(reader.result);
- if (!card) {
- reject(new Error("Failed to parse vCard"));
- return;
- }
- resolve(card);
- };
- reader.readAsText(fileOrBlob);
- });
-}
-
-/***/ }),
-
-/***/ "./src/lib/formatters.js":
-/*!*******************************!*\
- !*** ./src/lib/formatters.js ***!
- \*******************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ fullFormatter: function() { return /* binding */ fullFormatter; },
-/* harmony export */ previewFormatter: function() { return /* binding */ previewFormatter; },
-/* harmony export */ replyFormatter: function() { return /* binding */ replyFormatter; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _widgets_audio_player_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/audio-player.jsx */ "./src/widgets/audio-player.jsx");
-/* harmony import */ var _widgets_call_message_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/call-message.jsx */ "./src/widgets/call-message.jsx");
-/* harmony import */ var _widgets_call_status_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/call-status.jsx */ "./src/widgets/call-status.jsx");
-/* harmony import */ var _widgets_inline_video_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/inline-video.jsx */ "./src/widgets/inline-video.jsx");
-/* harmony import */ var _widgets_lazy_image_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../widgets/lazy-image.jsx */ "./src/widgets/lazy-image.jsx");
-/* harmony import */ var _widgets_the_card_mini_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../widgets/the-card-mini.jsx */ "./src/widgets/the-card-mini.jsx");
-/* harmony import */ var _widgets_uploading_image_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../widgets/uploading-image.jsx */ "./src/widgets/uploading-image.jsx");
-/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
-/* harmony import */ var _blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./blob-helpers.js */ "./src/lib/blob-helpers.js");
-/* harmony import */ var _strformat_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./strformat.js */ "./src/lib/strformat.js");
-/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utils.js */ "./src/lib/utils.js");
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
- drafty_form: {
- id: "drafty_form",
- defaultMessage: [{
- "type": 0,
- "value": "Form:"
- }]
- },
- drafty_attachment: {
- id: "drafty_attachment",
- defaultMessage: [{
- "type": 0,
- "value": "Attachment"
- }]
- },
- drafty_image: {
- id: "drafty_image",
- defaultMessage: [{
- "type": 0,
- "value": "Picture"
- }]
- },
- drafty_video: {
- id: "drafty_video",
- defaultMessage: [{
- "type": 0,
- "value": "Video recording"
- }]
- },
- drafty_unknown: {
- id: "drafty_unknown",
- defaultMessage: [{
- "type": 0,
- "value": "Unsupported"
- }]
- }
-});
-function fullFormatter(style, data, values, key, stack) {
- if (stack.includes('QQ')) {
- return quoteFormatter.call(this, style, data, values, key);
- }
- if (!style) {
- return values;
- }
- let el = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.tagName(style);
- let attr = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attrValue(style, data) || {};
- attr.key = key;
- switch (style) {
- case 'AU':
- if (attr.src) {
- attr.src = this.authorizeURL((0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.sanitizeUrlForMime)(attr.src, 'audio'));
- attr.duration = data.duration > 0 ? data.duration | 0 : undefined;
- attr.preview = data.preview;
- attr.loading = 'lazy';
- }
- el = _widgets_audio_player_jsx__WEBPACK_IMPORTED_MODULE_3__["default"];
- values = null;
- break;
- case 'BR':
- values = null;
- break;
- case 'EX':
- break;
- case 'HL':
- attr.className = 'highlight';
- break;
- case 'HD':
- el = null;
- values = null;
- break;
- case 'IM':
- el = handleImageData.call(this, el, data, attr);
- values = null;
- break;
- case 'BN':
- attr.onClick = e => this.onHandleClick(e, 'form_button');
- let inner = react__WEBPACK_IMPORTED_MODULE_0___default().Children.map(values, child => {
- return typeof child == 'string' ? child : undefined;
- });
- if (!inner || inner.length == 0) {
- inner = [attr.name];
- }
- attr['data-title'] = inner.join('');
- break;
- case 'LN':
- if (attr) {
- attr.href = typeof attr.href == 'string' ? (0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.sanitizeUrl)(attr.href, _config_js__WEBPACK_IMPORTED_MODULE_10__.CLICKABLE_URL_SCHEMES) : '';
- }
- break;
- case 'MN':
- attr.className = 'mention';
- if (data) {
- attr.className += ' ' + (0,_strformat_js__WEBPACK_IMPORTED_MODULE_12__.idToColorClass)(data.val, false, true);
- }
- break;
- case 'FM':
- attr.className = 'bot-form';
- break;
- case 'RW':
- break;
- case 'QQ':
- attr.className = 'reply-quote';
- attr.onClick = e => this.onHandleClick(e, 'quote');
- break;
- case 'TC':
- el = _widgets_the_card_mini_jsx__WEBPACK_IMPORTED_MODULE_8__["default"];
- attr.content = data;
- attr.authorizeURL = this.authorizeURL;
- attr.onChatClick = e => this.onHandleClick(e, 'contact_chat');
- attr.onFindClick = e => this.onHandleClick(e, 'contact_find');
- values = null;
- break;
- case 'VC':
- el = _widgets_call_message_jsx__WEBPACK_IMPORTED_MODULE_4__["default"];
- values = null;
- if (data) {
- attr.callState = data.state;
- attr.incoming = data.incoming;
- attr.duration = data.duration;
- }
- break;
- case 'VD':
- el = handleVideoData.call(this, el, data, attr);
- values = null;
- break;
- default:
- if (!el) {
- el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
- attr = {
- key: key
- };
- let body = values;
- if (!Array.isArray(values) || !values.join('').trim()) {
- body = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
- key: "x1",
- className: "gray"
- }, this.formatMessage(messages.drafty_unknown))];
- }
- values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- key: "x0",
- className: "material-icons gray"
- }, "extension"), ' '].concat(body);
- }
- break;
- }
- if (!el) {
- return values;
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(el, attr, values);
-}
-function handleImageData(el, data, attr) {
- if (!data) {
- attr.src = 'img/broken_image.png';
- attr.style = {
- width: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',
- height: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px'
- };
- return el;
- }
- attr.className = 'inline-image';
- const dim = (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.fitImageSize)(data.width, data.height, this.viewportWidth > 0 ? Math.min(this.viewportWidth - _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 6.5, _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 34.5) : _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 34.5, _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 24, false) || {
- dstWidth: _config_js__WEBPACK_IMPORTED_MODULE_10__.BROKEN_IMAGE_SIZE,
- dstHeight: _config_js__WEBPACK_IMPORTED_MODULE_10__.BROKEN_IMAGE_SIZE
- };
- attr.style = {
- width: dim.dstWidth + 'px',
- height: dim.dstHeight + 'px',
- minWidth: dim.dstWidth + 'px',
- minHeight: dim.dstHeight + 'px'
- };
- if (!tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isProcessing(data)) {
- attr.src = this.authorizeURL((0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.sanitizeUrlForMime)(attr.src, 'image'));
- attr.alt = data.name;
- if (attr.src) {
- if (Math.max(data.width || 0, data.height || 0) > _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM) {
- attr.onClick = e => this.onHandleClick(e, 'image');
- attr.className += ' image-clickable';
- }
- attr.loading = 'lazy';
- } else {
- attr.src = null;
- }
- } else {
- el = _widgets_uploading_image_jsx__WEBPACK_IMPORTED_MODULE_9__["default"];
- }
- return el;
-}
-function handleVideoData(el, data, attr) {
- if (!data) {
- attr.src = 'img/broken_video.png';
- attr.style = {
- width: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',
- height: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px'
- };
- return el;
- }
- attr.className = 'inline-image';
- const dim = (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.fitImageSize)(data.width, data.height, this.viewportWidth > 0 ? Math.min(this.viewportWidth - _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 6.5, _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 34.5) : _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 34.5, _config_js__WEBPACK_IMPORTED_MODULE_10__.REM_SIZE * 24, false) || {
- dstWidth: _config_js__WEBPACK_IMPORTED_MODULE_10__.NO_DIMENSIONS_VIDEO,
- dstHeight: _config_js__WEBPACK_IMPORTED_MODULE_10__.NO_DIMENSIONS_VIDEO
- };
- attr.style = {
- width: dim.dstWidth + 'px',
- height: dim.dstHeight + 'px',
- minWidth: dim.dstWidth + 'px',
- minHeight: dim.dstHeight + 'px'
- };
- if (!tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isProcessing(data)) {
- attr.src = this.authorizeURL((0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.sanitizeUrlForMime)(attr.src, 'image'));
- attr.alt = data.name;
- if (data.ref || data.val) {
- attr.onClick = e => this.onHandleClick(e, 'video');
- attr.loading = 'lazy';
- }
- el = _widgets_inline_video_jsx__WEBPACK_IMPORTED_MODULE_6__["default"];
- } else {
- el = _widgets_uploading_image_jsx__WEBPACK_IMPORTED_MODULE_9__["default"];
- }
- return el;
-}
-function previewFormatter(style, data, values, key) {
- if (!style) {
- return values;
- }
- let el = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.tagName(style);
- const attr = {
- key: key
- };
- switch (style) {
- case 'AU':
- el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
- values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- key: "au",
- className: "material-icons"
- }, "mic"), ' ', (0,_strformat_js__WEBPACK_IMPORTED_MODULE_12__.secondsToTime)(data.duration / 1000)];
- break;
- case 'BR':
- el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
- values = [' '];
- break;
- case 'HL':
- attr.className = 'highlight preview';
- break;
- case 'LN':
- case 'MN':
- el = 'span';
- break;
- case 'IM':
- el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
- values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- key: "im",
- className: "material-icons"
- }, "photo"), ' ', this.formatMessage(messages.drafty_image)];
- break;
- case 'BN':
- el = 'span';
- attr.className = 'flat-button faux';
- break;
- case 'FM':
- el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
- values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- key: "fm",
- className: "material-icons"
- }, "dashboard"), this.formatMessage(messages.drafty_form)].concat(' ', values || []);
- break;
- case 'RW':
- el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
- break;
- case 'EX':
- if (data) {
- if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isFormResponseType(data.mime)) {
- return null;
- }
- delete data.val;
- delete data.ref;
- }
- el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
- values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- key: "ex",
- className: "material-icons"
- }, "attachment"), ' ', this.formatMessage(messages.drafty_attachment)];
- break;
- case 'VC':
- el = _widgets_call_status_jsx__WEBPACK_IMPORTED_MODULE_5__["default"];
- if (data) {
- attr.callState = data.state;
- attr.incoming = data.incoming;
- attr.duration = data.duration;
- }
- values = null;
- break;
- case 'QQ':
- case 'HD':
- el = null;
- values = null;
- break;
- case 'TC':
- el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
- values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- key: "tc",
- className: "material-icons"
- }, "contact_mail"), ' ', tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getFn(data) || this.formatMessage(messages.drafty_unknown)];
- break;
- case 'VD':
- el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
- values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- key: "im",
- className: "material-icons"
- }, "play_circle_outline"), ' ', this.formatMessage(messages.drafty_video)];
- break;
- default:
- if (!el) {
- el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
- values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- key: "x0",
- className: "material-icons gray"
- }, "extension"), ' ', this.formatMessage(messages.drafty_unknown)];
- }
- break;
- }
- if (!el) {
- return values;
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(el, attr, values);
-}
-;
-function inlineImageAttr(attr, data) {
- attr.style = {
- width: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',
- height: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',
- maxWidth: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px',
- maxHeight: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px'
- };
- attr.className = 'inline-image';
- attr.alt = this.formatMessage(messages.drafty_image);
- if (!data) {
- attr.src = 'img/broken_image.png';
- } else {
- attr.src = attr.src || 'img/broken_image.png';
- }
- attr.title = attr.alt;
- return attr;
-}
-function inlineVideoAttr(attr, data) {
- const dim = (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.fitImageSize)(data.width, data.height, _config_js__WEBPACK_IMPORTED_MODULE_10__.VIDEO_THUMBNAIL_WIDTH, _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM);
- attr.style = {
- width: dim.width + 'px',
- height: dim.height + 'px',
- maxWidth: _config_js__WEBPACK_IMPORTED_MODULE_10__.VIDEO_THUMBNAIL_WIDTH + 'px',
- maxHeight: _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM + 'px'
- };
- attr.className = 'inline-image';
- attr.alt = this.formatMessage(messages.drafty_video);
- attr.title = attr.alt;
- if (!data) {
- attr.src = 'img/broken_video.png';
- } else {
- attr.src = attr.src || 'img/broken_video.png';
- }
- return attr;
-}
-function quoteFormatter(style, data, values, key) {
- if (['BR', 'EX', 'IM', 'MN', 'VD'].includes(style)) {
- let el = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.tagName(style);
- let attr = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attrValue(style, data) || {};
- attr.key = key;
- switch (style) {
- case 'BR':
- values = null;
- break;
- case 'IM':
- attr = inlineImageAttr.call(this, attr, data);
- values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', attr, null), ' ', attr.alt];
- el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
- attr = {
- key: key
- };
- break;
- case 'VD':
- attr = inlineVideoAttr.call(this, attr, data);
- values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', attr, null), ' ', attr.alt];
- el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
- attr = {
- key: key
- };
- break;
- case 'MN':
- el = 'span';
- attr.className = 'mention';
- if (data) {
- attr.className += ' ' + (0,_strformat_js__WEBPACK_IMPORTED_MODULE_12__.idToColorClass)(data.val, false, true);
- }
- break;
- case 'EX':
- let fname;
- if (data) {
- if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isFormResponseType(data.mime)) {
- return null;
- }
- fname = data.name;
- delete data.val;
- delete data.ref;
- }
- el = (react__WEBPACK_IMPORTED_MODULE_0___default().Fragment);
- values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- key: "ex",
- className: "material-icons"
- }, "attachment"), (0,_strformat_js__WEBPACK_IMPORTED_MODULE_12__.shortenFileName)(fname, 16) || this.formatMessage(messages.drafty_attachment)];
- break;
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(el, attr, values);
- }
- return previewFormatter.call(this, style, data, values, key);
-}
-function quoteImageOrVideo(data, isVideo) {
- let promise;
- let bits, ref, mime;
- if (isVideo) {
- bits = data.preview;
- mime = data.premime || 'image/jpeg';
- ref = data.preref;
- } else {
- bits = data.val;
- mime = data.mime;
- ref = data.ref;
- }
- if (bits) {
- const blob = (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.base64ToBlob)(bits, mime);
- if (!blob) {
- throw new Error("Invalid image");
- }
- promise = Promise.resolve(blob);
- } else if (ref) {
- promise = fetch(this.authorizeURL((0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.sanitizeUrlForMime)(ref, 'image'))).then(evt => {
- if (evt.ok) {
- return evt.blob();
- } else {
- throw new Error(`Image fetch unsuccessful: ${evt.status} ${evt.statusText}`);
- }
- });
- } else {
- throw new Error("Missing image data");
- }
- return promise.then(blob => {
- return (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.imageScaled)(blob, isVideo ? _config_js__WEBPACK_IMPORTED_MODULE_10__.VIDEO_THUMBNAIL_WIDTH : _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM, _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM, -1, !isVideo);
- }).then(scaled => {
- if (isVideo) {
- data.premime = scaled.mime;
- } else {
- data.mime = scaled.mime;
- }
- data.size = scaled.blob.size;
- data.width = scaled.width;
- data.height = scaled.height;
- delete data.ref;
- delete data.preref;
- data.src = URL.createObjectURL(scaled.blob);
- return (0,_blob_helpers_js__WEBPACK_IMPORTED_MODULE_11__.blobToBase64)(scaled.blob);
- }).then(b64 => {
- if (isVideo) {
- data.preview = b64.bits;
- } else {
- data.val = b64.bits;
- }
- return data;
- }).catch(err => {
- delete data.val;
- delete data.preview;
- delete data.src;
- data.width = _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM;
- data.height = _config_js__WEBPACK_IMPORTED_MODULE_10__.IMAGE_THUMBNAIL_DIM;
- throw err;
- });
-}
-function replyFormatter(style, data, values, key, stack) {
- if (style == 'IM' || style == 'VD') {
- const isImage = style == 'IM';
- const attr = isImage ? inlineImageAttr.call(this, {
- key: key
- }, data) : inlineVideoAttr.call(this, {
- key: key
- }, data);
- let loadedPromise;
- try {
- loadedPromise = (0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.cancelablePromise)(quoteImageOrVideo.call(this, data, style == 'VD'));
- } catch (error) {
- console.warn("Failed to quote image:", error.message);
- loadedPromise = (0,_utils_js__WEBPACK_IMPORTED_MODULE_13__.cancelablePromise)(error);
- }
- attr.whenDone = loadedPromise;
- values = [react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_lazy_image_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], attr, null), ' ', attr.alt];
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), {
- key: key
- }, values);
- } else if (style == 'QQ') {
- if (stack.includes('QQ')) {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement('span', {
- key: key
- }, [react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- key: "qq",
- className: "material-icons"
- }, "format_quote"), ' ']);
- }
- const attr = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.attrValue('QQ', data) || {};
- attr.key = key;
- attr.className = 'reply-quote';
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.tagName('QQ'), attr, values);
- }
- return quoteFormatter.call(this, style, data, values, key);
-}
-
-/***/ }),
-
-/***/ "./src/lib/host-name.js":
-/*!******************************!*\
- !*** ./src/lib/host-name.js ***!
- \******************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ detectServerAddress: function() { return /* binding */ detectServerAddress; },
-/* harmony export */ isLocalHost: function() { return /* binding */ isLocalHost; },
-/* harmony export */ isSecureConnection: function() { return /* binding */ isSecureConnection; }
-/* harmony export */ });
-/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
-
-function detectServerAddress() {
- let host = _config_js__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_HOST;
- if (typeof window.location == 'object') {
- if (window.location.protocol == 'file:' || window.location.hostname == 'localhost') {
- host = _config_js__WEBPACK_IMPORTED_MODULE_0__.KNOWN_HOSTS.local;
- } else if (window.location.hostname) {
- host = window.location.hostname + (window.location.port ? ':' + window.location.port : '');
- }
- }
- return host;
-}
-function isSecureConnection() {
- if (typeof window.location == 'object') {
- return window.location.protocol == 'https:';
- }
- return false;
-}
-function isLocalHost() {
- if (typeof window.location == 'object') {
- return window.location.hostname == 'localhost';
- }
- return false;
-}
-
-/***/ }),
-
-/***/ "./src/lib/local-storage.js":
-/*!**********************************!*\
- !*** ./src/lib/local-storage.js ***!
- \**********************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ LocalStorageUtil; }
-/* harmony export */ });
-class LocalStorageUtil {
- static setObject(key, value) {
- localStorage.setItem(key, JSON.stringify(value));
- }
- static getObject(key) {
- const value = localStorage.getItem(key);
- return value && JSON.parse(value);
- }
- static updateObject(key, value) {
- const oldVal = this.getObject(key);
- this.setObject(key, Object.assign(oldVal || {}, value));
- }
- static removeItem(key) {
- localStorage.removeItem(key);
- }
-}
-
-/***/ }),
-
-/***/ "./src/lib/navigation.js":
-/*!*******************************!*\
- !*** ./src/lib/navigation.js ***!
- \*******************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ HashNavigation; }
-/* harmony export */ });
-class HashNavigation {
- static parseUrlHash(hash) {
- const parts = hash.split('?', 2);
- const params = {};
- let path = [];
- if (parts[0]) {
- path = parts[0].replace('#', '').split('/');
- }
- if (parts[1]) {
- parts[1].split('&').forEach(arg => {
- const eq = arg.indexOf('=');
- if (eq > 0) {
- params[arg.slice(0, eq)] = decodeURIComponent(arg.slice(eq + 1));
- }
- });
- }
- return {
- path: path,
- params: params
- };
- }
- static navigateTo(url) {
- window.location.hash = url;
- }
- static composeUrlHash(path, params) {
- let url = path.join('/');
- const args = [];
- for (const key in params) {
- if (params.hasOwnProperty(key)) {
- if (params[key] !== undefined) {
- args.push(key + '=' + encodeURIComponent(params[key]));
- }
- }
- }
- if (args.length > 0) {
- url += '?' + args.join('&');
- }
- return url;
- }
- static addUrlParam(hash, key, value) {
- const parsed = HashNavigation.parseUrlHash(hash);
- parsed.params[key] = value;
- return HashNavigation.composeUrlHash(parsed.path, parsed.params);
- }
- static removeUrlParam(hash, key) {
- const parsed = HashNavigation.parseUrlHash(hash);
- delete parsed.params[key];
- return HashNavigation.composeUrlHash(parsed.path, parsed.params);
- }
- static removeUrlParams(hash, keys) {
- if (!Array.isArray(keys)) {
- keys = [keys];
- }
- const parsed = HashNavigation.parseUrlHash(hash);
- for (const key of keys) {
- delete parsed.params[key];
- }
- return HashNavigation.composeUrlHash(parsed.path, parsed.params);
- }
- static setUrlSidePanel(hash, sidepanel) {
- const parsed = HashNavigation.parseUrlHash(hash);
- parsed.path[0] = sidepanel;
- return HashNavigation.composeUrlHash(parsed.path, parsed.params);
- }
- static setUrlInfoPanel(hash, infopanel) {
- const parsed = HashNavigation.parseUrlHash(hash);
- if (infopanel) {
- parsed.params.info = infopanel;
- } else {
- delete parsed.params.info;
- }
- return HashNavigation.composeUrlHash(parsed.path, parsed.params);
- }
- static setUrlTopic(hash, topic) {
- const parsed = HashNavigation.parseUrlHash(hash);
- parsed.path[1] = topic;
- delete parsed.params.info;
- return HashNavigation.composeUrlHash(parsed.path, parsed.params);
- }
-}
-
-/***/ }),
-
-/***/ "./src/lib/strformat.js":
-/*!******************************!*\
- !*** ./src/lib/strformat.js ***!
- \******************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ bytesToHumanSize: function() { return /* binding */ bytesToHumanSize; },
-/* harmony export */ flagEmoji: function() { return /* binding */ flagEmoji; },
-/* harmony export */ idToColorClass: function() { return /* binding */ idToColorClass; },
-/* harmony export */ letterTileColorId: function() { return /* binding */ letterTileColorId; },
-/* harmony export */ relativeDateFormat: function() { return /* binding */ relativeDateFormat; },
-/* harmony export */ secondsToTime: function() { return /* binding */ secondsToTime; },
-/* harmony export */ shortDateFormat: function() { return /* binding */ shortDateFormat; },
-/* harmony export */ shortenFileName: function() { return /* binding */ shortenFileName; },
-/* harmony export */ truncateString: function() { return /* binding */ truncateString; }
-/* harmony export */ });
-function shortDateFormat(then, locale) {
- locale = locale || window.navigator.userLanguage || window.navigator.language;
- const now = new Date();
- if (then.getFullYear() == now.getFullYear()) {
- if (then.getMonth() == now.getMonth() && then.getDate() == now.getDate()) {
- return then.toLocaleTimeString(locale, {
- hour12: false,
- hour: '2-digit',
- minute: '2-digit'
- });
- }
- return then.toLocaleDateString(locale, {
- hour12: false,
- month: 'short',
- day: 'numeric',
- hour: '2-digit',
- minute: '2-digit'
- });
- }
- return then.toLocaleDateString(locale, {
- year: 'numeric',
- month: 'short',
- day: 'numeric'
- });
-}
-function relativeDateFormat(then, locale) {
- locale = locale || window.navigator.userLanguage || window.navigator.language;
- const now = new Date();
- const thenDays = Math.floor((then.getTime() - then.getTimezoneOffset() * 60_000) / 86_400_000);
- const nowDays = Math.floor((now.getTime() - now.getTimezoneOffset() * 60_000) / 86_400_000);
- const diff = thenDays - nowDays;
- if (Math.abs(diff) < 2) {
- return new Intl.RelativeTimeFormat(locale, {
- numeric: 'auto'
- }).format(diff, 'day');
- }
- return new Intl.DateTimeFormat(locale).format(then);
-}
-function secondsToTime(seconds, fixedMin) {
- if (typeof seconds != 'number') {
- return '';
- }
- let min = (Math.floor(seconds / 60) | 0) % 60;
- let hours = Math.floor(seconds / 3600) | 0;
- if (fixedMin || hours > 0) {
- min = min < 10 ? `0${min}` : min;
- }
- let sec = (seconds | 0) % 60;
- sec = sec < 10 ? `0${sec}` : sec;
- if (hours == 0) {
- return `${min}:${sec}`;
- }
- return `${hours}:${min}:${sec}`;
-}
-function bytesToHumanSize(bytes) {
- if (!bytes || bytes == 0) {
- return '0 Bytes';
- }
- const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];
- const bucket = Math.min(Math.floor(Math.log2(bytes) / 10) | 0, sizes.length - 1);
- const count = bytes / Math.pow(1024, bucket);
- const round = bucket > 0 ? count < 3 ? 2 : count < 30 ? 1 : 0 : 0;
- return count.toFixed(round) + ' ' + sizes[bucket];
-}
-function shortenFileName(filename, maxLength) {
- if (typeof filename != 'string') {
- return filename;
- }
- return filename.length > maxLength ? filename.slice(0, maxLength / 2 - 1) + '…' + filename.slice(1 - maxLength / 2) : filename;
-}
-function stringToColorHash(value) {
- let hash = 0;
- value = '' + value;
- for (let i = 0; i < value.length; i++) {
- hash = (hash << 5) - hash + value.charCodeAt(i);
- hash = hash & hash;
- }
- return hash;
-}
-function letterTileColorId(userId) {
- return Math.abs(stringToColorHash(userId)) % 16;
-}
-function idToColorClass(id, light, fg) {
- return (light ? 'lt-' : 'dk-') + (fg ? 'fg-' : 'bg-') + letterTileColorId(id);
-}
-function flagEmoji(countryCode) {
- const codePoints = countryCode.toUpperCase().split('').map(char => 0x1F1A5 + char.charCodeAt());
- return String.fromCodePoint(...codePoints);
-}
-function truncateString(str, maxLength) {
- if (typeof str !== 'string') {
- return str;
- }
- if (str.length <= maxLength) {
- return str;
- }
- const isRTL = /[\u0590-\u05FF\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]/.test(str);
- return isRTL ? '…' + str.slice(0, maxLength - 1) : str.slice(0, maxLength - 1) + '…';
-}
-
-/***/ }),
-
-/***/ "./src/lib/utils.js":
-/*!**************************!*\
- !*** ./src/lib/utils.js ***!
- \**************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ arrayEqual: function() { return /* binding */ arrayEqual; },
-/* harmony export */ asEmail: function() { return /* binding */ asEmail; },
-/* harmony export */ asPhone: function() { return /* binding */ asPhone; },
-/* harmony export */ cancelablePromise: function() { return /* binding */ cancelablePromise; },
-/* harmony export */ defaultWallpaper: function() { return /* binding */ defaultWallpaper; },
-/* harmony export */ deliveryMarker: function() { return /* binding */ deliveryMarker; },
-/* harmony export */ isUrlRelative: function() { return /* binding */ isUrlRelative; },
-/* harmony export */ sanitizeUrl: function() { return /* binding */ sanitizeUrl; },
-/* harmony export */ sanitizeUrlForMime: function() { return /* binding */ sanitizeUrlForMime; },
-/* harmony export */ theCard: function() { return /* binding */ theCard; },
-/* harmony export */ updateFavicon: function() { return /* binding */ updateFavicon; },
-/* harmony export */ urlAsAttachment: function() { return /* binding */ urlAsAttachment; },
-/* harmony export */ wallpaperNameFromUrl: function() { return /* binding */ wallpaperNameFromUrl; },
-/* harmony export */ wallpaperTypeFromUrl: function() { return /* binding */ wallpaperTypeFromUrl; }
-/* harmony export */ });
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
-
-
-function updateFavicon(count) {
- const oldIcon = document.getElementById('shortcut-icon');
- const head = document.head || document.getElementsByTagName('head')[0];
- const newIcon = document.createElement('link');
- newIcon.type = 'image/png';
- newIcon.id = 'shortcut-icon';
- newIcon.rel = 'shortcut icon';
- newIcon.href = 'img/logo32x32' + (count > 0 ? 'a' : '') + '.png';
- if (oldIcon) {
- head.removeChild(oldIcon);
- }
- head.appendChild(newIcon);
- document.title = (count > 0 ? '(' + count + ') ' : '') + 'Tinode';
-}
-function theCard(fn, imageUrl, imageMimeType, note) {
- let card = null;
- fn = fn && fn.trim();
- note = note && note.trim();
- if (fn) {
- card = {
- fn: fn
- };
- }
- if (typeof note == 'string') {
- card = card || {};
- card.note = note ? note : tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.DEL_CHAR;
- }
- if (imageUrl) {
- card = card || {};
- let mimeType = imageMimeType;
- const matches = /^data:(image\/[-a-z0-9+.]+)?(;base64)?,/i.exec(imageUrl);
- if (matches) {
- mimeType = matches[1];
- card.photo = {
- data: imageUrl.substring(imageUrl.indexOf(',') + 1),
- ref: tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.DEL_CHAR
- };
- } else {
- card.photo = {
- data: tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.DEL_CHAR,
- ref: imageUrl
- };
- }
- card.photo.type = (mimeType || 'image/jpeg').substring('image/'.length);
- }
- return card;
-}
-function arrayEqual(a, b) {
- if (a === b) {
- return true;
- }
- if (!Array.isArray(a) || !Array.isArray(b)) {
- return false;
- }
- if (a.length != b.length) {
- return false;
- }
- a.sort();
- b.sort();
- for (let i = 0, l = a.length; i < l; i++) {
- if (a[i] !== b[i]) {
- return false;
- }
- }
- return true;
-}
-function asPhone(val) {
- val = val.trim();
- if (/^(?:\+?(\d{1,3}))?[- (.]*(\d{3})[- ).]*(\d{3})[- .]*(\d{2})[- .]*(\d{2})?$/.test(val)) {
- return val.replaceAll(/[- ().]*/g, '');
- }
- return null;
-}
-function asEmail(val) {
- val = val.trim();
- if (/^[a-z0-9_.+-]+@[a-z0-9-]+(\.[a-z0-9-]+)+$/i.test(val)) {
- return val;
- }
- return null;
-}
-function isUrlRelative(url) {
- return url && !/^\s*([a-z][a-z0-9+.-]*:|\/\/)/im.test(url.replace(/\\/g, '/'));
-}
-function sanitizeUrl(url, allowedSchemes) {
- if (typeof url != 'string') {
- return url;
- }
- url = url.replace(/[^\x21-\x7E]/gmi, '').trim();
- url = url.replace(/\\/g, '/');
- if (!/^([a-z][a-z0-9+.-]*:|\/\/)/i.test(url)) {
- return url;
- }
- if (/^blob:http/.test(url)) {
- return url;
- }
- const schemes = Array.isArray(allowedSchemes) ? allowedSchemes.join('|') : 'http|https';
- const re = new RegExp('^((' + schemes + '):|//)', 'i');
- if (!re.test(url)) {
- return null;
- }
- return url;
-}
-function sanitizeUrlForMime(url, mimeMajor) {
- if (!url) {
- return null;
- }
- const sanitizedUrl = sanitizeUrl(url);
- if (sanitizedUrl) {
- return sanitizedUrl;
- }
- const re = new RegExp(`data:${mimeMajor}\/[-+.a-z0-9]+;base64,`, 'i');
- if (re.test(url.trim())) {
- return url;
- }
- return null;
-}
-function urlAsAttachment(url) {
- if (url.startsWith('data:') || url.startsWith('blob:')) {
- return url;
- }
- let query = '',
- fragment = '';
- const idxF = url.indexOf('#');
- if (idxF > 0) {
- fragment = url.substring(idxF + 1);
- url = url.substring(0, idxF);
- }
- const idxQ = url.indexOf('?');
- if (idxQ > 0) {
- query = url.substring(idxQ + 1);
- url = url.substring(0, idxQ);
- }
- const params = new URLSearchParams(query);
- params.append('asatt', '1');
- return `${url}?${params.toString()}` + (fragment ? `#${fragment}` : '');
-}
-function deliveryMarker(received) {
- switch (received) {
- case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_SENDING:
- return {
- name: 'access_time'
- };
- case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_FAILED:
- case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_FATAL:
- return {
- name: 'warning',
- color: 'danger-color'
- };
- case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_SENT:
- return {
- name: 'done'
- };
- case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_RECEIVED:
- return {
- name: 'done_all'
- };
- case tinode_sdk__WEBPACK_IMPORTED_MODULE_0__.Tinode.MESSAGE_STATUS_READ:
- return {
- name: 'done_all',
- color: 'blue'
- };
- }
- return null;
-}
-function cancelablePromise(promise) {
- let hasCanceled = false;
- const wrappedPromise = promise instanceof Error ? Promise.reject(promise) : new Promise((resolve, reject) => {
- promise.then(result => hasCanceled ? reject({
- isCanceled: true
- }) : resolve(result), error => hasCanceled ? reject({
- isCanceled: true
- }) : reject(error));
- });
- return {
- promise: wrappedPromise,
- cancel() {
- hasCanceled = true;
- }
- };
-}
-;
-function defaultWallpaper() {
- const wallpaperIndex = __webpack_require__(/*! ../../img/bkg/index.json */ "./img/bkg/index.json");
- const wp = wallpaperIndex[_config_js__WEBPACK_IMPORTED_MODULE_1__.WALLPAPER_DEFAULTS.type][_config_js__WEBPACK_IMPORTED_MODULE_1__.WALLPAPER_DEFAULTS.index];
- return {
- name: `../${_config_js__WEBPACK_IMPORTED_MODULE_1__.WALLPAPER_DEFAULTS.path}${wp.name}`,
- size: wp.size
- };
-}
-function wallpaperNameFromUrl(wallpaperUrl) {
- const parts = wallpaperUrl.split('/');
- return parts[parts.length - 1];
-}
-function wallpaperTypeFromUrl(wallpaperUrl) {
- const fname = wallpaperNameFromUrl(wallpaperUrl);
- const wallpaperIndex = __webpack_require__(/*! ../../img/bkg/index.json */ "./img/bkg/index.json");
- for (const type in wallpaperIndex) {
- for (let i = 0; i < wallpaperIndex[type].length; i++) {
- if (wallpaperIndex[type][i].name == fname) {
- return type;
- }
- }
- }
- return null;
-}
-
-/***/ }),
-
-/***/ "./src/version.js":
-/*!************************!*\
- !*** ./src/version.js ***!
- \************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ PACKAGE_VERSION: function() { return /* binding */ PACKAGE_VERSION; }
-/* harmony export */ });
-const PACKAGE_VERSION = "0.25.2";
-
-/***/ }),
-
-/***/ "./src/views/acc-general-view.jsx":
-/*!****************************************!*\
- !*** ./src/views/acc-general-view.jsx ***!
- \****************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ AccGeneralView; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-
-
-class AccGeneralView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.state = {
- colorSchema: props.colorSchema || 'auto',
- textSize: props.textSize * 10 || '100',
- sendOnEnter: props.sendOnEnter || 'plain'
- };
- this.isMac = (navigator.userAgentData && navigator.userAgentData.platform || navigator.platform).toLowerCase().startsWith('mac');
- this.handleColorSchemaSelected = this.handleColorSchemaSelected.bind(this);
- this.handleTextSizeChanged = this.handleTextSizeChanged.bind(this);
- this.handleSendOnEnterSelected = this.handleSendOnEnterSelected.bind(this);
- }
- handleColorSchemaSelected(e) {
- this.setState({
- colorSchema: e.currentTarget.value
- });
- this.props.onChangeColorSchema(e.currentTarget.value);
- }
- handleTextSizeChanged(e) {
- this.setState({
- textSize: e.currentTarget.value
- });
- this.props.onTextSizeChanged(e.currentTarget.value / 10 | 0);
- }
- handleSendOnEnterSelected(e) {
- this.setState({
- sendOnEnter: e.currentTarget.value
- });
- this.props.onSendOnEnterChanged(e.currentTarget.value);
- }
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- id: "settings-form",
- className: "scrollable-panel"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-column"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_color_schema",
- defaultMessage: [{
- "type": 0,
- "value": "Theme:"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
- className: "quoted"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
- key: "system"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "radio",
- id: "system",
- name: "color-scheme-select",
- value: "auto",
- checked: this.state.colorSchema == 'auto',
- onChange: this.handleColorSchemaSelected
- }), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- htmlFor: "system"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "color_schema_system",
- defaultMessage: [{
- "type": 0,
- "value": "System default"
- }]
- }), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("img", {
- src: "img/routine.svg",
- style: {
- verticalAlign: 'top',
- width: '1.6rem',
- height: '1.6rem'
- }
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
- key: "light"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "radio",
- id: "light",
- name: "color-scheme-select",
- value: "light",
- checked: this.state.colorSchema == 'light',
- onChange: this.handleColorSchemaSelected
- }), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- htmlFor: "light"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "color_schema_light",
- defaultMessage: [{
- "type": 0,
- "value": "Light"
- }]
- }), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons orange large"
- }, "light_mode"))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
- key: "dark"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "radio",
- id: "dark",
- name: "color-scheme-select",
- value: "dark",
- checked: this.state.colorSchema == 'dark',
- onChange: this.handleColorSchemaSelected
- }), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- htmlFor: "dark"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "color_schema_dark",
- defaultMessage: [{
- "type": 0,
- "value": "Dark"
- }]
- }), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons blue large"
- }, "dark_mode")))))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "hr"
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row clean-clickable"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- onClick: this.props.onSelectWallpapers,
- className: "flat-button"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "wallpaper"), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "wallpapers",
- defaultMessage: [{
- "type": 0,
- "value": "Wallpapers"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "hr"
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-column"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_text_size",
- defaultMessage: [{
- "type": 0,
- "value": "Text size:"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "range",
- id: "text_size",
- name: "text_size",
- min: "80",
- max: "120",
- step: "10",
- list: "text_size_options",
- value: this.state.textSize,
- onChange: this.handleTextSizeChanged
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("datalist", {
- id: "text_size_options"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("option", {
- value: "80",
- label: "80%"
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("option", {
- value: "90",
- label: "90%"
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("option", {
- value: "100",
- label: "100%"
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("option", {
- value: "110",
- label: "110%"
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("option", {
- value: "120",
- label: "120%"
- })))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "hr"
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_keyboard",
- defaultMessage: [{
- "type": 0,
- "value": "Keyboard:"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
- className: "quoted"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
- key: "plain"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "radio",
- id: "plain",
- name: "send-select",
- value: "plain",
- checked: this.state.sendOnEnter == 'plain',
- onChange: this.handleSendOnEnterSelected
- }), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- htmlFor: "send_plain"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "send_plain",
- defaultMessage: [{
- "type": 0,
- "value": "Send on Enter"
- }]
- }), "\xA0"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
- className: "small gray"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "send_plain_explained",
- defaultMessage: [{
- "type": 0,
- "value": "Press Shift + Enter for new line"
- }]
- })))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
- key: "command"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "radio",
- id: "command",
- name: "send-select",
- value: "command",
- checked: this.state.sendOnEnter == 'command',
- onChange: this.handleSendOnEnterSelected
- }), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- htmlFor: "send_command"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "send_command",
- defaultMessage: [{
- "type": 0,
- "value": "Send on "
- }, {
- "type": 1,
- "value": "key"
- }],
- values: {
- key: this.isMac ? '⌘ + Enter' : 'Ctrl + Enter'
- }
- }), "\xA0"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
- className: "small gray"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "send_command_explained",
- defaultMessage: [{
- "type": 0,
- "value": "Press Enter for new line"
- }]
- })))))));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/views/acc-notifications-view.jsx":
-/*!**********************************************!*\
- !*** ./src/views/acc-notifications-view.jsx ***!
- \**********************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ AccNotificationsView; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ "./src/widgets/checkbox.jsx");
-
-
-
-class AccNotificationsView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.handleCheckboxClick = this.handleCheckboxClick.bind(this);
- }
- handleCheckboxClick(what, checked) {
- if (what == 'sound') {
- this.props.onToggleMessageSounds(checked);
- } else if (what == 'alert') {
- this.props.onTogglePushNotifications(checked);
- }
- }
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "scrollable-panel"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- htmlFor: "message-sound"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_message_sound",
- defaultMessage: [{
- "type": 0,
- "value": "Message sound:"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
- name: "sound",
- id: "message-sound",
- checked: this.props.messageSounds,
- onChange: this.handleCheckboxClick
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- htmlFor: "desktop-alerts"
- }, this.props.desktopAlertsEnabled ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_push_notifications",
- defaultMessage: [{
- "type": 0,
- "value": "Notification alerts:"
- }]
- }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_push_notifications_disabled",
- defaultMessage: [{
- "type": 0,
- "value": "Notification alerts (requires HTTPS):"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
- name: "alert",
- id: "desktop-alerts",
- checked: this.props.desktopAlerts,
- onChange: this.props.desktopAlertsEnabled ? this.handleCheckboxClick : null
- })));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/views/acc-support-view.jsx":
-/*!****************************************!*\
- !*** ./src/views/acc-support-view.jsx ***!
- \****************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ AccSupportView; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
-
-
-
-
-class AccSupportView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "scrollable-panel"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-column"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: _config_js__WEBPACK_IMPORTED_MODULE_3__.LINK_CONTACT_US,
- className: "flat-button",
- target: "_blank"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "email"), " \xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "link_contact_us",
- defaultMessage: [{
- "type": 0,
- "value": "Contact Us"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: _config_js__WEBPACK_IMPORTED_MODULE_3__.LINK_TERMS_OF_SERVICE,
- className: "flat-button",
- target: "_blank"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "description"), " \xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "link_terms_of_service",
- defaultMessage: [{
- "type": 0,
- "value": "Terms of Service"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: _config_js__WEBPACK_IMPORTED_MODULE_3__.LINK_PRIVACY_POLICY,
- className: "flat-button",
- target: "_blank"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "policy"), " \xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "link_privacy_policy",
- defaultMessage: [{
- "type": 0,
- "value": "Privacy Policy"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "hr"
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-column"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_client",
- defaultMessage: [{
- "type": 0,
- "value": "Client:"
- }]
- })), _config_js__WEBPACK_IMPORTED_MODULE_3__.APP_NAME), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_sdk",
- defaultMessage: [{
- "type": 0,
- "value": "SDK:"
- }]
- })), tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.getLibrary()), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_server",
- defaultMessage: [{
- "type": 0,
- "value": "Server:"
- }]
- })), this.props.serverVersion), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_server_address",
- defaultMessage: [{
- "type": 0,
- "value": "Server address:"
- }]
- })), this.props.serverAddress)));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/views/contacts-view.jsx":
-/*!*************************************!*\
- !*** ./src/views/contacts-view.jsx ***!
- \*************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ ContactsView; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/contact-list.jsx */ "./src/widgets/contact-list.jsx");
-/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
-
-
-
-
-const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
- archived_contacts_title: {
- id: "archived_contacts",
- defaultMessage: [{
- "type": 0,
- "value": "Archived contacts ("
- }, {
- "type": 1,
- "value": "count"
- }, {
- "type": 0,
- "value": ")"
- }]
- }
-});
-class ContactsView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- this.handleAction = this.handleAction.bind(this);
- this.state = ContactsView.deriveStateFromProps(props);
- }
- static deriveStateFromProps(props) {
- const contacts = [];
- let unreadThreads = 0;
- let archivedCount = 0;
- const me = props.tinode.getMeTopic();
- props.chatList.forEach(c => {
- const blocked = c.acs && !c.acs.isJoiner();
- c.pinned = me.pinnedTopicRank(c.topic);
- if (blocked && props.blocked) {
- contacts.push(c);
- }
- if (blocked || props.blocked) {
- return;
- }
- if (c.private && c.private.arch) {
- if (props.archive) {
- contacts.push(c);
- } else {
- archivedCount++;
- }
- } else if (!props.archive) {
- contacts.push(c);
- unreadThreads += c.unread > 0 ? 1 : 0;
- }
- });
- contacts.sort((a, b) => {
- const pin = b.pinned - a.pinned;
- return pin != 0 ? pin : (b.touched || 0) - (a.touched || 0);
- });
- if (archivedCount > 0) {
- contacts.push({
- action: 'archive',
- title: messages.archived_contacts_title,
- values: {
- count: archivedCount
- }
- });
- }
- return {
- contactList: contacts,
- unreadThreads: unreadThreads
- };
- }
- componentDidUpdate(prevProps, prevState) {
- if (prevProps.chatList != this.props.chatList || prevProps.archive != this.props.archive || prevProps.blocked != this.props.blocked) {
- const newState = ContactsView.deriveStateFromProps(this.props);
- this.setState(newState);
- if (newState.unreadThreads != prevState.unreadThreads) {
- (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_3__.updateFavicon)(newState.unreadThreads);
- }
- }
- }
- handleAction(action_ignored) {
- this.props.onShowArchive();
- }
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "contacts_not_found",
- defaultMessage: [{
- "type": 0,
- "value": "You have no chats\\n¯∖_(ツ)_/¯"
- }]
- }, no_contacts => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
- tinode: this.props.tinode,
- connected: this.props.connected,
- contacts: this.state.contactList,
- emptyListMessage: no_contacts,
- topicSelected: this.props.topicSelected,
- myUserId: this.props.myUserId,
- showOnline: true,
- showUnread: true,
- onTopicSelected: this.props.onTopicSelected,
- showContextMenu: this.props.showContextMenu,
- onAction: this.handleAction
- }));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/views/login-view.jsx":
-/*!**********************************!*\
- !*** ./src/views/login-view.jsx ***!
- \**********************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ LoginView; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ "./src/widgets/checkbox.jsx");
-/* harmony import */ var _widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/visible-password.jsx */ "./src/widgets/visible-password.jsx");
-
-
-
-
-class LoginView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- this.state = {
- login: props.login,
- password: '',
- hostName: props.serverAddress,
- saveToken: props.persist
- };
- this.handleLoginChange = this.handleLoginChange.bind(this);
- this.handlePasswordChange = this.handlePasswordChange.bind(this);
- this.handleToggleSaveToken = this.handleToggleSaveToken.bind(this);
- this.handleSubmit = this.handleSubmit.bind(this);
- }
- handleLoginChange(e) {
- this.setState({
- login: e.target.value
- });
- }
- handlePasswordChange(e) {
- this.setState({
- password: e.target.value
- });
- }
- handleToggleSaveToken() {
- this.props.onPersistenceChange(!this.state.saveToken);
- this.setState({
- saveToken: !this.state.saveToken
- });
- }
- handleSubmit(e) {
- e.preventDefault();
- this.props.onLogin(this.state.login.trim(), this.state.password.trim());
- }
- render() {
- let submitClasses = 'primary';
- if (this.props.disabled) {
- submitClasses += ' disabled';
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", {
- id: "login-form",
- onSubmit: this.handleSubmit
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "login_prompt",
- defaultMessage: [{
- "type": 0,
- "value": "Login"
- }]
- }, login_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "text",
- id: "inputLogin",
- placeholder: login_prompt,
- autoComplete: "username",
- autoCorrect: "off",
- autoCapitalize: "none",
- value: this.state.login,
- onChange: this.handleLoginChange,
- required: true,
- autoFocus: true
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "password_prompt",
- defaultMessage: [{
- "type": 0,
- "value": "Password"
- }]
- }, password_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_visible_password_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
- type: "password",
- id: "inputPassword",
- placeholder: password_prompt,
- autoComplete: "current-password",
- value: this.state.password,
- onChange: this.handlePasswordChange,
- required: true
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
- id: "save-token",
- name: "save-token",
- checked: this.state.saveToken,
- onChange: this.handleToggleSaveToken
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- htmlFor: "save-token"
- }, "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "stay_logged_in",
- defaultMessage: [{
- "type": 0,
- "value": "Stay logged in"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#reset"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "forgot_password_link",
- defaultMessage: [{
- "type": 0,
- "value": "Forgot password?"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "dialog-buttons"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
- className: submitClasses,
- type: "submit"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "button_sign_in",
- defaultMessage: [{
- "type": 0,
- "value": "Sign in"
- }]
- }))));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/views/new-topic-view.jsx":
-/*!**************************************!*\
- !*** ./src/views/new-topic-view.jsx ***!
- \**************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/contact-list.jsx */ "./src/widgets/contact-list.jsx");
-/* harmony import */ var _widgets_new_topic_by_id_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/new-topic-by-id.jsx */ "./src/widgets/new-topic-by-id.jsx");
-/* harmony import */ var _widgets_new_topic_group_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/new-topic-group.jsx */ "./src/widgets/new-topic-group.jsx");
-/* harmony import */ var _widgets_search_contacts_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/search-contacts.jsx */ "./src/widgets/search-contacts.jsx");
-/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/navigation.js */ "./src/lib/navigation.js");
-/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
-
-
-
-
-
-
-
-
-
-const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
- search_for_contacts: {
- id: "search_for_contacts",
- defaultMessage: [{
- "type": 0,
- "value": "Use search to find contacts"
- }]
- },
- search_no_results: {
- id: "search_no_results",
- defaultMessage: [{
- "type": 0,
- "value": "Search returned no results"
- }]
- },
- search_placeholder: {
- id: "search_placeholder",
- defaultMessage: [{
- "type": 0,
- "value": "List like alice@example.com, +17025550003..."
- }]
- }
-});
-class NewTopicView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- const urlParams = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].parseUrlHash(window.location.hash).params;
- const initialTab = urlParams['tab'] || 'find';
- const initialQuery = initialTab == 'find' ? urlParams['q'] || null : null;
- this.state = {
- tabSelected: initialTab,
- searchQuery: initialQuery
- };
- this.handleTabClick = this.handleTabClick.bind(this);
- this.handleSearchContacts = this.handleSearchContacts.bind(this);
- this.handleSearchResultSelected = this.handleSearchResultSelected.bind(this);
- this.handleNewGroupSubmit = this.handleNewGroupSubmit.bind(this);
- this.handleGroupByID = this.handleGroupByID.bind(this);
- }
- componentDidMount() {
- this.props.onInitFind();
- }
- handleTabClick(e) {
- e.preventDefault();
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].addUrlParam(window.location.hash, 'tab', e.currentTarget.dataset.id));
- this.setState({
- tabSelected: e.currentTarget.dataset.id
- });
- }
- handleSearchContacts(query) {
- query = query.trim() || tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.DEL_CHAR;
- if (!/[\s,:]/.test(query) && query != tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.DEL_CHAR) {
- const email = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.asEmail)(query);
- if (email) {
- query = `${tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_EMAIL}${email}`;
- } else {
- const tel = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.asPhone)(query);
- if (tel) {
- query = `${tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_PHONE}${tel}`;
- } else {
- if (query[0] == '@') {
- query = query.substring(1);
- }
- query = `${tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_ALIAS}${query},${query}`;
- }
- }
- }
- this.props.onSearchContacts(query);
- this.setState({
- searchQuery: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isNullValue(query) ? null : query
- });
- }
- handleSearchResultSelected(topicName) {
- if (this.state.tabSelected == 'find') {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].removeUrlParams(window.location.hash, ['tab', 'q']));
- this.props.onCreateTopic(topicName);
- }
- }
- handleNewGroupSubmit(name, description, dataUrl, priv, tags, isChannel) {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].removeUrlParams(window.location.hash, ['tab', 'q']));
- this.props.onCreateTopic(undefined, {
- public: (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_8__.theCard)(name, dataUrl, null, description),
- private: priv,
- tags: tags
- }, isChannel);
- }
- handleGroupByID(topicName) {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_7__["default"].removeUrlParams(window.location.hash, ['tab', 'q']));
- this.props.onCreateTopic(topicName);
- }
- render() {
- const {
- formatMessage
- } = this.props.intl;
- const no_contacts_placeholder = formatMessage(this.state.searchQuery ? messages.search_no_results : messages.search_for_contacts);
- const search_placeholder = formatMessage(messages.search_placeholder);
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "flex-column"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
- className: "tabbar"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
- className: this.state.tabSelected === 'find' ? 'active' : null
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- "data-id": "find",
- onClick: this.handleTabClick
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "tabtitle_find_user",
- defaultMessage: [{
- "type": 0,
- "value": "find"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
- className: this.state.tabSelected === 'grp' ? 'active' : null
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- "data-id": "grp",
- onClick: this.handleTabClick
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "tabtitle_new_group",
- defaultMessage: [{
- "type": 0,
- "value": "new group"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
- className: this.state.tabSelected === 'byid' ? 'active' : null
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- "data-id": "byid",
- onClick: this.handleTabClick
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "tabtitle_group_by_id",
- defaultMessage: [{
- "type": 0,
- "value": "by id"
- }]
- })))), this.state.tabSelected === 'grp' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_new_topic_group_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
- tinode: this.props.tinode,
- onSubmit: this.handleNewGroupSubmit,
- onError: this.props.onError
- }) : this.state.tabSelected === 'byid' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_new_topic_by_id_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
- myURI: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.URI_TOPIC_ID_PREFIX + this.props.tinode.getCurrentUserID(),
- onSubmit: this.handleGroupByID,
- onError: this.props.onError
- }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "flex-column"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_search_contacts_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], {
- placeholder: search_placeholder,
- initialQuery: this.state.searchQuery || '',
- onSearchContacts: this.handleSearchContacts
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
- tinode: this.props.tinode,
- contacts: this.props.searchResults,
- myUserId: this.props.myUserId,
- emptyListMessage: no_contacts_placeholder,
- showSelfTopic: !this.state.searchQuery,
- showOnline: false,
- showUnread: false,
- showContextMenu: false,
- onTopicSelected: this.handleSearchResultSelected
- })));
- }
-}
-;
-/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(NewTopicView));
-
-/***/ }),
-
-/***/ "./src/views/settings-view.jsx":
-/*!*************************************!*\
- !*** ./src/views/settings-view.jsx ***!
- \*************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ SettingsView; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/checkbox.jsx */ "./src/widgets/checkbox.jsx");
-/* harmony import */ var _widgets_host_selector_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/host-selector.jsx */ "./src/widgets/host-selector.jsx");
-
-
-
-
-class SettingsView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.state = {
- transport: props.transport || 'def',
- serverAddress: props.serverAddress,
- secureConnection: props.secureConnection
- };
- this.handleSubmit = this.handleSubmit.bind(this);
- this.handleTransportSelected = this.handleTransportSelected.bind(this);
- this.handleServerAddressChange = this.handleServerAddressChange.bind(this);
- this.handleToggleSecure = this.handleToggleSecure.bind(this);
- }
- handleSubmit(e) {
- e.preventDefault();
- this.props.onUpdate({
- transport: this.state.transport,
- serverAddress: this.state.serverAddress,
- secureConnection: this.state.secureConnection
- });
- }
- handleTransportSelected(e) {
- this.setState({
- transport: e.currentTarget.value
- });
- }
- handleServerAddressChange(name) {
- this.setState({
- serverAddress: name
- });
- }
- handleToggleSecure(e) {
- this.setState({
- secureConnection: !this.state.secureConnection
- });
- }
- render() {
- const names = {
- def: "default",
- ws: "websocket",
- lp: "long polling"
- };
- const transportOptions = [];
- ['def', 'ws', 'lp'].forEach(item => {
- const id = 'transport-' + item;
- const name = names[item];
- transportOptions.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
- key: item
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "radio",
- id: id,
- name: "transport-select",
- value: item,
- checked: this.state.transport === item,
- onChange: this.handleTransportSelected
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- htmlFor: id
- }, name)));
- });
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", {
- id: "settings-form",
- className: "panel-form",
- onSubmit: this.handleSubmit
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_server_to_use",
- defaultMessage: [{
- "type": 0,
- "value": "Server to use:"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_host_selector_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
- serverAddress: this.state.serverAddress,
- onServerAddressChange: this.handleServerAddressChange
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_checkbox_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
- id: "secure-connection",
- name: "secure-connection",
- checked: this.state.secureConnection,
- className: "quoted",
- onChange: this.handleToggleSecure
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- htmlFor: "secure-connection"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_use_secure_connection",
- defaultMessage: [{
- "type": 0,
- "value": "Use secure connection"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_wire_transport",
- defaultMessage: [{
- "type": 0,
- "value": "Wire transport:"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
- className: "quoted"
- }, transportOptions)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "dialog-buttons"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
- type: "submit",
- className: "primary"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "button_update",
- defaultMessage: [{
- "type": 0,
- "value": "Update"
- }]
- }))));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/views/sidepanel-view.jsx":
-/*!**************************************!*\
- !*** ./src/views/sidepanel-view.jsx ***!
- \**************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../widgets/error-panel.jsx */ "./src/widgets/error-panel.jsx");
-/* harmony import */ var _widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../widgets/load-spinner.jsx */ "./src/widgets/load-spinner.jsx");
-/* harmony import */ var _widgets_side_navbar_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../widgets/side-navbar.jsx */ "./src/widgets/side-navbar.jsx");
-/* harmony import */ var _topic_common_view_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./topic-common-view.jsx */ "./src/views/topic-common-view.jsx");
-/* harmony import */ var _contacts_view_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./contacts-view.jsx */ "./src/views/contacts-view.jsx");
-/* harmony import */ var _acc_general_view_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./acc-general-view.jsx */ "./src/views/acc-general-view.jsx");
-/* harmony import */ var _acc_notifications_view_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./acc-notifications-view.jsx */ "./src/views/acc-notifications-view.jsx");
-/* harmony import */ var _acc_support_view_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./acc-support-view.jsx */ "./src/views/acc-support-view.jsx");
-/* harmony import */ var _login_view_jsx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./login-view.jsx */ "./src/views/login-view.jsx");
-/* harmony import */ var _new_topic_view_jsx__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./new-topic-view.jsx */ "./src/views/new-topic-view.jsx");
-/* harmony import */ var _settings_view_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./settings-view.jsx */ "./src/views/settings-view.jsx");
-/* harmony import */ var _validation_view_jsx__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./validation-view.jsx */ "./src/views/validation-view.jsx");
-
-
-
-
-
-
-const AccountSettingsView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => Promise.all(/*! import() */[__webpack_require__.e("vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js"), __webpack_require__.e("vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-883e54"), __webpack_require__.e("src_views_account-settings-view_jsx")]).then(__webpack_require__.bind(__webpack_require__, /*! ./account-settings-view.jsx */ "./src/views/account-settings-view.jsx")));
-
-const CreateAccountView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => Promise.all(/*! import() */[__webpack_require__.e("vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js"), __webpack_require__.e("vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-883e54"), __webpack_require__.e("src_views_create-account-view_jsx")]).then(__webpack_require__.bind(__webpack_require__, /*! ./create-account-view.jsx */ "./src/views/create-account-view.jsx")));
-
-
-const AccSecurityView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ "src_views_acc-security-view_jsx").then(__webpack_require__.bind(__webpack_require__, /*! ./acc-security-view.jsx */ "./src/views/acc-security-view.jsx")));
-
-
-
-const PasswordResetView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => Promise.all(/*! import() */[__webpack_require__.e("vendors-node_modules_libphonenumber-js_mobile_exports_parsePhoneNumberWithError_js"), __webpack_require__.e("vendors-node_modules_libphonenumber-js_examples_mobile_json_js-node_modules_libphonenumber-js-883e54"), __webpack_require__.e("src_views_password-reset-view_jsx")]).then(__webpack_require__.bind(__webpack_require__, /*! ./password-reset-view.jsx */ "./src/views/password-reset-view.jsx")));
-
-
-const WallpapersView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ "src_views_wallpapers_jsx").then(__webpack_require__.bind(__webpack_require__, /*! ./wallpapers.jsx */ "./src/views/wallpapers.jsx")));
-const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
- login: {
- id: "sidepanel_title_login",
- defaultMessage: [{
- "type": 0,
- "value": "Sign In"
- }]
- },
- register: {
- id: "sidepanel_title_register",
- defaultMessage: [{
- "type": 0,
- "value": "Create Account"
- }]
- },
- settings: {
- id: "sidepanel_title_settings",
- defaultMessage: [{
- "type": 0,
- "value": "Settings"
- }]
- },
- edit: {
- id: "sidepanel_title_account_settings",
- defaultMessage: [{
- "type": 0,
- "value": "Account Settings"
- }]
- },
- general: {
- id: "panel_title_general",
- defaultMessage: [{
- "type": 0,
- "value": "General"
- }]
- },
- security: {
- id: "panel_title_security",
- defaultMessage: [{
- "type": 0,
- "value": "Security"
- }]
- },
- crop: {
- id: "panel_title_crop",
- defaultMessage: [{
- "type": 0,
- "value": "Drag to Adjust"
- }]
- },
- notif: {
- id: "sidepanel_title_acc_notifications",
- defaultMessage: [{
- "type": 0,
- "value": "Notifications"
- }]
- },
- acc_general: {
- id: "sidepanel_title_acc_general",
- defaultMessage: [{
- "type": 0,
- "value": "General"
- }]
- },
- support: {
- id: "sidepanel_title_acc_support",
- defaultMessage: [{
- "type": 0,
- "value": "Support"
- }]
- },
- newtpk: {
- id: "sidepanel_title_newtpk",
- defaultMessage: [{
- "type": 0,
- "value": "Start New Chat"
- }]
- },
- cred: {
- id: "sidepanel_title_cred",
- defaultMessage: [{
- "type": 0,
- "value": "Confirm Credentials"
- }]
- },
- reset: {
- id: "sidepanel_title_reset",
- defaultMessage: [{
- "type": 0,
- "value": "Reset Password"
- }]
- },
- archive: {
- id: "sidepanel_title_archive",
- defaultMessage: [{
- "type": 0,
- "value": "Archived Chats"
- }]
- },
- blocked: {
- id: "sidepanel_title_blocked",
- defaultMessage: [{
- "type": 0,
- "value": "Blocked Chats"
- }]
- },
- wallpapers: {
- id: "wallpapers",
- defaultMessage: [{
- "type": 0,
- "value": "Wallpapers"
- }]
- }
-});
-class SidepanelView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.handleNewTopic = this.handleNewTopic.bind(this);
- }
- handleNewTopic() {
- this.props.onNavigate('newtpk');
- }
- render() {
- const {
- formatMessage
- } = this.props.intl;
- const view = this.props.state || (this.props.myUserId ? 'contacts' : 'login');
- let title, avatar, badges;
- if (view == 'contacts') {
- title = this.props.title;
- avatar = this.props.avatar ? this.props.avatar : true;
- badges = this.props.trustedBadges;
- } else {
- title = formatMessage(messages[view]);
- avatar = false;
- badges = null;
- }
- let onCancel;
- if (['login', 'contacts'].indexOf(view) == -1) {
- onCancel = this.props.onCancel;
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- id: "sidepanel"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_side_navbar_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
- state: view,
- title: title,
- avatar: avatar,
- tinode: this.props.tinode,
- trustedBadges: badges,
- myUserId: this.props.myUserId,
- onSignUp: this.props.onSignUp,
- onSettings: this.props.onSettings,
- onNewTopic: this.handleNewTopic,
- onCancel: onCancel
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_error_panel_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
- level: this.props.errorLevel,
- text: this.props.errorText,
- action: this.props.errorAction,
- actionText: this.props.errorActionText,
- onClearError: this.props.onError
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
- show: this.props.loadSpinnerVisible
- }), view === 'login' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_login_view_jsx__WEBPACK_IMPORTED_MODULE_10__["default"], {
- login: this.props.login,
- disabled: this.props.loginDisabled,
- persist: this.props.persist,
- onLogin: this.props.onLoginRequest,
- onPersistenceChange: this.props.onPersistenceChange
- }) : view === 'register' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
- fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "loading_note",
- defaultMessage: [{
- "type": 0,
- "value": "Loading..."
- }]
- }))
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CreateAccountView, {
- tinode: this.props.tinode,
- reqCredMethod: this.props.reqCredMethod,
- onShowCountrySelector: this.props.onShowCountrySelector,
- onCreateAccount: this.props.onCreateAccount,
- onCancel: this.props.onCancel,
- onError: this.props.onError
- })) : view === 'settings' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_settings_view_jsx__WEBPACK_IMPORTED_MODULE_12__["default"], {
- transport: this.props.transport,
- serverAddress: this.props.serverAddress,
- secureConnection: this.props.secureConnection,
- onCancel: this.props.onCancel,
- onUpdate: this.props.onGlobalSettings
- }) : view === 'edit' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
- fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "loading_note",
- defaultMessage: [{
- "type": 0,
- "value": "Loading..."
- }]
- }))
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(AccountSettingsView, {
- tinode: this.props.tinode,
- myUserId: this.props.myUserId,
- trustedBadges: this.props.trustedBadges,
- reqCredMethod: this.props.reqCredMethod,
- onShowCountrySelector: this.props.onShowCountrySelector,
- onNavigate: this.props.onNavigate,
- onCredAdd: this.props.onCredAdd,
- onCredDelete: this.props.onCredDelete,
- onCredConfirm: this.props.onCredConfirm,
- onError: this.props.onError
- })) : view === 'general' || view === 'crop' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_topic_common_view_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
- topic: "me",
- tinode: this.props.tinode,
- myUserId: this.props.myUserId,
- reqCredMethod: this.props.reqCredMethod,
- onUpdateTopicDesc: this.props.onUpdateAccountDesc,
- onUpdateTagsRequest: this.props.onUpdateAccountTags,
- onError: this.props.onError
- }) : view === 'acc_general' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_acc_general_view_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], {
- colorSchema: this.props.colorSchema,
- onSelectWallpapers: this.props.onSelectWallpapers,
- textSize: this.props.textSize,
- sendOnEnter: this.props.sendOnEnter,
- onChangeColorSchema: this.props.onChangeColorSchema,
- onTextSizeChanged: this.props.onTextSizeChanged,
- onSendOnEnterChanged: this.props.onSendOnEnterChanged
- }) : view === 'notif' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_acc_notifications_view_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], {
- messageSounds: this.props.messageSounds,
- desktopAlerts: this.props.desktopAlerts,
- desktopAlertsEnabled: this.props.desktopAlertsEnabled,
- onTogglePushNotifications: this.props.onTogglePushNotifications,
- onToggleMessageSounds: this.props.onToggleMessageSounds
- }) : view === 'security' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
- fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "loading_note",
- defaultMessage: [{
- "type": 0,
- "value": "Loading..."
- }]
- }))
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(AccSecurityView, {
- tinode: this.props.tinode,
- incognitoMode: this.props.incognitoMode,
- onUpdateAccountDesc: this.props.onUpdateAccountDesc,
- onUpdatePassword: this.props.onUpdatePassword,
- onLogout: this.props.onLogout,
- onDeleteAccount: this.props.onDeleteAccount,
- onShowAlert: this.props.onShowAlert,
- onShowBlocked: this.props.onShowBlocked,
- onToggleIncognitoMode: this.props.onToggleIncognitoMode
- })) : view === 'support' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_acc_support_view_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], {
- serverAddress: this.props.serverAddress,
- serverVersion: this.props.serverVersion
- }) : view === 'wallpapers' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
- fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "loading_note",
- defaultMessage: [{
- "type": 0,
- "value": "Loading..."
- }]
- }))
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(WallpapersView, {
- wallpaper: this.props.wallpaper,
- wallpaperSize: this.props.wallpaperSize,
- wallpaperBlur: this.props.wallpaperBlur,
- colorSchema: this.props.colorSchema !== 'auto' ? this.props.colorSchema : this.props.systemColorSchema,
- onWallpaperSelected: this.props.onWallpaperSelected
- })) : view === 'contacts' || view == 'archive' || view == 'blocked' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contacts_view_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], {
- tinode: this.props.tinode,
- myUserId: this.props.myUserId,
- connected: this.props.connected,
- topicSelected: this.props.topicSelected,
- archive: view == 'archive',
- blocked: view == 'blocked',
- chatList: this.props.chatList,
- showContextMenu: this.props.showContextMenu,
- onTopicSelected: this.props.onTopicSelected,
- onShowArchive: this.props.onShowArchive
- }) : view === 'newtpk' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_new_topic_view_jsx__WEBPACK_IMPORTED_MODULE_11__["default"], {
- tinode: this.props.tinode,
- searchResults: this.props.searchResults,
- onInitFind: this.props.onInitFind,
- onSearchContacts: this.props.onSearchContacts,
- onCreateTopic: this.props.onCreateTopic,
- onError: this.props.onError
- }) : view === 'cred' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_validation_view_jsx__WEBPACK_IMPORTED_MODULE_13__["default"], {
- credCode: this.props.credCode,
- credMethod: this.props.credMethod,
- credToken: this.props.credToken,
- onSubmit: this.props.onValidateCredentials,
- onCancel: this.props.onCancel
- }) : view === 'reset' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
- fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "loading_note",
- defaultMessage: [{
- "type": 0,
- "value": "Loading..."
- }]
- }))
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PasswordResetView, {
- tinode: this.props.tinode,
- reqCredMethod: this.props.reqCredMethod,
- onShowCountrySelector: this.props.onShowCountrySelector,
- onRequest: this.props.onPasswordResetRequest,
- onReset: this.props.onResetPassword,
- onCancel: this.props.onCancel,
- onError: this.props.onError
- })) : null);
- }
-}
-;
-/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(SidepanelView));
-
-/***/ }),
-
-/***/ "./src/views/tinode-web.jsx":
-/*!**********************************!*\
- !*** ./src/views/tinode-web.jsx ***!
- \**********************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var firebase_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! firebase/app */ "./node_modules/firebase/app/dist/esm/index.esm.js");
-/* harmony import */ var firebase_messaging__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! firebase/messaging */ "./node_modules/firebase/messaging/dist/esm/index.esm.js");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_4__);
-/* harmony import */ var _widgets_alert_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/alert.jsx */ "./src/widgets/alert.jsx");
-/* harmony import */ var _widgets_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../widgets/context-menu.jsx */ "./src/widgets/context-menu.jsx");
-/* harmony import */ var _widgets_forward_dialog_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../widgets/forward-dialog.jsx */ "./src/widgets/forward-dialog.jsx");
-/* harmony import */ var _widgets_call_incoming_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../widgets/call-incoming.jsx */ "./src/widgets/call-incoming.jsx");
-/* harmony import */ var _sidepanel_view_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./sidepanel-view.jsx */ "./src/views/sidepanel-view.jsx");
-/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
-/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../constants.js */ "./src/constants.js");
-/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../version.js */ "./src/version.js");
-/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
-/* harmony import */ var _lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../lib/host-name.js */ "./src/lib/host-name.js");
-/* harmony import */ var _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../lib/local-storage.js */ "./src/lib/local-storage.js");
-/* harmony import */ var _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../lib/navigation.js */ "./src/lib/navigation.js");
-/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
-/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
-
-
-
-
-
-
-
-
-
-const PhoneCountrySelector = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ "src_widgets_phone-country-selector_jsx").then(__webpack_require__.bind(__webpack_require__, /*! ../widgets/phone-country-selector.jsx */ "./src/widgets/phone-country-selector.jsx")));
-const InfoView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ "src_views_info-view_jsx").then(__webpack_require__.bind(__webpack_require__, /*! ./info-view.jsx */ "./src/views/info-view.jsx")));
-const MessagesView = react__WEBPACK_IMPORTED_MODULE_0___default().lazy(_ => __webpack_require__.e(/*! import() */ "src_views_messages-view_jsx").then(__webpack_require__.bind(__webpack_require__, /*! ./messages-view.jsx */ "./src/views/messages-view.jsx")));
-
-
-
-
-
-
-
-
-
-
-const POP_SOUND = new Audio('audio/msg.m4a');
-const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
- reconnect_countdown: {
- id: "reconnect_countdown",
- defaultMessage: [{
- "type": 0,
- "value": "Disconnected. Reconnecting in "
- }, {
- "type": 1,
- "value": "seconds"
- }, {
- "type": 0,
- "value": "…"
- }]
- },
- reconnect_now: {
- id: "reconnect_now",
- defaultMessage: [{
- "type": 0,
- "value": "Try now"
- }]
- },
- push_init_failed: {
- id: "push_init_failed",
- defaultMessage: [{
- "type": 0,
- "value": "Failed to initialize push notifications"
- }]
- },
- invalid_security_token: {
- id: "invalid_security_token",
- defaultMessage: [{
- "type": 0,
- "value": "Invalid security token"
- }]
- },
- no_connection: {
- id: "no_connection",
- defaultMessage: [{
- "type": 0,
- "value": "No connection"
- }]
- },
- code_doesnot_match: {
- id: "code_doesnot_match",
- defaultMessage: [{
- "type": 0,
- "value": "Code does not match"
- }]
- },
- menu_item_info: {
- id: "menu_item_info",
- defaultMessage: [{
- "type": 0,
- "value": "Info"
- }]
- },
- menu_item_audio_call: {
- id: "menu_item_audio_call",
- defaultMessage: [{
- "type": 0,
- "value": "Call"
- }]
- },
- menu_item_video_call: {
- id: "menu_item_video_call",
- defaultMessage: [{
- "type": 0,
- "value": "Video call"
- }]
- },
- cred_confirmed_successfully: {
- id: "cred_confirmed_successfully",
- defaultMessage: [{
- "type": 0,
- "value": "Confirmed successfully"
- }]
- },
- password_reset_success: {
- id: "password_reset_success",
- defaultMessage: [{
- "type": 0,
- "value": "Password reset successfully"
- }]
- },
- select_country: {
- id: "select_country",
- defaultMessage: [{
- "type": 0,
- "value": "Select country"
- }]
- }
-});
-class TinodeWeb extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- this.selfRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
- this.state = this.getBlankState();
- this.handleResize = this.handleResize.bind(this);
- this.handleHashRoute = this.handleHashRoute.bind(this);
- this.handleOnline = this.handleOnline.bind(this);
- this.handleEscapeKey = this.handleEscapeKey.bind(this);
- this.handleColorSchemeChange = this.handleColorSchemeChange.bind(this);
- this.checkForAppUpdate = this.checkForAppUpdate.bind(this);
- this.handleVisibilityEvent = this.handleVisibilityEvent.bind(this);
- this.handleError = this.handleError.bind(this);
- this.handleLoginRequest = this.handleLoginRequest.bind(this);
- this.handlePersistenceChange = this.handlePersistenceChange.bind(this);
- this.handleConnected = this.handleConnected.bind(this);
- this.handleAutoreconnectIteration = this.handleAutoreconnectIteration.bind(this);
- this.doLogin = this.doLogin.bind(this);
- this.handleLoginSuccessful = this.handleLoginSuccessful.bind(this);
- this.handleDisconnect = this.handleDisconnect.bind(this);
- this.tnMeMetaDesc = this.tnMeMetaDesc.bind(this);
- this.tnMeContactUpdate = this.tnMeContactUpdate.bind(this);
- this.tnMeSubsUpdated = this.tnMeSubsUpdated.bind(this);
- this.resetContactList = this.resetContactList.bind(this);
- this.tnInitFind = this.tnInitFind.bind(this);
- this.tnFndSubsUpdated = this.tnFndSubsUpdated.bind(this);
- this.handleSearchContacts = this.handleSearchContacts.bind(this);
- this.handleTopicSelected = this.handleTopicSelected.bind(this);
- this.handleHideMessagesView = this.handleHideMessagesView.bind(this);
- this.handleSendMessage = this.handleSendMessage.bind(this);
- this.handleNewChatInvitation = this.handleNewChatInvitation.bind(this);
- this.handleNewAccount = this.handleNewAccount.bind(this);
- this.handleNewAccountRequest = this.handleNewAccountRequest.bind(this);
- this.handleUpdatePasswordRequest = this.handleUpdatePasswordRequest.bind(this);
- this.handleUpdateAccountTagsRequest = this.handleUpdateAccountTagsRequest.bind(this);
- this.handleToggleIncognitoMode = this.handleToggleIncognitoMode.bind(this);
- this.handleChangeColorSchema = this.handleChangeColorSchema.bind(this);
- this.handleChangeTextSize = this.handleChangeTextSize.bind(this);
- this.handleSendOnEnter = this.handleSendOnEnter.bind(this);
- this.handleSelectWallpapers = this.handleSelectWallpapers.bind(this);
- this.handleWallpaperSelected = this.handleWallpaperSelected.bind(this);
- this.handleSettings = this.handleSettings.bind(this);
- this.handleGlobalSettings = this.handleGlobalSettings.bind(this);
- this.handleShowArchive = this.handleShowArchive.bind(this);
- this.handleShowBlocked = this.handleShowBlocked.bind(this);
- this.handleToggleMessageSounds = this.handleToggleMessageSounds.bind(this);
- this.handleCredAdd = this.handleCredAdd.bind(this);
- this.handleCredDelete = this.handleCredDelete.bind(this);
- this.handleCredConfirm = this.handleCredConfirm.bind(this);
- this.initFCMessaging = this.initFCMessaging.bind(this);
- this.toggleFCMToken = this.toggleFCMToken.bind(this);
- this.handlePushMessage = this.handlePushMessage.bind(this);
- this.handleSidepanelCancel = this.handleSidepanelCancel.bind(this);
- this.handleStartTopicRequest = this.handleStartTopicRequest.bind(this);
- this.handleNewTopicCreated = this.handleNewTopicCreated.bind(this);
- this.handleTopicUpdateRequest = this.handleTopicUpdateRequest.bind(this);
- this.handleUnarchive = this.handleUnarchive.bind(this);
- this.handleChangePermissions = this.handleChangePermissions.bind(this);
- this.handleTagsUpdateRequest = this.handleTagsUpdateRequest.bind(this);
- this.handleLogout = this.handleLogout.bind(this);
- this.handleDeleteAccount = this.handleDeleteAccount.bind(this);
- this.handleDeleteTopicRequest = this.handleDeleteTopicRequest.bind(this);
- this.handleDeleteMessagesRequest = this.handleDeleteMessagesRequest.bind(this);
- this.handleLeaveUnsubRequest = this.handleLeaveUnsubRequest.bind(this);
- this.handleBlockTopicRequest = this.handleBlockTopicRequest.bind(this);
- this.handleReportTopic = this.handleReportTopic.bind(this);
- this.handleShareTheCard = this.handleShareTheCard.bind(this);
- this.handleShowContextMenu = this.handleShowContextMenu.bind(this);
- this.defaultTopicContextMenu = this.defaultTopicContextMenu.bind(this);
- this.handleHideContextMenu = this.handleHideContextMenu.bind(this);
- this.handleShowAlert = this.handleShowAlert.bind(this);
- this.handleShowInfoView = this.handleShowInfoView.bind(this);
- this.handleMemberUpdateRequest = this.handleMemberUpdateRequest.bind(this);
- this.handleValidateCredentialsRequest = this.handleValidateCredentialsRequest.bind(this);
- this.handlePasswordResetRequest = this.handlePasswordResetRequest.bind(this);
- this.handleResetPassword = this.handleResetPassword.bind(this);
- this.handleContextMenuAction = this.handleContextMenuAction.bind(this);
- this.handleShowCountrySelector = this.handleShowCountrySelector.bind(this);
- this.handleShowForwardDialog = this.handleShowForwardDialog.bind(this);
- this.handleHideForwardDialog = this.handleHideForwardDialog.bind(this);
- this.handleStartVideoCall = this.handleStartVideoCall.bind(this);
- this.handleStartAudioCall = this.handleStartAudioCall.bind(this);
- this.handleInfoMessage = this.handleInfoMessage.bind(this);
- this.handleDataMessage = this.handleDataMessage.bind(this);
- this.handleCallClose = this.handleCallClose.bind(this);
- this.handleCallInvite = this.handleCallInvite.bind(this);
- this.handleCallRinging = this.handleCallRinging.bind(this);
- this.handleCallHangup = this.handleCallHangup.bind(this);
- this.handleCallSendOffer = this.handleCallSendOffer.bind(this);
- this.handleCallIceCandidate = this.handleCallIceCandidate.bind(this);
- this.handleCallSendAnswer = this.handleCallSendAnswer.bind(this);
- this.handleCallAccept = this.handleCallAccept.bind(this);
- this.sendMessageToTopic = this.sendMessageToTopic.bind(this);
- this.callTimeoutTimer = null;
- }
- getBlankState() {
- const settings = _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('settings') || {};
- const persist = !!_lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('keep-logged-in');
- if (!settings.wallpaper) {
- const wallpaper = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_18__.defaultWallpaper)();
- settings.wallpaper = wallpaper.name || '';
- settings.wallpaperSize = wallpaper.size || 0;
- settings.wallpaperBlur = 0;
- }
- return {
- connected: false,
- ready: false,
- autoLogin: false,
- transport: settings.transport || null,
- serverAddress: settings.serverAddress || (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.detectServerAddress)(),
- secureConnection: settings.secureConnection === undefined ? (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isSecureConnection)() : settings.secureConnection,
- serverVersion: "no connection",
- messageSounds: !settings.messageSoundsOff,
- incognitoMode: false,
- colorSchema: settings.colorSchema || _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_COLOR_SCHEME,
- systemColorSchema: window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light',
- wallpaper: settings.wallpaper,
- wallpaperSize: settings.wallpaperSize,
- wallpaperBlur: 0,
- textSize: settings.textSize || _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_TEXT_SIZE,
- sendOnEnter: settings.sendOnEnter || 'plain',
- desktopAlerts: persist && !!settings.desktopAlerts,
- desktopAlertsEnabled: ((0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isSecureConnection)() || (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isLocalHost)()) && typeof firebase_app__WEBPACK_IMPORTED_MODULE_2__.initializeApp != 'undefined' && typeof navigator != 'undefined' && typeof FIREBASE_INIT != 'undefined',
- firebaseToken: persist ? _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('firebase-token') : null,
- applicationVisible: !document.hidden,
- errorText: '',
- errorLevel: null,
- errorAction: undefined,
- errorActionText: null,
- sidePanelSelected: 'login',
- sidePanelTitle: null,
- sidePanelAvatar: null,
- myTrustedBadges: [],
- loadSpinnerVisible: false,
- login: '',
- password: '',
- persist: persist,
- myUserId: null,
- liveConnection: navigator.onLine,
- topicSelected: '',
- topicSelectedOnline: false,
- topicSelectedAcs: null,
- newTopicParams: null,
- loginDisabled: false,
- displayMobile: window.innerWidth <= _config_js__WEBPACK_IMPORTED_MODULE_10__.MEDIA_BREAKPOINT,
- infoPanel: undefined,
- mobilePanel: 'sidepanel',
- callTopic: undefined,
- callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_NONE,
- callAudioOnly: undefined,
- callShouldStart: false,
- contextMenuVisible: false,
- contextMenuBounds: null,
- contextMenuClickAt: null,
- contextMenuParams: null,
- contextMenuItems: [],
- forwardDialogVisible: false,
- forwardMessage: null,
- alertVisible: false,
- alertParams: {},
- chatList: [],
- searchResults: [],
- searchableContacts: [],
- reqCredMethod: undefined,
- credMethod: undefined,
- credCode: undefined,
- credToken: undefined,
- requestedTopic: undefined
- };
- }
- componentDidMount() {
- window.addEventListener('resize', this.handleResize);
- this.handleOnlineOn = _ => {
- this.handleOnline(true);
- };
- window.addEventListener('online', this.handleOnlineOn);
- this.handleOnlineOff = _ => {
- this.handleOnline(false);
- };
- window.addEventListener('offline', this.handleOnlineOff);
- window.addEventListener('hashchange', this.handleHashRoute);
- window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', this.handleColorSchemeChange);
- document.addEventListener('visibilitychange', this.handleVisibilityEvent);
- document.addEventListener('keydown', this.handleEscapeKey);
- document.documentElement.style.colorScheme = this.state.colorSchema == 'auto' ? 'light dark' : this.state.colorSchema;
- document.documentElement.style.setProperty('--message-text-size', `${this.state.textSize}pt`);
- this.applyWallpaperSettings(this.state.wallpaper, this.state.wallpaperSize, this.state.wallpaperBlur, this.state.colorSchema == 'auto' ? this.state.systemColorSchema : this.state.colorSchema);
- if (typeof BroadcastChannel == 'function') {
- const serviceWorkerChannel = new BroadcastChannel('tinode-sw');
- serviceWorkerChannel.addEventListener('message', this.handlePushMessage);
- } else {
- console.warn("Your browser does not support BroadcastChannel. Some features will not be available");
- }
- this.lastWakeUpCheck = new Date().getTime();
- this.wakeUpTicker = setInterval(_ => {
- const now = new Date().getTime();
- if (now - this.lastWakeUpCheck > _config_js__WEBPACK_IMPORTED_MODULE_10__.WAKE_UP_TIMEOUT) {
- this.handleOnlineOn();
- }
- this.lastWakeUpCheck = now;
- }, _config_js__WEBPACK_IMPORTED_MODULE_10__.WAKE_UP_TICK);
- this.setState({
- viewportWidth: document.documentElement.clientWidth,
- viewportHeight: document.documentElement.clientHeight
- });
- new Promise((resolve, reject) => {
- this.tinode = TinodeWeb.tnSetup(this.state.serverAddress, (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isSecureConnection)(), this.state.transport, this.props.intl.locale, this.state.persist, resolve);
- this.tinode.onConnect = this.handleConnected;
- this.tinode.onDisconnect = this.handleDisconnect;
- this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration;
- this.tinode.onInfoMessage = this.handleInfoMessage;
- this.tinode.onDataMessage = this.handleDataMessage;
- }).then(_ => {
- if (this.state.desktopAlertsEnabled) {
- this.initFCMessaging().catch(_ => {});
- }
- this.resetContactList();
- const token = this.state.persist ? _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('auth-token') : undefined;
- if (token) {
- this.setState({
- autoLogin: true
- });
- token.expires = new Date(token.expires);
- this.tinode.setAuthToken(token);
- this.tinode.connect().catch(err => {
- this.handleError(err.message, 'err');
- });
- }
- const parsedNav = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].parseUrlHash(window.location.hash);
- if (!['cred', 'reset', 'register'].includes(parsedNav.path[0])) {
- this.setState({
- requestedTopic: parsedNav.path[1]
- });
- const path = parsedNav.params && parsedNav.params.cred_done ? _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].addUrlParam('', 'cred_done', parsedNav.params.cred_done) : '';
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(path);
- } else {
- this.handleHashRoute();
- }
- });
- }
- componentWillUnmount() {
- window.removeEventListener('resize', this.handleResize);
- window.removeEventListener('hashchange', this.handleHashRoute);
- window.removeEventListener('online', this.handleOnlineOn);
- window.removeEventListener('offline', this.handleOnlineOff);
- window.matchMedia('(prefers-color-scheme: dark)').removeEventListener('change', this.handleColorSchemeChange);
- document.removeEventListener('visibilitychange', this.handleVisibilityEvent);
- document.removeEventListener('keydown', this.handleEscapeKey);
- clearInterval(this.wakeUpTicker);
- }
- static tnSetup(serverAddress, secureConnection, transport, locale, persistentCache, onSetupCompleted) {
- const tinode = new tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode({
- appName: _config_js__WEBPACK_IMPORTED_MODULE_10__.APP_NAME,
- host: serverAddress,
- apiKey: _config_js__WEBPACK_IMPORTED_MODULE_10__.API_KEY,
- transport: transport,
- secure: secureConnection,
- persist: persistentCache
- }, onSetupCompleted);
- tinode.setHumanLanguage(locale);
- tinode.enableLogging(_config_js__WEBPACK_IMPORTED_MODULE_10__.LOGGING_ENABLED, true);
- return tinode;
- }
- handlePushMessage(payload) {
- this.tinode.oobNotification(payload.data || {});
- }
- initFCMessaging() {
- const {
- formatMessage,
- locale
- } = this.props.intl;
- const onError = (msg, err) => {
- console.error(msg, err);
- this.handleError(formatMessage(messages.push_init_failed), 'err');
- this.setState({
- firebaseToken: null
- });
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
- desktopAlerts: false
- });
- };
- try {
- this.fcm = (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.getMessaging)((0,firebase_app__WEBPACK_IMPORTED_MODULE_2__.initializeApp)(FIREBASE_INIT, _config_js__WEBPACK_IMPORTED_MODULE_10__.APP_NAME));
- return navigator.serviceWorker.getRegistration('/service-worker.js').then(reg => {
- return reg || navigator.serviceWorker.register('/service-worker.js').then(reg => {
- this.checkForAppUpdate(reg);
- return reg;
- });
- }).then(reg => {
- (reg.active || reg.installing).postMessage(JSON.stringify({
- locale: locale,
- version: _version_js__WEBPACK_IMPORTED_MODULE_12__.PACKAGE_VERSION
- }));
- return TinodeWeb.requestFCMToken(this.fcm, reg);
- }).then(token => {
- const persist = _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('keep-logged-in');
- if (token != this.state.firebaseToken) {
- this.tinode.setDeviceToken(token);
- if (persist) {
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].setObject('firebase-token', token);
- }
- }
- this.setState({
- firebaseToken: token,
- desktopAlerts: true
- });
- if (persist) {
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
- desktopAlerts: true
- });
- }
- (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.onMessage)(this.fcm, payload => {
- this.handlePushMessage(payload);
- });
- }).catch(err => {
- onError(err);
- throw err;
- });
- } catch (err) {
- onError(err);
- return Promise.reject(err);
- }
- }
- static requestFCMToken(fcm, sw) {
- return (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.getToken)(fcm, {
- serviceWorkerRegistration: sw,
- vapidKey: FIREBASE_INIT.messagingVapidKey
- }).then(token => {
- if (token) {
- return token;
- } else if (typeof Notification != 'undefined') {
- return Notification.requestPermission().then(permission => {
- if (permission === 'granted') {
- return (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.getToken)(fcm, {
- serviceWorkerRegistration: reg,
- vapidKey: FIREBASE_INIT.messagingVapidKey
- }).then(token => {
- if (token) {
- return token;
- } else {
- throw new Error("Failed to initialize notifications");
- }
- });
- } else {
- throw new Error("No permission to send notifications: " + permission);
- }
- });
- }
- throw new Error("Notifications are not supported");
- });
- }
- handleResize() {
- const mobile = document.documentElement.clientWidth <= _config_js__WEBPACK_IMPORTED_MODULE_10__.MEDIA_BREAKPOINT;
- this.setState({
- viewportWidth: document.documentElement.clientWidth,
- viewportHeight: document.documentElement.clientHeight
- });
- if (this.state.displayMobile != mobile) {
- this.setState({
- displayMobile: mobile
- });
- }
- }
- handleEscapeKey(e) {
- if (e.key === 'Escape' || e.keyCode === 27) {
- this.setState({
- topicSelected: null,
- errorText: '',
- errorLevel: null,
- mobilePanel: 'sidepanel',
- topicSelectedOnline: false,
- topicSelectedAcs: null,
- infoPanel: undefined,
- forwardMessage: null,
- contextMenuVisible: false,
- forwardDialogVisible: false,
- alertVisible: false
- });
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic('', null));
- }
- }
- checkForAppUpdate(reg) {
- reg.onupdatefound = _ => {
- const installingWorker = reg.installing;
- installingWorker.onstatechange = _ => {
- if (installingWorker.state == 'installed' && navigator.serviceWorker.controller) {
- const msg = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "update_available",
- defaultMessage: [{
- "type": 0,
- "value": "Update available."
- }]
- }), " ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: ""
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "reload_update",
- defaultMessage: [{
- "type": 0,
- "value": "Reload"
- }]
- })), ".");
- this.handleError(msg, 'info');
- }
- };
- };
- }
- handleHashRoute() {
- const hash = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].parseUrlHash(window.location.hash);
- const newState = {
- infoPanel: hash.params.info,
- newTopicTabSelected: hash.params.tab
- };
- if (hash.path && hash.path.length > 0) {
- if (['acc_general', 'archive', 'blocked', 'contacts', 'cred', 'crop', 'edit', 'general', 'newtpk', 'notif', 'register', 'reset', 'security', 'settings', 'support', 'wallpapers', ''].includes(hash.path[0])) {
- newState.sidePanelSelected = hash.path[0];
- } else {
- console.warn("Unknown sidepanel view", hash.path[0]);
- }
- let topicName = hash.path[1] || null;
- if (topicName != this.state.topicSelected) {
- if (!tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.topicType(topicName)) {
- topicName = null;
- newState.mobilePanel = 'sidepanel';
- } else {
- newState.mobilePanel = 'topic-view';
- }
- Object.assign(newState, {
- topicSelected: topicName,
- topicSelectedAcs: this.tinode.getTopicAccessMode(topicName)
- });
- }
- } else {
- Object.assign(newState, {
- sidePanelSelected: '',
- topicSelected: null
- });
- }
- if (hash.params.method) {
- newState.credMethod = hash.params.method;
- }
- if (hash.params.code) {
- newState.credCode = hash.params.code;
- }
- if (hash.params.token) {
- newState.credToken = hash.params.token;
- }
- if (hash.params.cred_done) {
- Object.assign(newState, TinodeWeb.stateForError(this.props.intl.formatMessage(messages.cred_confirmed_successfully), 'info'));
- }
- this.setState(newState);
- }
- handleOnline(online) {
- if (online) {
- this.handleError();
- clearInterval(this.reconnectCountdown);
- this.tinode.reconnect();
- } else {
- this.handleError(this.props.intl.formatMessage(messages.no_connection), 'warn');
- }
- this.setState({
- liveConnection: online
- });
- }
- handleVisibilityEvent() {
- this.setState({
- applicationVisible: !document.hidden
- });
- }
- static stateForError(err, level, action, actionText) {
- return {
- errorText: err,
- errorLevel: level,
- errorAction: action,
- errorActionText: actionText,
- callShouldStart: false
- };
- }
- handleError(err, level, action, actionText) {
- this.setState(TinodeWeb.stateForError(err, level, action, actionText));
- }
- handleLoginRequest(login, password) {
- this.setState({
- loginDisabled: true,
- login: login,
- password: password,
- loadSpinnerVisible: true,
- autoLogin: true
- });
- this.handleError('', null);
- if (this.tinode.isConnected()) {
- this.doLogin(login, password, null, {
- meth: this.state.credMethod,
- resp: this.state.credCode
- });
- } else {
- this.tinode.connect().catch(err => {
- this.setState({
- loginDisabled: false,
- autoLogin: false,
- loadSpinnerVisible: false
- });
- this.handleError(err.message, 'err');
- });
- }
- if (this.state.desktopAlertsEnabled && !this.state.firebaseToken) {
- this.initFCMessaging();
- }
- }
- handlePersistenceChange(persist) {
- if (persist) {
- this.tinode.initStorage().then(_ => {
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].setObject('keep-logged-in', true);
- this.setState({
- persist: true
- });
- });
- } else {
- this.tinode.clearStorage().then(_ => {
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].setObject('keep-logged-in', false);
- this.setState({
- persist: false
- });
- });
- }
- }
- handleConnected() {
- clearInterval(this.reconnectCountdown);
- this.handleError();
- const params = this.tinode.getServerInfo();
- this.setState({
- serverVersion: params.ver + ' ' + (params.build ? params.build : 'none'),
- reqCredMethod: ((params.reqCred || {}).auth || [])[0] || 'email'
- });
- if (this.state.autoLogin) {
- this.doLogin(this.state.login, this.state.password, null, {
- meth: this.state.credMethod,
- resp: this.state.credCode
- });
- }
- }
- handleAutoreconnectIteration(sec, prom) {
- clearInterval(this.reconnectCountdown);
- if (sec < 0) {
- this.handleError();
- return;
- }
- if (prom) {
- prom.then(_ => {
- this.handleError();
- }).catch(err => {
- this.handleError(err.message, 'err');
- });
- return;
- }
- const {
- formatMessage
- } = this.props.intl;
- let count = sec / 1000;
- count = count | count;
- this.reconnectCountdown = setInterval(_ => {
- if (count < -10) {
- clearInterval(this.reconnectCountdown);
- this.tinode.reconnect();
- return;
- }
- const fmtTime = count > 99 ? (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_17__.secondsToTime)(count) : count;
- this.handleError(formatMessage(messages.reconnect_countdown, {
- seconds: fmtTime
- }), 'warn', _ => {
- clearInterval(this.reconnectCountdown);
- this.tinode.reconnect();
- }, formatMessage(messages.reconnect_now));
- count -= 1;
- }, 1000);
- }
- handleDisconnect(err) {
- this.setState({
- connected: false,
- ready: false,
- topicSelectedOnline: false,
- errorText: err && err.message ? err.message : "Disconnected",
- errorLevel: err && err.message ? 'err' : 'warn',
- loginDisabled: false,
- contextMenuVisible: false,
- forwardDialogVisible: false,
- serverVersion: "no connection"
- });
- }
- doLogin(login, password, tmpToken, cred) {
- if (this.tinode.isAuthenticated()) {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo('');
- return;
- }
- let token = tmpToken || (this.tinode.getAuthToken() || {}).token;
- if (!(login && password) && !token) {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo('');
- this.setState({
- loginDisabled: false
- });
- return;
- }
- cred = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.credential(cred);
- let connectionPromise = this.tinode.isConnected() ? Promise.resolve() : this.tinode.connect();
- let loginPromise;
- if (login && password) {
- token = null;
- this.setState({
- password: null
- });
- loginPromise = connectionPromise.then(_ => this.tinode.loginBasic(login, password, cred));
- } else {
- loginPromise = connectionPromise.then(_ => this.tinode.loginToken(token, cred));
- }
- loginPromise.then(ctrl => {
- if (ctrl.code >= 300 && ctrl.text === 'validate credentials') {
- this.setState({
- loadSpinnerVisible: false
- });
- if (cred) {
- this.handleError(this.props.intl.formatMessage(messages.code_doesnot_match), 'warn');
- }
- TinodeWeb.navigateToCredentialsView(ctrl.params);
- } else {
- this.handleLoginSuccessful();
- }
- }).catch(err => {
- const autoLogin = err.code >= 500;
- this.setState({
- loginDisabled: false,
- credMethod: undefined,
- credCode: undefined,
- loadSpinnerVisible: false,
- autoLogin: autoLogin
- });
- this.handleError(err.message, 'err');
- console.warn("Login failed", err);
- if (!autoLogin) {
- if (token) {
- this.handleLogout();
- }
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo('');
- }
- });
- }
- static navigateToCredentialsView(params) {
- const parsed = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].parseUrlHash(window.location.hash);
- parsed.path[0] = 'cred';
- parsed.params['method'] = params.cred[0];
- parsed.params['token'] = params.token;
- parsed.params['code'] = params.code;
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].composeUrlHash(parsed.path, parsed.params));
- }
- handleLoginSuccessful() {
- this.handleError();
- if (_lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('keep-logged-in')) {
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].setObject('auth-token', this.tinode.getAuthToken());
- }
- const goToTopic = this.state.requestedTopic || this.state.topicSelected;
- const me = this.tinode.getMeTopic();
- me.onMetaDesc = this.tnMeMetaDesc;
- me.onContactUpdate = this.tnMeContactUpdate;
- me.onSubsUpdated = this.tnMeSubsUpdated;
- this.setState({
- connected: true,
- credMethod: undefined,
- credCode: undefined,
- credToken: undefined,
- myUserId: this.tinode.getCurrentUserID(),
- autoLogin: true,
- requestedTopic: undefined
- });
- me.subscribe(me.startMetaQuery().withLaterSub().withDesc().withTags().withCred().build()).catch(err => {
- this.tinode.disconnect();
- localStorage.removeItem('auth-token');
- this.handleError(err.message, 'err');
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo('');
- }).finally(_ => {
- this.setState({
- loadSpinnerVisible: false
- });
- });
- let urlHash = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, 'contacts');
- if (goToTopic) {
- urlHash = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic(urlHash, goToTopic);
- }
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(urlHash);
- }
- tnMeMetaDesc(desc) {
- if (!desc) {
- return;
- }
- if (desc.public) {
- this.setState({
- sidePanelTitle: desc.public.fn,
- sidePanelAvatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_13__.makeImageUrl)(desc.public.photo)
- });
- }
- if (desc.trusted) {
- const badges = [];
- for (const [key, val] of Object.entries(desc.trusted)) {
- if (val) {
- badges.push(key);
- }
- }
- this.setState({
- myTrustedBadges: badges
- });
- }
- if (desc.acs) {
- this.setState({
- incognitoMode: !desc.acs.isPresencer()
- });
- }
- if (TinodeWeb.checkIfPinsUpdated(desc, this.state.chatList)) {
- this.resetContactList();
- }
- }
- tnMeContactUpdate(what, cont) {
- if (what == 'on' || what == 'off') {
- this.resetContactList();
- if (this.state.topicSelected == cont.topic) {
- this.setState({
- topicSelectedOnline: what == 'on'
- });
- }
- } else if (what == 'read') {
- this.resetContactList();
- } else if (what == 'msg' && cont) {
- const topic = this.tinode.getTopic(cont.topic);
- const archived = topic && topic.isArchived();
- if (cont.unread > 0 && this.state.messageSounds && !archived) {
- if (document.hidden || this.state.topicSelected != cont.topic) {
- POP_SOUND.play().catch(_ => {});
- }
- }
- this.resetContactList();
- } else if (what == 'recv') {} else if (what == 'gone' || what == 'unsub') {
- if (this.state.topicSelected == cont.topic) {
- this.handleTopicSelected(null);
- }
- this.resetContactList();
- } else if (what == 'acs') {
- if (this.state.topicSelected == cont.topic) {
- this.setState({
- topicSelectedAcs: cont.acs
- });
- }
- } else if (what == 'del') {} else if (what == 'upd' || what == 'call') {} else {
- console.info("Unsupported (yet) presence update:", what, "in", (cont || {}).topic);
- }
- }
- tnMeSubsUpdated(unused) {
- this.resetContactList();
- }
- static prepareSearchableContacts(chatList, foundContacts) {
- const merged = {};
- for (const c of chatList) {
- if (tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isP2PTopicName(c.topic)) {
- merged[c.topic] = {
- user: c.topic,
- updated: c.updated,
- public: c.public,
- private: c.private,
- acs: c.acs
- };
- }
- }
- for (const c of foundContacts) {
- if (!merged[c.user]) {
- merged[c.user] = c;
- }
- }
- return Object.values(merged);
- }
- resetContactList() {
- const newState = {
- chatList: []
- };
- if (!this.state.ready) {
- newState.ready = true;
- }
- const me = this.tinode.getMeTopic();
- me.contacts(c => {
- if (!c.topic && !c.user) {
- c.topic = c.name;
- }
- newState.chatList.push(c);
- if (this.state.topicSelected == c.topic) {
- newState.topicSelectedOnline = c.online;
- newState.topicSelectedAcs = c.acs;
- }
- });
- const past = new Date(0);
- newState.chatList.sort((a, b) => {
- const pins = me.pinnedTopicRank(b.topic) - me.pinnedTopicRank(a.topic);
- return pins != 0 ? pins : (b.touched || past).getTime() - (a.touched || past).getTime();
- });
- newState.searchableContacts = TinodeWeb.prepareSearchableContacts(newState.chatList, this.state.searchResults);
- this.setState(newState);
- }
- static checkIfPinsUpdated(me, chatList) {
- for (let i = 0; i < chatList.length; i++) {
- const c = chatList[i];
- if (!!me.pinnedTopicRank(c.topic) != c.pinned) {
- return true;
- }
- }
- return false;
- }
- tnInitFind() {
- const fnd = this.tinode.getFndTopic();
- fnd.onSubsUpdated = this.tnFndSubsUpdated;
- if (fnd.isSubscribed()) {
- this.tnFndSubsUpdated();
- } else {
- fnd.subscribe(fnd.startMetaQuery().withSub().build()).catch(err => {
- this.handleError(err.message, 'err');
- });
- }
- }
- tnFndSubsUpdated() {
- const foundContacts = [];
- this.tinode.getFndTopic().contacts(s => {
- foundContacts.push(s);
- });
- this.setState({
- searchResults: foundContacts,
- searchableContacts: TinodeWeb.prepareSearchableContacts(this.state.chatList, foundContacts)
- });
- }
- handleSearchContacts(query) {
- const fnd = this.tinode.getFndTopic();
- fnd.setMeta({
- desc: {
- public: query
- }
- }).then(_ => fnd.getMeta(fnd.startMetaQuery().withSub().build())).catch(err => this.handleError(err.message, 'err'));
- }
- handleTopicSelected(topicName) {
- if (this.state.newTopicParams && this.state.newTopicParams._topicName != topicName) {
- this.setState({
- newTopicParams: null
- });
- }
- if (topicName) {
- this.setState({
- errorText: '',
- errorLevel: null,
- mobilePanel: 'topic-view',
- infoPanel: undefined
- });
- if (this.state.topicSelected != topicName) {
- this.setState({
- topicSelectedOnline: this.tinode.isTopicOnline(topicName),
- topicSelectedAcs: this.tinode.getTopicAccessMode(topicName),
- forwardMessage: null
- });
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic('', topicName));
- }
- } else {
- this.setState({
- topicSelected: null,
- errorText: '',
- errorLevel: null,
- mobilePanel: 'sidepanel',
- topicSelectedOnline: false,
- topicSelectedAcs: null,
- infoPanel: undefined,
- forwardMessage: null
- });
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic('', null));
- }
- }
- handleHideMessagesView() {
- this.setState({
- mobilePanel: 'sidepanel'
- });
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic(window.location.hash, null));
- }
- handleSendMessage(msg, uploadCompletionPromise, uploader, head) {
- const topic = this.tinode.getTopic(this.state.topicSelected);
- return this.sendMessageToTopic(topic, msg, uploadCompletionPromise, uploader, head);
- }
- sendMessageToTopic(topic, msg, uploadCompletionPromise, uploader, head) {
- msg = topic.createMessage(msg, false);
- msg._uploader = uploader;
- if (head) {
- msg.head = Object.assign(msg.head || {}, head);
- }
- const completion = [];
- if (uploadCompletionPromise) {
- completion.push(uploadCompletionPromise);
- }
- if (!topic.isSubscribed()) {
- const subscribePromise = topic.subscribe().then(_ => {
- let calls = [];
- topic.queuedMessages(pub => {
- if (pub._sending || pub.seq == msg.seq) {
- return;
- }
- if (pub.head && pub.head.webrtc) {
- calls.push(pub.seq);
- return;
- }
- if (topic.isSubscribed()) {
- topic.publishMessage(pub);
- }
- });
- if (calls.length > 0) {
- topic.delMessagesList(calls, true);
- }
- });
- completion.push(subscribePromise);
- }
- return topic.publishDraft(msg, Promise.all(completion)).then(ctrl => {
- if (topic.isArchived()) {
- topic.archive(false);
- }
- return ctrl;
- }).catch(err => this.handleError(err.message, 'err'));
- }
- handleNewChatInvitation(topicName, action) {
- const topic = this.tinode.getTopic(topicName);
- let response = null;
- switch (action) {
- case 'accept':
- const mode = topic.getAccessMode().getGiven();
- response = topic.setMeta({
- sub: {
- mode: mode
- }
- });
- if (topic.isP2PType()) {
- response = response.then(_ => topic.setMeta({
- sub: {
- user: topicName,
- mode: mode
- }
- }));
- }
- break;
- case 'delete':
- response = topic.delTopic(true);
- break;
- case 'block':
- const am = topic.getAccessMode().updateWant('-JP').getWant();
- response = topic.setMeta({
- sub: {
- mode: am
- }
- }).then(_ => this.handleTopicSelected(null));
- break;
- default:
- console.warn("Unknown invitation action", '"' + action + '""');
- }
- if (response != null) {
- response.catch(err => this.handleError(err.message, 'err'));
- }
- }
- handleNewAccount() {
- this.handleError();
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, 'register'));
- }
- handleNewAccountRequest(login_, password_, public_, cred_, tags_) {
- this.handleError();
- this.tinode.connect(this.state.serverAddress).then(_ => {
- let attachments;
- if (public_ && public_.photo && public_.photo.ref) {
- attachments = [public_.photo.ref];
- }
- return this.tinode.createAccountBasic(login_, password_, {
- public: public_,
- tags: tags_,
- cred: tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.credential(cred_),
- attachments: attachments
- });
- }).then(ctrl => {
- if (ctrl.code >= 300 && ctrl.text == 'validate credentials') {
- TinodeWeb.navigateToCredentialsView(ctrl.params);
- } else {
- this.handleLoginSuccessful(this);
- }
- }).catch(err => {
- this.handleError(err.message, 'err');
- });
- }
- handleToggleIncognitoMode(on) {
- this.setState({
- incognitoMode: null
- });
- const me = this.tinode.getMeTopic();
- const am = me.getAccessMode().updateWant(on ? '-P' : '+P').getWant();
- me.setMeta({
- sub: {
- mode: am
- }
- }).catch(err => {
- this.setState({
- incognitoMode: !on
- });
- this.handleError(err.message, 'err');
- });
- }
- handleChangeColorSchema(schema) {
- this.setState({
- colorSchema: schema
- });
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
- colorSchema: schema
- });
- document.documentElement.style.colorScheme = schema == 'auto' ? 'light dark' : schema;
- this.applyColorSchema(schema, this.state.systemColorSchema, this.state.wallpaperSize);
- }
- handleColorSchemeChange(event) {
- const systemSchema = event.matches ? 'dark' : 'light';
- this.setState({
- systemColorSchema: systemSchema
- });
- this.applyColorSchema(this.state.colorSchema, systemSchema, this.state.wallpaperSize);
- }
- applyColorSchema(schema, systemSchema, size) {
- const effectiveSchema = schema == 'auto' ? systemSchema : schema;
- document.documentElement.style.setProperty('--wallpaper-invert', effectiveSchema == 'dark' && size ? '1' : '0');
- document.documentElement.style.setProperty('--wallpaper-brightness', effectiveSchema == 'dark' && !size ? '0.5' : '1');
- }
- handleSelectWallpapers() {
- this.handleError();
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, 'wallpapers'));
- }
- applyWallpaperSettings(wallpaper, size, blur, effectiveSchema) {
- document.documentElement.style.setProperty('--wallpaper-url', `url('${wallpaper}')`);
- document.documentElement.style.setProperty('--wallpaper-repeat', size ? 'repeat' : 'no-repeat');
- document.documentElement.style.setProperty('--wallpaper-blur', size ? '0px' : `${blur}px`);
- document.documentElement.style.setProperty('--wallpaper-size', size ? `${size}px` : 'cover');
- document.documentElement.style.setProperty('--wallpaper-position', size ? 'unset' : 'center');
- document.documentElement.style.setProperty('--wallpaper-invert', effectiveSchema == 'dark' && size ? '1' : '0');
- document.documentElement.style.setProperty('--wallpaper-brightness', effectiveSchema == 'dark' && !size ? '0.5' : '1');
- }
- handleWallpaperSelected(wallpaper, size, blur) {
- this.handleError();
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
- wallpaper: wallpaper,
- wallpaperSize: size,
- wallpaperBlur: blur
- });
- this.setState({
- wallpaper: wallpaper,
- wallpaperSize: size,
- wallpaperBlur: blur
- });
- this.applyWallpaperSettings(wallpaper, size, blur, this.state.colorSchema == 'auto' ? this.state.systemColorSchema : this.state.colorSchema);
- }
- handleChangeTextSize(size) {
- this.setState({
- textSize: size | 0
- });
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
- textSize: size
- });
- document.documentElement.style.setProperty('--message-text-size', `${size}pt`);
- }
- handleSendOnEnter(option) {
- this.setState({
- sendOnEnter: option
- });
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
- sendOnEnter: option
- });
- }
- handleUpdateAccountTagsRequest(_, tags) {
- this.tinode.getMeTopic().setMeta({
- tags: tags
- }).catch(err => this.handleError(err.message, 'err'));
- }
- handleSettings() {
- this.handleError();
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, this.state.myUserId ? 'edit' : 'settings'));
- }
- handleGlobalSettings(settings) {
- const serverAddress = settings.serverAddress || this.state.serverAddress;
- const transport = settings.transport || this.state.transport;
- const secureConnection = settings.secureConnection === undefined ? this.state.secureConnection : settings.secureConnection;
- if (this.tinode) {
- this.tinode.clearStorage();
- this.tinode.onDisconnect = undefined;
- this.tinode.disconnect();
- }
- this.tinode = TinodeWeb.tnSetup(serverAddress, secureConnection, transport, this.props.intl.locale, _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('keep-logged-in'));
- this.tinode.onConnect = this.handleConnected;
- this.tinode.onDisconnect = this.handleDisconnect;
- this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration;
- this.tinode.onInfoMessage = this.handleInfoMessage;
- this.tinode.onDataMessage = this.handleDataMessage;
- this.setState({
- serverAddress: serverAddress,
- transport: transport,
- secureConnection: secureConnection
- });
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].setObject('settings', {
- serverAddress: serverAddress,
- transport: transport,
- secureConnection: secureConnection
- });
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, ''));
- }
- handleShowArchive() {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, this.state.myUserId ? 'archive' : ''));
- }
- handleShowBlocked() {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, this.state.myUserId ? 'blocked' : ''));
- }
- toggleFCMToken(enabled) {
- if (enabled) {
- this.setState({
- desktopAlerts: null
- });
- if (!this.state.firebaseToken) {
- this.initFCMessaging();
- } else {
- this.setState({
- desktopAlerts: true
- });
- if (_lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('keep-logged-in')) {
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
- desktopAlerts: true
- });
- }
- }
- } else if (this.state.firebaseToken && this.fcm) {
- (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.deleteToken)(this.fcm).catch(err => {
- console.error("Unable to delete token.", err);
- }).finally(_ => {
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
- desktopAlerts: false
- });
- localStorage.removeItem('firebase-token');
- this.setState({
- desktopAlerts: false,
- firebaseToken: null
- });
- this.tinode.setDeviceToken(null);
- });
- } else {
- this.setState({
- desktopAlerts: false,
- firebaseToken: null
- });
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
- desktopAlerts: false
- });
- }
- }
- handleToggleMessageSounds(enabled) {
- this.setState({
- messageSounds: enabled
- });
- _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].updateObject('settings', {
- messageSoundsOff: !enabled
- });
- }
- handleCredAdd(method, value) {
- const me = this.tinode.getMeTopic();
- me.setMeta({
- cred: {
- meth: method,
- val: value
- }
- }).catch(err => this.handleError(err.message, 'err'));
- }
- handleCredDelete(method, value) {
- const me = this.tinode.getMeTopic();
- me.delCredential(method, value).catch(err => this.handleError(err.message, 'err'));
- }
- handleCredConfirm(method, response) {
- TinodeWeb.navigateToCredentialsView({
- cred: [method],
- code: response
- });
- }
- handleSidepanelCancel() {
- const parsed = _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].parseUrlHash(window.location.hash);
- let path = '';
- if (['security', 'support', 'general', 'notif', 'acc_general'].includes(parsed.path[0])) {
- path = 'edit';
- } else if ('crop' == parsed.path[0]) {
- path = 'general';
- } else if ('blocked' == parsed.path[0]) {
- path = 'security';
- } else if ('wallpapers' == parsed.path[0]) {
- path = 'acc_general';
- } else if (this.state.myUserId) {
- path = 'contacts';
- }
- parsed.path[0] = path;
- if (parsed.params) {
- delete parsed.params.code;
- delete parsed.params.method;
- delete parsed.params.tab;
- delete parsed.params.scheme;
- delete parsed.params.token;
- }
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].composeUrlHash(parsed.path, parsed.params));
- this.setState({
- errorText: '',
- errorLevel: null
- });
- }
- basicNavigator(hash) {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, hash));
- }
- infoNavigator(hash) {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlInfoPanel(window.location.hash, hash));
- }
- handleStartTopicRequest(topicName, newTopicParams, isChannel) {
- if (topicName && this.tinode.isTopicCached(topicName)) {
- this.handleTopicSelected(topicName);
- return;
- }
- const params = {};
- if (tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isP2PTopicName(topicName)) {
- params.sub = {
- mode: _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_P2P_ACCESS_MODE
- };
- params.desc = {
- defacs: {
- auth: _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_P2P_ACCESS_MODE
- }
- };
- } else {
- topicName = topicName || this.tinode.newGroupTopicName(isChannel);
- if (newTopicParams) {
- params.desc = {
- public: newTopicParams.public,
- private: {
- comment: newTopicParams.private
- }
- };
- params.tags = newTopicParams.tags;
- }
- }
- params._topicName = topicName;
- this.setState({
- newTopicParams: params
- }, _ => {
- this.handleTopicSelected(topicName);
- });
- }
- handleNewTopicCreated(oldName, newName) {
- let nextState = {};
- if (this.state.callShouldStart) {
- nextState = {
- callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_IN_PROGRESS,
- callShouldStart: false
- };
- }
- if (this.state.topicSelected == oldName && oldName != newName) {
- nextState.topicSelected = newName;
- }
- this.setState(nextState, _ => {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic('', newName));
- });
- }
- handleTopicUpdateRequest(topicName, pub, priv, defacs) {
- this.handleError();
- const topic = this.tinode.getTopic(topicName);
- if (topic) {
- const params = {};
- let attachments;
- if (pub) {
- if (pub.photo) {
- if (pub.photo.ref && pub.photo.ref != tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR) {
- attachments = [pub.photo.ref];
- } else if (!pub.photo.data || pub.photo.data == tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR) {
- pub.photo = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR;
- }
- }
- params.public = pub;
- }
- if (typeof priv == 'string') {
- params.private = priv === tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR ? tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.DEL_CHAR : {
- comment: priv
- };
- }
- if (defacs) {
- params.defacs = defacs;
- }
- topic.setMeta({
- desc: params,
- attachments: attachments
- }).catch(err => this.handleError(err.message, 'err'));
- }
- }
- handleUnarchive(topicName) {
- const topic = this.tinode.getTopic(topicName);
- if (topic) {
- topic.archive(false).catch(err => this.handleError(err.message, 'err'));
- }
- }
- handleUpdatePasswordRequest(password) {
- this.handleError();
- if (password) {
- this.tinode.updateAccountBasic(null, this.tinode.getCurrentLogin(), password).catch(err => this.handleError(err.message, 'err'));
- }
- }
- handleChangePermissions(topicName, mode, uid) {
- const topic = this.tinode.getTopic(topicName);
- if (topic) {
- const am = topic.getAccessMode();
- if (uid) {
- am.updateGiven(mode);
- mode = am.getGiven();
- } else {
- am.updateWant(mode);
- mode = am.getWant();
- }
- topic.setMeta({
- sub: {
- user: uid,
- mode: mode
- }
- }).catch(err => this.handleError(err.message, 'err'));
- }
- }
- handleTagsUpdateRequest(topicName, tags) {
- const topic = this.tinode.getTopic(topicName);
- if (topic) {
- topic.setMeta({
- tags: tags
- }).catch(err => this.handleError(err.message, 'err'));
- }
- }
- handleLogout() {
- (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_18__.updateFavicon)(0);
- localStorage.removeItem('auth-token');
- localStorage.removeItem('firebase-token');
- localStorage.removeItem('settings');
- if (this.state.firebaseToken) {
- (0,firebase_messaging__WEBPACK_IMPORTED_MODULE_3__.deleteToken)(this.fcm);
- }
- document.documentElement.style.colorScheme = _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_COLOR_SCHEME == 'auto' ? 'light dark' : _config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_COLOR_SCHEME;
- document.documentElement.style.setProperty('--message-text-size', `${_config_js__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_TEXT_SIZE}pt`);
- clearInterval(this.reconnectCountdown);
- let cleared;
- if (this.tinode) {
- cleared = this.tinode.clearStorage();
- this.tinode.onDisconnect = undefined;
- this.tinode.disconnect();
- } else {
- cleared = Promose.resolve();
- }
- this.setState(this.getBlankState());
- cleared.then(_ => {
- this.tinode = TinodeWeb.tnSetup(this.state.serverAddress, (0,_lib_host_name_js__WEBPACK_IMPORTED_MODULE_14__.isSecureConnection)(), this.state.transport, this.props.intl.locale, _lib_local_storage_js__WEBPACK_IMPORTED_MODULE_15__["default"].getObject('keep-logged-in'), _ => {
- this.tinode.onConnect = this.handleConnected;
- this.tinode.onDisconnect = this.handleDisconnect;
- this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration;
- this.tinode.onInfoMessage = this.handleInfoMessage;
- this.tinode.onDataMessage = this.handleDataMessage;
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo('');
- });
- });
- }
- handleDeleteAccount() {
- this.tinode.delCurrentUser(true).then(_ => {
- this.handleLogout();
- });
- }
- handleDeleteTopicRequest(topicName) {
- const topic = this.tinode.getTopic(topicName);
- if (!topic) {
- return;
- }
- topic.delTopic(true).then(_ => {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic(window.location.hash, ''));
- }).catch(err => {
- this.handleError(err.message, 'err');
- });
- }
- handleDeleteMessagesRequest(topicName) {
- const topic = this.tinode.getTopic(topicName);
- if (!topic) {
- return;
- }
- topic.delMessagesAll(true).catch(err => this.handleError(err.message, 'err'));
- }
- handleLeaveUnsubRequest(topicName) {
- const topic = this.tinode.getTopic(topicName);
- if (!topic) {
- return;
- }
- topic.leave(true).then(_ => {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic(window.location.hash, ''));
- }).catch(err => {
- this.handleError(err.message, 'err');
- });
- }
- handleBlockTopicRequest(topicName) {
- const topic = this.tinode.getTopic(topicName);
- if (!topic) {
- return;
- }
- topic.updateMode(null, '-JP').then(_ => {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic(window.location.hash, ''));
- }).catch(err => this.handleError(err.message, 'err'));
- }
- handleReportTopic(topicName) {
- const topic = this.tinode.getTopic(topicName);
- if (!topic) {
- return;
- }
- this.tinode.report('report', topicName);
- topic.updateMode(null, '-JP').then(_ => {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlTopic(window.location.hash, ''));
- }).catch(err => this.handleError(err.message, 'err'));
- }
- handleShowContextMenu(params, menuItems) {
- this.setState({
- contextMenuVisible: true,
- contextMenuClickAt: {
- x: params.x,
- y: params.y
- },
- contextMenuParams: params,
- contextMenuItems: menuItems || this.defaultTopicContextMenu(params.topicName),
- contextMenuBounds: this.selfRef.current.getBoundingClientRect()
- });
- }
- handleShowForwardDialog(params) {
- if (this.state.sidePanelSelected == 'newtpk') {
- this.handleSidepanelCancel();
- }
- const header = params.userName ? '➦ ' + params.userName : '';
- const content = typeof params.content == 'string' ? tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.init(params.content) : tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.forwardedContent(params.content);
- const preview = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.preview(content, _config_js__WEBPACK_IMPORTED_MODULE_10__.FORWARDED_PREVIEW_LENGTH, true);
- const msg = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.append(tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.appendLineBreak(tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.mention(header, params.userFrom)), content);
- const msgPreview = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.quote(header, params.userFrom, preview);
- const head = {
- forwarded: params.topicName + ':' + params.seq
- };
- this.setState({
- forwardDialogVisible: true,
- forwardMessage: {
- head: head,
- msg: msg,
- preview: msgPreview
- }
- });
- }
- handleShareTheCard(card) {
- this.setState({
- forwardDialogVisible: true,
- forwardMessage: {
- content: card,
- type: card.contentType
- }
- });
- }
- defaultTopicContextMenu(topicName) {
- const topic = this.tinode.getTopic(topicName);
- if (topic._deleted) {
- return ['topic_delete'];
- }
- const me = this.tinode.getMeTopic();
- let muted = false,
- blocked = false,
- self_blocked = false,
- subscribed = false,
- deleter = false,
- archived = false,
- pinned = false,
- webrtc = false,
- writer = false,
- p2p = false,
- self = false;
- if (topic) {
- subscribed = topic.isSubscribed();
- archived = topic.isArchived();
- pinned = me.pinnedTopicRank(topicName) > 0;
- const acs = topic.getAccessMode();
- if (acs) {
- muted = acs.isMuted();
- blocked = !acs.isJoiner();
- self_blocked = !acs.isJoiner('want');
- deleter = acs.isDeleter();
- writer = acs.isWriter();
- }
- }
- webrtc = writer && !!this.tinode.getServerParam('iceServers');
- p2p = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isP2PTopicName(topicName);
- self = tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isSelfTopicName(topicName);
- return [subscribed ? {
- title: this.props.intl.formatMessage(messages.menu_item_info),
- handler: this.handleShowInfoView
- } : null, subscribed && p2p && webrtc ? {
- title: this.props.intl.formatMessage(messages.menu_item_audio_call),
- handler: this.handleStartAudioCall
- } : null, subscribed && p2p && webrtc ? {
- title: this.props.intl.formatMessage(messages.menu_item_video_call),
- handler: this.handleStartVideoCall
- } : null, subscribed ? 'messages_clear' : null, subscribed && deleter && !self ? 'messages_clear_hard' : null, self ? null : muted ? blocked ? null : 'topic_unmute' : 'topic_mute', self ? null : self_blocked ? 'topic_unblock' : 'topic_block', pinned ? 'topic_unpin' : 'topic_pin', archived ? 'topic_restore' : 'topic_archive', 'topic_delete'];
- }
- handleHideContextMenu() {
- this.setState({
- contextMenuVisible: false,
- contextMenuClickAt: null,
- contextMenuParams: null,
- contextMenuBounds: null
- });
- }
- handleHideForwardDialog(keepForwardedMessage) {
- this.setState({
- forwardDialogVisible: false,
- forwardMessage: keepForwardedMessage ? this.state.forwardMessage : null
- });
- }
- handleContextMenuAction(action, promise, params) {
- if (action == 'topic_archive') {
- if (promise && params.topicName && params.topicName == this.state.topicSelected) {
- promise.then(_ => {
- this.handleTopicSelected(null);
- });
- }
- } else if (action == 'menu_item_forward') {
- this.handleShowForwardDialog(params);
- }
- }
- handleShowAlert(title, content, onConfirm, confirmText, onReject, rejectText) {
- this.setState({
- alertVisible: true,
- alertParams: {
- title: title,
- content: content,
- onConfirm: onConfirm,
- confirm: confirmText,
- onReject: onReject,
- reject: rejectText
- }
- });
- }
- handleShowInfoView() {
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].addUrlParam(window.location.hash, 'info', 'info'));
- this.setState({
- infoPanel: 'info'
- });
- }
- handleMemberUpdateRequest(topicName, added, removed) {
- if (!topicName) {
- return;
- }
- const topic = this.tinode.getTopic(topicName);
- if (!topic) {
- return;
- }
- if (added && added.length > 0) {
- added.forEach(uid => {
- topic.invite(uid, null).catch(err => this.handleError(err.message, 'err'));
- });
- }
- if (removed && removed.length > 0) {
- removed.forEach(uid => {
- topic.delSubscription(uid).catch(err => this.handleError(err.message, 'err'));
- });
- }
- }
- handleValidateCredentialsRequest(cred, code, token) {
- if (this.tinode.isAuthenticated()) {
- this.tinode.getMeTopic().setMeta({
- cred: {
- meth: cred,
- resp: code
- }
- }).then(_ => _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo(_lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].setUrlSidePanel(window.location.hash, 'contacts'))).catch(err => this.handleError(err.message, 'err'));
- } else {
- this.setState({
- credMethod: cred,
- credCode: code,
- credToken: token
- });
- this.doLogin(null, null, token, {
- meth: cred,
- resp: code
- });
- }
- }
- handlePasswordResetRequest(method, value) {
- return this.tinode.connect().then(_ => this.tinode.requestResetAuthSecret('basic', method, value)).catch(err => {
- this.handleError(err.message, 'err');
- });
- }
- handleResetPassword(newPassword, tempAuth) {
- const secret = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_13__.base64ReEncode)(tempAuth.secret);
- if (!secret || !tempAuth.scheme) {
- this.handleError(this.props.intl.formatMessage(messages.invalid_security_token), 'err');
- } else {
- this.tinode.connect().then(_ => this.tinode.updateAccountBasic(null, null, newPassword, {
- scheme: tempAuth.scheme,
- secret: secret
- })).then(_ => {
- this.handleError(this.props.intl.formatMessage(messages.password_reset_success), 'info');
- _lib_navigation_js__WEBPACK_IMPORTED_MODULE_16__["default"].navigateTo('');
- }).catch(err => {
- this.handleError(err.message, 'err');
- });
- }
- }
- handleShowCountrySelector(code, dial, selectedCallback) {
- this.handleShowAlert(this.props.intl.formatMessage(messages.select_country), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
- fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "loading_note",
- defaultMessage: [{
- "type": 0,
- "value": "Loading..."
- }]
- }))
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PhoneCountrySelector, {
- selected: code,
- onSubmit: (c, d) => {
- this.setState({
- alertVisible: false
- });
- selectedCallback(c, d);
- }
- })), null, null, _ => {}, null);
- }
- handleStartVideoCall() {
- this.setState({
- callTopic: this.state.topicSelected,
- callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_OUTGOING_INITATED,
- callAudioOnly: false
- });
- }
- handleStartAudioCall() {
- this.setState({
- callTopic: this.state.topicSelected,
- callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_OUTGOING_INITATED,
- callAudioOnly: true
- });
- }
- handleCallInvite(callTopic, callSeq, callState, audioOnly) {
- switch (callState) {
- case _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_OUTGOING_INITATED:
- const head = {
- webrtc: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_HEAD_STARTED,
- aonly: !!audioOnly
- };
- return this.handleSendMessage(tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Drafty.videoCall(audioOnly), undefined, undefined, head).then(ctrl => {
- if (ctrl.code < 200 || ctrl.code >= 300 || !ctrl.params || !ctrl.params.seq) {
- this.handleCallClose();
- return ctrl;
- }
- this.setState({
- callSeq: ctrl.params['seq']
- });
- return ctrl;
- });
- case _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_IN_PROGRESS:
- const topic = this.tinode.getTopic(callTopic);
- if (!topic) {
- return;
- }
- topic.videoCall('accept', callSeq);
- break;
- }
- }
- handleCallRinging(callTopic, callSeq) {
- const topic = this.tinode.getTopic(callTopic);
- if (!topic) {
- return;
- }
- topic.videoCall('ringing', callSeq);
- }
- handleCallHangup(callTopic, callSeq) {
- const topic = this.tinode.getTopic(callTopic);
- if (!topic) {
- return;
- }
- topic.videoCall('hang-up', callSeq);
- }
- handleCallSendOffer(callTopic, callSeq, sdp) {
- const topic = this.tinode.getTopic(callTopic);
- if (!topic) {
- return;
- }
- topic.videoCall('offer', callSeq, sdp);
- }
- handleCallIceCandidate(callTopic, callSeq, candidate) {
- const topic = this.tinode.getTopic(callTopic);
- if (!topic) {
- return;
- }
- topic.videoCall('ice-candidate', callSeq, candidate);
- }
- handleCallSendAnswer(callTopic, callSeq, sdp) {
- const topic = this.tinode.getTopic(callTopic);
- if (!topic) {
- return;
- }
- topic.videoCall('answer', callSeq, sdp);
- }
- handleCallClose() {
- if (this.callTimeoutTimer) {
- clearTimeout(this.callTimeoutTimer);
- }
- this.setState({
- callTopic: undefined,
- callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_NONE,
- callAudioOnly: undefined
- });
- }
- handleCallAccept(topicName, setCallTopic, callSeq) {
- const topic = this.tinode.getTopic(topicName);
- if (!topic) {
- return;
- }
- if (topic.isSubscribed()) {
- this.handleTopicSelected(setCallTopic ? topicName : this.state.callTopic);
- const upd = {
- callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_IN_PROGRESS
- };
- if (setCallTopic) {
- upd.callTopic = topicName;
- upd.callSeq = callSeq;
- }
- this.setState(upd);
- } else {
- this.setState({
- callShouldStart: true
- }, _ => this.handleTopicSelected(this.state.callTopic));
- }
- }
- handleInfoMessage(info) {
- if (info.what != 'call') {
- return;
- }
- switch (info.event) {
- case 'accept':
- if (tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isMeTopicName(info.topic) && this.tinode.isMe(info.from)) {
- this.setState({
- callTopic: null,
- callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_NONE,
- callSeq: null,
- callAudioOnly: undefined
- });
- return;
- }
- if (info.topic == this.state.callTopic) {
- this.setState({
- callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_IN_PROGRESS
- });
- }
- break;
- case 'hang-up':
- this.handleCallClose();
- break;
- }
- }
- handleDataMessage(data) {
- if (data.head && data.head.webrtc && data.head.webrtc == _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_HEAD_STARTED && tinode_sdk__WEBPACK_IMPORTED_MODULE_4__.Tinode.isP2PTopicName(data.topic)) {
- const topic = this.tinode.getTopic(data.topic);
- if (topic) {
- const msg = topic.latestMsgVersion(data.seq) || data;
- if (msg.head && msg.head.webrtc && msg.head.webrtc == _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_HEAD_STARTED) {
- if (data.from != this.state.myUserId) {
- if (this.state.callState == _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_NONE) {
- this.setState({
- callTopic: data.topic,
- callState: _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_INCOMING_RECEIVED,
- callSeq: data.seq,
- callAudioOnly: !!msg.head.aonly
- });
- } else {
- this.handleCallHangup(data.topic, data.seq);
- }
- }
- }
- } else {
- console.warn("Received vc data message from unknown topic", data.topic);
- }
- }
- }
- render() {
- const colorSchema = this.state.colorSchema !== 'auto' ? this.state.colorSchema : this.state.systemColorSchema;
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- id: "app-container",
- ref: this.selfRef
- }, this.state.contextMenuVisible ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_context_menu_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], {
- tinode: this.tinode,
- bounds: this.state.contextMenuBounds,
- clickAt: this.state.contextMenuClickAt,
- params: this.state.contextMenuParams,
- items: this.state.contextMenuItems,
- hide: this.handleHideContextMenu,
- onShowAlert: this.handleShowAlert,
- onAction: this.handleContextMenuAction,
- onTopicRemoved: topicName => {
- if (topicName == this.state.topicSelected) {
- this.handleTopicSelected(null);
- }
- },
- onError: this.handleError
- }) : null, this.state.forwardDialogVisible ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_forward_dialog_jsx__WEBPACK_IMPORTED_MODULE_7__["default"], {
- tinode: this.tinode,
- contacts: this.state.chatList,
- topicSelected: this.state.topicSelected,
- myUserId: this.state.myUserId,
- hide: this.handleHideForwardDialog,
- onInitFind: this.tnInitFind,
- searchResults: this.state.searchResults,
- onSearchContacts: this.handleSearchContacts,
- onTopicSelected: this.handleStartTopicRequest
- }) : null, this.state.callTopic && this.state.callState == _constants_js__WEBPACK_IMPORTED_MODULE_11__.CALL_STATE_INCOMING_RECEIVED ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_call_incoming_jsx__WEBPACK_IMPORTED_MODULE_8__["default"], {
- tinode: this.tinode,
- topic: this.state.callTopic,
- seq: this.state.callSeq,
- callState: this.state.callState,
- audioOnly: this.state.callAudioOnly,
- onClose: this.handleCallClose,
- onRinging: this.handleCallRinging,
- onAcceptCall: this.handleCallAccept,
- onReject: this.handleCallHangup
- }) : null, this.state.alertVisible ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_alert_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
- title: this.state.alertParams.title,
- content: this.state.alertParams.content,
- onReject: this.state.alertParams.onReject ? _ => this.setState({
- alertVisible: false
- }) : null,
- reject: this.state.alertParams.reject,
- onConfirm: this.state.alertParams.onConfirm ? _ => {
- this.setState({
- alertVisible: false
- });
- this.state.alertParams.onConfirm();
- } : null,
- confirm: this.state.alertParams.confirm
- }) : null, !this.state.displayMobile || this.state.mobilePanel == 'sidepanel' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_sidepanel_view_jsx__WEBPACK_IMPORTED_MODULE_9__["default"], {
- tinode: this.tinode,
- connected: this.state.connected,
- displayMobile: this.state.displayMobile,
- state: this.state.sidePanelSelected,
- title: this.state.sidePanelTitle,
- avatar: this.state.sidePanelAvatar,
- trustedBadges: this.state.myTrustedBadges,
- login: this.state.login,
- persist: this.state.persist,
- myUserId: this.state.myUserId,
- loginDisabled: this.state.loginDisabled,
- loadSpinnerVisible: this.state.loadSpinnerVisible,
- errorText: this.state.errorText,
- errorLevel: this.state.errorLevel,
- errorAction: this.state.errorAction,
- errorActionText: this.state.errorActionText,
- topicSelected: this.state.topicSelected,
- chatList: this.state.chatList,
- credMethod: this.state.credMethod,
- credCode: this.state.credCode,
- credToken: this.state.credToken,
- transport: this.state.transport,
- messageSounds: this.state.messageSounds,
- desktopAlerts: this.state.desktopAlerts,
- desktopAlertsEnabled: this.state.desktopAlertsEnabled,
- incognitoMode: this.state.incognitoMode,
- serverAddress: this.state.serverAddress,
- secureConnection: this.state.secureConnection,
- serverVersion: this.state.serverVersion,
- reqCredMethod: this.state.reqCredMethod,
- textSize: this.state.textSize,
- colorSchema: this.state.colorSchema,
- wallpaper: this.state.wallpaper,
- wallpaperSize: this.state.wallpaperSize,
- wallpaperBlur: this.state.wallpaperBlur,
- systemColorSchema: this.state.systemColorSchema,
- sendOnEnter: this.state.sendOnEnter,
- onGlobalSettings: this.handleGlobalSettings,
- onSignUp: this.handleNewAccount,
- onSettings: this.handleSettings,
- onNavigate: this.basicNavigator,
- onLoginRequest: this.handleLoginRequest,
- onPersistenceChange: this.handlePersistenceChange,
- onCreateAccount: this.handleNewAccountRequest,
- onUpdateAccountDesc: this.handleTopicUpdateRequest,
- onUpdatePassword: this.handleUpdatePasswordRequest,
- onUpdateAccountTags: this.handleUpdateAccountTagsRequest,
- onTogglePushNotifications: this.toggleFCMToken,
- onToggleMessageSounds: this.handleToggleMessageSounds,
- onToggleIncognitoMode: this.handleToggleIncognitoMode,
- onChangeColorSchema: this.handleChangeColorSchema,
- onTextSizeChanged: this.handleChangeTextSize,
- onSendOnEnterChanged: this.handleSendOnEnter,
- onSelectWallpapers: this.handleSelectWallpapers,
- onWallpaperSelected: this.handleWallpaperSelected,
- onCredAdd: this.handleCredAdd,
- onCredDelete: this.handleCredDelete,
- onCredConfirm: this.handleCredConfirm,
- onTopicSelected: this.handleTopicSelected,
- onCreateTopic: this.handleStartTopicRequest,
- onLogout: this.handleLogout,
- onDeleteAccount: this.handleDeleteAccount,
- onShowAlert: this.handleShowAlert,
- onCancel: this.handleSidepanelCancel,
- onError: this.handleError,
- onValidateCredentials: this.handleValidateCredentialsRequest,
- onPasswordResetRequest: this.handlePasswordResetRequest,
- onResetPassword: this.handleResetPassword,
- onShowArchive: this.handleShowArchive,
- onShowBlocked: this.handleShowBlocked,
- onShowCountrySelector: this.handleShowCountrySelector,
- onInitFind: this.tnInitFind,
- searchResults: this.state.searchResults,
- onSearchContacts: this.handleSearchContacts,
- showContextMenu: this.handleShowContextMenu
- }) : null, !this.state.displayMobile || this.state.mobilePanel == 'topic-view' && !this.state.infoPanel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
- fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "loading_note",
- defaultMessage: [{
- "type": 0,
- "value": "Loading..."
- }]
- }))
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(MessagesView, {
- tinode: this.tinode,
- connected: this.state.connected,
- ready: this.state.ready,
- online: this.state.topicSelectedOnline,
- acs: this.state.topicSelectedAcs,
- displayMobile: this.state.displayMobile,
- viewportWidth: this.state.viewportWidth,
- viewportHeight: this.state.viewportHeight,
- topic: this.state.topicSelected,
- myUserId: this.state.myUserId,
- myUserName: this.state.sidePanelTitle,
- serverVersion: this.state.serverVersion,
- serverAddress: this.state.serverAddress,
- applicationVisible: this.state.applicationVisible,
- colorSchema: colorSchema,
- sendOnEnter: this.state.sendOnEnter,
- wallpaper: this.state.wallpaper,
- forwardMessage: this.state.forwardMessage,
- onCancelForwardMessage: this.handleHideForwardDialog,
- callTopic: this.state.callTopic,
- callSeq: this.state.callSeq,
- callState: this.state.callState,
- callAudioOnly: this.state.callAudioOnly,
- onCallHangup: this.handleCallHangup,
- onAcceptCall: this.handleCallAccept,
- onCallInvite: this.handleCallInvite,
- onCallSendOffer: this.handleCallSendOffer,
- onCallIceCandidate: this.handleCallIceCandidate,
- onCallSendAnswer: this.handleCallSendAnswer,
- errorText: this.state.errorText,
- errorLevel: this.state.errorLevel,
- errorAction: this.state.errorAction,
- errorActionText: this.state.errorActionText,
- newTopicParams: this.state.newTopicParams,
- onHideMessagesView: this.handleHideMessagesView,
- onError: this.handleError,
- onNewTopicCreated: this.handleNewTopicCreated,
- showContextMenu: this.handleShowContextMenu,
- onChangePermissions: this.handleChangePermissions,
- onNewChat: this.handleNewChatInvitation,
- sendMessage: this.handleSendMessage,
- onVideoCallClosed: this.handleCallClose
- })) : null, this.state.infoPanel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react__WEBPACK_IMPORTED_MODULE_0__.Suspense, {
- fallback: react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "loading_note",
- defaultMessage: [{
- "type": 0,
- "value": "Loading..."
- }]
- }))
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InfoView, {
- tinode: this.tinode,
- connected: this.state.connected,
- displayMobile: this.state.displayMobile,
- topic: this.state.topicSelected,
- searchableContacts: this.state.searchableContacts,
- myUserId: this.state.myUserId,
- panel: this.state.infoPanel,
- errorText: this.state.errorText,
- errorLevel: this.state.errorLevel,
- errorAction: this.state.errorAction,
- errorActionText: this.state.errorActionText,
- onNavigate: this.infoNavigator,
- onTopicDescUpdateRequest: this.handleTopicUpdateRequest,
- onShowAlert: this.handleShowAlert,
- onChangePermissions: this.handleChangePermissions,
- onMemberUpdateRequest: this.handleMemberUpdateRequest,
- onDeleteTopic: this.handleDeleteTopicRequest,
- onDeleteMessages: this.handleDeleteMessagesRequest,
- onLeaveTopic: this.handleLeaveUnsubRequest,
- onBlockTopic: this.handleBlockTopicRequest,
- onReportTopic: this.handleReportTopic,
- onShareTheCard: this.handleShareTheCard,
- onTopicTagsUpdateRequest: this.handleTagsUpdateRequest,
- onTopicUnArchive: this.handleUnarchive,
- onInitFind: this.tnInitFind,
- onError: this.handleError,
- showContextMenu: this.handleShowContextMenu
- })) : null);
- }
-}
-;
-/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(TinodeWeb));
-
-/***/ }),
-
-/***/ "./src/views/topic-common-view.jsx":
-/*!*****************************************!*\
- !*** ./src/views/topic-common-view.jsx ***!
- \*****************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ TopicCommonView; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _widgets_topic_desc_edit_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../widgets/topic-desc-edit.jsx */ "./src/widgets/topic-desc-edit.jsx");
-/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
-
-
-
-class TopicCommonView extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- const topic = this.props.tinode.getTopic(this.props.topic);
- const acs = topic.getAccessMode();
- this.state = {
- tags: []
- };
- this.previousTagsUpdated = undefined;
- this.onTagsUpdated = this.onTagsUpdated.bind(this);
- this.handleTagsUpdated = this.handleTagsUpdated.bind(this);
- }
- componentDidUpdate(props) {
- const topic = this.props.tinode.getTopic(props.topic);
- if (!topic) {
- return;
- }
- if (topic.onTagsUpdated != this.onTagsUpdated) {
- if (topic.getType() == 'grp') {
- this.previousTagsUpdated = topic.onTagsUpdated;
- topic.onTagsUpdated = this.onTagsUpdated;
- } else {
- this.previousTagsUpdated = undefined;
- }
- }
- if (this.state.topic != props.topic) {
- this.setState({
- topic: props.topic
- });
- }
- }
- componentWillUnmount() {
- const topic = this.props.tinode.getTopic(this.props.topic);
- topic.onTagsUpdated = this.previousTagsUpdated;
- }
- onTagsUpdated(tags) {
- this.setState({
- tags: tags
- });
- if (this.previousTagsUpdated && this.previousTagsUpdated != this.onTagsUpdated) {
- this.previousTagsUpdated(tags);
- }
- }
- handleTagsUpdated(tags) {
- if (!(0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_2__.arrayEqual)(this.state.tags.slice(0), tags.slice(0))) {
- this.props.onUpdateTagsRequest(this.props.topic, tags);
- }
- }
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "scrollable-panel"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_widgets_topic_desc_edit_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
- tinode: this.props.tinode,
- topic: this.props.topic,
- onUpdateTopicDesc: this.props.onUpdateTopicDesc,
- onUpdateTags: this.handleTagsUpdated,
- onError: this.props.onError
- }));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/views/validation-view.jsx":
-/*!***************************************!*\
- !*** ./src/views/validation-view.jsx ***!
- \***************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-
-
-const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
- phone: {
- id: "phone_dative",
- defaultMessage: [{
- "type": 0,
- "value": "phone"
- }]
- },
- email: {
- id: "email_dative",
- defaultMessage: [{
- "type": 0,
- "value": "email"
- }]
- }
-});
-class ValidationView extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.state = {
- code: props.credCode || '',
- codeReceived: props.credCode
- };
- this.handleCodeChange = this.handleCodeChange.bind(this);
- this.handleKeyPress = this.handleKeyPress.bind(this);
- this.handleSubmit = this.handleSubmit.bind(this);
- this.handleCancel = this.handleCancel.bind(this);
- }
- static getDerivedStateFromProps(nextProps, prevState) {
- if (nextProps.credCode != prevState.codeReceived) {
- return {
- code: nextProps.credCode || '',
- codeReceived: nextProps.credCode
- };
- }
- return prevState;
- }
- componentDidMount() {
- if (this.props.credCode) {
- this.props.onSubmit(this.props.credMethod, this.props.credCode, this.props.credToken);
- }
- }
- componentDidUpdate(prevProps, prevState) {
- if (this.state.codeReceived && this.state.code && this.state.code != prevState.code) {
- this.props.onSubmit(this.props.credMethod, this.state.code, this.props.credToken);
- }
- }
- handleCodeChange(e) {
- this.setState({
- code: e.target.value.replace(/[^\d]/g, '')
- });
- }
- handleKeyPress(e) {
- if (e.key === 'Enter') {
- this.handleSubmit(e);
- } else if (e.key == 'Escape') {
- this.handleCancel(e);
- }
- }
- handleSubmit(e) {
- e.preventDefault();
- if (this.state.code && this.state.code.trim()) {
- this.props.onSubmit(this.props.credMethod, this.state.code.trim(), this.props.credToken);
- }
- }
- handleCancel(e) {
- e.preventDefault();
- this.props.onCancel();
- }
- render() {
- const {
- formatMessage
- } = this.props.intl;
- const methods = {
- 'email': formatMessage(messages.email),
- 'tel': formatMessage(messages.phone)
- };
- const method = methods[this.props.credMethod] || this.props.credMethod;
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small gray",
- htmlFor: "enter-confirmation-code"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "enter_confirmation_code_prompt",
- defaultMessage: [{
- "type": 0,
- "value": "Confirmation code"
- }],
- values: {
- method: method
- }
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "numeric_confirmation_code_prompt",
- defaultMessage: [{
- "type": 0,
- "value": "Numbers only"
- }]
- }, numbers_only => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "text",
- id: "enter-confirmation-code",
- placeholder: numbers_only,
- value: this.state.code,
- onChange: this.handleCodeChange,
- onKeyDown: this.handleKeyPress,
- required: true
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "dialog-buttons"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
- className: "secondary",
- onClick: this.handleCancel
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "button_cancel",
- defaultMessage: [{
- "type": 0,
- "value": "Cancel"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
- className: "primary",
- onClick: this.handleSubmit
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "button_confirm",
- defaultMessage: [{
- "type": 0,
- "value": "Confirm"
- }]
- }))));
- }
-}
-;
-/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ValidationView));
-
-/***/ }),
-
-/***/ "./src/widgets/alert.jsx":
-/*!*******************************!*\
- !*** ./src/widgets/alert.jsx ***!
- \*******************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ Alert; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-
-
-class Alert extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "alert-container"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "alert"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "title"
- }, this.props.title), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "content"
- }, this.props.content), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "dialog-buttons"
- }, this.props.onReject ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
- className: "outline",
- onClick: this.props.onReject
- }, this.props.reject || react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "button_cancel",
- defaultMessage: [{
- "type": 0,
- "value": "Cancel"
- }]
- })) : null, this.props.onConfirm ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
- className: "primary",
- onClick: this.props.onConfirm
- }, this.props.confirm || react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "button_ok",
- defaultMessage: [{
- "type": 0,
- "value": "OK"
- }]
- })) : null)));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/audio-player.jsx":
-/*!**************************************!*\
- !*** ./src/widgets/audio-player.jsx ***!
- \**************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _lib_strformat__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/strformat */ "./src/lib/strformat.js");
-/* harmony import */ var _lib_blob_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/blob-helpers */ "./src/lib/blob-helpers.js");
-
-
-
-
-const CANVAS_UPSCALING = 2.0;
-const LINE_WIDTH = 3 * CANVAS_UPSCALING;
-const SPACING = 2 * CANVAS_UPSCALING;
-const BAR_COLOR = '#888A';
-const BAR_COLOR_DARK = '#666C';
-const THUMB_COLOR = '#1781d7';
-const MIN_PREVIEW_LENGTH = 16;
-const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
- icon_title_play: {
- id: "icon_title_play",
- defaultMessage: [{
- "type": 0,
- "value": "Play recording"
- }]
- }
-});
-class AudioPlayer extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- let preview = (0,_lib_blob_helpers__WEBPACK_IMPORTED_MODULE_3__.base64ToIntArray)(this.props.preview);
- if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {
- preview = null;
- }
- this.state = {
- canPlay: false,
- playing: false,
- currentTime: '0:00',
- duration: this.props.duration > 0 ? (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.props.duration / 1000) : '-:--',
- longMin: this.props.duration >= 600000,
- preview: preview
- };
- this.initAudio = this.initAudio.bind(this);
- this.initCanvas = this.initCanvas.bind(this);
- this.resampleBars = this.resampleBars.bind(this);
- this.visualize = this.visualize.bind(this);
- this.handlePlay = this.handlePlay.bind(this);
- this.handleSeek = this.handleSeek.bind(this);
- this.handleError = this.handleError.bind(this);
- this.audioPlayer = null;
- this.viewBuffer = [];
- this.canvasRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
- }
- componentDidMount() {
- if (this.props.src) {
- this.initAudio();
- }
- this.initCanvas();
- }
- componentWillUnmount() {
- if (this.audioPlayer) {
- this.audioPlayer.onloadedmetadata = null;
- this.audioPlayer.ontimeupdate = null;
- this.audioPlayer.onended = null;
- this.audioPlayer.pause();
- this.audioPlayer = null;
- }
- }
- componentDidUpdate(prevProps) {
- if (this.props.src != prevProps.src) {
- this.initAudio();
- }
- if (this.props.preview != prevProps.preview) {
- let preview = (0,_lib_blob_helpers__WEBPACK_IMPORTED_MODULE_3__.base64ToIntArray)(this.props.preview);
- if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {
- preview = null;
- }
- this.setState({
- preview: preview
- }, this.initCanvas);
- }
- }
- initAudio() {
- this.audioPlayer = new Audio(this.props.src);
- this.audioPlayer.onloadedmetadata = _ => this.setState({
- canPlay: true
- });
- this.audioPlayer.ontimeupdate = _ => this.setState({
- currentTime: (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.audioPlayer.currentTime, this.state.longMin)
- });
- this.audioPlayer.onended = _ => {
- this.audioPlayer.currentTime = 0;
- this.setState({
- playing: false,
- currentTime: (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(0, this.state.longMin)
- });
- };
- }
- initCanvas() {
- this.canvasRef.current.width = this.canvasRef.current.offsetWidth * CANVAS_UPSCALING;
- this.canvasRef.current.height = this.canvasRef.current.offsetHeight * CANVAS_UPSCALING;
- this.canvasContext = this.canvasRef.current.getContext('2d');
- this.canvasContext.lineCap = 'round';
- this.viewBuffer = this.resampleBars(this.state.preview);
- this.visualize();
- }
- visualize() {
- if (!this.canvasRef.current) {
- return;
- }
- const width = this.effectiveWidth;
- const height = this.canvasRef.current.height;
- this.canvasContext.lineWidth = LINE_WIDTH;
- const drawFrame = _ => {
- if (!this.canvasRef.current || !this.audioPlayer) {
- return;
- }
- this.canvasContext.clearRect(0, 0, this.canvasRef.current.width, height);
- if (this.viewBuffer) {
- if (this.state.playing) {
- window.requestAnimationFrame(drawFrame);
- }
- const thumbAt = this.props.duration ? Math.max(0, Math.min(this.audioPlayer.currentTime * 1000 / this.props.duration, 1)) * (width - LINE_WIDTH * 2) : -1;
- this.canvasContext.beginPath();
- this.canvasContext.strokeStyle = BAR_COLOR_DARK;
- for (let i = 0; i < this.viewBuffer.length; i++) {
- let x = 1 + i * (LINE_WIDTH + SPACING) + LINE_WIDTH * 0.5;
- let y = Math.max(this.viewBuffer[i] * height * 0.9, 1);
- const color = x < thumbAt ? BAR_COLOR_DARK : BAR_COLOR;
- if (this.canvasContext.strokeStyle != color) {
- this.canvasContext.stroke();
- this.canvasContext.beginPath();
- this.canvasContext.strokeStyle = color;
- }
- this.canvasContext.moveTo(x, (height - y) * 0.5);
- this.canvasContext.lineTo(x, (height + y) * 0.5);
- }
- this.canvasContext.stroke();
- if (this.props.duration) {
- this.canvasContext.beginPath();
- this.canvasContext.arc(thumbAt + LINE_WIDTH * 2, height * 0.5, LINE_WIDTH * 2, 0, 2 * Math.PI);
- this.canvasContext.fillStyle = THUMB_COLOR;
- this.canvasContext.fill();
- }
- }
- };
- drawFrame();
- }
- resampleBars(original) {
- const dstCount = (this.canvasRef.current.width - SPACING) / (LINE_WIDTH + SPACING) | 0;
- this.effectiveWidth = dstCount * (LINE_WIDTH + SPACING) + SPACING;
- if (!Array.isArray(original) || original.length == 0) {
- return Array.apply(null, Array(dstCount)).map(_ => 0.01);
- }
- const factor = original.length / dstCount;
- let amps = [];
- let maxAmp = -1;
- for (let i = 0; i < dstCount; i++) {
- let lo = i * factor | 0;
- let hi = (i + 1) * factor | 0;
- if (hi == lo) {
- amps[i] = original[lo];
- } else {
- let amp = 0.0;
- for (let j = lo; j < hi; j++) {
- amp += original[j];
- }
- amps[i] = Math.max(0, amp / (hi - lo));
- }
- maxAmp = Math.max(amps[i], maxAmp);
- }
- if (maxAmp > 0) {
- return amps.map(a => a / maxAmp);
- }
- return Array.apply(null, Array(dstCount)).map(_ => 0.01);
- }
- handlePlay(e) {
- e.preventDefault();
- if (!this.state.canPlay) {
- return;
- }
- if (this.state.playing) {
- this.audioPlayer.pause();
- this.setState({
- playing: false
- });
- } else if (this.audioPlayer.readyState >= 2) {
- this.audioPlayer.play();
- this.setState({
- playing: true
- }, this.visualize);
- }
- }
- handleError(err) {
- console.error(err);
- }
- handleSeek(e) {
- e.preventDefault();
- if (e.target && this.props.duration) {
- const rect = e.target.getBoundingClientRect();
- const offset = (e.clientX - rect.left) / this.effectiveWidth * CANVAS_UPSCALING;
- this.audioPlayer.currentTime = this.props.duration * offset / 1000;
- this.setState({
- currentTime: (0,_lib_strformat__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.audioPlayer.currentTime, this.state.longMin)
- });
- if (!this.state.playing) {
- this.visualize();
- }
- }
- }
- render() {
- const playClass = 'material-icons' + (this.props.short ? '' : ' large') + (this.state.canPlay ? '' : ' disabled');
- const play = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- onClick: this.handlePlay,
- title: this.props.intl.formatMessage(messages.icon_title_play)
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: playClass
- }, this.state.playing ? 'pause_circle' : this.state.canPlay ? 'play_circle' : 'not_interested'));
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "audio-player"
- }, this.props.short ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("canvas", {
- className: "playback",
- ref: this.canvasRef,
- onClick: this.handleSeek
- }), play) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, play, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("canvas", {
- className: "playback",
- ref: this.canvasRef,
- onClick: this.handleSeek
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "timer"
- }, this.state.currentTime, "/", this.state.duration))));
- }
-}
-/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(AudioPlayer));
-
-/***/ }),
-
-/***/ "./src/widgets/avatar-crop.jsx":
-/*!*************************************!*\
- !*** ./src/widgets/avatar-crop.jsx ***!
- \*************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ AvatarCrop; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _cropper_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cropper.jsx */ "./src/widgets/cropper.jsx");
-/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
-
-
-
-
-class AvatarCrop extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.state = {
- top: 0,
- left: 0,
- width: 0,
- height: 0,
- scale: 1
- };
- this.handleSubmit = this.handleSubmit.bind(this);
- this.handleChange = this.handleChange.bind(this);
- }
- handleChange(left, top, width, height, scale) {
- this.setState({
- left: left,
- top: top,
- width: width,
- height: height,
- scale: scale
- });
- }
- handleSubmit() {
- (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_3__.imageCrop)(this.props.mime, this.props.avatar, this.state.left, this.state.top, this.state.width, this.state.height, this.state.scale).then(img => {
- this.props.onSubmit(img.mime, img.blob, img.width, img.height);
- }).catch(err => {
- this.props.onError(err);
- });
- }
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_cropper_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
- source: this.props.avatar,
- onChange: this.handleChange
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "dialog-buttons"
- }, this.props.onCancel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
- className: "secondary",
- onClick: this.props.onCancel
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "button_cancel",
- defaultMessage: [{
- "type": 0,
- "value": "Cancel"
- }]
- })) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
- className: "primary",
- onClick: this.handleSubmit
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "button_ok",
- defaultMessage: [{
- "type": 0,
- "value": "OK"
- }]
- }))));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/avatar-upload.jsx":
-/*!***************************************!*\
- !*** ./src/widgets/avatar-upload.jsx ***!
- \***************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ AvatarUpload; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
-/* harmony import */ var _load_spinner_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./load-spinner.jsx */ "./src/widgets/load-spinner.jsx");
-/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
-/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
-
-
-
-
-
-class AvatarUpload extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- this.state = {
- source: props.avatar
- };
- this.handleFileReceived = this.handleFileReceived.bind(this);
- }
- componentDidUpdate(prevProps) {
- if (this.props.avatar != prevProps.avatar) {
- this.setState({
- source: this.props.avatar
- });
- }
- }
- handleFileReceived(e) {
- const image = e.target.files[0];
- this.props.onImageUpdated(image.type, URL.createObjectURL(image), image.name);
- e.target.value = '';
- }
- render() {
- const randId = 'file-input-avatar-' + ('' + Math.random()).substring(0, 4);
- const className = 'avatar-upload' + (this.props.readOnly ? ' read-only' : '');
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: className
- }, this.props.readOnly || !this.state.source ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- className: "clear-avatar",
- onClick: e => {
- e.preventDefault();
- this.props.onImageUpdated();
- }
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "clear")), this.state.source ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("img", {
- src: this.props.tinode.authorizeURL((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_3__.sanitizeUrlForMime)(this.state.source, 'image')),
- className: "preview"
- }) : this.props.readOnly && this.props.uid ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "avatar-box"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
- authorizeURL: this.props.tinode.authorizeURL,
- avatar: true,
- topic: this.props.uid,
- title: this.props.title
- })) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "blank"
- }, _config_js__WEBPACK_IMPORTED_MODULE_4__.AVATAR_SIZE, "\xD7", _config_js__WEBPACK_IMPORTED_MODULE_4__.AVATAR_SIZE), this.props.readOnly ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "file",
- id: randId,
- className: "inputfile hidden",
- accept: "image/*",
- onChange: this.handleFileReceived
- }), this.props.readOnly ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- htmlFor: randId,
- className: "round"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "file_upload")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_load_spinner_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
- show: this.props.uploading,
- large: true,
- clear: true,
- centered: true
- }));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/badge-list.jsx":
-/*!************************************!*\
- !*** ./src/widgets/badge-list.jsx ***!
- \************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-
-
-const icon_mapping = {
- 'staff': 'verified_user'
-};
-const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
- badge_verified: {
- id: "badge_verified",
- defaultMessage: [{
- "type": 0,
- "value": "Verified/official"
- }]
- },
- badge_staff: {
- id: "badge_staff",
- defaultMessage: [{
- "type": 0,
- "value": "Staff-managed"
- }]
- },
- badge_danger: {
- id: "badge_danger",
- defaultMessage: [{
- "type": 0,
- "value": "Untrustworthy"
- }]
- }
-});
-class BadgeList extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- const {
- formatMessage
- } = this.props.intl;
- let badges = null;
- if (this.props.trustedBadges && this.props.trustedBadges.length > 0) {
- badges = [];
- this.props.trustedBadges.forEach(b => {
- const comment = this.props.short ? null : formatMessage(messages['badge_' + b]);
- const style = 'material-icons ' + b + '-color';
- badges.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "trusted-badge",
- key: b
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: style
- }, icon_mapping[b] || b), " ", comment));
- });
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, badges);
- }
- return null;
- }
-}
-;
-/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(BadgeList));
-
-/***/ }),
-
-/***/ "./src/widgets/button-back.jsx":
-/*!*************************************!*\
- !*** ./src/widgets/button-back.jsx ***!
- \*************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ ButtonBack; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-
-class ButtonBack extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- onClick: e => {
- e.preventDefault();
- this.props.onBack();
- }
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "arrow_back"));
- }
-}
-
-/***/ }),
-
-/***/ "./src/widgets/call-incoming.jsx":
-/*!***************************************!*\
- !*** ./src/widgets/call-incoming.jsx ***!
- \***************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ CallIncoming; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _badge_list_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./badge-list.jsx */ "./src/widgets/badge-list.jsx");
-/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
-/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
-/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants.js */ "./src/constants.js");
-/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
-/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
-
-
-
-
-
-
-
-const RING_SOUND = new Audio('audio/call-in.m4a');
-class CallIncoming extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- this.state = {
- topic: null,
- fullName: undefined,
- avatar: null,
- trustedBadges: [],
- previousMetaDesc: undefined
- };
- this.resetDesc = this.resetDesc.bind(this);
- this.onMetaDesc = this.onMetaDesc.bind(this);
- this.handleRejectCall = this.handleRejectCall.bind(this);
- this.handleAcceptCall = this.handleAcceptCall.bind(this);
- this.ringTimer = null;
- }
- componentDidMount() {
- const topic = this.props.tinode.getTopic(this.props.topic);
- if (!topic) {
- return;
- }
- this.resetDesc(topic);
- if (this.props.callState == _constants_js__WEBPACK_IMPORTED_MODULE_4__.CALL_STATE_INCOMING_RECEIVED) {
- RING_SOUND.play().catch(_ => {});
- this.ringTimer = setInterval(_ => {
- RING_SOUND.play().catch(_ => {});
- }, 2000);
- this.props.onRinging(this.props.topic, this.props.seq);
- }
- }
- componentDidUpdate(props) {
- const topic = this.props.tinode.getTopic(props.topic);
- if (!topic) {
- return;
- }
- if (this.onMetaDesc != topic.onMetaDesc) {
- this.previousMetaDesc = topic.onMetaDesc;
- topic.onMetaDesc = this.onMetaDesc;
- }
- if (this.state.topic != props.topic) {
- this.setState({
- topic: props.topic
- });
- this.resetDesc(topic, props);
- }
- }
- componentWillUnmount() {
- if (this.ringTimer != null) {
- clearInterval(this.ringTimer);
- RING_SOUND.pause();
- }
- const topic = this.props.tinode.getTopic(this.props.topic);
- if (!topic) {
- return;
- }
- this.setState({
- topic: null
- });
- topic.onMetaDesc = this.previousMetaDesc;
- }
- resetDesc(topic) {
- const badges = [];
- if (topic.trusted) {
- for (const [key, val] of Object.entries(topic.trusted)) {
- if (val) {
- badges.push(key);
- }
- }
- }
- this.setState({
- fullName: (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_6__.truncateString)(topic.public ? topic.public.fn : undefined, _config_js__WEBPACK_IMPORTED_MODULE_3__.MAX_TITLE_LENGTH),
- avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__.makeImageUrl)(topic.public ? topic.public.photo : null),
- trustedBadges: badges
- });
- }
- onMetaDesc(desc) {
- const topic = this.props.tinode.getTopic(this.props.topic);
- if (!topic) {
- return;
- }
- this.resetDesc(topic);
- if (this.previousMetaDesc && this.previousMetaDesc != this.onMetaDesc) {
- this.previousMetaDesc(desc);
- }
- }
- handleAcceptCall() {
- this.props.onAcceptCall(this.props.topic);
- }
- handleRejectCall() {
- this.props.onReject(this.props.topic, this.props.seq);
- this.props.onClose();
- }
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "alert-container"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "incoming-call"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "caller-card incoming pulse"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "avatar-box"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
- authorizeURL: this.props.tinode.authorizeURL,
- avatar: this.state.avatar || true,
- topic: this.props.topic,
- title: this.state.fullName
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "caller-name"
- }, (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_6__.truncateString)(this.state.fullName, _config_js__WEBPACK_IMPORTED_MODULE_3__.MAX_PEER_TITLE_LENGTH), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_badge_list_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
- short: true,
- trustedBadges: this.state.trustedBadges
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- id: "controls"
- }, this.props.callState == _constants_js__WEBPACK_IMPORTED_MODULE_4__.CALL_STATE_INCOMING_RECEIVED ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
- className: "danger",
- onClick: this.handleRejectCall
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "call_end")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
- className: "positive",
- onClick: this.handleAcceptCall
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "call"))) : null)));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/call-message.jsx":
-/*!**************************************!*\
- !*** ./src/widgets/call-message.jsx ***!
- \**************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ CallMessage; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
-
-
-
-class CallMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);
- const successClass = 'material-icons medium ' + (isCallDropped ? 'red' : 'green');
- const callIcon = this.props.incoming ? isCallDropped ? 'call_missed' : 'call_received' : isCallDropped ? 'call_missed_outgoing' : 'call_made';
- const title = this.props.incoming ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "calls_incoming",
- defaultMessage: [{
- "type": 0,
- "value": "Incoming call"
- }]
- }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "calls_outgoing",
- defaultMessage: [{
- "type": 0,
- "value": "Outgoing call"
- }]
- });
- let duration;
- if (isCallDropped) {
- switch (this.props.callState) {
- case 'busy':
- duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "call_busy",
- defaultMessage: [{
- "type": 0,
- "value": "busy"
- }]
- });
- break;
- case 'declined':
- duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "call_declined",
- defaultMessage: [{
- "type": 0,
- "value": "declined"
- }]
- });
- break;
- case 'missed':
- duration = this.props.incoming ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "call_missed",
- defaultMessage: [{
- "type": 0,
- "value": "missed"
- }]
- }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "call_cancelled",
- defaultMessage: [{
- "type": 0,
- "value": "cancelled"
- }]
- });
- break;
- default:
- duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "call_disconnected",
- defaultMessage: [{
- "type": 0,
- "value": "disconnected"
- }]
- });
- break;
- }
- } else {
- duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.props.duration / 1000));
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "call-message"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons big gray"
- }, "call")), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "flex-column narrow"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, title), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "duration"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: successClass
- }, callIcon), " ", duration)));
- }
-}
-
-/***/ }),
-
-/***/ "./src/widgets/call-status.jsx":
-/*!*************************************!*\
- !*** ./src/widgets/call-status.jsx ***!
- \*************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ CallStatus; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
-
-
-
-class CallStatus extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);
- const icon2 = this.props.incoming ? isCallDropped ? 'call_missed' : 'call_received' : isCallDropped ? 'call_missed_outgoing' : 'call_made';
- let duration;
- if (isCallDropped) {
- switch (this.props.callState) {
- case 'busy':
- duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "call_busy",
- defaultMessage: [{
- "type": 0,
- "value": "busy"
- }]
- });
- break;
- case 'declined':
- duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "call_declined",
- defaultMessage: [{
- "type": 0,
- "value": "declined"
- }]
- });
- break;
- case 'missed':
- duration = this.props.incoming ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "call_missed",
- defaultMessage: [{
- "type": 0,
- "value": "missed"
- }]
- }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "call_cancelled",
- defaultMessage: [{
- "type": 0,
- "value": "cancelled"
- }]
- });
- break;
- default:
- duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "call_disconnected",
- defaultMessage: [{
- "type": 0,
- "value": "disconnected"
- }]
- });
- break;
- }
- } else if (['accepted', 'started'].includes(this.props.callState) && !this.props.duration) {
- duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "call_in_progress",
- defaultMessage: [{
- "type": 0,
- "value": "in progress"
- }]
- });
- } else {
- duration = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__.secondsToTime)(this.props.duration / 1000));
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "composed-material"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "call"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons second"
- }, icon2)), " ", duration);
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/checkbox.jsx":
-/*!**********************************!*\
- !*** ./src/widgets/checkbox.jsx ***!
- \**********************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ CheckBox; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-
-class CheckBox extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.handleChange = this.handleChange.bind(this);
- }
- handleChange() {
- this.props.onChange(this.props.name, !this.props.checked);
- }
- render() {
- let classList = ['material-icons'];
- let iconName;
- if (Array.isArray(this.props.className)) {
- classList.push(...this.props.className);
- } else if (this.props.className) {
- classList.push(this.props.className);
- }
- if (this.props.onChange) {
- if (this.props.checked) {
- classList.push('blue', 'clickable');
- iconName = 'check_box';
- } else if (this.props.checked === false) {
- classList.push('blue', 'clickable');
- iconName = 'check_box_outline_blank';
- } else {
- classList.push('lt-blue');
- iconName = 'indeterminate_check_box';
- }
- } else {
- if (this.props.checked) {
- iconName = 'check_box';
- } else {
- iconName = 'check_box_outline_blank';
- }
- }
- let attrs = {
- className: classList.join(' '),
- id: this.props.id
- };
- if (this.props.onChange) {
- attrs.onClick = this.handleChange;
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement('i', attrs, iconName);
- }
-}
-
-/***/ }),
-
-/***/ "./src/widgets/chip-input.jsx":
-/*!************************************!*\
- !*** ./src/widgets/chip-input.jsx ***!
- \************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ ChipInput; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _chip_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chip.jsx */ "./src/widgets/chip.jsx");
-/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
-
-
-
-class ChipInput extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- this.state = ChipInput.deriveStateFromProps(props);
- this.state.input = '';
- this.state.focused = false;
- this.handleTextInput = this.handleTextInput.bind(this);
- this.removeChipAt = this.removeChipAt.bind(this);
- this.handleChipCancel = this.handleChipCancel.bind(this);
- this.handleFocusGained = this.handleFocusGained.bind(this);
- this.handleFocusLost = this.handleFocusLost.bind(this);
- this.handleKeyDown = this.handleKeyDown.bind(this);
- }
- static deriveStateFromProps(props) {
- return {
- sortedChips: ChipInput.sortChips(props.chips, props.staticMembers),
- chipIndex: ChipInput.indexChips(props.chips)
- };
- }
- componentDidUpdate(prevProps, prevState) {
- if (prevProps.chips != this.props.chips || prevProps.staticMembers != this.props.staticMembers || prevProps.prompt != this.props.prompt) {
- this.setState(ChipInput.deriveStateFromProps(this.props));
- }
- if (!prevState || this.props.chips.length > prevState.sortedChips.length) {
- this.setState({
- input: ''
- });
- }
- }
- static indexChips(chips) {
- const index = {};
- let count = 0;
- chips.forEach(item => {
- index[item.user] = count;
- count++;
- });
- return index;
- }
- static sortChips(chips, keep) {
- const required = [];
- const normal = [];
- chips.forEach(item => {
- if (keep && keep.includes(item.user)) {
- required.push(item);
- } else {
- normal.push(item);
- }
- });
- return required.concat(normal);
- }
- handleTextInput(e) {
- this.setState({
- input: e.target.value
- });
- if (this.props.filterFunc) {
- this.props.filterFunc(e.target.value);
- }
- }
- removeChipAt(idx) {
- const removed = this.state.sortedChips[idx];
- this.props.onChipRemoved(removed.user, this.state.chipIndex[removed.user]);
- }
- handleChipCancel(item, idx) {
- this.removeChipAt(idx);
- }
- handleFocusGained() {
- this.setState({
- focused: true
- });
- }
- handleFocusLost() {
- this.setState({
- focused: false
- });
- if (this.props.onFocusLost) {
- this.props.onFocusLost(this.state.input);
- }
- }
- handleKeyDown(e) {
- if (e.key === 'Backspace') {
- if (this.state.input.length == 0 && this.state.sortedChips.length > 0) {
- const at = this.state.sortedChips.length - 1;
- if (this.state.sortedChips[at].user !== this.props.staticMembers) {
- this.removeChipAt(at);
- }
- }
- } else if (e.key === 'Enter') {
- if (this.props.onEnter) {
- this.props.onEnter(this.state.input);
- }
- } else if (e.key === 'Escape') {
- if (this.props.onCancel) {
- this.props.onCancel();
- }
- }
- }
- render() {
- const chips = [];
- let count = 0;
- const staticMembers = this.props.staticMembers || [];
- this.state.sortedChips.forEach(item => {
- chips.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_chip_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
- tinode: this.props.tinode,
- onCancel: this.handleChipCancel,
- avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_2__.makeImageUrl)(item.public ? item.public.photo : null),
- title: item.public ? item.public.fn : undefined,
- noAvatar: this.props.avatarDisabled,
- topic: item.user,
- required: staticMembers.includes(item.user),
- invalid: item.invalid,
- index: count,
- key: item.user
- }));
- count++;
- });
- const className = "chip-input" + (this.state.focused ? ' focused' : '');
- const autoFocus = !(this.props.tabIndex > 0);
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: className
- }, chips, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "text",
- placeholder: this.props.prompt,
- onChange: this.handleTextInput,
- onFocus: this.handleFocusGained,
- onBlur: this.handleFocusLost,
- onKeyDown: this.handleKeyDown,
- value: this.state.input,
- tabIndex: this.props.tabIndex,
- autoFocus: autoFocus
- }));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/chip.jsx":
-/*!******************************!*\
- !*** ./src/widgets/chip.jsx ***!
- \******************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ Chip; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
-
-
-class Chip extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.handleCancel = this.handleCancel.bind(this);
- }
- handleCancel(e) {
- e.preventDefault();
- this.props.onCancel(this.props.topic, this.props.index);
- }
- render() {
- const title = this.props.title || this.props.topic;
- const className = this.props.invalid ? 'chip invalid' : 'chip';
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: className
- }, this.props.noAvatar ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
- className: "spacer"
- }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "avatar-box"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
- authorizeURL: this.props.tinode.authorizeURL,
- avatar: this.props.avatar || true,
- topic: this.props.topic,
- title: this.props.title
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, title), this.props.onCancel && !this.props.required ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- onClick: this.handleCancel
- }, "\xD7") : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
- className: "spacer"
- }));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/contact-action.jsx":
-/*!****************************************!*\
- !*** ./src/widgets/contact-action.jsx ***!
- \****************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-
-
-class ContactAction extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.handleClick = this.handleClick.bind(this);
- }
- handleClick(e) {
- e.preventDefault();
- e.stopPropagation();
- this.props.onAction(this.props.action);
- }
- render() {
- const {
- formatMessage
- } = this.props.intl;
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
- onClick: this.handleClick,
- className: "action"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "action-text"
- }, formatMessage(this.props.title, this.props.values)));
- }
-}
-;
-/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ContactAction));
-
-/***/ }),
-
-/***/ "./src/widgets/contact-badges.jsx":
-/*!****************************************!*\
- !*** ./src/widgets/contact-badges.jsx ***!
- \****************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ ContactBadges; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-
-const icon_mapping = {
- 'muted': 'notifications_off',
- 'banned': 'block',
- 'staff': 'verified_user'
-};
-class ContactBadges extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- let badges = null;
- if (this.props.badges && this.props.badges.length > 0) {
- badges = [];
- this.props.badges.forEach(b => {
- const color = b.color ? ' ' + b.color : '';
- if (b.icon) {
- badges.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: 'material-icons as-badge' + color,
- key: b.key || b.icon
- }, icon_mapping[b.icon] || b.icon));
- } else {
- badges.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
- className: 'badge' + color,
- key: b.key || b.name
- }, b.name));
- }
- });
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, badges);
- }
- return null;
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/contact-list.jsx":
-/*!**************************************!*\
- !*** ./src/widgets/contact-list.jsx ***!
- \**************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _contact_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact.jsx */ "./src/widgets/contact.jsx");
-/* harmony import */ var _contact_action_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./contact-action.jsx */ "./src/widgets/contact-action.jsx");
-/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
-/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
-
-
-
-
-
-
-
-const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
- badge_you: {
- id: "badge_you",
- defaultMessage: [{
- "type": 0,
- "value": "you"
- }]
- },
- badge_owner: {
- id: "badge_owner",
- defaultMessage: [{
- "type": 0,
- "value": "owner"
- }]
- }
-});
-class ContactList extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- const {
- formatMessage
- } = this.props.intl;
- const showCheckmark = Array.isArray(this.props.topicSelected);
- const contactNodes = [];
- let contactsCount = 0;
- if (this.props.showSelfTopic) {
- const selected = showCheckmark ? this.props.topicSelected.indexOf('slf') > -1 : this.props.topicSelected === 'slf';
- contactNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
- tinode: this.props.tinode,
- avatar: true,
- showMode: this.props.showMode,
- selected: selected,
- showCheckmark: showCheckmark,
- onSelected: this.props.onTopicSelected,
- showContextMenu: this.props.showContextMenu,
- index: contactNodes.length,
- item: "slf",
- key: "slf"
- }));
- contactsCount++;
- }
- if (this.props.contacts && this.props.contacts.length > 0) {
- const usedKeys = {};
- this.props.contacts.forEach(c => {
- if (c.action) {
- contactNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_action_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
- title: c.title,
- action: c.action,
- values: c.values,
- key: c.action,
- onAction: this.props.onAction
- }));
- } else {
- const key = this.props.showMode ? c.user : c.topic || c.user;
- if (usedKeys[key]) {
- return;
- }
- usedKeys[key] = true;
- if (this.props.filterFunc && this.props.filter) {
- const filterOn = [key];
- if (c.private && c.private.comment) {
- filterOn.push(('' + c.private.comment).toLowerCase());
- }
- if (c.public && c.public.fn) {
- filterOn.push(('' + c.public.fn).toLowerCase());
- }
- if (!this.props.filterFunc(this.props.filter, filterOn)) {
- return;
- }
- }
- const isChannel = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isChannelTopicName(key);
- const isGroup = !isChannel && tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isGroupTopicName(key);
- const selected = showCheckmark ? this.props.topicSelected.indexOf(key) > -1 : this.props.topicSelected === key;
- const badges = [];
- if (this.props.showMode) {
- if (key == this.props.myUserId) {
- badges.push({
- name: formatMessage(messages.badge_you),
- color: 'green'
- });
- }
- if (c.acs && c.acs.isOwner()) {
- badges.push({
- name: formatMessage(messages.badge_owner),
- color: 'blue'
- });
- }
- }
- const comment = Array.isArray(c.private) ? c.private.join(',') : c.private ? c.private.comment : null;
- let preview;
- let forwarded;
- let previewIsResponse;
- let deliveryStatus;
- if (!this.props.showMode && c.latestMessage) {
- const msg = c.latestMessage();
- if (msg) {
- forwarded = msg.head ? msg.head.forwarded : null;
- deliveryStatus = msg._status || c.msgStatus(msg, true);
- previewIsResponse = msg.from != this.props.myUserId;
- if (msg.content) {
- preview = typeof msg.content == 'string' ? msg.content.substr(0, _config_js__WEBPACK_IMPORTED_MODULE_6__.MESSAGE_PREVIEW_LENGTH) : tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.preview(msg.content, _config_js__WEBPACK_IMPORTED_MODULE_6__.MESSAGE_PREVIEW_LENGTH);
- }
- }
- }
- contactNodes.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
- tinode: this.props.tinode,
- title: c.public ? c.public.fn : null,
- avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_5__.makeImageUrl)(c.public ? c.public.photo : null),
- comment: comment,
- preview: preview,
- previewIsResponse: previewIsResponse,
- forwarded: forwarded,
- received: deliveryStatus,
- unread: this.props.showUnread ? c.unread : 0,
- now: c.online && this.props.connected,
- acs: c.acs,
- showMode: this.props.showMode,
- badges: badges,
- showCheckmark: showCheckmark,
- selected: selected,
- pinned: c.pinned,
- showOnline: this.props.showOnline && !isChannel,
- isChannel: isChannel,
- isGroup: isGroup,
- showContextMenu: this.props.showContextMenu,
- isVerified: c.trusted && c.trusted.verified,
- isStaff: c.trusted && c.trusted.staff,
- isDangerous: c.trusted && c.trusted.danger,
- deleted: c._deleted,
- onSelected: this.props.onTopicSelected,
- item: key,
- index: contactNodes.length,
- key: key
- }));
- contactsCount++;
- }
- }, this);
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: this.props.noScroll ? null : "scrollable-panel"
- }, contactsCount == 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "center-medium-text",
- style: {
- whiteSpace: 'pre-line'
- }
- }, this.props.emptyListMessage) : null, contactNodes.length > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
- className: "contact-box"
- }, contactNodes) : null);
- }
-}
-;
-/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ContactList));
-
-/***/ }),
-
-/***/ "./src/widgets/contact.jsx":
-/*!*********************************!*\
- !*** ./src/widgets/contact.jsx ***!
- \*********************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact-badges.jsx */ "./src/widgets/contact-badges.jsx");
-/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
-/* harmony import */ var _unread_badge_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./unread-badge.jsx */ "./src/widgets/unread-badge.jsx");
-/* harmony import */ var _lib_formatters_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/formatters.js */ "./src/lib/formatters.js");
-/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
-/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
-
-
-
-
-
-
-
-
-
-
-const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
- self_topic_name: {
- id: "self_topic_name",
- defaultMessage: [{
- "type": 0,
- "value": "Saved messages"
- }]
- },
- self_topic_comment: {
- id: "self_topic_comment",
- defaultMessage: [{
- "type": 0,
- "value": "Notes, messages, links, files saved for posterity"
- }]
- }
-});
-class Contact extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- this.handleClick = this.handleClick.bind(this);
- this.handleContextClick = this.handleContextClick.bind(this);
- }
- handleClick(e) {
- e.preventDefault();
- e.stopPropagation();
- if (this.props.onSelected) {
- this.props.onSelected(this.props.item, this.props.index);
- }
- }
- handleContextClick(e) {
- e.preventDefault();
- e.stopPropagation();
- this.props.showContextMenu({
- topicName: this.props.item,
- topicTitle: this.props.title,
- y: e.pageY,
- x: e.pageX
- });
- }
- render() {
- let title = this.props.title;
- const self = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isSelfTopicName(this.props.item);
- if (!title) {
- if (self) {
- title = this.props.intl.formatMessage(messages.self_topic_name);
- } else {
- title = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "unnamed_topic",
- defaultMessage: [{
- "type": 0,
- "value": "Unnamed"
- }]
- }));
- }
- } else if (title.length > 30) {
- title = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__.truncateString)(title, 30);
- }
- const online = this.props.now ? 'online' : 'offline';
- const avatar = this.props.avatar ? this.props.avatar : true;
- const badges = this.props.badges ? this.props.badges.slice() : [];
- const icon_badges = [];
- if (this.props.isVerified) {
- icon_badges.push({
- icon: 'verified',
- color: 'verified-color'
- });
- }
- if (this.props.isStaff) {
- icon_badges.push({
- icon: 'staff',
- color: 'staff-color'
- });
- }
- if (this.props.isDangerous) {
- icon_badges.push({
- icon: 'dangerous',
- color: 'danger-color'
- });
- }
- if (this.props.acs) {
- if (this.props.showMode) {
- badges.push({
- name: this.props.acs.getMode(),
- key: 'mode'
- });
- }
- if (this.props.acs.isMuted()) {
- icon_badges.push({
- icon: 'muted'
- });
- }
- if (!this.props.acs.isJoiner()) {
- icon_badges.push({
- icon: 'banned'
- });
- }
- }
- let preview;
- if (typeof this.props.preview == 'string') {
- preview = this.props.preview;
- } else if (tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.isValid(this.props.preview)) {
- preview = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Drafty.format(this.props.preview, _lib_formatters_js__WEBPACK_IMPORTED_MODULE_6__.previewFormatter, {
- formatMessage: this.props.intl.formatMessage,
- previewIsResponse: this.props.previewIsResponse
- }));
- } else if (this.props.preview) {
- preview = react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons gray"
- }, "warning_amber"), " ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "gray"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "invalid_content",
- defaultMessage: [{
- "type": 0,
- "value": "invalid content"
- }]
- })));
- }
- const icon = (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_7__.deliveryMarker)(this.props.received);
- const marker = icon ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: 'material-icons small space-right' + (icon.color ? ' ' + icon.color : '')
- }, icon.name) : null;
- const titleClass = 'contact-title' + (this.props.deleted ? ' deleted' : '');
- const comment = preview || this.props.comment || (self ? this.props.intl.formatMessage(messages.self_topic_comment) : '\u00A0');
- const bgColor = this.props.showCheckmark ? null : this.props.selected ? 'selected' : this.props.pinned ? 'tpinned' : null;
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
- className: bgColor,
- onClick: this.handleClick
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "avatar-box"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
- authorizeURL: this.props.tinode.authorizeURL,
- avatar: avatar,
- title: this.props.title,
- topic: this.props.item,
- deleted: this.props.deleted
- }), this.props.deleted ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "deleted material-icons"
- }, "cancel") : !self && this.props.showOnline ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
- className: online
- }) : this.props.showCheckmark && this.props.selected ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "checkmark material-icons"
- }, "check_circle") : null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "text-box"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
- className: titleClass
- }, title), this.props.isGroup ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons as-badge"
- }, "group") : null, this.props.isChannel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons as-badge"
- }, "podcasts") : null, !self ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
- badges: icon_badges
- }) : null, !this.props.deleted ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_unread_badge_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
- count: this.props.unread
- }) : null), this.props.showMode ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
- badges: badges
- })) : this.props.small ? null : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "contact-comment"
- }, marker, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, comment))), this.props.showContextMenu ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
- className: "menuTrigger"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- onClick: this.handleContextClick
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "expand_more"))) : null);
- }
-}
-;
-/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(Contact));
-
-/***/ }),
-
-/***/ "./src/widgets/context-menu.jsx":
-/*!**************************************!*\
- !*** ./src/widgets/context-menu.jsx ***!
- \**************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
-
-
-
-const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
- info: {
- id: "menu_item_info",
- defaultMessage: [{
- "type": 0,
- "value": "Info"
- }]
- },
- clear_messages: {
- id: "menu_item_clear_messages",
- defaultMessage: [{
- "type": 0,
- "value": "Clear messages"
- }]
- },
- clear_for_all: {
- id: "menu_item_clear_messages_for_all",
- defaultMessage: [{
- "type": 0,
- "value": "Clear for All"
- }]
- },
- delete: {
- id: "menu_item_delete",
- defaultMessage: [{
- "type": 0,
- "value": "Delete"
- }]
- },
- delete_for_all: {
- id: "menu_item_delete_for_all",
- defaultMessage: [{
- "type": 0,
- "value": "Delete for All"
- }]
- },
- send_retry: {
- id: "menu_item_send_retry",
- defaultMessage: [{
- "type": 0,
- "value": "Retry"
- }]
- },
- mute: {
- id: "menu_item_mute",
- defaultMessage: [{
- "type": 0,
- "value": "Mute"
- }]
- },
- unmute: {
- id: "menu_item_unmute",
- defaultMessage: [{
- "type": 0,
- "value": "Unmute"
- }]
- },
- reply: {
- id: "menu_item_reply",
- defaultMessage: [{
- "type": 0,
- "value": "Reply"
- }]
- },
- forward: {
- id: "menu_item_forward",
- defaultMessage: [{
- "type": 0,
- "value": "Forward"
- }]
- },
- edit: {
- id: "menu_item_edit",
- defaultMessage: [{
- "type": 0,
- "value": "Edit"
- }]
- },
- topic_delete: {
- id: "menu_item_delete_topic",
- defaultMessage: [{
- "type": 0,
- "value": "Delete"
- }]
- },
- topic_delete_warning: {
- id: "topic_delete_warning",
- defaultMessage: [{
- "type": 0,
- "value": "Are you sure you want to delete this conversation? It cannot be undone."
- }]
- },
- delete_messages_warning: {
- id: "delete_messages_warning",
- defaultMessage: [{
- "type": 0,
- "value": "Are you sure you want to delete all messages for everyone? It cannot be undone."
- }]
- },
- unblock: {
- id: "menu_item_unblock",
- defaultMessage: [{
- "type": 0,
- "value": "Unblock"
- }]
- },
- block: {
- id: "menu_item_block",
- defaultMessage: [{
- "type": 0,
- "value": "Block"
- }]
- },
- topic_block_warning: {
- id: "topic_block_warning",
- defaultMessage: [{
- "type": 0,
- "value": "Are you sure you want to block this conversation?"
- }]
- },
- member_delete: {
- id: "menu_item_member_delete",
- defaultMessage: [{
- "type": 0,
- "value": "Remove"
- }]
- },
- archive: {
- id: "menu_item_archive_topic",
- defaultMessage: [{
- "type": 0,
- "value": "Archive"
- }]
- },
- unarchive: {
- id: "menu_item_restore_topic",
- defaultMessage: [{
- "type": 0,
- "value": "Restore"
- }]
- },
- edit_permissions: {
- id: "menu_item_edit_permissions",
- defaultMessage: [{
- "type": 0,
- "value": "Edit permissions"
- }]
- },
- clear_messages_warning: {
- id: "clear_messages_warning",
- defaultMessage: [{
- "type": 0,
- "value": "Are you sure you want to clear all messages? It cannot be undone."
- }]
- },
- pin_message: {
- id: "pin_message",
- defaultMessage: [{
- "type": 0,
- "value": "Pin"
- }]
- },
- unpin_message: {
- id: "unpin_message",
- defaultMessage: [{
- "type": 0,
- "value": "Unpin"
- }]
- },
- pin_chat: {
- id: "pin_chat",
- defaultMessage: [{
- "type": 0,
- "value": "Pin"
- }]
- },
- unpin_chat: {
- id: "unpin_chat",
- defaultMessage: [{
- "type": 0,
- "value": "Unpin"
- }]
- }
-});
-class ContextMenu extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- this.selfRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
- const {
- formatMessage
- } = props.intl;
- this.handlePageClick = this.handlePageClick.bind(this);
- this.handleEscapeKey = this.handleEscapeKey.bind(this);
- this.handleClick = this.handleClick.bind(this);
- this.MenuItems = {
- 'topic_info': {
- id: 'topic_info',
- title: formatMessage(messages.info),
- handler: null
- },
- 'messages_clear': {
- id: 'messages_clear',
- title: formatMessage(messages.clear_messages),
- handler: (params, errorHandler) => {
- return props.onShowAlert(params.topicTitle || formatMessage(messages.clear_messages), formatMessage(messages.clear_messages_warning), _ => {
- this.deleteMessages(true, false, params, errorHandler);
- }, null, true, null);
- }
- },
- 'messages_clear_hard': {
- id: 'messages_clear_hard',
- title: formatMessage(messages.clear_for_all),
- handler: (params, errorHandler) => {
- return props.onShowAlert(params.topicTitle || formatMessage(messages.clear_for_all), formatMessage(messages.delete_messages_warning), _ => {
- return this.deleteMessages(true, true, params, errorHandler);
- }, null, true, null);
- }
- },
- 'message_delete': {
- id: 'message_delete',
- title: formatMessage(messages.delete),
- handler: (params, errorHandler) => {
- return this.deleteMessages(false, false, params, errorHandler);
- }
- },
- 'message_delete_hard': {
- id: 'message_delete_hard',
- title: formatMessage(messages.delete_for_all),
- handler: (params, errorHandler) => {
- return this.deleteMessages(false, true, params, errorHandler);
- }
- },
- 'message_delete_generic': {
- id: 'message_delete_generic',
- title: formatMessage(messages.delete),
- handler: (params, errorHandler) => {
- return this.deleteMessages(false, true, params, errorHandler);
- }
- },
- 'menu_item_send_retry': {
- id: 'menu_item_send_retry',
- title: formatMessage(messages.send_retry),
- handler: (params, errorHandler) => {
- return this.retryMessage(params, errorHandler);
- }
- },
- 'menu_item_reply': {
- id: 'menu_item_reply',
- title: formatMessage(messages.reply),
- handler: (params, errorHandler) => {
- return this.replyToMessage(params, errorHandler);
- }
- },
- 'menu_item_forward': {
- id: 'menu_item_forward',
- title: formatMessage(messages.forward),
- handler: _ => {}
- },
- 'menu_item_edit': {
- id: 'menu_item_edit',
- title: formatMessage(messages.edit),
- handler: (params, errorHandler) => {
- return this.editMessage(params, errorHandler);
- }
- },
- 'menu_item_pin': {
- id: 'menu_item_pin',
- title: formatMessage(messages.pin_message),
- handler: (params, errorHandler) => {
- return this.pinMessage(true, params, errorHandler);
- }
- },
- 'menu_item_unpin': {
- id: 'menu_item_unpin',
- title: formatMessage(messages.unpin_message),
- handler: (params, errorHandler) => {
- return this.pinMessage(false, params, errorHandler);
- }
- },
- 'topic_unmute': {
- id: 'topic_unmute',
- title: formatMessage(messages.unmute),
- handler: this.topicPermissionSetter.bind(this, '+P')
- },
- 'topic_mute': {
- id: 'topic_mute',
- title: formatMessage(messages.mute),
- handler: this.topicPermissionSetter.bind(this, '-P')
- },
- 'topic_unblock': {
- id: 'topic_unblock',
- title: formatMessage(messages.unblock),
- handler: this.topicPermissionSetter.bind(this, '+JP')
- },
- 'topic_block': {
- id: 'topic_block',
- title: formatMessage(messages.block),
- handler: (params, errorHandler) => {
- return props.onShowAlert(params.topicTitle || formatMessage(messages.block), formatMessage(messages.topic_block_warning), _ => this.topicPermissionSetter('-JP', params, errorHandler).then(ctrl => {
- this.props.onTopicRemoved(params.topicName);
- return ctrl;
- }), null, true, null);
- }
- },
- 'topic_delete': {
- id: 'topic_delete',
- title: formatMessage(messages.topic_delete),
- handler: (params, errorHandler) => {
- return props.onShowAlert(params.topicTitle || formatMessage(messages.topic_delete), formatMessage(messages.topic_delete_warning), _ => {
- const topic = this.props.tinode.getTopic(params.topicName);
- if (!topic) {
- console.warn("Topic not found: ", params.topicName);
- return;
- }
- return topic.delTopic(true).catch(err => {
- if (errorHandler) {
- errorHandler(err.message, 'err');
- }
- });
- }, null, true, null);
- }
- },
- 'topic_archive': {
- id: 'topic_archive',
- title: formatMessage(messages.archive),
- handler: (params, errorHandler) => {
- const topic = this.props.tinode.getTopic(params.topicName);
- if (!topic) {
- console.warn("Topic not found: ", params.topicName);
- return;
- }
- return topic.archive(true).catch(err => {
- if (errorHandler) {
- errorHandler(err.message, 'err');
- }
- });
- }
- },
- 'topic_restore': {
- id: 'topic_restore',
- title: formatMessage(messages.unarchive),
- handler: (params, errorHandler) => {
- const topic = this.props.tinode.getTopic(params.topicName);
- if (!topic) {
- console.warn("Topic not found: ", params.topicName);
- return;
- }
- return topic.archive(false).catch(err => {
- if (errorHandler) {
- errorHandler(err.message, 'err');
- }
- });
- }
- },
- 'topic_pin': {
- id: 'topic_pin',
- title: formatMessage(messages.pin_chat),
- handler: (params, errorHandler) => {
- const me = this.props.tinode.getMeTopic();
- if (!me) {
- console.warn("'me' topic not found");
- return;
- }
- return me.pinTopic(params.topicName, true).catch(err => {
- if (errorHandler) {
- errorHandler(err.message, 'err');
- }
- });
- }
- },
- 'topic_unpin': {
- id: 'topic_unpin',
- title: formatMessage(messages.unpin_chat),
- handler: (params, errorHandler) => {
- const me = this.props.tinode.getMeTopic();
- if (!me) {
- console.warn("'me' topic not found");
- return;
- }
- return me.pinTopic(params.topicName, false).catch(err => {
- if (errorHandler) {
- errorHandler(err.message, 'err');
- }
- });
- }
- },
- 'permissions': {
- id: 'permissions',
- title: formatMessage(messages.edit_permissions),
- handler: null
- },
- 'member_delete': {
- id: 'member_delete',
- title: formatMessage(messages.member_delete),
- handler: (params, errorHandler) => {
- const topic = this.props.tinode.getTopic(params.topicName);
- if (!topic || !params.user) {
- console.warn("Topic or user not found: '" + params.topicName + "', '" + params.user + "'");
- return;
- }
- return topic.delSubscription(params.user).catch(err => {
- if (errorHandler) {
- errorHandler(err.message, 'err');
- }
- });
- }
- },
- 'member_mute': {
- id: 'member_mute',
- title: formatMessage(messages.mute),
- handler: this.topicPermissionSetter.bind(this, '-P')
- },
- 'member_unmute': {
- id: 'member_unmute',
- title: formatMessage(messages.unmute),
- handler: this.topicPermissionSetter.bind(this, '+P')
- },
- 'member_block': {
- id: 'member_block',
- title: formatMessage(messages.block),
- handler: this.topicPermissionSetter.bind(this, '-JP')
- },
- 'member_unblock': {
- id: 'member_unblock',
- title: formatMessage(messages.unblock),
- handler: this.topicPermissionSetter.bind(this, '+JP')
- }
- };
- }
- componentDidMount() {
- document.addEventListener('mousedown', this.handlePageClick, false);
- document.addEventListener('keyup', this.handleEscapeKey, false);
- }
- componentWillUnmount() {
- document.removeEventListener('mousedown', this.handlePageClick, false);
- document.removeEventListener('keyup', this.handleEscapeKey, false);
- }
- handlePageClick(e) {
- if (this.selfRef.current.contains(e.target)) {
- return;
- }
- e.preventDefault();
- e.stopPropagation();
- this.props.hide();
- }
- handleEscapeKey(e) {
- if (e.keyCode === 27) {
- this.props.hide();
- }
- }
- handleClick(e) {
- e.preventDefault();
- e.stopPropagation();
- this.props.hide();
- let item = this.props.items[e.currentTarget.dataset.id];
- if (typeof item == 'string') {
- item = this.MenuItems[item];
- }
- if (!item) {
- console.error("Invalid menu item ID", e.currentTarget.dataset.id);
- } else {
- this.props.onAction(item.id, item.handler(this.props.params, this.props.onError), this.props.params);
- }
- }
- deleteMessages(all, hard, params, errorHandler) {
- const topic = this.props.tinode.getTopic(params.topicName);
- if (!topic) {
- console.warn("Topic not found: ", params.topicName);
- return;
- }
- if (!all && topic.cancelSend(params.seq)) {
- return;
- }
- const promise = all ? topic.delMessagesAll(hard) : params.replace > 0 ? topic.delMessagesEdits(params.replace, hard) : topic.delMessagesList([params.seq], hard);
- return promise.catch(err => {
- if (errorHandler) {
- errorHandler(err.message, 'err');
- }
- });
- }
- retryMessage(params, errorHandler) {
- const topic = this.props.tinode.getTopic(params.topicName);
- if (!topic || !topic.flushMessage(params.seq)) {
- return;
- }
- const msg = topic.createMessage(params.content, false);
- return topic.publishDraft(msg).catch(err => {
- if (errorHandler) {
- errorHandler(err.message, 'err');
- }
- });
- }
- pinMessage(pin, params, errorHandler) {
- const topic = this.props.tinode.getTopic(params.topicName);
- if (!topic) {
- return;
- }
- topic.pinMessage(params.seq, pin).catch(err => errorHandler ? errorHandler(err.message, 'err') : null);
- }
- topicPermissionSetter(mode, params, errorHandler) {
- const topic = this.props.tinode.getTopic(params.topicName);
- if (!topic) {
- console.warn("Topic not found", params.topicName);
- return;
- }
- let result = topic.updateMode(params.user, mode);
- if (errorHandler) {
- result = result.catch(err => errorHandler(err.message, 'err'));
- }
- return result;
- }
- replyToMessage(params, errorHandler) {
- params.pickReply(params.seq, params.content, params.userFrom, params.userName, errorHandler);
- }
- editMessage(params, errorHandler) {
- params.editMessage(params.replace || params.seq, params.content, errorHandler);
- }
- render() {
- const menu = [];
- let count = 0;
- this.props.items.forEach(item => {
- if (typeof item == 'string') {
- item = this.MenuItems[item];
- }
- if (item && item.title) {
- const className = item.disabled ? 'disabled' : undefined;
- menu.push(item.title == '-' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
- className: "separator",
- key: count
- }) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
- className: className,
- onClick: this.handleClick,
- "data-id": count,
- key: count
- }, item.title));
- }
- count++;
- });
- const hSize = 12 * _config_js__WEBPACK_IMPORTED_MODULE_2__.REM_SIZE;
- const vSize = _config_js__WEBPACK_IMPORTED_MODULE_2__.REM_SIZE * (0.7 + menu.length * 2.5);
- const left = this.props.bounds.right - this.props.clickAt.x < hSize ? this.props.clickAt.x - this.props.bounds.left - hSize : this.props.clickAt.x - this.props.bounds.left;
- const top = this.props.bounds.bottom - this.props.clickAt.y < vSize ? this.props.clickAt.y - this.props.bounds.top - vSize : this.props.clickAt.y - this.props.bounds.top;
- const position = {
- left: left + 'px',
- top: top + 'px'
- };
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
- className: "menu",
- style: position,
- ref: this.selfRef
- }, menu);
- }
-}
-/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(ContextMenu));
-
-/***/ }),
-
-/***/ "./src/widgets/cropper.jsx":
-/*!*********************************!*\
- !*** ./src/widgets/cropper.jsx ***!
- \*********************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ Cropper; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-
-const DEFAULT_MAX_ZOOM = 8;
-class Cropper extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- this.state = {
- panX: 0,
- panY: 0,
- originX: 0,
- originY: 0,
- zoom: 1,
- minZoom: 0.001,
- maxZoom: DEFAULT_MAX_ZOOM
- };
- this.overlay = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
- this.cutout = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
- this.preview = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
- this.boundingBox = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
- this.imageWidth = 0;
- this.imageHeight = 0;
- this.mouseX = 0;
- this.mouseY = 0;
- this.prevDistance = 0;
- this.cutoutRect = {};
- this.bBoxRect = {};
- this.originX = 0;
- this.originY = 0;
- this.initScaling = this.initScaling.bind(this);
- this.onZoom = this.onZoom.bind(this);
- this.handleZoom = this.handleZoom.bind(this);
- this.mouseDown = this.mouseDown.bind(this);
- this.mouseUp = this.mouseUp.bind(this);
- this.mouseMove = this.mouseMove.bind(this);
- this.mouseTouch = this.mouseTouch.bind(this);
- this.positionAll = this.positionAll.bind(this);
- this.translate = this.translate.bind(this);
- }
- componentDidMount() {
- this.overlay.current.addEventListener('mousedown', this.mouseDown, {
- passive: true
- });
- this.overlay.current.addEventListener('touchstart', this.mouseDown, {
- passive: true
- });
- this.bBoxRect = this.boundingBox.current.getBoundingClientRect();
- this.originX = this.bBoxRect.width / 2;
- this.originY = this.bBoxRect.height / 2;
- this.cutoutRect = this.cutout.current.getBoundingClientRect();
- }
- componentWillUnmount() {
- if (this.overlay.current) {
- this.overlay.current.removeEventListener('mousedown', this.mouseDown);
- this.overlay.current.removeEventListener('touchstart', this.mouseDown);
- }
- }
- positionAll(panX, panY, zoom) {
- this.setState({
- panX: panX,
- panY: panY,
- zoom: zoom,
- originX: this.originX - panX,
- originY: this.originY - panY
- });
- const left = (this.originX - panX) * zoom - this.originX;
- const top = (this.originY - panY) * zoom - this.originY;
- this.props.onChange((left + this.cutoutRect.left - this.bBoxRect.left) / zoom, (top + this.cutoutRect.top - this.bBoxRect.top) / zoom, this.cutoutRect.width / zoom, this.cutoutRect.height / zoom, zoom);
- }
- static checkBound(currPan, img, cutout, delta) {
- let nextDiff = Math.min(0, cutout[0] - img[0] - delta, img[1] - cutout[1] + delta);
- if (nextDiff == 0) {
- currPan += delta;
- } else if (Math.min(0, cutout[0] - img[0], img[1] - cutout[1]) < nextDiff) {
- currPan += delta;
- }
- return currPan;
- }
- initScaling() {
- const imgRect = this.preview.current.getBoundingClientRect();
- this.imageWidth = imgRect.width;
- this.imageHeight = imgRect.height;
- const minZoom = Math.max(this.cutoutRect.width / imgRect.width, this.cutoutRect.height / imgRect.height);
- this.setState({
- minZoom: minZoom,
- maxZoom: minZoom * DEFAULT_MAX_ZOOM
- });
- const zoom = Math.max(this.bBoxRect.width / imgRect.width, this.bBoxRect.height / imgRect.height);
- const panX = this.cutoutRect.left - this.bBoxRect.left - (imgRect.width - this.cutoutRect.width) / 2;
- const panY = this.cutoutRect.top - this.bBoxRect.top - (imgRect.height - this.cutoutRect.height) / 2;
- this.positionAll(panX, panY, zoom);
- }
- onZoom(e) {
- this.handleZoom(e.target.value);
- }
- handleZoom(zoom) {
- let panX = this.state.panX;
- let panY = this.state.panY;
- const imgLeft = this.originX - (this.originX - panX) * zoom;
- const imgRight = imgLeft + this.imageWidth * zoom;
- const imgTop = this.originY - (this.originY - panY) * zoom;
- const imgBottom = imgTop + this.imageHeight * zoom;
- const coLeft = this.cutoutRect.left - this.bBoxRect.left;
- const coRight = coLeft + this.cutoutRect.width;
- const coTop = this.cutoutRect.top - this.bBoxRect.top;
- const coBottom = coTop + this.cutoutRect.height;
- if (coLeft < imgLeft) {
- panX -= (imgLeft - coLeft) / zoom;
- } else if (coRight > imgRight) {
- panX += (coRight - imgRight) / zoom;
- }
- if (coTop < imgTop) {
- panY -= (imgTop - coTop) / zoom;
- } else if (coBottom > imgBottom) {
- panY += (coBottom - imgBottom) / zoom;
- }
- this.positionAll(panX, panY, zoom);
- }
- mouseDown(e) {
- if (e.touches) {
- this.mouseX = e.touches[0].pageX;
- this.mouseY = e.touches[0].pageY;
- } else {
- this.mouseX = e.pageX;
- this.mouseY = e.pageY;
- }
- window.addEventListener('mousemove', this.mouseMove, {
- passive: false
- });
- window.addEventListener('touchmove', this.mouseTouch, {
- passive: false
- });
- window.addEventListener('mouseup', this.mouseUp, {
- passive: true
- });
- window.addEventListener('touchend', this.mouseUp, {
- passive: true
- });
- document.body.style['userSelect'] = 'none';
- }
- translate(pageX, pageY) {
- const dX = (pageX - this.mouseX) / this.state.zoom;
- const dY = (pageY - this.mouseY) / this.state.zoom;
- this.mouseX = pageX;
- this.mouseY = pageY;
- const imgRect = this.preview.current.getBoundingClientRect();
- const panX = Cropper.checkBound(this.state.panX, [imgRect.left, imgRect.right], [this.cutoutRect.left, this.cutoutRect.right], dX);
- const panY = Cropper.checkBound(this.state.panY, [imgRect.top, imgRect.bottom], [this.cutoutRect.top, this.cutoutRect.bottom], dY);
- this.positionAll(panX, panY, this.state.zoom);
- }
- mouseMove(e) {
- e.preventDefault();
- this.translate(e.pageX, e.pageY);
- }
- mouseTouch(e) {
- e.preventDefault();
- if (e.touches.length == 1) {
- this.translate(e.touches[0].pageX, e.touches[0].pageY);
- return;
- }
- const [touch0, touch1] = e.touches;
- const distance = Math.sqrt((touch0.pageX - touch1.pageX) * (touch0.pageX - touch1.pageX) + (touch0.pageY - touch1.pageY) * (touch0.pageY - touch1.pageY));
- if (!this.prevDistance) {
- this.prevDistance = distance / this.state.zoom;
- }
- let scale = distance / this.prevDistance;
- this.handleZoom(Math.max(this.minZoom, Math.min(this.maxZoom, scale)));
- }
- mouseUp(e) {
- window.removeEventListener('mousemove', this.mouseMove);
- window.removeEventListener('touchmove', this.mouseTouch);
- window.removeEventListener('mouseup', this.mouseUp);
- window.removeEventListener('touchend', this.mouseUp);
- document.body.style['userSelect'] = '';
- this.positionAll(this.state.panX, this.state.panY, this.state.zoom);
- }
- render() {
- const t3d = `translate3d(${this.state.panX}px, ${this.state.panY}px, 0) scale(${this.state.zoom})`;
- const orig = `${this.state.originX}px ${this.state.originY}px`;
- const overlay = {
- top: `${this.originY - this.state.originY * this.state.zoom}px`,
- left: `${this.originX - this.state.originX * this.state.zoom}px`,
- width: `${this.imageWidth * this.state.zoom}px`,
- height: `${this.imageHeight * this.state.zoom}px`
- };
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "cropper"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "bounding-box",
- ref: this.boundingBox
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("img", {
- src: this.props.source,
- className: "preview",
- alt: "",
- style: {
- transform: t3d,
- transformOrigin: orig
- },
- ref: this.preview,
- onLoad: this.initScaling
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "cutout circle",
- ref: this.cutout
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "overlay",
- style: overlay,
- ref: this.overlay
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "zoom-wrapper"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "range",
- className: "zoomer",
- step: "0.001",
- min: this.state.minZoom,
- max: this.state.maxZoom,
- value: this.state.zoom,
- onChange: this.onZoom
- })));
- }
-}
-
-/***/ }),
-
-/***/ "./src/widgets/error-panel.jsx":
-/*!*************************************!*\
- !*** ./src/widgets/error-panel.jsx ***!
- \*************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ ErrorPanel; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _menu_cancel_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./menu-cancel.jsx */ "./src/widgets/menu-cancel.jsx");
-
-
-class ErrorPanel extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.state = {
- show: false
- };
- this.hide = this.hide.bind(this);
- }
- componentDidUpdate(prevProps) {
- if (prevProps.level !== this.props.level) {
- this.setState({
- show: !!this.props.level
- });
- }
- }
- hide() {
- this.setState({
- show: false
- });
- if (this.props.onClearError) {
- this.props.onClearError();
- }
- }
- render() {
- const icons = {
- err: 'error',
- warn: 'warning',
- info: 'info'
- };
- const level = icons[this.props.level] || '';
- const className = 'info-box ' + level;
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: className
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "icon"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, level)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, this.props.text, this.props.action ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, "\xA0 ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- style: {
- whiteSpace: 'nowrap'
- },
- onClick: e => {
- e.preventDefault();
- this.props.action();
- }
- }, this.props.actionText)) : null), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "cancel"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_menu_cancel_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
- onCancel: this.hide
- })));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/file-progress.jsx":
-/*!***************************************!*\
- !*** ./src/widgets/file-progress.jsx ***!
- \***************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ FileProgress; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-
-
-class FileProgress extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "uploader"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
- style: {
- width: this.props.progress * 100 + "%"
- }
- })), this.props.progress < 0.999 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- onClick: e => {
- e.preventDefault();
- this.props.onCancel();
- }
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "close"), " ", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "action_cancel",
- defaultMessage: [{
- "type": 0,
- "value": "cancel"
- }]
- })) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "upload_finishing",
- defaultMessage: [{
- "type": 0,
- "value": "finishing..."
- }]
- }));
- }
-}
-
-/***/ }),
-
-/***/ "./src/widgets/forward-dialog.jsx":
-/*!****************************************!*\
- !*** ./src/widgets/forward-dialog.jsx ***!
- \****************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ ForwardDialog; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact-list.jsx */ "./src/widgets/contact-list.jsx");
-/* harmony import */ var _search_contacts_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./search-contacts.jsx */ "./src/widgets/search-contacts.jsx");
-
-
-
-
-
-class ForwardDialog extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- this.state = {
- query: null
- };
- this.handleEscapeKey = this.handleEscapeKey.bind(this);
- this.handleClose = this.handleClose.bind(this);
- this.handleSearchContacts = this.handleSearchContacts.bind(this);
- this.handleContactSelected = this.handleContactSelected.bind(this);
- }
- componentDidMount() {
- this.props.onInitFind();
- }
- handleEscapeKey(e) {
- if (e.keyCode === 27) {
- this.props.hide(false);
- }
- }
- handleClose(e) {
- e.preventDefault();
- this.props.hide(false);
- }
- handleSearchContacts(query) {
- this.setState({
- query: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isNullValue(query) ? null : query
- });
- this.props.onSearchContacts(query);
- }
- handleContactSelected(uid) {
- this.props.onTopicSelected(uid);
- this.props.hide(true);
- }
- render() {
- let contacts = this.state.query != null ? this.props.searchResults : this.props.contacts;
- contacts = contacts.filter(c => {
- return c.name != this.props.topicSelected && c.acs.isJoiner() && c.acs.isWriter();
- });
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "alert-container"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "forward-dialog"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "title with-control"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "forward_to",
- defaultMessage: [{
- "type": 0,
- "value": "Forward to"
- }],
- desription: "Title of the contact selector dialog when forwarding a message"
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- onClick: this.handleClose
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "close")))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "forward_to_search_placeholder",
- defaultMessage: [{
- "type": 0,
- "value": "Search contacts"
- }]
- }, search_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_search_contacts_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
- placeholder: search_placeholder,
- onSearchContacts: this.handleSearchContacts
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "search_no_results",
- defaultMessage: [{
- "type": 0,
- "value": "Search returned no results"
- }]
- }, not_found_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_list_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
- tinode: this.props.tinode,
- contacts: contacts,
- myUserId: this.props.myUserId,
- emptyListMessage: not_found_placeholder,
- showOnline: false,
- showUnread: false,
- showContextMenu: false,
- onTopicSelected: this.handleContactSelected
- }))));
- }
-}
-
-/***/ }),
-
-/***/ "./src/widgets/host-selector.jsx":
-/*!***************************************!*\
- !*** ./src/widgets/host-selector.jsx ***!
- \***************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ HostSelector; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
-
-
-class HostSelector extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.state = {
- hostName: props.serverAddress,
- changed: false
- };
- this.handleHostNameChange = this.handleHostNameChange.bind(this);
- this.handleEditingFinished = this.handleEditingFinished.bind(this);
- this.handleKeyDown = this.handleKeyDown.bind(this);
- }
- handleHostNameChange(e) {
- this.setState({
- hostName: e.target.value,
- changed: true
- });
- }
- handleEditingFinished() {
- if (this.state.changed) {
- this.setState({
- changed: false
- });
- this.props.onServerAddressChange(this.state.hostName.trim());
- }
- }
- handleKeyDown(e) {
- if (e.key == 'Enter') {
- this.handleEditingFinished();
- }
- }
- render() {
- const hostOptions = [];
- for (let key in _config_js__WEBPACK_IMPORTED_MODULE_1__.KNOWN_HOSTS) {
- let item = _config_js__WEBPACK_IMPORTED_MODULE_1__.KNOWN_HOSTS[key];
- hostOptions.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("option", {
- key: item,
- value: item
- }));
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "search",
- id: "host-name",
- placeholder: this.props.hostName,
- list: "known-hosts",
- className: "quoted",
- value: this.state.hostName,
- onChange: this.handleHostNameChange,
- onBlur: this.handleEditingFinished,
- onKeyDown: this.handleKeyDown,
- required: true
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("datalist", {
- id: "known-hosts"
- }, hostOptions));
- }
-}
-
-/***/ }),
-
-/***/ "./src/widgets/in-place-edit.jsx":
-/*!***************************************!*\
- !*** ./src/widgets/in-place-edit.jsx ***!
- \***************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ InPlaceEdit; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _visible_password_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./visible-password.jsx */ "./src/widgets/visible-password.jsx");
-
-
-class InPlaceEdit extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- this.selfRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
- this.state = {
- active: props.active,
- initialValue: props.value || '',
- value: props.value || '',
- valid: true
- };
- this.handeTextChange = this.handeTextChange.bind(this);
- this.handleKeyDown = this.handleKeyDown.bind(this);
- this.handleStartEditing = this.handleStartEditing.bind(this);
- this.handleEditingFinished = this.handleEditingFinished.bind(this);
- this.handlePasswordFinished = this.handlePasswordFinished.bind(this);
- }
- componentDidUpdate(prevProps, prevState) {
- const newValue = this.props.value || '';
- if (prevState.initialValue != newValue && !prevState.active) {
- this.setState({
- initialValue: newValue,
- value: newValue
- });
- }
- }
- handeTextChange(e) {
- this.setState({
- value: e.target.value || ''
- });
- if (this.props.validator) {
- Promise.resolve(this.props.validator(e.target.value)).then(valid => {
- this.setState({
- valid: valid
- });
- }).catch(err => {
- if (err) {
- this.setState({
- valid: false
- });
- }
- });
- }
- }
- handleKeyDown(e) {
- if (e.keyCode === 27) {
- this.setState({
- value: this.props.value,
- active: false
- });
- } else if (e.keyCode === 13) {
- this.handleEditingFinished(e);
- }
- }
- handleStartEditing() {
- if (!this.props.readOnly) {
- this.setState({
- active: true
- }, _ => {
- if (this.selfRef.current) {
- this.selfRef.current.focus();
- }
- });
- }
- }
- handleEditingFinished(event) {
- const value = this.state.value.trim();
- if (this.props.required && (!event.target.checkValidity() || !value)) {
- this.setState({
- value: this.props.value,
- active: false
- });
- return;
- }
- this.setState({
- active: false
- });
- if ((value || this.props.value) && value !== this.props.value && this.state.valid) {
- this.props.onFinished(value);
- }
- }
- handlePasswordFinished(value) {
- this.setState({
- active: false
- });
- if (value && value !== this.props.value) {
- this.props.onFinished(value);
- }
- }
- render() {
- if (!this.state.active) {
- let spanText = this.props.type == 'password' ? '••••••••' : this.state.value;
- let spanClass = 'in-place-edit' + (this.props.readOnly ? ' disabled' : '');
- if (!spanText) {
- spanText = this.props.placeholder;
- spanClass += ' placeholder';
- }
- if (!this.props.multiline || this.props.multiline == 1) {
- spanClass += ' short';
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
- className: spanClass,
- onClick: this.handleStartEditing
- }, this.props.iconLeft && react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons light-gray"
- }, this.props.iconLeft), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, spanText), this.props.iconRight && react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons light-gray"
- }, this.props.iconRight));
- }
- let element;
- const attr = {};
- if (this.props.type == 'password') {
- element = _visible_password_jsx__WEBPACK_IMPORTED_MODULE_1__["default"];
- attr.onFinished = this.handlePasswordFinished;
- } else {
- if (this.props.multiline > 1) {
- element = 'textarea';
- attr.rows = this.props.multiline;
- attr.className = 'in-place-edit';
- } else {
- element = 'input';
- attr.type = this.props.type || 'text';
- attr.className = 'in-place-edit' + (this.props.iconLeft ? ' with-icon-left' : this.props.iconRight ? ' with-icon-right' : '');
- if (this.props.maxLength) {
- attr.maxLength = this.props.maxLength;
- }
- }
- attr.value = this.state.value;
- attr.className += this.state.valid ? '' : ' invalid';
- attr.ref = this.selfRef;
- attr.onChange = this.handeTextChange;
- attr.onKeyDown = this.handleKeyDown;
- attr.onBlur = this.handleEditingFinished;
- }
- attr.placeholder = this.props.placeholder;
- attr.required = this.props.required ? 'required' : '';
- attr.autoComplete = this.props.autoComplete;
- attr.autoFocus = true;
- if (this.props.spellCheck !== undefined) {
- attr.spellCheck = this.props.spellCheck ? 'true' : 'false';
- }
- if (this.props.iconLeft || this.props.iconRight) {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, this.props.iconLeft && react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons light-gray"
- }, this.props.iconLeft), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(element, attr, null), this.props.iconRight && react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons light-gray"
- }, this.props.iconRight));
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(element, attr, null);
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/inline-video.jsx":
-/*!**************************************!*\
- !*** ./src/widgets/inline-video.jsx ***!
- \**************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ InlineVideo; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
-
-
-class InlineVideo extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.videoRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
- this.handleClick = this.handleClick.bind(this);
- }
- handleClick(e) {
- if (this.props.onClick) {
- this.props.onClick(e);
- }
- }
- render() {
- const duration = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_1__.secondsToTime)(this.props['data-duration'] / 1000);
- const className = 'inline-video' + (this.props.onClick ? ' image-clickable' : '');
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: className
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', this.props), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "play-control"
- }, this.props.onClick ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons white x-big"
- }, "play_arrow") : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("img", {
- src: "img/broken_video.png",
- style: {
- filter: 'invert(100%)'
- },
- width: "36",
- height: "36"
- })), duration ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "duration"
- }, duration) : null);
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/lazy-image.jsx":
-/*!************************************!*\
- !*** ./src/widgets/lazy-image.jsx ***!
- \************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ LazyImage; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-
-class LazyImage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.state = {
- src: this.props.isvideo ? 'img/blankvid.png' : 'img/blankimg.png',
- style: Object.assign({
- padding: '4px'
- }, this.props.style),
- className: this.props.className,
- alt: this.props.alt,
- onClick: this.props.onClick
- };
- }
- componentDidMount() {
- this.props.whenDone.promise.then(data => this.setState({
- src: data.src,
- style: {
- ...this.state.style,
- padding: 0
- }
- })).catch(_ => this.setState({
- src: this.props.isvideo ? 'img/broken_video.png' : 'img/broken_image.png'
- }));
- }
- componentWillUnmount() {
- this.props.whenDone.cancel();
- }
- componentDidUpdate(prevProps) {
- if (prevProps.whenDone != this.props.whenDone) {
- this.setState({
- src: this.props.isvideo ? 'img/blankvid.png' : 'img/blankimg.png',
- style: {
- ...this.state.style,
- padding: '4px'
- }
- });
- this.props.whenDone.promise.then(data => this.setState({
- src: data.src,
- style: {
- ...this.state.style,
- padding: 0
- }
- })).catch(_ => this.setState({
- src: this.props.isvideo ? 'img/broken_video.png' : 'img/broken_image.png'
- }));
- }
- }
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', this.state);
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/letter-tile.jsx":
-/*!*************************************!*\
- !*** ./src/widgets/letter-tile.jsx ***!
- \*************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ LetterTile; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
-/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
-/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
-
-
-
-
-
-class LetterTile extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- let avatar;
- if (this.props.avatar === true) {
- if (tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.isSelfTopicName(this.props.topic)) {
- avatar = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("img", {
- className: "avatar self",
- alt: "avatar",
- src: _config_js__WEBPACK_IMPORTED_MODULE_4__.SELF_AVATAR_URI
- });
- } else {
- const isGroup = tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.isGroupTopicName(this.props.topic);
- const iconColor = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_2__.idToColorClass)(this.props.topic, isGroup);
- if (this.props.topic && this.props.title && this.props.title.trim()) {
- const letter = this.props.title.trim().charAt(0);
- const className = 'lettertile ' + iconColor + (this.props.deleted ? ' disabled' : '');
- avatar = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: className
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, letter));
- } else {
- const className = 'material-icons ' + iconColor + (this.props.deleted ? ' disabled' : '');
- avatar = isGroup ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: className
- }, "group") : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: className
- }, "person");
- }
- }
- } else if (this.props.avatar) {
- const url = this.props.authorizeURL((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_3__.sanitizeUrlForMime)(this.props.avatar, 'image'));
- const className = 'avatar' + (this.props.deleted ? ' deleted' : '');
- avatar = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("img", {
- className: className,
- alt: "avatar",
- src: url,
- onError: e => {
- e.target.onerror = null;
- e.target.src = "img/broken_image.png";
- }
- });
- } else {
- avatar = null;
- }
- return avatar;
- }
-}
-
-/***/ }),
-
-/***/ "./src/widgets/load-spinner.jsx":
-/*!**************************************!*\
- !*** ./src/widgets/load-spinner.jsx ***!
- \**************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ LoadSpinner; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-
-class LoadSpinner extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- const className = 'load-spinner-box' + (this.props.large ? ' large' : '') + (this.props.clear ? ' clear' : '') + (this.props.centered ? ' centered' : '');
- return this.props.show ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: className
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "loader-spinner"
- })) : null;
- }
-}
-
-/***/ }),
-
-/***/ "./src/widgets/menu-cancel.jsx":
-/*!*************************************!*\
- !*** ./src/widgets/menu-cancel.jsx ***!
- \*************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ MenuCancel; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-
-class MenuCancel extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- onClick: e => {
- e.preventDefault();
- this.props.onCancel();
- }
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "close"));
- }
-}
-
-/***/ }),
-
-/***/ "./src/widgets/menu-contacts.jsx":
-/*!***************************************!*\
- !*** ./src/widgets/menu-contacts.jsx ***!
- \***************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ MenuContacts; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-
-class MenuContacts extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- onClick: e => {
- e.preventDefault();
- this.props.onNewTopic();
- }
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "chat")), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- onClick: e => {
- e.preventDefault();
- this.props.onSettings();
- }
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "settings")));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/menu-start.jsx":
-/*!************************************!*\
- !*** ./src/widgets/menu-start.jsx ***!
- \************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ MenuStart; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-
-class MenuStart extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- onClick: e => {
- e.preventDefault();
- this.props.onSignUp();
- }
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "person_add")), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- onClick: e => {
- e.preventDefault();
- this.props.onSettings();
- }
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "settings")));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/new-topic-by-id.jsx":
-/*!*****************************************!*\
- !*** ./src/widgets/new-topic-by-id.jsx ***!
- \*****************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var qrcodejs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! qrcodejs */ "qrcodejs");
-/* harmony import */ var qrcodejs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(qrcodejs__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config */ "./src/config.js");
-
-
-
-
-const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_2__.defineMessages)({
- invalid_id: {
- id: "error_invalid_id",
- defaultMessage: [{
- "type": 0,
- "value": "Invalid ID"
- }]
- }
-});
-class NewTopicById extends (react__WEBPACK_IMPORTED_MODULE_1___default().PureComponent) {
- constructor(props) {
- super(props);
- this.qrCodeRef = react__WEBPACK_IMPORTED_MODULE_1___default().createRef();
- this.state = {
- groupId: ''
- };
- this.handleChange = this.handleChange.bind(this);
- this.handleKeyPress = this.handleKeyPress.bind(this);
- this.handleSubmit = this.handleSubmit.bind(this);
- }
- componentDidMount() {
- new (qrcodejs__WEBPACK_IMPORTED_MODULE_0___default())(this.qrCodeRef.current, {
- text: this.props.myURI,
- width: _config__WEBPACK_IMPORTED_MODULE_3__.QRCODE_SIZE,
- height: _config__WEBPACK_IMPORTED_MODULE_3__.QRCODE_SIZE
- });
- }
- handleChange(e) {
- this.setState({
- groupId: e.target.value
- });
- }
- handleKeyPress(e) {
- if (e.key === 'Enter') {
- this.handleSubmit(e);
- }
- }
- handleSubmit(e) {
- e.preventDefault();
- if (this.state.groupId) {
- const name = this.state.groupId.trim();
- const prefix = name.substring(0, 3);
- if (name.length > 3 && ['usr', 'grp', 'chn'].includes(prefix)) {
- this.props.onSubmit(name);
- } else {
- this.props.onError(this.props.intl.formatMessage(messages.invalid_id), 'err');
- }
- }
- }
- render() {
- return react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", {
- className: "panel-form"
- }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__.FormattedMessage, {
- id: "group_user_id_prompt",
- defaultMessage: [{
- "type": 0,
- "value": "Group or User ID"
- }]
- }, prompt => react__WEBPACK_IMPORTED_MODULE_1___default().createElement("input", {
- type: "text",
- placeholder: prompt,
- value: this.state.groupId,
- onChange: this.handleChange,
- onKeyDown: this.handleKeyPress,
- required: true,
- autoFocus: true
- }))), react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", {
- className: "dialog-buttons"
- }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement("button", {
- className: "primary",
- onClick: this.handleSubmit
- }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__.FormattedMessage, {
- id: "button_subscribe",
- defaultMessage: [{
- "type": 0,
- "value": "Subscribe"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_1___default().createElement("br", null), react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", {
- className: "panel-form-column"
- }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement("label", {
- className: "small"
- }, react__WEBPACK_IMPORTED_MODULE_1___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_2__.FormattedMessage, {
- id: "label_scan_id",
- defaultMessage: [{
- "type": 0,
- "value": "Scan my ID:"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", {
- className: "qr-code",
- ref: this.qrCodeRef
- })));
- }
-}
-;
-/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_2__.injectIntl)(NewTopicById));
-
-/***/ }),
-
-/***/ "./src/widgets/new-topic-group.jsx":
-/*!*****************************************!*\
- !*** ./src/widgets/new-topic-group.jsx ***!
- \*****************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ NewTopicGroup; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./avatar-crop.jsx */ "./src/widgets/avatar-crop.jsx");
-/* harmony import */ var _avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./avatar-upload.jsx */ "./src/widgets/avatar-upload.jsx");
-/* harmony import */ var _checkbox_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./checkbox.jsx */ "./src/widgets/checkbox.jsx");
-/* harmony import */ var _tag_manager_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tag-manager.jsx */ "./src/widgets/tag-manager.jsx");
-/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
-/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
-/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
-
-
-
-
-
-
-
-
-
-class NewTopicGroup extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.fullName = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
- this.state = {
- fullName: '',
- private: '',
- description: '',
- imageUrl: null,
- tags: [],
- isChannel: false,
- newAvatar: null,
- newAvatarMime: null
- };
- this.handleFieldEdit = this.handleFieldEdit.bind(this);
- this.handleImageChanged = this.handleImageChanged.bind(this);
- this.handleAvatarCropped = this.handleAvatarCropped.bind(this);
- this.handleAvatarCropCancel = this.handleAvatarCropCancel.bind(this);
- this.uploadAvatar = this.uploadAvatar.bind(this);
- this.handleTagsChanged = this.handleTagsChanged.bind(this);
- this.handleChannelToggle = this.handleChannelToggle.bind(this);
- this.handleSubmit = this.handleSubmit.bind(this);
- }
- componentDidMount() {}
- handleFieldEdit(name, e) {
- this.setState({
- [name]: e.target.value || ''
- });
- }
- handleImageChanged(mime, img) {
- this.setState({
- newAvatar: img,
- newAvatarMime: mime
- });
- }
- handleAvatarCropped(mime, blob, width, height) {
- const url = blob ? URL.createObjectURL(blob) : null;
- this.setState({
- imageUrl: url,
- newAvatar: null,
- newAvatarMime: null
- });
- if (blob) {
- this.uploadAvatar(mime, blob, width, height);
- }
- }
- handleAvatarCropCancel() {
- this.setState({
- newAvatar: null,
- newAvatarMime: null
- });
- }
- uploadAvatar(mime, blob, width, height) {
- const readyToUpload = image => {
- let {
- mime,
- blob
- } = image;
- if (blob.size > _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_AVATAR_BYTES) {
- const uploader = this.props.tinode.getLargeFileHelper();
- uploader.upload(blob).then(url => this.setState({
- imageUrl: url
- })).catch(err => this.props.onError(err.message, 'err'));
- } else {
- (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_7__.blobToBase64)(blob).then(b64 => this.setState({
- imageUrl: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_7__.makeImageUrl)({
- data: b64.bits,
- type: mime
- })
- }));
- }
- };
- if (width > _config_js__WEBPACK_IMPORTED_MODULE_6__.AVATAR_SIZE || height > _config_js__WEBPACK_IMPORTED_MODULE_6__.AVATAR_SIZE || width != height) {
- (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_7__.imageScaled)(blob, _config_js__WEBPACK_IMPORTED_MODULE_6__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_6__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_EXTERN_ATTACHMENT_SIZE, true).then(scaled => readyToUpload(scaled)).catch(err => this.props.onError(err.message, 'err'));
- } else {
- readyToUpload({
- mime: mime,
- blob: blob,
- width: width,
- height: height
- });
- }
- }
- handleTagsChanged(tags) {
- this.setState({
- tags: tags
- });
- }
- handleChannelToggle() {
- this.setState({
- isChannel: !this.state.isChannel
- });
- }
- handleSubmit(e) {
- e.preventDefault();
- const fn = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__.truncateString)(this.state.fullName.trim(), _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_TITLE_LENGTH);
- const comment = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__.truncateString)(this.state.private.trim(), _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_TITLE_LENGTH);
- const description = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_8__.truncateString)(this.state.description.trim(), _config_js__WEBPACK_IMPORTED_MODULE_6__.MAX_TOPIC_DESCRIPTION_LENGTH);
- if (fn) {
- this.props.onSubmit(fn, description, this.state.imageUrl, comment, this.state.tags, this.state.isChannel);
- }
- }
- render() {
- if (this.state.newAvatar) {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
- avatar: this.state.newAvatar,
- mime: this.state.newAvatarMime,
- onSubmit: this.handleAvatarCropped,
- onCancel: this.handleAvatarCropCancel,
- onError: this.props.onError
- });
- }
- let submitClasses = 'primary';
- if (this.props.disabled) {
- submitClasses += ' disabled';
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", {
- className: "panel-form",
- onSubmit: this.handleSubmit
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-column"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("center", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
- tinode: this.props.tinode,
- avatar: this.state.imageUrl,
- onError: this.props.onError,
- onImageUpdated: this.handleImageChanged
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "group"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small",
- htmlFor: "new-topic-fn"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_topic_name",
- defaultMessage: [{
- "type": 0,
- "value": "Name"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "topic_name_editing_placeholder",
- defaultMessage: [{
- "type": 0,
- "value": "Freeform name of the group"
- }]
- }, placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "text",
- id: "new-topic-fn",
- placeholder: placeholder,
- ref: this.fullName,
- value: this.state.fullName,
- onChange: this.handleFieldEdit.bind(this, 'fullName'),
- autoFocus: true,
- required: true,
- tabIndex: 0
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "group"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small",
- htmlFor: "new-topic-priv"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_private",
- defaultMessage: [{
- "type": 0,
- "value": "Private comment"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "private_editing_placeholder",
- defaultMessage: [{
- "type": 0,
- "value": "Visible to you only"
- }]
- }, placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "text",
- id: "new-topic-priv",
- placeholder: placeholder,
- value: this.state.private,
- onChange: this.handleFieldEdit.bind(this, 'private'),
- tabIndex: 1
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "group"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small",
- htmlFor: "new-topic-desc"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_description",
- defaultMessage: [{
- "type": 0,
- "value": "Description"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "description_editing_placeholder",
- defaultMessage: [{
- "type": 0,
- "value": "Description (optional)"
- }]
- }, placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- type: "text",
- id: "new-topic-desc",
- placeholder: placeholder,
- value: this.state.description,
- onChange: this.handleFieldEdit.bind(this, 'description'),
- tabIndex: 2
- })))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_checkbox_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
- checked: this.state.isChannel,
- tabIndex: 3,
- onChange: this.handleChannelToggle
- }), "\xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- onClick: this.handleChannelToggle
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "channel_prompt",
- defaultMessage: [{
- "type": 0,
- "value": "This is a channel"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "title_tag_manager",
- defaultMessage: [{
- "type": 0,
- "value": "Tags (search & discovery)"
- }]
- }, title => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_tag_manager_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
- tinode: this.props.tinode,
- tags: this.state.tags,
- activated: true,
- onTagsChanged: this.handleTagsChanged,
- tabIndex: 4,
- title: title
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "dialog-buttons"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
- className: submitClasses
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "button_create",
- defaultMessage: [{
- "type": 0,
- "value": "Create"
- }]
- }))));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/search-contacts.jsx":
-/*!*****************************************!*\
- !*** ./src/widgets/search-contacts.jsx ***!
- \*****************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ SearchContacts; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_1__);
-
-
-class SearchContacts extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.state = {
- edited: false,
- search: this.props.initialQuery || ''
- };
- this.handleSearchChange = this.handleSearchChange.bind(this);
- this.handleSearch = this.handleSearch.bind(this);
- this.handleClear = this.handleClear.bind(this);
- this.handleKeyDown = this.handleKeyDown.bind(this);
- }
- componentWillUnmount() {
- if (this.state.edited) {
- this.setState({
- search: '',
- edited: false
- });
- this.props.onSearchContacts(tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.DEL_CHAR);
- }
- }
- handleSearchChange(e) {
- this.setState({
- search: e.target.value
- });
- }
- handleSearch(e) {
- e.preventDefault();
- const query = this.state.search.trim();
- this.setState({
- edited: query.length > 0
- });
- this.props.onSearchContacts(query.length > 0 ? query : tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.DEL_CHAR);
- }
- handleClear(e) {
- e.preventDefault();
- if (this.state.edited) {
- this.props.onSearchContacts(tinode_sdk__WEBPACK_IMPORTED_MODULE_1__.Tinode.DEL_CHAR);
- }
- this.setState({
- search: '',
- edited: false
- });
- }
- handleKeyDown(e) {
- if (e.key === 'Enter') {
- this.handleSearch(e);
- } else if (e.key === 'Escape') {
- e.stopPropagation();
- this.handleClear(e);
- }
- }
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons search"
- }, "search"), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- className: "search",
- type: "text",
- placeholder: this.props.placeholder,
- value: this.state.search,
- onChange: this.handleSearchChange,
- onKeyDown: this.handleKeyDown,
- required: true,
- autoFocus: true
- }), this.state.search ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- onClick: this.handleClear
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "highlight_off")) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "\xA0"))));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/side-navbar.jsx":
-/*!*************************************!*\
- !*** ./src/widgets/side-navbar.jsx ***!
- \*************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ SideNavbar; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
-/* harmony import */ var _button_back_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./button-back.jsx */ "./src/widgets/button-back.jsx");
-/* harmony import */ var _contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./contact-badges.jsx */ "./src/widgets/contact-badges.jsx");
-/* harmony import */ var _menu_contacts_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./menu-contacts.jsx */ "./src/widgets/menu-contacts.jsx");
-/* harmony import */ var _menu_start_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./menu-start.jsx */ "./src/widgets/menu-start.jsx");
-/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
-
-
-
-
-
-
-
-class SideNavbar extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- const icon_badges = [];
- if (this.props.trustedBadges) {
- this.props.trustedBadges.forEach(b => {
- icon_badges.push({
- icon: b,
- color: 'badge-inv'
- });
- });
- }
- let avatar = null;
- if (this.props.tinode) {
- avatar = this.props.tinode.authorizeURL((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_6__.sanitizeUrlForMime)(this.props.avatar, 'image'));
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- id: "side-caption-panel",
- className: "caption-panel"
- }, this.props.onCancel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_button_back_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
- onBack: this.props.onCancel
- }) : null, avatar ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- id: "self-avatar",
- className: "avatar-box"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
- authorizeURL: this.props.tinode.authorizeURL,
- avatar: avatar,
- topic: this.props.myUserId,
- title: this.props.title
- })) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- id: "sidepanel-title",
- className: "panel-title"
- }, this.props.title, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_contact_badges_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
- badges: icon_badges
- })), this.props.state === 'login' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_menu_start_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
- onSignUp: this.props.onSignUp,
- onSettings: this.props.onSettings
- }) : this.props.state === 'contacts' ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_menu_contacts_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
- onNewTopic: this.props.onNewTopic,
- onSettings: this.props.onSettings
- }) : null);
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/tag-manager.jsx":
-/*!*************************************!*\
- !*** ./src/widgets/tag-manager.jsx ***!
- \*************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ TagManager; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var _chip_input_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chip-input.jsx */ "./src/widgets/chip-input.jsx");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_3__);
-/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
-/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
-
-
-
-
-
-
-class TagManager extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- this.state = {
- tags: this.props.tags || [],
- alias: tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.tagByPrefix(this.props.tags, tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.TAG_ALIAS) || '',
- tagInput: '',
- activated: this.props.activated
- };
- this.handleTagInput = this.handleTagInput.bind(this);
- this.handleAddTag = this.handleAddTag.bind(this);
- this.handleRemoveTag = this.handleRemoveTag.bind(this);
- this.handleSubmit = this.handleSubmit.bind(this);
- this.handleCancel = this.handleCancel.bind(this);
- }
- static getDerivedStateFromProps(nextProps, prevState) {
- const tags = nextProps.tags || [];
- if (!(0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_5__.arrayEqual)(tags, prevState.tags) && !prevState.activated) {
- return {
- tags: tags || [],
- alias: tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.tagByPrefix(tags, tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.TAG_ALIAS) || ''
- };
- }
- return null;
- }
- handleTagInput(text) {
- this.setState({
- tagInput: text
- });
- if (text.length > 0) {
- const last = text[text.length - 1];
- if (text[0] == '"') {
- if (text.length > 1 && last == '"') {
- this.handleAddTag(text.substring(1, text.length - 1));
- }
- } else if (last == ',' || last == ' ' || last == ';' || last == '"') {
- this.handleAddTag(text.substring(0, text.length - 1).trim());
- }
- }
- }
- handleAddTag(tag) {
- const maxTagCount = this.props.tinode.getServerParam(tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.MAX_TAG_COUNT, _config_js__WEBPACK_IMPORTED_MODULE_4__.MAX_TAG_COUNT);
- if (tag.length > 0 && this.state.tags.length < maxTagCount) {
- const tags = this.state.tags.slice(0);
- tags.push(tag);
- this.setState({
- tags: tags,
- tagInput: ''
- });
- if (this.props.onTagsChanged) {
- this.props.onTagsChanged(tags);
- }
- return tags;
- }
- return this.state.tags;
- }
- handleRemoveTag(tag, index) {
- const tags = this.state.tags.slice(0);
- tags.splice(index, 1);
- this.setState({
- tags: tags
- });
- if (this.props.onTagsChanged) {
- this.props.onTagsChanged(tags);
- }
- }
- handleSubmit() {
- let tags = this.handleAddTag(this.state.tagInput.trim());
- tags = tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.setUniqueTag(tags, this.state.alias);
- this.props.onSubmit(tags);
- this.setState({
- activated: false,
- tags: this.props.tags || []
- });
- }
- handleCancel() {
- this.setState({
- activated: false,
- tagInput: '',
- tags: this.props.tags || []
- });
- if (this.props.onCancel) {
- this.props.onCancel();
- }
- }
- render() {
- const minTagLength = this.props.tinode.getServerParam(tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.MIN_TAG_LENGTH, _config_js__WEBPACK_IMPORTED_MODULE_4__.MIN_TAG_LENGTH);
- const maxTagLength = this.props.tinode.getServerParam(tinode_sdk__WEBPACK_IMPORTED_MODULE_3__.Tinode.MAX_TAG_LENGTH, _config_js__WEBPACK_IMPORTED_MODULE_4__.MAX_TAG_LENGTH);
- let tags = [];
- if (this.state.activated) {
- this.state.tags.forEach(tag => {
- if (tag != this.state.alias) {
- tags.push({
- user: tag,
- invalid: tag.length < minTagLength || tag.length > maxTagLength
- });
- }
- });
- } else {
- this.state.tags.forEach(tag => {
- if (tag != this.state.alias) {
- tags.push(react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
- className: "badge",
- key: tags.length
- }, tag));
- }
- });
- if (tags.length == 0) {
- tags = react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "tags_not_found",
- defaultMessage: [{
- "type": 0,
- "value": "No tags defined. Add some."
- }]
- }));
- }
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-column"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small"
- }, this.props.title)), this.state.activated ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "tags_editor_no_tags",
- defaultMessage: [{
- "type": 0,
- "value": "Add some tags"
- }]
- }, add_tags_prompt => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_chip_input_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
- tinode: this.props.tinode,
- chips: tags,
- avatarDisabled: true,
- prompt: add_tags_prompt,
- tabIndex: this.props.tabIndex,
- onEnter: this.handleAddTag,
- onFocusLost: this.handleAddTag,
- onCancel: this.handleCancel,
- onChipRemoved: this.handleRemoveTag,
- filterFunc: this.handleTagInput
- })), this.props.onSubmit || this.props.onCancel ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- id: "tag-manager-buttons",
- className: "dialog-buttons panel-form-row"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
- className: "outline",
- onClick: this.handleCancel
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "button_cancel",
- defaultMessage: [{
- "type": 0,
- "value": "Cancel"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
- className: "primary",
- onClick: this.handleSubmit
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "button_ok",
- defaultMessage: [{
- "type": 0,
- "value": "OK"
- }]
- }))) : null) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "quoted"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- href: "#",
- className: "flat-button",
- onClick: e => {
- e.preventDefault();
- this.setState({
- activated: true
- });
- }
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons"
- }, "edit"), " \xA0", react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "title_manage_tags",
- defaultMessage: [{
- "type": 0,
- "value": "Manage"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, tags)));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/the-card-mini.jsx":
-/*!***************************************!*\
- !*** ./src/widgets/the-card-mini.jsx ***!
- \***************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _letter_tile_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./letter-tile.jsx */ "./src/widgets/letter-tile.jsx");
-
-
-
-
-const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
- unknown_name: {
- id: "unknown_name",
- defaultMessage: [{
- "type": 0,
- "value": "Unknown"
- }]
- }
-});
-class TheCardMini extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.handleDownload = this.handleDownload.bind(this);
- this.handleMessage = this.handleMessage.bind(this);
- }
- handleDownload(e) {
- e.preventDefault();
- try {
- const vcard = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.exportVCard(this.props.content);
- const blob = new Blob([vcard], {
- type: 'text/vcard'
- });
- const url = URL.createObjectURL(blob);
- const a = document.createElement('a');
- a.style.display = 'none';
- a.href = url;
- a.download = (this.props.content.fn || 'contact') + '.vcf';
- document.body.appendChild(a);
- a.click();
- window.URL.revokeObjectURL(url);
- document.body.removeChild(a);
- } catch (err) {
- console.error("Failed to download vcard", err);
- if (this.props.onError) {
- this.props.onError("Failed to download vcard", 'err');
- }
- }
- }
- handleMessage(e) {}
- render() {
- const card = this.props.content;
- if (!card) {
- return null;
- }
- const uid = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getFirstTinodeID(card);
- const contacts = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getEmails(card).concat(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getPhones(card));
- const org = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getOrg(card);
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "contact-card"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "contact-body"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "avatar-box"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_letter_tile_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
- authorizeURL: this.props.authorizeURL,
- topic: uid || 'usr123XXX',
- avatar: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.TheCard.getPhotoUrl(card) || true,
- title: card.fn
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "name-box"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "name"
- }, card.fn || react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, messages.unknown_name)), org && react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "org"
- }, org))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "contact-actions"
- }, uid ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- className: "flat-button",
- "data-val": uid,
- onClick: this.props.onChatClick
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "chat_now",
- defaultMessage: [{
- "type": 0,
- "value": "Chat"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "divider"
- })) : contacts.length > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- className: "flat-button",
- "data-val": contacts.join(','),
- onClick: this.props.onFindClick
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "find_user",
- defaultMessage: [{
- "type": 0,
- "value": "Find"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "divider"
- })) : null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
- className: "flat-button",
- onClick: this.handleDownload
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "save_action",
- defaultMessage: [{
- "type": 0,
- "value": "Save"
- }]
- }))));
- }
-}
-;
-/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(TheCardMini));
-
-/***/ }),
-
-/***/ "./src/widgets/topic-desc-edit.jsx":
-/*!*****************************************!*\
- !*** ./src/widgets/topic-desc-edit.jsx ***!
- \*****************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-intl */ "react-intl");
-/* harmony import */ var react_intl__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_intl__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinode-sdk */ "tinode-sdk");
-/* harmony import */ var tinode_sdk__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(tinode_sdk__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var _avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./avatar-crop.jsx */ "./src/widgets/avatar-crop.jsx");
-/* harmony import */ var _avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./avatar-upload.jsx */ "./src/widgets/avatar-upload.jsx");
-/* harmony import */ var _in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./in-place-edit.jsx */ "./src/widgets/in-place-edit.jsx");
-/* harmony import */ var _tag_manager_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tag-manager.jsx */ "./src/widgets/tag-manager.jsx");
-/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../config.js */ "./src/config.js");
-/* harmony import */ var _lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../lib/blob-helpers.js */ "./src/lib/blob-helpers.js");
-/* harmony import */ var _lib_strformat_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../lib/strformat.js */ "./src/lib/strformat.js");
-/* harmony import */ var _lib_utils_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../lib/utils.js */ "./src/lib/utils.js");
-
-
-
-
-
-
-
-
-
-
-
-const messages = (0,react_intl__WEBPACK_IMPORTED_MODULE_1__.defineMessages)({
- alias_invalid: {
- id: "alias_invalid",
- defaultMessage: [{
- "type": 0,
- "value": "(invalid)"
- }]
- },
- alias_already_taken: {
- id: "alias_already_taken",
- defaultMessage: [{
- "type": 0,
- "value": "(already taken)"
- }]
- },
- self_topic_name: {
- id: "self_topic_name",
- defaultMessage: [{
- "type": 0,
- "value": "Saved messages"
- }]
- },
- self_topic_comment: {
- id: "self_topic_comment",
- defaultMessage: [{
- "type": 0,
- "value": "Notes, messages, links, files saved for posterity"
- }]
- }
-});
-const ALIAS_AVAILABILITY_CHECK_DELAY = 1000;
-class TopicDescEdit extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
- constructor(props) {
- super(props);
- const topic = this.props.tinode.getTopic(this.props.topic);
- const acs = topic.getAccessMode();
- const isSelf = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isSelfTopicName(this.props.topic);
- this.state = {
- isMe: tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isMeTopicName(this.props.topic),
- isSelf: isSelf,
- owner: acs && acs.isOwner(),
- fullName: topic.public ? topic.public.fn : isSelf ? this.props.intl.formatMessage(messages.self_topic_name) : null,
- private: topic.private ? topic.private.comment : null,
- description: topic.public ? topic.public.note : isSelf ? this.props.intl.formatMessage(messages.self_topic_comment) : null,
- avatar: (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.makeImageUrl)(topic.public ? topic.public.photo : null),
- tags: topic.tags() || [],
- newAvatar: null,
- newAvatarMime: null,
- aliasError: ''
- };
- this.previousOnTags = null;
- this.aliasCheckTimer = null;
- this.aliasCheckPromise = null;
- this.tnNewTags = this.tnNewTags.bind(this);
- this.handleFullNameUpdate = this.handleFullNameUpdate.bind(this);
- this.handleImageUpdated = this.handleImageUpdated.bind(this);
- this.handleAvatarCropped = this.handleAvatarCropped.bind(this);
- this.handleAvatarCropCancel = this.handleAvatarCropCancel.bind(this);
- this.uploadAvatar = this.uploadAvatar.bind(this);
- this.handlePrivateUpdate = this.handlePrivateUpdate.bind(this);
- this.handleAliasUpdate = this.handleAliasUpdate.bind(this);
- this.handleDescriptionUpdate = this.handleDescriptionUpdate.bind(this);
- this.handleTagsUpdated = this.handleTagsUpdated.bind(this);
- this.validateAlias = this.validateAlias.bind(this);
- this.cancelValidator = this.cancelValidator.bind(this);
- }
- componentDidMount() {
- const topic = this.props.tinode.getTopic(this.props.topic);
- this.previousOnTags = topic.onTagsUpdated;
- topic.onTagsUpdated = this.tnNewTags;
- }
- componentWillUnmount() {
- const topic = this.props.tinode.getTopic(this.props.topic);
- topic.onTagsUpdated = this.previousOnTags;
- this.cancelValidator();
- }
- tnNewTags(tags) {
- this.setState({
- tags: tags
- });
- }
- handleFullNameUpdate(fn) {
- fn = (0,_lib_strformat_js__WEBPACK_IMPORTED_MODULE_9__.truncateString)(fn.trim(), _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_TITLE_LENGTH);
- if (fn && this.state.fullName !== fn) {
- this.setState({
- fullName: fn
- });
- this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(fn, null));
- }
- }
- handlePrivateUpdate(comment) {
- comment = comment.trim().substring(0, _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_TITLE_LENGTH);
- if (this.state.private !== comment) {
- this.setState({
- private: comment
- });
- this.props.onUpdateTopicDesc(this.props.topic, null, comment || tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.DEL_CHAR);
- }
- }
- handleDescriptionUpdate(desc) {
- desc = desc.trim().substring(0, _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_TOPIC_DESCRIPTION_LENGTH);
- if (desc) {
- this.setState({
- description: desc
- });
- this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(null, null, null, desc));
- }
- }
- handleImageUpdated(mime, img) {
- this.setState({
- newAvatar: img,
- newAvatarMime: mime
- });
- if (!img) {
- this.setState({
- avatar: null
- });
- this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(null, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.DEL_CHAR));
- }
- }
- handleAvatarCropped(mime, blob, width, height) {
- const url = blob ? URL.createObjectURL(blob) : null;
- this.setState({
- avatar: url,
- newAvatar: null,
- newAvatarMime: null
- });
- if (blob) {
- this.uploadAvatar(mime, blob, width, height);
- }
- }
- uploadAvatar(mime, blob, width, height) {
- const readyToUpload = image => {
- let {
- mime,
- blob
- } = image;
- if (blob.size > _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_AVATAR_BYTES) {
- const uploader = this.props.tinode.getLargeFileHelper();
- uploader.upload(blob).then(url => this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(null, url))).catch(err => this.props.onError(err.message, 'err'));
- } else {
- (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.blobToBase64)(blob).then(b64 => {
- const du = (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.makeImageUrl)({
- data: b64.bits,
- type: mime
- });
- this.setState({
- source: du
- });
- this.props.onUpdateTopicDesc(this.props.topic, (0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.theCard)(null, du));
- });
- }
- };
- if (width > _config_js__WEBPACK_IMPORTED_MODULE_7__.AVATAR_SIZE || height > _config_js__WEBPACK_IMPORTED_MODULE_7__.AVATAR_SIZE || width != height) {
- (0,_lib_blob_helpers_js__WEBPACK_IMPORTED_MODULE_8__.imageScaled)(blob, _config_js__WEBPACK_IMPORTED_MODULE_7__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_7__.AVATAR_SIZE, _config_js__WEBPACK_IMPORTED_MODULE_7__.MAX_EXTERN_ATTACHMENT_SIZE, true).then(scaled => readyToUpload(scaled)).catch(err => this.props.onError(err.message, 'err'));
- } else {
- readyToUpload({
- mime: mime,
- blob: blob,
- width: width,
- height: height
- });
- }
- }
- handleAvatarCropCancel() {
- this.setState({
- newAvatar: null,
- newAvatarMime: null
- });
- }
- handleAliasUpdate(alias) {
- alias = (alias || '').trim();
- const tags = alias ? tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.setUniqueTag(this.state.tags, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_ALIAS + alias.toLowerCase()) : tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.clearTagPrefix(this.state.tags, tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_ALIAS);
- this.handleTagsUpdated(tags);
- }
- validateAlias(alias) {
- this.cancelValidator();
- alias = alias.trim();
- if (!alias) {
- this.setState({
- aliasError: ''
- });
- return true;
- }
- const valid = tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.isValidTagValue(alias);
- if (!valid) {
- this.setState({
- aliasError: this.props.intl.formatMessage(messages.alias_invalid)
- });
- return false;
- }
- this.setState({
- aliasError: ''
- });
- const fnd = this.props.tinode.getFndTopic();
- if (!fnd) {
- this.setState({
- aliasError: ''
- });
- return true;
- }
- this.aliasCheckPromise = {};
- const validationPromise = new Promise((resolve, reject) => {
- this.aliasCheckPromise.resolve = resolve;
- this.aliasCheckPromise.reject = reject;
- });
- this.aliasCheckTimer = setTimeout(_ => {
- this.aliasCheckTimer = null;
- fnd.checkTagUniqueness(`${tinode_sdk__WEBPACK_IMPORTED_MODULE_2__.Tinode.TAG_ALIAS}${alias}`, this.props.topic).then(ok => {
- this.aliasCheckPromise.resolve(ok);
- this.setState({
- aliasError: ok ? '' : this.props.intl.formatMessage(messages.alias_already_taken)
- });
- }).catch(err => {
- this.aliasCheckPromise.reject(err);
- this.setState({
- aliasError: err.message
- });
- });
- }, ALIAS_AVAILABILITY_CHECK_DELAY);
- return validationPromise;
- }
- cancelValidator() {
- if (this.aliasCheckTimer) {
- clearTimeout(this.aliasCheckTimer);
- this.aliasCheckTimer = null;
- this.aliasCheckPromise.reject(null);
- }
- }
- handleTagsUpdated(tags) {
- if ((0,_lib_utils_js__WEBPACK_IMPORTED_MODULE_10__.arrayEqual)(this.state.tags.slice(0), tags.slice(0))) {
- return;
- }
- this.props.onUpdateTags(tags);
- }
- render() {
- if (this.state.newAvatar) {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_avatar_crop_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
- avatar: this.state.newAvatar,
- mime: this.state.newAvatarMime,
- onSubmit: this.handleAvatarCropped,
- onCancel: this.handleAvatarCropCancel,
- onError: this.props.onError
- });
- }
- const editable = this.state.isMe || this.state.owner && !this.state.isSelf;
- let alias = this.state.tags && this.state.tags.find(t => t.startsWith('alias:'));
- if (alias) {
- alias = alias.substring(6);
- }
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "panel-form-column"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("center", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_avatar_upload_jsx__WEBPACK_IMPORTED_MODULE_4__["default"], {
- tinode: this.props.tinode,
- avatar: this.state.avatar,
- readOnly: !editable,
- uid: this.props.topic,
- title: this.state.fullName,
- onImageUpdated: this.handleImageUpdated,
- onError: this.props.onError
- })), this.state.isMe ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "group"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_your_name",
- defaultMessage: [{
- "type": 0,
- "value": "Your name"
- }]
- })), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "full_name_prompt",
- defaultMessage: [{
- "type": 0,
- "value": "Full name, e.g. John Doe"
- }]
- }, full_name_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
- placeholder: full_name_placeholder,
- value: this.state.fullName,
- required: true,
- onFinished: this.handleFullNameUpdate
- })))) : react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "group"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_topic_name",
- defaultMessage: [{
- "type": 0,
- "value": "Name"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "topic_name_editing_placeholder",
- defaultMessage: [{
- "type": 0,
- "value": "Freeform name of the group"
- }]
- }, group_name_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
- placeholder: group_name_placeholder,
- readOnly: !editable,
- value: this.state.fullName,
- required: true,
- maxLength: 32,
- onFinished: this.handleFullNameUpdate
- })))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "group"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_private",
- defaultMessage: [{
- "type": 0,
- "value": "Private comment"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "private_editing_placeholder",
- defaultMessage: [{
- "type": 0,
- "value": "Visible to you only"
- }]
- }, private_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
- placeholder: private_placeholder,
- value: this.state.private,
- onFinished: this.handlePrivateUpdate
- }))))), editable || alias ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "group"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: 'small ' + (this.state.aliasError ? 'invalid' : '')
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_alias_edit",
- defaultMessage: [{
- "type": 0,
- "value": "Alias"
- }]
- }), " ", this.state.aliasError)), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "alias_editing_placeholder",
- defaultMessage: [{
- "type": 0,
- "value": "Alias (optional)"
- }]
- }, private_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
- placeholder: private_placeholder,
- readOnly: !editable,
- value: alias,
- validator: this.validateAlias,
- iconLeft: "alternate_email",
- maxLength: 24,
- spellCheck: false,
- onFinished: this.handleAliasUpdate
- })))) : null, editable || this.state.description ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "group"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
- className: "small"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "label_description",
- defaultMessage: [{
- "type": 0,
- "value": "Description"
- }]
- }))), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "description_editing_placeholder",
- defaultMessage: [{
- "type": 0,
- "value": "Description (optional)"
- }]
- }, private_placeholder => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_in_place_edit_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
- placeholder: private_placeholder,
- readOnly: !editable,
- value: this.state.description,
- multiline: 2,
- onFinished: this.handleDescriptionUpdate
- })))) : null), editable && !this.state.isMe ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "hr"
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement(react_intl__WEBPACK_IMPORTED_MODULE_1__.FormattedMessage, {
- id: "title_tag_manager",
- defaultMessage: [{
- "type": 0,
- "value": "Tags (search & discovery)"
- }]
- }, title_tag_manager => react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_tag_manager_jsx__WEBPACK_IMPORTED_MODULE_6__["default"], {
- tinode: this.props.tinode,
- title: title_tag_manager,
- activated: false,
- tags: this.state.tags,
- onSubmit: this.handleTagsUpdated
- }))) : null);
- }
-}
-;
-/* harmony default export */ __webpack_exports__["default"] = ((0,react_intl__WEBPACK_IMPORTED_MODULE_1__.injectIntl)(TopicDescEdit));
-
-/***/ }),
-
-/***/ "./src/widgets/unread-badge.jsx":
-/*!**************************************!*\
- !*** ./src/widgets/unread-badge.jsx ***!
- \**************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ UnreadBadge; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-
-class UnreadBadge extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- render() {
- return this.props.count > 0 ? react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
- className: "unread"
- }, this.props.count > 9 ? "9+" : this.props.count) : null;
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/uploading-image.jsx":
-/*!*****************************************!*\
- !*** ./src/widgets/uploading-image.jsx ***!
- \*****************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ UploadingImage; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _file_progress_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./file-progress.jsx */ "./src/widgets/file-progress.jsx");
-
-
-class UploadingImage extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- }
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "inline-image"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement('img', this.props), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- className: "rounded-container"
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_file_progress_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
- progress: this.props.progress,
- onCancel: this.props.onCancelUpload
- })));
- }
-}
-;
-
-/***/ }),
-
-/***/ "./src/widgets/visible-password.jsx":
-/*!******************************************!*\
- !*** ./src/widgets/visible-password.jsx ***!
- \******************************************/
-/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": function() { return /* binding */ VisiblePassword; }
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
-
-class VisiblePassword extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) {
- constructor(props) {
- super(props);
- this.inputRef = react__WEBPACK_IMPORTED_MODULE_0___default().createRef();
- this.state = {
- value: this.props.value || '',
- visible: false
- };
- this.handleVisibility = this.handleVisibility.bind(this);
- this.handeTextChange = this.handeTextChange.bind(this);
- this.handleKeyDown = this.handleKeyDown.bind(this);
- this.handleEditingFinished = this.handleEditingFinished.bind(this);
- }
- componentDidMount() {
- if (this.props.autoFocus) {
- this.inputRef.current.focus();
- }
- }
- handeTextChange(e) {
- this.setState({
- value: e.target.value
- });
- if (this.props.onChange) {
- this.props.onChange(e);
- }
- }
- handleVisibility(e) {
- e.preventDefault();
- this.setState({
- visible: !this.state.visible
- });
- }
- handleKeyDown(e) {
- if (e.keyCode == 27) {
- this.setState({
- value: this.props.value || '',
- visible: false
- });
- if (this.props.onFinished) {
- this.props.onFinished();
- }
- } else if (e.keyCode == 13) {
- this.handleEditingFinished();
- }
- }
- handleEditingFinished(e) {
- if (e) {
- let currentTarget = e.currentTarget;
- setTimeout(_ => {
- if (!currentTarget.contains(document.activeElement)) {
- if (this.props.onFinished) {
- this.props.onFinished(this.state.value);
- }
- }
- }, 0);
- } else if (this.props.onFinished) {
- this.props.onFinished(this.state.value.trim());
- }
- }
- render() {
- return react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
- tabIndex: "-1",
- className: "group-focus",
- onBlur: this.handleEditingFinished
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
- className: "with-icon-right",
- type: this.state.visible ? 'text' : 'password',
- value: this.state.value,
- placeholder: this.props.placeholder,
- maxLength: 32,
- required: this.props.required ? 'required' : '',
- autoFocus: this.props.autoFocus ? 'autoFocus' : '',
- autoComplete: this.props.autoComplete,
- onChange: this.handeTextChange,
- onKeyDown: this.handleKeyDown,
- ref: this.inputRef
- }), react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
- onClick: this.handleVisibility
- }, react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
- className: "material-icons clickable light-gray"
- }, this.state.visible ? 'visibility' : 'visibility_off')));
- }
-}
-
-/***/ }),
-
-/***/ "qrcodejs":
-/*!*************************!*\
- !*** external "QRCode" ***!
- \*************************/
-/***/ (function(module) {
-
-module.exports = QRCode;
-
-/***/ }),
-
-/***/ "react":
-/*!************************!*\
- !*** external "React" ***!
- \************************/
-/***/ (function(module) {
-
-module.exports = React;
-
-/***/ }),
-
-/***/ "react-dom":
-/*!***************************!*\
- !*** external "ReactDOM" ***!
- \***************************/
-/***/ (function(module) {
-
-module.exports = ReactDOM;
-
-/***/ }),
-
-/***/ "react-intl":
+/***/ "./img/bkg/index.json":
/*!****************************!*\
- !*** external "ReactIntl" ***!
+ !*** ./img/bkg/index.json ***!
\****************************/
/***/ (function(module) {
-module.exports = ReactIntl;
-
-/***/ }),
-
-/***/ "tinode-sdk":
-/*!*************************!*\
- !*** external "tinode" ***!
- \*************************/
-/***/ (function(module) {
-
-module.exports = tinode;
+module.exports = /*#__PURE__*/JSON.parse('{"patt":[{"name":"a00.png","size":200},{"name":"a01.jpg","size":384},{"name":"a02.jpg","size":384},{"name":"a03.jpg","size":384},{"name":"a04.png","size":400},{"name":"a05.jpg","size":400},{"name":"a06.jpg","size":256},{"name":"a07.jpg","size":384},{"name":"a08.jpg","size":384},{"name":"a09.jpg","size":400},{"name":"a10.jpg","size":256},{"name":"a11.png","size":200}],"img":[{"name":"w01.jpg","pr":"p01.jpg"},{"name":"w02.jpg","pr":"p02.jpg"},{"name":"w03.jpg","pr":"p03.jpg"},{"name":"w04.jpg","pr":"p04.jpg"},{"name":"w05.jpg","pr":"p05.jpg"},{"name":"w06.jpg","pr":"p06.jpg"},{"name":"w07.jpg","pr":"p07.jpg"},{"name":"w08.jpg","pr":"p08.jpg"},{"name":"w09.jpg","pr":"p09.jpg"},{"name":"w10.jpg","pr":"p10.jpg"},{"name":"w11.jpg","pr":"p11.jpg"},{"name":"w12.jpg","pr":"p12.jpg"},{"name":"w13.jpg","pr":"p13.jpg"},{"name":"w14.jpg","pr":"p14.jpg"},{"name":"w15.jpg","pr":"p15.jpg"},{"name":"w16.jpg","pr":"p16.jpg"},{"name":"w17.jpg","pr":"p17.jpg"},{"name":"w18.jpg","pr":"p18.jpg"},{"name":"w19.jpg","pr":"p19.jpg"},{"name":"w20.jpg","pr":"p20.jpg"},{"name":"w21.jpg","pr":"p21.jpg"},{"name":"w22.jpg","pr":"p22.jpg"},{"name":"w23.jpg","pr":"p23.jpg"},{"name":"w24.jpg","pr":"p24.jpg"}]}');
/***/ })
@@ -17358,12 +18807,6 @@ module.exports = tinode;
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
-/******/ // Check if module exists (development only)
-/******/ if (__webpack_modules__[moduleId] === undefined) {
-/******/ var e = new Error("Cannot find module '" + moduleId + "'");
-/******/ e.code = 'MODULE_NOT_FOUND';
-/******/ throw e;
-/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
@@ -17372,6 +18815,12 @@ module.exports = tinode;
/******/ };
/******/
/******/ // Execute the module function
+/******/ if (!(moduleId in __webpack_modules__)) {
+/******/ delete __webpack_module_cache__[moduleId];
+/******/ var e = new Error("Cannot find module '" + moduleId + "'");
+/******/ e.code = 'MODULE_NOT_FOUND';
+/******/ throw e;
+/******/ }
/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
@@ -17426,11 +18875,26 @@ module.exports = tinode;
/******/
/******/ /* webpack/runtime/define property getters */
/******/ !function() {
-/******/ // define getter functions for harmony exports
+/******/ // define getter/value functions for harmony exports
/******/ __webpack_require__.d = function(exports, definition) {
-/******/ for(var key in definition) {
-/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
-/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ if(Array.isArray(definition)) {
+/******/ var i = 0;
+/******/ while(i < definition.length) {
+/******/ var key = definition[i++];
+/******/ var binding = definition[i++];
+/******/ if(!__webpack_require__.o(exports, key)) {
+/******/ if(binding === 0) {
+/******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
+/******/ } else {
+/******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
+/******/ }
+/******/ } else if(binding === 0) { i++; }
+/******/ }
+/******/ } else {
+/******/ for(var key in definition) {
+/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ }
/******/ }
/******/ }
/******/ };
@@ -17531,6 +18995,14 @@ module.exports = tinode;
/******/ };
/******/ }();
/******/
+/******/ /* webpack/runtime/set anonymous default export name */
+/******/ !function() {
+/******/ // set .name for anonymous default exports per ES spec
+/******/ __webpack_require__.dn = function(x) {
+/******/ (Object.getOwnPropertyDescriptor(x, "name") || {}).writable || Object.defineProperty(x, "name", { value: "default", configurable: true });
+/******/ };
+/******/ }();
+/******/
/******/ /* webpack/runtime/publicPath */
/******/ !function() {
/******/ __webpack_require__.p = "/umd/";
diff --git a/umd/index.dev.js.map b/umd/index.dev.js.map
index 28abf324..54f733e6 100644
--- a/umd/index.dev.js.map
+++ b/umd/index.dev.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.dev.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAoE;AACuB;AACwH;AACpK;AAClB;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gBAAgB,GAAG,gBAAgB;AAC7D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oDAAM;;AAEzB;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,sCAAsC,SAAS;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,cAAc;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,SAAS;AAClE;AACA,uEAAuE,SAAS;AAChF,0EAA0E,SAAS;AACnF,sEAAsE,SAAS;AAC/E;AACA;AACA,6EAA6E,SAAS;AACtF;AACA;AACA,iGAAiG,sBAAsB;AACvH,oGAAoG,sBAAsB;AAC1H,oGAAoG,sBAAsB;AAC1H,2GAA2G,sBAAsB;AACjI;AACA;AACA;AACA,0BAA0B,wDAAY;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,uCAAuC;AACvC;AACA;AACA;AACA;AACA,wCAAwC,0DAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,qBAAqB;AACxG;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,4DAAY;AACnC;AACA,2CAA2C,WAAW;AACtD;AACA;AACA;AACA;AACA,2CAA2C,WAAW;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,WAAW;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,gCAAgC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA,sBAAsB;AACtB;AACA,mCAAmC,gEAAgE;AACnG;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,0BAA0B,mEAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yDAAS;AACrB,YAAY,yDAAS;AACrB;AACA;AACA;AACA,uFAAuF,eAAe;AACtG;AACA;AACA,0BAA0B,mEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yDAAS,OAAO,2DAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mIAAmI;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,mEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,mEAAmB;AAClE;AACA;AACA;AACA,qEAAqE,eAAe;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,kBAAkB,QAAQ;AAC7E;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA,2BAA2B,0DAAS,IAAI,QAAQ,oBAAoB,kBAAkB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mEAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAa;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2CAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS,GAAG,kBAAkB;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kCAAkC;AACtD,iCAAiC,6EAA6B,kBAAkB,0CAA0C;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,oEAAoB;AACjC;AACA;AACA;AACA,mBAAmB,yEAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,6EAA6B;AACxC;AACA,qBAAqB,yCAAyC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0DAAS;AACpC,2BAA2B,0DAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEmW;AACnW;;;;;;;;;;;;;;;;;;AClrC0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oDAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,WAAW;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,gBAAgB,eAAe,UAAU;AAC1F;AACA;AACA,yCAAyC,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,wCAAwC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,gBAAgB,eAAe;AAC/B;AACA;AACA,2BAA2B,UAAU,GAAG,qBAAqB;AAC7D;AACA;AACA,qCAAqC,WAAW;AAChD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,kCAAkC;AAC/D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gBAAgB,mCAAmC,UAAU;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEmD;AACnD;;;;;;;;;;;;;;;;;;;;;;;ACxZ0F;AAC1C;AACa;AAChC;;AAE7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA,gDAAgD;AAChD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iHAAiH,WAAW;AAC5H;AACA;AACA,yDAAyD,cAAc,4BAA4B,cAAc,cAAc,GAAG,eAAe;AACjJ;AACA;AACA;AACA,0BAA0B,wDAAY;AACtC;AACA;AACA,6BAA6B,yDAAa;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,WAAW;AAC/C,cAAc,sBAAsB,YAAY,UAAU;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,yCAAyC,cAAc;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,uBAAuB,EAAE,aAAa;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,qCAAqC,IAAI,KAAK;AACzF;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,GAAG;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kBAAkB,GAAG,gBAAgB;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2CAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,qCAAqC;AAC/E;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,KAAK;AACxD,cAAc,oCAAoC,GAAG,IAAI;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,eAAe,aAAa,oDAAoD;AACjI;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,uEAAuE,wBAAwB,WAAW;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,wBAAwB,aAAa,oDAAoD;AACpK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,eAAe,gCAAgC;AACxF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yCAAyC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,KAAK;AAC7C,cAAc,oCAAoC,GAAG,IAAI;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD,IAAI,iCAAiC;AACrC,qBAAqB,iCAAiC;AACtD;AACA;AACA;AACA,gCAAgC,qDAAM;AACtC,8BAA8B,2DAAY;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,2DAAY;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2DAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iEAAkB,KAAK,0DAAS;AACpC,IAAI,iEAAkB,KAAK,0DAAS;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAAe;AACf;AACA,8DAAe;;AAE+D;AAC9E;;;;;;;;;;;;;;;;;;ACloCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,IAAI,KAAK,cAAc;AACnD;AACA;AACA,sFAAsF,QAAQ;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,IAAI;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAE4D;AAC5D;;;;;;;;;;;;;;;;;;;;;;;;AC1NiC;AACe;AACT;AAC+F;AAC5C;;AAE1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;;AAEvC;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,2CAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,6CAAQ;AAClB,UAAU,6CAAQ;AAClB,UAAU,6CAAQ;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2CAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,WAAW;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iHAAiH,WAAW;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA,gJAAgJ,qBAAqB;AACrK,+HAA+H,WAAW;AAC1I;AACA;AACA,yBAAyB,WAAW;AACpC,wHAAwH,WAAW;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wDAAY;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4CAA4C,GAAG,mBAAmB;AAC1G;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4CAA4C,GAAG,MAAM;AAC7F;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,uBAAuB,WAAW;AAClC,cAAc,SAAS,YAAY,UAAU;AAC7C;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA,qDAAqD,UAAU;AAC/D,KAAK;AACL;AACA,mBAAmB,kCAAkC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,mBAAmB,6CAA6C;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uGAAuG,8BAA8B;AACrI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iEAAkB,KAAK,0DAAS;AACpC,IAAI,iEAAkB,KAAK,0DAAS;AACpC,IAAI,8DAAe;AACnB;AACA,IAAI,8DAAe;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,yEAAyB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oEAAoB;AAC5B,QAAQ,iEAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qDAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,WAAW,2DAAY,CAAC,kEAAkB;AAC1C;AACA;AACA,mBAAmB,iBAAiB;AACpC,gFAAgF;AAChF;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kEAAkB;AAClC;AACA;AACA;AACA,wDAAwD,iBAAiB;AACzE,QAAQ,iBAAiB;AACzB;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kEAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kEAAkB;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEoH;AACpH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnvC+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8BAA8B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAM;AACrB,eAAe,qBAAM;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4EAA0B;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,EAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA,wCAAwC,MAAM;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,wEAAwE,KAAK;;AAEhI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,GAAG;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,qBAAM;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,MAAM;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,aAAa,GAAG,KAAK;AACjD;AACA;AACA;AACA,+BAA+B,iBAAiB,IAAI,SAAS,GAAG,SAAS;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,IAAI;AACvD,KAAK;AACL;AACA,mBAAmB,MAAM,IAAI;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY,GAAG;AACf;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,aAAa,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,yBAAyB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,SAAS;AAClD;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ,UAAU,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,EAAE;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAE6jC;AAC7jC;;;;;;;;;;;;;;;ACrwEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAgD;AAClB;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAAe;AACf;;;;;;;;;;;;;;;;;;;;ACvBoC;AACpC;;;;;;;;;;;;;;;;;;;ACDmE;AACN;;AAE7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAyC,IAAI;AAC9E;AACA,wBAAwB,qDAAI;AAC5B;AACA;AACA,oBAAoB,qDAAI,sDAAsD,qDAAI;AAClF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,UAAU,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qDAAI;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAY;AACZ;AACA;AACA;AACA,CAAC;;AAE2B;;;;;;;;;;;;;;;;;;;AC9F5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEqG;;;;;;;;;;;ACxLxF;;AAEb,QAAQ,mBAAO,CAAC,4BAAW;AAC3B,IAAI,KAAqC,EAAE;AAAA,EAG1C,CAAC;AACF;AACA,EAAE,kBAAkB;AACpB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,EAAE,mBAAmB;AACrB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC,I;;;;;WCPD,8CAA8C,yD;;;;;WCA9C;WACA;WACA;WACA;WACA,uBAAuB,4BAA4B;WACnD;WACA;WACA;WACA,iBAAiB,oBAAoB;WACrC;WACA,mGAAmG,YAAY;WAC/G;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,4CAA4C,mBAAmB;WAC/D;WACA;WACA,mEAAmE,iCAAiC;WACpG;WACA;WACA;WACA,E;;;;;WCxCA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D,E;;;;;WCNA,gC;;;;;WCAA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA,iCAAiC;;WAEjC;WACA;WACA;WACA,KAAK;WACL,eAAe;WACf;WACA,2DAA2D,oEAAoE;WAC/H;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,iCAAiC,mCAAmC;WACpE;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM,qBAAqB;WAC3B;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;WACA;WACA,4G;;;;;;;;;;;;;;;;;;ACpF0B;AACoB;AAEJ;AAEK;AACE;AAGjD,IAAI,OAAO/tB,aAAa,IAAI,WAAW,IAAIA,aAAa,IAAIA,aAAa,CAACouB,aAAa,EAAE;EACvF,MAAMnpC,IAAI,GAAG5R,QAAQ,CAAC6R,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACrD,IAAImpC,MAAM,GAAGh7C,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC;EAC7C+6C,MAAM,CAACn7C,GAAG,GAAG,8CAA8C,GAAG8sB,aAAa,CAACouB,aA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","sources":["webpack://tinode-webapp/./node_modules/@firebase/app/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/component/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/installations/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/logger/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/messaging/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/util/dist/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/util/dist/postinstall.mjs","webpack://tinode-webapp/./node_modules/firebase/app/dist/esm/index.esm.js","webpack://tinode-webapp/./node_modules/firebase/messaging/dist/esm/index.esm.js","webpack://tinode-webapp/./node_modules/idb/build/index.js","webpack://tinode-webapp/./node_modules/idb/build/wrap-idb-value.js","webpack://tinode-webapp/./node_modules/react-dom/client.js","webpack://tinode-webapp/./src/config.js","webpack://tinode-webapp/./src/constants.js","webpack://tinode-webapp/./src/lib/blob-helpers.js","webpack://tinode-webapp/./src/lib/formatters.js","webpack://tinode-webapp/./src/lib/host-name.js","webpack://tinode-webapp/./src/lib/local-storage.js","webpack://tinode-webapp/./src/lib/navigation.js","webpack://tinode-webapp/./src/lib/strformat.js","webpack://tinode-webapp/./src/lib/utils.js","webpack://tinode-webapp/./src/version.js","webpack://tinode-webapp/./src/views/acc-general-view.jsx","webpack://tinode-webapp/./src/views/acc-notifications-view.jsx","webpack://tinode-webapp/./src/views/acc-support-view.jsx","webpack://tinode-webapp/./src/views/contacts-view.jsx","webpack://tinode-webapp/./src/views/login-view.jsx","webpack://tinode-webapp/./src/views/new-topic-view.jsx","webpack://tinode-webapp/./src/views/settings-view.jsx","webpack://tinode-webapp/./src/views/sidepanel-view.jsx","webpack://tinode-webapp/./src/views/tinode-web.jsx","webpack://tinode-webapp/./src/views/topic-common-view.jsx","webpack://tinode-webapp/./src/views/validation-view.jsx","webpack://tinode-webapp/./src/widgets/alert.jsx","webpack://tinode-webapp/./src/widgets/audio-player.jsx","webpack://tinode-webapp/./src/widgets/avatar-crop.jsx","webpack://tinode-webapp/./src/widgets/avatar-upload.jsx","webpack://tinode-webapp/./src/widgets/badge-list.jsx","webpack://tinode-webapp/./src/widgets/button-back.jsx","webpack://tinode-webapp/./src/widgets/call-incoming.jsx","webpack://tinode-webapp/./src/widgets/call-message.jsx","webpack://tinode-webapp/./src/widgets/call-status.jsx","webpack://tinode-webapp/./src/widgets/checkbox.jsx","webpack://tinode-webapp/./src/widgets/chip-input.jsx","webpack://tinode-webapp/./src/widgets/chip.jsx","webpack://tinode-webapp/./src/widgets/contact-action.jsx","webpack://tinode-webapp/./src/widgets/contact-badges.jsx","webpack://tinode-webapp/./src/widgets/contact-list.jsx","webpack://tinode-webapp/./src/widgets/contact.jsx","webpack://tinode-webapp/./src/widgets/context-menu.jsx","webpack://tinode-webapp/./src/widgets/cropper.jsx","webpack://tinode-webapp/./src/widgets/error-panel.jsx","webpack://tinode-webapp/./src/widgets/file-progress.jsx","webpack://tinode-webapp/./src/widgets/forward-dialog.jsx","webpack://tinode-webapp/./src/widgets/host-selector.jsx","webpack://tinode-webapp/./src/widgets/in-place-edit.jsx","webpack://tinode-webapp/./src/widgets/inline-video.jsx","webpack://tinode-webapp/./src/widgets/lazy-image.jsx","webpack://tinode-webapp/./src/widgets/letter-tile.jsx","webpack://tinode-webapp/./src/widgets/load-spinner.jsx","webpack://tinode-webapp/./src/widgets/menu-cancel.jsx","webpack://tinode-webapp/./src/widgets/menu-contacts.jsx","webpack://tinode-webapp/./src/widgets/menu-start.jsx","webpack://tinode-webapp/./src/widgets/new-topic-by-id.jsx","webpack://tinode-webapp/./src/widgets/new-topic-group.jsx","webpack://tinode-webapp/./src/widgets/search-contacts.jsx","webpack://tinode-webapp/./src/widgets/side-navbar.jsx","webpack://tinode-webapp/./src/widgets/tag-manager.jsx","webpack://tinode-webapp/./src/widgets/the-card-mini.jsx","webpack://tinode-webapp/./src/widgets/topic-desc-edit.jsx","webpack://tinode-webapp/./src/widgets/unread-badge.jsx","webpack://tinode-webapp/./src/widgets/uploading-image.jsx","webpack://tinode-webapp/./src/widgets/visible-password.jsx","webpack://tinode-webapp/external var \"QRCode\"","webpack://tinode-webapp/external var \"React\"","webpack://tinode-webapp/external var \"ReactDOM\"","webpack://tinode-webapp/external var \"ReactIntl\"","webpack://tinode-webapp/external var \"tinode\"","webpack://tinode-webapp/webpack/bootstrap","webpack://tinode-webapp/webpack/runtime/compat get default export","webpack://tinode-webapp/webpack/runtime/create fake namespace object","webpack://tinode-webapp/webpack/runtime/define property getters","webpack://tinode-webapp/webpack/runtime/ensure chunk","webpack://tinode-webapp/webpack/runtime/get javascript chunk filename","webpack://tinode-webapp/webpack/runtime/global","webpack://tinode-webapp/webpack/runtime/hasOwnProperty shorthand","webpack://tinode-webapp/webpack/runtime/load script","webpack://tinode-webapp/webpack/runtime/make namespace object","webpack://tinode-webapp/webpack/runtime/publicPath","webpack://tinode-webapp/webpack/runtime/jsonp chunk loading","webpack://tinode-webapp/./src/index.js"],"sourcesContent":["import { Component, ComponentContainer } from '@firebase/component';\nimport { Logger, setUserLogHandler, setLogLevel as setLogLevel$1 } from '@firebase/logger';\nimport { ErrorFactory, base64Decode, getDefaultAppConfig, deepEqual, isBrowser, isWebWorker, FirebaseError, base64urlEncodeWithoutPadding, isIndexedDBAvailable, validateIndexedDBOpenable } from '@firebase/util';\nexport { FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass PlatformLoggerServiceImpl {\n constructor(container) {\n this.container = container;\n }\n // In initial implementation, this will be called by installations on\n // auth token refresh, and installations will send this string.\n getPlatformInfoString() {\n const providers = this.container.getProviders();\n // Loop through providers and get library/version pairs from any that are\n // version components.\n return providers\n .map(provider => {\n if (isVersionServiceProvider(provider)) {\n const service = provider.getImmediate();\n return `${service.library}/${service.version}`;\n }\n else {\n return null;\n }\n })\n .filter(logString => logString)\n .join(' ');\n }\n}\n/**\n *\n * @param provider check if this provider provides a VersionService\n *\n * NOTE: Using Provider<'app-version'> is a hack to indicate that the provider\n * provides VersionService. The provider is not necessarily a 'app-version'\n * provider.\n */\nfunction isVersionServiceProvider(provider) {\n const component = provider.getComponent();\n return (component === null || component === void 0 ? void 0 : component.type) === \"VERSION\" /* ComponentType.VERSION */;\n}\n\nconst name$q = \"@firebase/app\";\nconst version$1 = \"0.13.2\";\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst logger = new Logger('@firebase/app');\n\nconst name$p = \"@firebase/app-compat\";\n\nconst name$o = \"@firebase/analytics-compat\";\n\nconst name$n = \"@firebase/analytics\";\n\nconst name$m = \"@firebase/app-check-compat\";\n\nconst name$l = \"@firebase/app-check\";\n\nconst name$k = \"@firebase/auth\";\n\nconst name$j = \"@firebase/auth-compat\";\n\nconst name$i = \"@firebase/database\";\n\nconst name$h = \"@firebase/data-connect\";\n\nconst name$g = \"@firebase/database-compat\";\n\nconst name$f = \"@firebase/functions\";\n\nconst name$e = \"@firebase/functions-compat\";\n\nconst name$d = \"@firebase/installations\";\n\nconst name$c = \"@firebase/installations-compat\";\n\nconst name$b = \"@firebase/messaging\";\n\nconst name$a = \"@firebase/messaging-compat\";\n\nconst name$9 = \"@firebase/performance\";\n\nconst name$8 = \"@firebase/performance-compat\";\n\nconst name$7 = \"@firebase/remote-config\";\n\nconst name$6 = \"@firebase/remote-config-compat\";\n\nconst name$5 = \"@firebase/storage\";\n\nconst name$4 = \"@firebase/storage-compat\";\n\nconst name$3 = \"@firebase/firestore\";\n\nconst name$2 = \"@firebase/ai\";\n\nconst name$1 = \"@firebase/firestore-compat\";\n\nconst name = \"firebase\";\nconst version = \"11.10.0\";\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The default app name\n *\n * @internal\n */\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\nconst PLATFORM_LOG_STRING = {\n [name$q]: 'fire-core',\n [name$p]: 'fire-core-compat',\n [name$n]: 'fire-analytics',\n [name$o]: 'fire-analytics-compat',\n [name$l]: 'fire-app-check',\n [name$m]: 'fire-app-check-compat',\n [name$k]: 'fire-auth',\n [name$j]: 'fire-auth-compat',\n [name$i]: 'fire-rtdb',\n [name$h]: 'fire-data-connect',\n [name$g]: 'fire-rtdb-compat',\n [name$f]: 'fire-fn',\n [name$e]: 'fire-fn-compat',\n [name$d]: 'fire-iid',\n [name$c]: 'fire-iid-compat',\n [name$b]: 'fire-fcm',\n [name$a]: 'fire-fcm-compat',\n [name$9]: 'fire-perf',\n [name$8]: 'fire-perf-compat',\n [name$7]: 'fire-rc',\n [name$6]: 'fire-rc-compat',\n [name$5]: 'fire-gcs',\n [name$4]: 'fire-gcs-compat',\n [name$3]: 'fire-fst',\n [name$1]: 'fire-fst-compat',\n [name$2]: 'fire-vertex',\n 'fire-js': 'fire-js', // Platform identifier for JS SDK.\n [name]: 'fire-js-all'\n};\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @internal\n */\nconst _apps = new Map();\n/**\n * @internal\n */\nconst _serverApps = new Map();\n/**\n * Registered components.\n *\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst _components = new Map();\n/**\n * @param component - the component being added to this app's container\n *\n * @internal\n */\nfunction _addComponent(app, component) {\n try {\n app.container.addComponent(component);\n }\n catch (e) {\n logger.debug(`Component ${component.name} failed to register with FirebaseApp ${app.name}`, e);\n }\n}\n/**\n *\n * @internal\n */\nfunction _addOrOverwriteComponent(app, component) {\n app.container.addOrOverwriteComponent(component);\n}\n/**\n *\n * @param component - the component to register\n * @returns whether or not the component is registered successfully\n *\n * @internal\n */\nfunction _registerComponent(component) {\n const componentName = component.name;\n if (_components.has(componentName)) {\n logger.debug(`There were multiple attempts to register component ${componentName}.`);\n return false;\n }\n _components.set(componentName, component);\n // add the component to existing app instances\n for (const app of _apps.values()) {\n _addComponent(app, component);\n }\n for (const serverApp of _serverApps.values()) {\n _addComponent(serverApp, component);\n }\n return true;\n}\n/**\n *\n * @param app - FirebaseApp instance\n * @param name - service name\n *\n * @returns the provider for the service with the matching name\n *\n * @internal\n */\nfunction _getProvider(app, name) {\n const heartbeatController = app.container\n .getProvider('heartbeat')\n .getImmediate({ optional: true });\n if (heartbeatController) {\n void heartbeatController.triggerHeartbeat();\n }\n return app.container.getProvider(name);\n}\n/**\n *\n * @param app - FirebaseApp instance\n * @param name - service name\n * @param instanceIdentifier - service instance identifier in case the service supports multiple instances\n *\n * @internal\n */\nfunction _removeServiceInstance(app, name, instanceIdentifier = DEFAULT_ENTRY_NAME) {\n _getProvider(app, name).clearInstance(instanceIdentifier);\n}\n/**\n *\n * @param obj - an object of type FirebaseApp or FirebaseOptions.\n *\n * @returns true if the provide object is of type FirebaseApp.\n *\n * @internal\n */\nfunction _isFirebaseApp(obj) {\n return obj.options !== undefined;\n}\n/**\n *\n * @param obj - an object of type FirebaseApp.\n *\n * @returns true if the provided object is of type FirebaseServerAppImpl.\n *\n * @internal\n */\nfunction _isFirebaseServerApp(obj) {\n if (obj === null || obj === undefined) {\n return false;\n }\n return obj.settings !== undefined;\n}\n/**\n * Test only\n *\n * @internal\n */\nfunction _clearComponents() {\n _components.clear();\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst ERRORS = {\n [\"no-app\" /* AppError.NO_APP */]: \"No Firebase App '{$appName}' has been created - \" +\n 'call initializeApp() first',\n [\"bad-app-name\" /* AppError.BAD_APP_NAME */]: \"Illegal App name: '{$appName}'\",\n [\"duplicate-app\" /* AppError.DUPLICATE_APP */]: \"Firebase App named '{$appName}' already exists with different options or config\",\n [\"app-deleted\" /* AppError.APP_DELETED */]: \"Firebase App named '{$appName}' already deleted\",\n [\"server-app-deleted\" /* AppError.SERVER_APP_DELETED */]: 'Firebase Server App has been deleted',\n [\"no-options\" /* AppError.NO_OPTIONS */]: 'Need to provide options, when not being deployed to hosting via source.',\n [\"invalid-app-argument\" /* AppError.INVALID_APP_ARGUMENT */]: 'firebase.{$appName}() takes either no argument or a ' +\n 'Firebase App instance.',\n [\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */]: 'First argument to `onLog` must be null or a function.',\n [\"idb-open\" /* AppError.IDB_OPEN */]: 'Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.',\n [\"idb-get\" /* AppError.IDB_GET */]: 'Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.',\n [\"idb-set\" /* AppError.IDB_WRITE */]: 'Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.',\n [\"idb-delete\" /* AppError.IDB_DELETE */]: 'Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.',\n [\"finalization-registry-not-supported\" /* AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED */]: 'FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.',\n [\"invalid-server-app-environment\" /* AppError.INVALID_SERVER_APP_ENVIRONMENT */]: 'FirebaseServerApp is not for use in browser environments.'\n};\nconst ERROR_FACTORY = new ErrorFactory('app', 'Firebase', ERRORS);\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass FirebaseAppImpl {\n constructor(options, config, container) {\n this._isDeleted = false;\n this._options = Object.assign({}, options);\n this._config = Object.assign({}, config);\n this._name = config.name;\n this._automaticDataCollectionEnabled =\n config.automaticDataCollectionEnabled;\n this._container = container;\n this.container.addComponent(new Component('app', () => this, \"PUBLIC\" /* ComponentType.PUBLIC */));\n }\n get automaticDataCollectionEnabled() {\n this.checkDestroyed();\n return this._automaticDataCollectionEnabled;\n }\n set automaticDataCollectionEnabled(val) {\n this.checkDestroyed();\n this._automaticDataCollectionEnabled = val;\n }\n get name() {\n this.checkDestroyed();\n return this._name;\n }\n get options() {\n this.checkDestroyed();\n return this._options;\n }\n get config() {\n this.checkDestroyed();\n return this._config;\n }\n get container() {\n return this._container;\n }\n get isDeleted() {\n return this._isDeleted;\n }\n set isDeleted(val) {\n this._isDeleted = val;\n }\n /**\n * This function will throw an Error if the App has already been deleted -\n * use before performing API actions on the App.\n */\n checkDestroyed() {\n if (this.isDeleted) {\n throw ERROR_FACTORY.create(\"app-deleted\" /* AppError.APP_DELETED */, { appName: this._name });\n }\n }\n}\n\n/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Parse the token and check to see if the `exp` claim is in the future.\n// Reports an error to the console if the token or claim could not be parsed, or if `exp` is in\n// the past.\nfunction validateTokenTTL(base64Token, tokenName) {\n const secondPart = base64Decode(base64Token.split('.')[1]);\n if (secondPart === null) {\n console.error(`FirebaseServerApp ${tokenName} is invalid: second part could not be parsed.`);\n return;\n }\n const expClaim = JSON.parse(secondPart).exp;\n if (expClaim === undefined) {\n console.error(`FirebaseServerApp ${tokenName} is invalid: expiration claim could not be parsed`);\n return;\n }\n const exp = JSON.parse(secondPart).exp * 1000;\n const now = new Date().getTime();\n const diff = exp - now;\n if (diff <= 0) {\n console.error(`FirebaseServerApp ${tokenName} is invalid: the token has expired.`);\n }\n}\nclass FirebaseServerAppImpl extends FirebaseAppImpl {\n constructor(options, serverConfig, name, container) {\n // Build configuration parameters for the FirebaseAppImpl base class.\n const automaticDataCollectionEnabled = serverConfig.automaticDataCollectionEnabled !== undefined\n ? serverConfig.automaticDataCollectionEnabled\n : true;\n // Create the FirebaseAppSettings object for the FirebaseAppImp constructor.\n const config = {\n name,\n automaticDataCollectionEnabled\n };\n if (options.apiKey !== undefined) {\n // Construct the parent FirebaseAppImp object.\n super(options, config, container);\n }\n else {\n const appImpl = options;\n super(appImpl.options, config, container);\n }\n // Now construct the data for the FirebaseServerAppImpl.\n this._serverConfig = Object.assign({ automaticDataCollectionEnabled }, serverConfig);\n // Ensure that the current time is within the `authIdtoken` window of validity.\n if (this._serverConfig.authIdToken) {\n validateTokenTTL(this._serverConfig.authIdToken, 'authIdToken');\n }\n // Ensure that the current time is within the `appCheckToken` window of validity.\n if (this._serverConfig.appCheckToken) {\n validateTokenTTL(this._serverConfig.appCheckToken, 'appCheckToken');\n }\n this._finalizationRegistry = null;\n if (typeof FinalizationRegistry !== 'undefined') {\n this._finalizationRegistry = new FinalizationRegistry(() => {\n this.automaticCleanup();\n });\n }\n this._refCount = 0;\n this.incRefCount(this._serverConfig.releaseOnDeref);\n // Do not retain a hard reference to the dref object, otherwise the FinalizationRegistry\n // will never trigger.\n this._serverConfig.releaseOnDeref = undefined;\n serverConfig.releaseOnDeref = undefined;\n registerVersion(name$q, version$1, 'serverapp');\n }\n toJSON() {\n return undefined;\n }\n get refCount() {\n return this._refCount;\n }\n // Increment the reference count of this server app. If an object is provided, register it\n // with the finalization registry.\n incRefCount(obj) {\n if (this.isDeleted) {\n return;\n }\n this._refCount++;\n if (obj !== undefined && this._finalizationRegistry !== null) {\n this._finalizationRegistry.register(obj, this);\n }\n }\n // Decrement the reference count.\n decRefCount() {\n if (this.isDeleted) {\n return 0;\n }\n return --this._refCount;\n }\n // Invoked by the FinalizationRegistry callback to note that this app should go through its\n // reference counts and delete itself if no reference count remain. The coordinating logic that\n // handles this is in deleteApp(...).\n automaticCleanup() {\n void deleteApp(this);\n }\n get settings() {\n this.checkDestroyed();\n return this._serverConfig;\n }\n /**\n * This function will throw an Error if the App has already been deleted -\n * use before performing API actions on the App.\n */\n checkDestroyed() {\n if (this.isDeleted) {\n throw ERROR_FACTORY.create(\"server-app-deleted\" /* AppError.SERVER_APP_DELETED */);\n }\n }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The current SDK version.\n *\n * @public\n */\nconst SDK_VERSION = version;\nfunction initializeApp(_options, rawConfig = {}) {\n let options = _options;\n if (typeof rawConfig !== 'object') {\n const name = rawConfig;\n rawConfig = { name };\n }\n const config = Object.assign({ name: DEFAULT_ENTRY_NAME, automaticDataCollectionEnabled: true }, rawConfig);\n const name = config.name;\n if (typeof name !== 'string' || !name) {\n throw ERROR_FACTORY.create(\"bad-app-name\" /* AppError.BAD_APP_NAME */, {\n appName: String(name)\n });\n }\n options || (options = getDefaultAppConfig());\n if (!options) {\n throw ERROR_FACTORY.create(\"no-options\" /* AppError.NO_OPTIONS */);\n }\n const existingApp = _apps.get(name);\n if (existingApp) {\n // return the existing app if options and config deep equal the ones in the existing app.\n if (deepEqual(options, existingApp.options) &&\n deepEqual(config, existingApp.config)) {\n return existingApp;\n }\n else {\n throw ERROR_FACTORY.create(\"duplicate-app\" /* AppError.DUPLICATE_APP */, { appName: name });\n }\n }\n const container = new ComponentContainer(name);\n for (const component of _components.values()) {\n container.addComponent(component);\n }\n const newApp = new FirebaseAppImpl(options, config, container);\n _apps.set(name, newApp);\n return newApp;\n}\nfunction initializeServerApp(_options, _serverAppConfig) {\n if (isBrowser() && !isWebWorker()) {\n // FirebaseServerApp isn't designed to be run in browsers.\n throw ERROR_FACTORY.create(\"invalid-server-app-environment\" /* AppError.INVALID_SERVER_APP_ENVIRONMENT */);\n }\n if (_serverAppConfig.automaticDataCollectionEnabled === undefined) {\n _serverAppConfig.automaticDataCollectionEnabled = true;\n }\n let appOptions;\n if (_isFirebaseApp(_options)) {\n appOptions = _options.options;\n }\n else {\n appOptions = _options;\n }\n // Build an app name based on a hash of the configuration options.\n const nameObj = Object.assign(Object.assign({}, _serverAppConfig), appOptions);\n // However, Do not mangle the name based on releaseOnDeref, since it will vary between the\n // construction of FirebaseServerApp instances. For example, if the object is the request headers.\n if (nameObj.releaseOnDeref !== undefined) {\n delete nameObj.releaseOnDeref;\n }\n const hashCode = (s) => {\n return [...s].reduce((hash, c) => (Math.imul(31, hash) + c.charCodeAt(0)) | 0, 0);\n };\n if (_serverAppConfig.releaseOnDeref !== undefined) {\n if (typeof FinalizationRegistry === 'undefined') {\n throw ERROR_FACTORY.create(\"finalization-registry-not-supported\" /* AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED */, {});\n }\n }\n const nameString = '' + hashCode(JSON.stringify(nameObj));\n const existingApp = _serverApps.get(nameString);\n if (existingApp) {\n existingApp.incRefCount(_serverAppConfig.releaseOnDeref);\n return existingApp;\n }\n const container = new ComponentContainer(nameString);\n for (const component of _components.values()) {\n container.addComponent(component);\n }\n const newApp = new FirebaseServerAppImpl(appOptions, _serverAppConfig, nameString, container);\n _serverApps.set(nameString, newApp);\n return newApp;\n}\n/**\n * Retrieves a {@link @firebase/app#FirebaseApp} instance.\n *\n * When called with no arguments, the default app is returned. When an app name\n * is provided, the app corresponding to that name is returned.\n *\n * An exception is thrown if the app being retrieved has not yet been\n * initialized.\n *\n * @example\n * ```javascript\n * // Return the default app\n * const app = getApp();\n * ```\n *\n * @example\n * ```javascript\n * // Return a named app\n * const otherApp = getApp(\"otherApp\");\n * ```\n *\n * @param name - Optional name of the app to return. If no name is\n * provided, the default is `\"[DEFAULT]\"`.\n *\n * @returns The app corresponding to the provided app name.\n * If no app name is provided, the default app is returned.\n *\n * @public\n */\nfunction getApp(name = DEFAULT_ENTRY_NAME) {\n const app = _apps.get(name);\n if (!app && name === DEFAULT_ENTRY_NAME && getDefaultAppConfig()) {\n return initializeApp();\n }\n if (!app) {\n throw ERROR_FACTORY.create(\"no-app\" /* AppError.NO_APP */, { appName: name });\n }\n return app;\n}\n/**\n * A (read-only) array of all initialized apps.\n * @public\n */\nfunction getApps() {\n return Array.from(_apps.values());\n}\n/**\n * Renders this app unusable and frees the resources of all associated\n * services.\n *\n * @example\n * ```javascript\n * deleteApp(app)\n * .then(function() {\n * console.log(\"App deleted successfully\");\n * })\n * .catch(function(error) {\n * console.log(\"Error deleting app:\", error);\n * });\n * ```\n *\n * @public\n */\nasync function deleteApp(app) {\n let cleanupProviders = false;\n const name = app.name;\n if (_apps.has(name)) {\n cleanupProviders = true;\n _apps.delete(name);\n }\n else if (_serverApps.has(name)) {\n const firebaseServerApp = app;\n if (firebaseServerApp.decRefCount() <= 0) {\n _serverApps.delete(name);\n cleanupProviders = true;\n }\n }\n if (cleanupProviders) {\n await Promise.all(app.container\n .getProviders()\n .map(provider => provider.delete()));\n app.isDeleted = true;\n }\n}\n/**\n * Registers a library's name and version for platform logging purposes.\n * @param library - Name of 1p or 3p library (e.g. firestore, angularfire)\n * @param version - Current version of that library.\n * @param variant - Bundle variant, e.g., node, rn, etc.\n *\n * @public\n */\nfunction registerVersion(libraryKeyOrName, version, variant) {\n var _a;\n // TODO: We can use this check to whitelist strings when/if we set up\n // a good whitelist system.\n let library = (_a = PLATFORM_LOG_STRING[libraryKeyOrName]) !== null && _a !== void 0 ? _a : libraryKeyOrName;\n if (variant) {\n library += `-${variant}`;\n }\n const libraryMismatch = library.match(/\\s|\\//);\n const versionMismatch = version.match(/\\s|\\//);\n if (libraryMismatch || versionMismatch) {\n const warning = [\n `Unable to register library \"${library}\" with version \"${version}\":`\n ];\n if (libraryMismatch) {\n warning.push(`library name \"${library}\" contains illegal characters (whitespace or \"/\")`);\n }\n if (libraryMismatch && versionMismatch) {\n warning.push('and');\n }\n if (versionMismatch) {\n warning.push(`version name \"${version}\" contains illegal characters (whitespace or \"/\")`);\n }\n logger.warn(warning.join(' '));\n return;\n }\n _registerComponent(new Component(`${library}-version`, () => ({ library, version }), \"VERSION\" /* ComponentType.VERSION */));\n}\n/**\n * Sets log handler for all Firebase SDKs.\n * @param logCallback - An optional custom log handler that executes user code whenever\n * the Firebase SDK makes a logging call.\n *\n * @public\n */\nfunction onLog(logCallback, options) {\n if (logCallback !== null && typeof logCallback !== 'function') {\n throw ERROR_FACTORY.create(\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */);\n }\n setUserLogHandler(logCallback, options);\n}\n/**\n * Sets log level for all Firebase SDKs.\n *\n * All of the log types above the current log level are captured (i.e. if\n * you set the log level to `info`, errors are logged, but `debug` and\n * `verbose` logs are not).\n *\n * @public\n */\nfunction setLogLevel(logLevel) {\n setLogLevel$1(logLevel);\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DB_NAME = 'firebase-heartbeat-database';\nconst DB_VERSION = 1;\nconst STORE_NAME = 'firebase-heartbeat-store';\nlet dbPromise = null;\nfunction getDbPromise() {\n if (!dbPromise) {\n dbPromise = openDB(DB_NAME, DB_VERSION, {\n upgrade: (db, oldVersion) => {\n // We don't use 'break' in this switch statement, the fall-through\n // behavior is what we want, because if there are multiple versions between\n // the old version and the current version, we want ALL the migrations\n // that correspond to those versions to run, not only the last one.\n // eslint-disable-next-line default-case\n switch (oldVersion) {\n case 0:\n try {\n db.createObjectStore(STORE_NAME);\n }\n catch (e) {\n // Safari/iOS browsers throw occasional exceptions on\n // db.createObjectStore() that may be a bug. Avoid blocking\n // the rest of the app functionality.\n console.warn(e);\n }\n }\n }\n }).catch(e => {\n throw ERROR_FACTORY.create(\"idb-open\" /* AppError.IDB_OPEN */, {\n originalErrorMessage: e.message\n });\n });\n }\n return dbPromise;\n}\nasync function readHeartbeatsFromIndexedDB(app) {\n try {\n const db = await getDbPromise();\n const tx = db.transaction(STORE_NAME);\n const result = await tx.objectStore(STORE_NAME).get(computeKey(app));\n // We already have the value but tx.done can throw,\n // so we need to await it here to catch errors\n await tx.done;\n return result;\n }\n catch (e) {\n if (e instanceof FirebaseError) {\n logger.warn(e.message);\n }\n else {\n const idbGetError = ERROR_FACTORY.create(\"idb-get\" /* AppError.IDB_GET */, {\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\n });\n logger.warn(idbGetError.message);\n }\n }\n}\nasync function writeHeartbeatsToIndexedDB(app, heartbeatObject) {\n try {\n const db = await getDbPromise();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n const objectStore = tx.objectStore(STORE_NAME);\n await objectStore.put(heartbeatObject, computeKey(app));\n await tx.done;\n }\n catch (e) {\n if (e instanceof FirebaseError) {\n logger.warn(e.message);\n }\n else {\n const idbGetError = ERROR_FACTORY.create(\"idb-set\" /* AppError.IDB_WRITE */, {\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\n });\n logger.warn(idbGetError.message);\n }\n }\n}\nfunction computeKey(app) {\n return `${app.name}!${app.options.appId}`;\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst MAX_HEADER_BYTES = 1024;\nconst MAX_NUM_STORED_HEARTBEATS = 30;\nclass HeartbeatServiceImpl {\n constructor(container) {\n this.container = container;\n /**\n * In-memory cache for heartbeats, used by getHeartbeatsHeader() to generate\n * the header string.\n * Stores one record per date. This will be consolidated into the standard\n * format of one record per user agent string before being sent as a header.\n * Populated from indexedDB when the controller is instantiated and should\n * be kept in sync with indexedDB.\n * Leave public for easier testing.\n */\n this._heartbeatsCache = null;\n const app = this.container.getProvider('app').getImmediate();\n this._storage = new HeartbeatStorageImpl(app);\n this._heartbeatsCachePromise = this._storage.read().then(result => {\n this._heartbeatsCache = result;\n return result;\n });\n }\n /**\n * Called to report a heartbeat. The function will generate\n * a HeartbeatsByUserAgent object, update heartbeatsCache, and persist it\n * to IndexedDB.\n * Note that we only store one heartbeat per day. So if a heartbeat for today is\n * already logged, subsequent calls to this function in the same day will be ignored.\n */\n async triggerHeartbeat() {\n var _a, _b;\n try {\n const platformLogger = this.container\n .getProvider('platform-logger')\n .getImmediate();\n // This is the \"Firebase user agent\" string from the platform logger\n // service, not the browser user agent.\n const agent = platformLogger.getPlatformInfoString();\n const date = getUTCDateString();\n if (((_a = this._heartbeatsCache) === null || _a === void 0 ? void 0 : _a.heartbeats) == null) {\n this._heartbeatsCache = await this._heartbeatsCachePromise;\n // If we failed to construct a heartbeats cache, then return immediately.\n if (((_b = this._heartbeatsCache) === null || _b === void 0 ? void 0 : _b.heartbeats) == null) {\n return;\n }\n }\n // Do not store a heartbeat if one is already stored for this day\n // or if a header has already been sent today.\n if (this._heartbeatsCache.lastSentHeartbeatDate === date ||\n this._heartbeatsCache.heartbeats.some(singleDateHeartbeat => singleDateHeartbeat.date === date)) {\n return;\n }\n else {\n // There is no entry for this date. Create one.\n this._heartbeatsCache.heartbeats.push({ date, agent });\n // If the number of stored heartbeats exceeds the maximum number of stored heartbeats, remove the heartbeat with the earliest date.\n // Since this is executed each time a heartbeat is pushed, the limit can only be exceeded by one, so only one needs to be removed.\n if (this._heartbeatsCache.heartbeats.length > MAX_NUM_STORED_HEARTBEATS) {\n const earliestHeartbeatIdx = getEarliestHeartbeatIdx(this._heartbeatsCache.heartbeats);\n this._heartbeatsCache.heartbeats.splice(earliestHeartbeatIdx, 1);\n }\n }\n return this._storage.overwrite(this._heartbeatsCache);\n }\n catch (e) {\n logger.warn(e);\n }\n }\n /**\n * Returns a base64 encoded string which can be attached to the heartbeat-specific header directly.\n * It also clears all heartbeats from memory as well as in IndexedDB.\n *\n * NOTE: Consuming product SDKs should not send the header if this method\n * returns an empty string.\n */\n async getHeartbeatsHeader() {\n var _a;\n try {\n if (this._heartbeatsCache === null) {\n await this._heartbeatsCachePromise;\n }\n // If it's still null or the array is empty, there is no data to send.\n if (((_a = this._heartbeatsCache) === null || _a === void 0 ? void 0 : _a.heartbeats) == null ||\n this._heartbeatsCache.heartbeats.length === 0) {\n return '';\n }\n const date = getUTCDateString();\n // Extract as many heartbeats from the cache as will fit under the size limit.\n const { heartbeatsToSend, unsentEntries } = extractHeartbeatsForHeader(this._heartbeatsCache.heartbeats);\n const headerString = base64urlEncodeWithoutPadding(JSON.stringify({ version: 2, heartbeats: heartbeatsToSend }));\n // Store last sent date to prevent another being logged/sent for the same day.\n this._heartbeatsCache.lastSentHeartbeatDate = date;\n if (unsentEntries.length > 0) {\n // Store any unsent entries if they exist.\n this._heartbeatsCache.heartbeats = unsentEntries;\n // This seems more likely than emptying the array (below) to lead to some odd state\n // since the cache isn't empty and this will be called again on the next request,\n // and is probably safest if we await it.\n await this._storage.overwrite(this._heartbeatsCache);\n }\n else {\n this._heartbeatsCache.heartbeats = [];\n // Do not wait for this, to reduce latency.\n void this._storage.overwrite(this._heartbeatsCache);\n }\n return headerString;\n }\n catch (e) {\n logger.warn(e);\n return '';\n }\n }\n}\nfunction getUTCDateString() {\n const today = new Date();\n // Returns date format 'YYYY-MM-DD'\n return today.toISOString().substring(0, 10);\n}\nfunction extractHeartbeatsForHeader(heartbeatsCache, maxSize = MAX_HEADER_BYTES) {\n // Heartbeats grouped by user agent in the standard format to be sent in\n // the header.\n const heartbeatsToSend = [];\n // Single date format heartbeats that are not sent.\n let unsentEntries = heartbeatsCache.slice();\n for (const singleDateHeartbeat of heartbeatsCache) {\n // Look for an existing entry with the same user agent.\n const heartbeatEntry = heartbeatsToSend.find(hb => hb.agent === singleDateHeartbeat.agent);\n if (!heartbeatEntry) {\n // If no entry for this user agent exists, create one.\n heartbeatsToSend.push({\n agent: singleDateHeartbeat.agent,\n dates: [singleDateHeartbeat.date]\n });\n if (countBytes(heartbeatsToSend) > maxSize) {\n // If the header would exceed max size, remove the added heartbeat\n // entry and stop adding to the header.\n heartbeatsToSend.pop();\n break;\n }\n }\n else {\n heartbeatEntry.dates.push(singleDateHeartbeat.date);\n // If the header would exceed max size, remove the added date\n // and stop adding to the header.\n if (countBytes(heartbeatsToSend) > maxSize) {\n heartbeatEntry.dates.pop();\n break;\n }\n }\n // Pop unsent entry from queue. (Skipped if adding the entry exceeded\n // quota and the loop breaks early.)\n unsentEntries = unsentEntries.slice(1);\n }\n return {\n heartbeatsToSend,\n unsentEntries\n };\n}\nclass HeartbeatStorageImpl {\n constructor(app) {\n this.app = app;\n this._canUseIndexedDBPromise = this.runIndexedDBEnvironmentCheck();\n }\n async runIndexedDBEnvironmentCheck() {\n if (!isIndexedDBAvailable()) {\n return false;\n }\n else {\n return validateIndexedDBOpenable()\n .then(() => true)\n .catch(() => false);\n }\n }\n /**\n * Read all heartbeats.\n */\n async read() {\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\n if (!canUseIndexedDB) {\n return { heartbeats: [] };\n }\n else {\n const idbHeartbeatObject = await readHeartbeatsFromIndexedDB(this.app);\n if (idbHeartbeatObject === null || idbHeartbeatObject === void 0 ? void 0 : idbHeartbeatObject.heartbeats) {\n return idbHeartbeatObject;\n }\n else {\n return { heartbeats: [] };\n }\n }\n }\n // overwrite the storage with the provided heartbeats\n async overwrite(heartbeatsObject) {\n var _a;\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\n if (!canUseIndexedDB) {\n return;\n }\n else {\n const existingHeartbeatsObject = await this.read();\n return writeHeartbeatsToIndexedDB(this.app, {\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\n heartbeats: heartbeatsObject.heartbeats\n });\n }\n }\n // add heartbeats\n async add(heartbeatsObject) {\n var _a;\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\n if (!canUseIndexedDB) {\n return;\n }\n else {\n const existingHeartbeatsObject = await this.read();\n return writeHeartbeatsToIndexedDB(this.app, {\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\n heartbeats: [\n ...existingHeartbeatsObject.heartbeats,\n ...heartbeatsObject.heartbeats\n ]\n });\n }\n }\n}\n/**\n * Calculate bytes of a HeartbeatsByUserAgent array after being wrapped\n * in a platform logging header JSON object, stringified, and converted\n * to base 64.\n */\nfunction countBytes(heartbeatsCache) {\n // base64 has a restricted set of characters, all of which should be 1 byte.\n return base64urlEncodeWithoutPadding(\n // heartbeatsCache wrapper properties\n JSON.stringify({ version: 2, heartbeats: heartbeatsCache })).length;\n}\n/**\n * Returns the index of the heartbeat with the earliest date.\n * If the heartbeats array is empty, -1 is returned.\n */\nfunction getEarliestHeartbeatIdx(heartbeats) {\n if (heartbeats.length === 0) {\n return -1;\n }\n let earliestHeartbeatIdx = 0;\n let earliestHeartbeatDate = heartbeats[0].date;\n for (let i = 1; i < heartbeats.length; i++) {\n if (heartbeats[i].date < earliestHeartbeatDate) {\n earliestHeartbeatDate = heartbeats[i].date;\n earliestHeartbeatIdx = i;\n }\n }\n return earliestHeartbeatIdx;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction registerCoreComponents(variant) {\n _registerComponent(new Component('platform-logger', container => new PlatformLoggerServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\n _registerComponent(new Component('heartbeat', container => new HeartbeatServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\n // Register `app` package.\n registerVersion(name$q, version$1, variant);\n // BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\n registerVersion(name$q, version$1, 'esm2017');\n // Register platform SDK identifier (no version).\n registerVersion('fire-js', '');\n}\n\n/**\n * Firebase App\n *\n * @remarks This package coordinates the communication between the different Firebase components\n * @packageDocumentation\n */\nregisterCoreComponents('');\n\nexport { SDK_VERSION, DEFAULT_ENTRY_NAME as _DEFAULT_ENTRY_NAME, _addComponent, _addOrOverwriteComponent, _apps, _clearComponents, _components, _getProvider, _isFirebaseApp, _isFirebaseServerApp, _registerComponent, _removeServiceInstance, _serverApps, deleteApp, getApp, getApps, initializeApp, initializeServerApp, onLog, registerVersion, setLogLevel };\n//# sourceMappingURL=index.esm2017.js.map\n","import { Deferred } from '@firebase/util';\n\n/**\n * Component for service name T, e.g. `auth`, `auth-internal`\n */\nclass Component {\n /**\n *\n * @param name The public service name, e.g. app, auth, firestore, database\n * @param instanceFactory Service factory responsible for creating the public interface\n * @param type whether the service provided by the component is public or private\n */\n constructor(name, instanceFactory, type) {\n this.name = name;\n this.instanceFactory = instanceFactory;\n this.type = type;\n this.multipleInstances = false;\n /**\n * Properties to be added to the service namespace\n */\n this.serviceProps = {};\n this.instantiationMode = \"LAZY\" /* InstantiationMode.LAZY */;\n this.onInstanceCreated = null;\n }\n setInstantiationMode(mode) {\n this.instantiationMode = mode;\n return this;\n }\n setMultipleInstances(multipleInstances) {\n this.multipleInstances = multipleInstances;\n return this;\n }\n setServiceProps(props) {\n this.serviceProps = props;\n return this;\n }\n setInstanceCreatedCallback(callback) {\n this.onInstanceCreated = callback;\n return this;\n }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provider for instance for service name T, e.g. 'auth', 'auth-internal'\n * NameServiceMapping[T] is an alias for the type of the instance\n */\nclass Provider {\n constructor(name, container) {\n this.name = name;\n this.container = container;\n this.component = null;\n this.instances = new Map();\n this.instancesDeferred = new Map();\n this.instancesOptions = new Map();\n this.onInitCallbacks = new Map();\n }\n /**\n * @param identifier A provider can provide multiple instances of a service\n * if this.component.multipleInstances is true.\n */\n get(identifier) {\n // if multipleInstances is not supported, use the default name\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\n if (!this.instancesDeferred.has(normalizedIdentifier)) {\n const deferred = new Deferred();\n this.instancesDeferred.set(normalizedIdentifier, deferred);\n if (this.isInitialized(normalizedIdentifier) ||\n this.shouldAutoInitialize()) {\n // initialize the service if it can be auto-initialized\n try {\n const instance = this.getOrInitializeService({\n instanceIdentifier: normalizedIdentifier\n });\n if (instance) {\n deferred.resolve(instance);\n }\n }\n catch (e) {\n // when the instance factory throws an exception during get(), it should not cause\n // a fatal error. We just return the unresolved promise in this case.\n }\n }\n }\n return this.instancesDeferred.get(normalizedIdentifier).promise;\n }\n getImmediate(options) {\n var _a;\n // if multipleInstances is not supported, use the default name\n const normalizedIdentifier = this.normalizeInstanceIdentifier(options === null || options === void 0 ? void 0 : options.identifier);\n const optional = (_a = options === null || options === void 0 ? void 0 : options.optional) !== null && _a !== void 0 ? _a : false;\n if (this.isInitialized(normalizedIdentifier) ||\n this.shouldAutoInitialize()) {\n try {\n return this.getOrInitializeService({\n instanceIdentifier: normalizedIdentifier\n });\n }\n catch (e) {\n if (optional) {\n return null;\n }\n else {\n throw e;\n }\n }\n }\n else {\n // In case a component is not initialized and should/cannot be auto-initialized at the moment, return null if the optional flag is set, or throw\n if (optional) {\n return null;\n }\n else {\n throw Error(`Service ${this.name} is not available`);\n }\n }\n }\n getComponent() {\n return this.component;\n }\n setComponent(component) {\n if (component.name !== this.name) {\n throw Error(`Mismatching Component ${component.name} for Provider ${this.name}.`);\n }\n if (this.component) {\n throw Error(`Component for ${this.name} has already been provided`);\n }\n this.component = component;\n // return early without attempting to initialize the component if the component requires explicit initialization (calling `Provider.initialize()`)\n if (!this.shouldAutoInitialize()) {\n return;\n }\n // if the service is eager, initialize the default instance\n if (isComponentEager(component)) {\n try {\n this.getOrInitializeService({ instanceIdentifier: DEFAULT_ENTRY_NAME });\n }\n catch (e) {\n // when the instance factory for an eager Component throws an exception during the eager\n // initialization, it should not cause a fatal error.\n // TODO: Investigate if we need to make it configurable, because some component may want to cause\n // a fatal error in this case?\n }\n }\n // Create service instances for the pending promises and resolve them\n // NOTE: if this.multipleInstances is false, only the default instance will be created\n // and all promises with resolve with it regardless of the identifier.\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\n const normalizedIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\n try {\n // `getOrInitializeService()` should always return a valid instance since a component is guaranteed. use ! to make typescript happy.\n const instance = this.getOrInitializeService({\n instanceIdentifier: normalizedIdentifier\n });\n instanceDeferred.resolve(instance);\n }\n catch (e) {\n // when the instance factory throws an exception, it should not cause\n // a fatal error. We just leave the promise unresolved.\n }\n }\n }\n clearInstance(identifier = DEFAULT_ENTRY_NAME) {\n this.instancesDeferred.delete(identifier);\n this.instancesOptions.delete(identifier);\n this.instances.delete(identifier);\n }\n // app.delete() will call this method on every provider to delete the services\n // TODO: should we mark the provider as deleted?\n async delete() {\n const services = Array.from(this.instances.values());\n await Promise.all([\n ...services\n .filter(service => 'INTERNAL' in service) // legacy services\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map(service => service.INTERNAL.delete()),\n ...services\n .filter(service => '_delete' in service) // modularized services\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map(service => service._delete())\n ]);\n }\n isComponentSet() {\n return this.component != null;\n }\n isInitialized(identifier = DEFAULT_ENTRY_NAME) {\n return this.instances.has(identifier);\n }\n getOptions(identifier = DEFAULT_ENTRY_NAME) {\n return this.instancesOptions.get(identifier) || {};\n }\n initialize(opts = {}) {\n const { options = {} } = opts;\n const normalizedIdentifier = this.normalizeInstanceIdentifier(opts.instanceIdentifier);\n if (this.isInitialized(normalizedIdentifier)) {\n throw Error(`${this.name}(${normalizedIdentifier}) has already been initialized`);\n }\n if (!this.isComponentSet()) {\n throw Error(`Component ${this.name} has not been registered yet`);\n }\n const instance = this.getOrInitializeService({\n instanceIdentifier: normalizedIdentifier,\n options\n });\n // resolve any pending promise waiting for the service instance\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\n const normalizedDeferredIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\n if (normalizedIdentifier === normalizedDeferredIdentifier) {\n instanceDeferred.resolve(instance);\n }\n }\n return instance;\n }\n /**\n *\n * @param callback - a function that will be invoked after the provider has been initialized by calling provider.initialize().\n * The function is invoked SYNCHRONOUSLY, so it should not execute any longrunning tasks in order to not block the program.\n *\n * @param identifier An optional instance identifier\n * @returns a function to unregister the callback\n */\n onInit(callback, identifier) {\n var _a;\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\n const existingCallbacks = (_a = this.onInitCallbacks.get(normalizedIdentifier)) !== null && _a !== void 0 ? _a : new Set();\n existingCallbacks.add(callback);\n this.onInitCallbacks.set(normalizedIdentifier, existingCallbacks);\n const existingInstance = this.instances.get(normalizedIdentifier);\n if (existingInstance) {\n callback(existingInstance, normalizedIdentifier);\n }\n return () => {\n existingCallbacks.delete(callback);\n };\n }\n /**\n * Invoke onInit callbacks synchronously\n * @param instance the service instance`\n */\n invokeOnInitCallbacks(instance, identifier) {\n const callbacks = this.onInitCallbacks.get(identifier);\n if (!callbacks) {\n return;\n }\n for (const callback of callbacks) {\n try {\n callback(instance, identifier);\n }\n catch (_a) {\n // ignore errors in the onInit callback\n }\n }\n }\n getOrInitializeService({ instanceIdentifier, options = {} }) {\n let instance = this.instances.get(instanceIdentifier);\n if (!instance && this.component) {\n instance = this.component.instanceFactory(this.container, {\n instanceIdentifier: normalizeIdentifierForFactory(instanceIdentifier),\n options\n });\n this.instances.set(instanceIdentifier, instance);\n this.instancesOptions.set(instanceIdentifier, options);\n /**\n * Invoke onInit listeners.\n * Note this.component.onInstanceCreated is different, which is used by the component creator,\n * while onInit listeners are registered by consumers of the provider.\n */\n this.invokeOnInitCallbacks(instance, instanceIdentifier);\n /**\n * Order is important\n * onInstanceCreated() should be called after this.instances.set(instanceIdentifier, instance); which\n * makes `isInitialized()` return true.\n */\n if (this.component.onInstanceCreated) {\n try {\n this.component.onInstanceCreated(this.container, instanceIdentifier, instance);\n }\n catch (_a) {\n // ignore errors in the onInstanceCreatedCallback\n }\n }\n }\n return instance || null;\n }\n normalizeInstanceIdentifier(identifier = DEFAULT_ENTRY_NAME) {\n if (this.component) {\n return this.component.multipleInstances ? identifier : DEFAULT_ENTRY_NAME;\n }\n else {\n return identifier; // assume multiple instances are supported before the component is provided.\n }\n }\n shouldAutoInitialize() {\n return (!!this.component &&\n this.component.instantiationMode !== \"EXPLICIT\" /* InstantiationMode.EXPLICIT */);\n }\n}\n// undefined should be passed to the service factory for the default instance\nfunction normalizeIdentifierForFactory(identifier) {\n return identifier === DEFAULT_ENTRY_NAME ? undefined : identifier;\n}\nfunction isComponentEager(component) {\n return component.instantiationMode === \"EAGER\" /* InstantiationMode.EAGER */;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * ComponentContainer that provides Providers for service name T, e.g. `auth`, `auth-internal`\n */\nclass ComponentContainer {\n constructor(name) {\n this.name = name;\n this.providers = new Map();\n }\n /**\n *\n * @param component Component being added\n * @param overwrite When a component with the same name has already been registered,\n * if overwrite is true: overwrite the existing component with the new component and create a new\n * provider with the new component. It can be useful in tests where you want to use different mocks\n * for different tests.\n * if overwrite is false: throw an exception\n */\n addComponent(component) {\n const provider = this.getProvider(component.name);\n if (provider.isComponentSet()) {\n throw new Error(`Component ${component.name} has already been registered with ${this.name}`);\n }\n provider.setComponent(component);\n }\n addOrOverwriteComponent(component) {\n const provider = this.getProvider(component.name);\n if (provider.isComponentSet()) {\n // delete the existing provider from the container, so we can register the new component\n this.providers.delete(component.name);\n }\n this.addComponent(component);\n }\n /**\n * getProvider provides a type safe interface where it can only be called with a field name\n * present in NameServiceMapping interface.\n *\n * Firebase SDKs providing services should extend NameServiceMapping interface to register\n * themselves.\n */\n getProvider(name) {\n if (this.providers.has(name)) {\n return this.providers.get(name);\n }\n // create a Provider for a service that hasn't registered with Firebase\n const provider = new Provider(name, this);\n this.providers.set(name, provider);\n return provider;\n }\n getProviders() {\n return Array.from(this.providers.values());\n }\n}\n\nexport { Component, ComponentContainer, Provider };\n//# sourceMappingURL=index.esm2017.js.map\n","import { _getProvider, getApp, _registerComponent, registerVersion } from '@firebase/app';\nimport { Component } from '@firebase/component';\nimport { ErrorFactory, FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\nconst name = \"@firebase/installations\";\nconst version = \"0.6.18\";\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst PENDING_TIMEOUT_MS = 10000;\nconst PACKAGE_VERSION = `w:${version}`;\nconst INTERNAL_AUTH_VERSION = 'FIS_v2';\nconst INSTALLATIONS_API_URL = 'https://firebaseinstallations.googleapis.com/v1';\nconst TOKEN_EXPIRATION_BUFFER = 60 * 60 * 1000; // One hour\nconst SERVICE = 'installations';\nconst SERVICE_NAME = 'Installations';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst ERROR_DESCRIPTION_MAP = {\n [\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */]: 'Missing App configuration value: \"{$valueName}\"',\n [\"not-registered\" /* ErrorCode.NOT_REGISTERED */]: 'Firebase Installation is not registered.',\n [\"installation-not-found\" /* ErrorCode.INSTALLATION_NOT_FOUND */]: 'Firebase Installation not found.',\n [\"request-failed\" /* ErrorCode.REQUEST_FAILED */]: '{$requestName} request failed with error \"{$serverCode} {$serverStatus}: {$serverMessage}\"',\n [\"app-offline\" /* ErrorCode.APP_OFFLINE */]: 'Could not process request. Application offline.',\n [\"delete-pending-registration\" /* ErrorCode.DELETE_PENDING_REGISTRATION */]: \"Can't delete installation while there is a pending registration request.\"\n};\nconst ERROR_FACTORY = new ErrorFactory(SERVICE, SERVICE_NAME, ERROR_DESCRIPTION_MAP);\n/** Returns true if error is a FirebaseError that is based on an error from the server. */\nfunction isServerError(error) {\n return (error instanceof FirebaseError &&\n error.code.includes(\"request-failed\" /* ErrorCode.REQUEST_FAILED */));\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getInstallationsEndpoint({ projectId }) {\n return `${INSTALLATIONS_API_URL}/projects/${projectId}/installations`;\n}\nfunction extractAuthTokenInfoFromResponse(response) {\n return {\n token: response.token,\n requestStatus: 2 /* RequestStatus.COMPLETED */,\n expiresIn: getExpiresInFromResponseExpiresIn(response.expiresIn),\n creationTime: Date.now()\n };\n}\nasync function getErrorFromResponse(requestName, response) {\n const responseJson = await response.json();\n const errorData = responseJson.error;\n return ERROR_FACTORY.create(\"request-failed\" /* ErrorCode.REQUEST_FAILED */, {\n requestName,\n serverCode: errorData.code,\n serverMessage: errorData.message,\n serverStatus: errorData.status\n });\n}\nfunction getHeaders({ apiKey }) {\n return new Headers({\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'x-goog-api-key': apiKey\n });\n}\nfunction getHeadersWithAuth(appConfig, { refreshToken }) {\n const headers = getHeaders(appConfig);\n headers.append('Authorization', getAuthorizationHeader(refreshToken));\n return headers;\n}\n/**\n * Calls the passed in fetch wrapper and returns the response.\n * If the returned response has a status of 5xx, re-runs the function once and\n * returns the response.\n */\nasync function retryIfServerError(fn) {\n const result = await fn();\n if (result.status >= 500 && result.status < 600) {\n // Internal Server Error. Retry request.\n return fn();\n }\n return result;\n}\nfunction getExpiresInFromResponseExpiresIn(responseExpiresIn) {\n // This works because the server will never respond with fractions of a second.\n return Number(responseExpiresIn.replace('s', '000'));\n}\nfunction getAuthorizationHeader(refreshToken) {\n return `${INTERNAL_AUTH_VERSION} ${refreshToken}`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function createInstallationRequest({ appConfig, heartbeatServiceProvider }, { fid }) {\n const endpoint = getInstallationsEndpoint(appConfig);\n const headers = getHeaders(appConfig);\n // If heartbeat service exists, add the heartbeat string to the header.\n const heartbeatService = heartbeatServiceProvider.getImmediate({\n optional: true\n });\n if (heartbeatService) {\n const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\n if (heartbeatsHeader) {\n headers.append('x-firebase-client', heartbeatsHeader);\n }\n }\n const body = {\n fid,\n authVersion: INTERNAL_AUTH_VERSION,\n appId: appConfig.appId,\n sdkVersion: PACKAGE_VERSION\n };\n const request = {\n method: 'POST',\n headers,\n body: JSON.stringify(body)\n };\n const response = await retryIfServerError(() => fetch(endpoint, request));\n if (response.ok) {\n const responseValue = await response.json();\n const registeredInstallationEntry = {\n fid: responseValue.fid || fid,\n registrationStatus: 2 /* RequestStatus.COMPLETED */,\n refreshToken: responseValue.refreshToken,\n authToken: extractAuthTokenInfoFromResponse(responseValue.authToken)\n };\n return registeredInstallationEntry;\n }\n else {\n throw await getErrorFromResponse('Create Installation', response);\n }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Returns a promise that resolves after given time passes. */\nfunction sleep(ms) {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction bufferToBase64UrlSafe(array) {\n const b64 = btoa(String.fromCharCode(...array));\n return b64.replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst VALID_FID_PATTERN = /^[cdef][\\w-]{21}$/;\nconst INVALID_FID = '';\n/**\n * Generates a new FID using random values from Web Crypto API.\n * Returns an empty string if FID generation fails for any reason.\n */\nfunction generateFid() {\n try {\n // A valid FID has exactly 22 base64 characters, which is 132 bits, or 16.5\n // bytes. our implementation generates a 17 byte array instead.\n const fidByteArray = new Uint8Array(17);\n const crypto = self.crypto || self.msCrypto;\n crypto.getRandomValues(fidByteArray);\n // Replace the first 4 random bits with the constant FID header of 0b0111.\n fidByteArray[0] = 0b01110000 + (fidByteArray[0] % 0b00010000);\n const fid = encode(fidByteArray);\n return VALID_FID_PATTERN.test(fid) ? fid : INVALID_FID;\n }\n catch (_a) {\n // FID generation errored\n return INVALID_FID;\n }\n}\n/** Converts a FID Uint8Array to a base64 string representation. */\nfunction encode(fidByteArray) {\n const b64String = bufferToBase64UrlSafe(fidByteArray);\n // Remove the 23rd character that was added because of the extra 4 bits at the\n // end of our 17 byte array, and the '=' padding.\n return b64String.substr(0, 22);\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Returns a string key that can be used to identify the app. */\nfunction getKey(appConfig) {\n return `${appConfig.appName}!${appConfig.appId}`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst fidChangeCallbacks = new Map();\n/**\n * Calls the onIdChange callbacks with the new FID value, and broadcasts the\n * change to other tabs.\n */\nfunction fidChanged(appConfig, fid) {\n const key = getKey(appConfig);\n callFidChangeCallbacks(key, fid);\n broadcastFidChange(key, fid);\n}\nfunction addCallback(appConfig, callback) {\n // Open the broadcast channel if it's not already open,\n // to be able to listen to change events from other tabs.\n getBroadcastChannel();\n const key = getKey(appConfig);\n let callbackSet = fidChangeCallbacks.get(key);\n if (!callbackSet) {\n callbackSet = new Set();\n fidChangeCallbacks.set(key, callbackSet);\n }\n callbackSet.add(callback);\n}\nfunction removeCallback(appConfig, callback) {\n const key = getKey(appConfig);\n const callbackSet = fidChangeCallbacks.get(key);\n if (!callbackSet) {\n return;\n }\n callbackSet.delete(callback);\n if (callbackSet.size === 0) {\n fidChangeCallbacks.delete(key);\n }\n // Close broadcast channel if there are no more callbacks.\n closeBroadcastChannel();\n}\nfunction callFidChangeCallbacks(key, fid) {\n const callbacks = fidChangeCallbacks.get(key);\n if (!callbacks) {\n return;\n }\n for (const callback of callbacks) {\n callback(fid);\n }\n}\nfunction broadcastFidChange(key, fid) {\n const channel = getBroadcastChannel();\n if (channel) {\n channel.postMessage({ key, fid });\n }\n closeBroadcastChannel();\n}\nlet broadcastChannel = null;\n/** Opens and returns a BroadcastChannel if it is supported by the browser. */\nfunction getBroadcastChannel() {\n if (!broadcastChannel && 'BroadcastChannel' in self) {\n broadcastChannel = new BroadcastChannel('[Firebase] FID Change');\n broadcastChannel.onmessage = e => {\n callFidChangeCallbacks(e.data.key, e.data.fid);\n };\n }\n return broadcastChannel;\n}\nfunction closeBroadcastChannel() {\n if (fidChangeCallbacks.size === 0 && broadcastChannel) {\n broadcastChannel.close();\n broadcastChannel = null;\n }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DATABASE_NAME = 'firebase-installations-database';\nconst DATABASE_VERSION = 1;\nconst OBJECT_STORE_NAME = 'firebase-installations-store';\nlet dbPromise = null;\nfunction getDbPromise() {\n if (!dbPromise) {\n dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\n upgrade: (db, oldVersion) => {\n // We don't use 'break' in this switch statement, the fall-through\n // behavior is what we want, because if there are multiple versions between\n // the old version and the current version, we want ALL the migrations\n // that correspond to those versions to run, not only the last one.\n // eslint-disable-next-line default-case\n switch (oldVersion) {\n case 0:\n db.createObjectStore(OBJECT_STORE_NAME);\n }\n }\n });\n }\n return dbPromise;\n}\n/** Assigns or overwrites the record for the given key with the given value. */\nasync function set(appConfig, value) {\n const key = getKey(appConfig);\n const db = await getDbPromise();\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n const objectStore = tx.objectStore(OBJECT_STORE_NAME);\n const oldValue = (await objectStore.get(key));\n await objectStore.put(value, key);\n await tx.done;\n if (!oldValue || oldValue.fid !== value.fid) {\n fidChanged(appConfig, value.fid);\n }\n return value;\n}\n/** Removes record(s) from the objectStore that match the given key. */\nasync function remove(appConfig) {\n const key = getKey(appConfig);\n const db = await getDbPromise();\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n await tx.objectStore(OBJECT_STORE_NAME).delete(key);\n await tx.done;\n}\n/**\n * Atomically updates a record with the result of updateFn, which gets\n * called with the current value. If newValue is undefined, the record is\n * deleted instead.\n * @return Updated value\n */\nasync function update(appConfig, updateFn) {\n const key = getKey(appConfig);\n const db = await getDbPromise();\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n const store = tx.objectStore(OBJECT_STORE_NAME);\n const oldValue = (await store.get(key));\n const newValue = updateFn(oldValue);\n if (newValue === undefined) {\n await store.delete(key);\n }\n else {\n await store.put(newValue, key);\n }\n await tx.done;\n if (newValue && (!oldValue || oldValue.fid !== newValue.fid)) {\n fidChanged(appConfig, newValue.fid);\n }\n return newValue;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Updates and returns the InstallationEntry from the database.\n * Also triggers a registration request if it is necessary and possible.\n */\nasync function getInstallationEntry(installations) {\n let registrationPromise;\n const installationEntry = await update(installations.appConfig, oldEntry => {\n const installationEntry = updateOrCreateInstallationEntry(oldEntry);\n const entryWithPromise = triggerRegistrationIfNecessary(installations, installationEntry);\n registrationPromise = entryWithPromise.registrationPromise;\n return entryWithPromise.installationEntry;\n });\n if (installationEntry.fid === INVALID_FID) {\n // FID generation failed. Waiting for the FID from the server.\n return { installationEntry: await registrationPromise };\n }\n return {\n installationEntry,\n registrationPromise\n };\n}\n/**\n * Creates a new Installation Entry if one does not exist.\n * Also clears timed out pending requests.\n */\nfunction updateOrCreateInstallationEntry(oldEntry) {\n const entry = oldEntry || {\n fid: generateFid(),\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\n };\n return clearTimedOutRequest(entry);\n}\n/**\n * If the Firebase Installation is not registered yet, this will trigger the\n * registration and return an InProgressInstallationEntry.\n *\n * If registrationPromise does not exist, the installationEntry is guaranteed\n * to be registered.\n */\nfunction triggerRegistrationIfNecessary(installations, installationEntry) {\n if (installationEntry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\n if (!navigator.onLine) {\n // Registration required but app is offline.\n const registrationPromiseWithError = Promise.reject(ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */));\n return {\n installationEntry,\n registrationPromise: registrationPromiseWithError\n };\n }\n // Try registering. Change status to IN_PROGRESS.\n const inProgressEntry = {\n fid: installationEntry.fid,\n registrationStatus: 1 /* RequestStatus.IN_PROGRESS */,\n registrationTime: Date.now()\n };\n const registrationPromise = registerInstallation(installations, inProgressEntry);\n return { installationEntry: inProgressEntry, registrationPromise };\n }\n else if (installationEntry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n return {\n installationEntry,\n registrationPromise: waitUntilFidRegistration(installations)\n };\n }\n else {\n return { installationEntry };\n }\n}\n/** This will be executed only once for each new Firebase Installation. */\nasync function registerInstallation(installations, installationEntry) {\n try {\n const registeredInstallationEntry = await createInstallationRequest(installations, installationEntry);\n return set(installations.appConfig, registeredInstallationEntry);\n }\n catch (e) {\n if (isServerError(e) && e.customData.serverCode === 409) {\n // Server returned a \"FID cannot be used\" error.\n // Generate a new ID next time.\n await remove(installations.appConfig);\n }\n else {\n // Registration failed. Set FID as not registered.\n await set(installations.appConfig, {\n fid: installationEntry.fid,\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\n });\n }\n throw e;\n }\n}\n/** Call if FID registration is pending in another request. */\nasync function waitUntilFidRegistration(installations) {\n // Unfortunately, there is no way of reliably observing when a value in\n // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\n // so we need to poll.\n let entry = await updateInstallationRequest(installations.appConfig);\n while (entry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n // createInstallation request still in progress.\n await sleep(100);\n entry = await updateInstallationRequest(installations.appConfig);\n }\n if (entry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\n // The request timed out or failed in a different call. Try again.\n const { installationEntry, registrationPromise } = await getInstallationEntry(installations);\n if (registrationPromise) {\n return registrationPromise;\n }\n else {\n // if there is no registrationPromise, entry is registered.\n return installationEntry;\n }\n }\n return entry;\n}\n/**\n * Called only if there is a CreateInstallation request in progress.\n *\n * Updates the InstallationEntry in the DB based on the status of the\n * CreateInstallation request.\n *\n * Returns the updated InstallationEntry.\n */\nfunction updateInstallationRequest(appConfig) {\n return update(appConfig, oldEntry => {\n if (!oldEntry) {\n throw ERROR_FACTORY.create(\"installation-not-found\" /* ErrorCode.INSTALLATION_NOT_FOUND */);\n }\n return clearTimedOutRequest(oldEntry);\n });\n}\nfunction clearTimedOutRequest(entry) {\n if (hasInstallationRequestTimedOut(entry)) {\n return {\n fid: entry.fid,\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\n };\n }\n return entry;\n}\nfunction hasInstallationRequestTimedOut(installationEntry) {\n return (installationEntry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */ &&\n installationEntry.registrationTime + PENDING_TIMEOUT_MS < Date.now());\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function generateAuthTokenRequest({ appConfig, heartbeatServiceProvider }, installationEntry) {\n const endpoint = getGenerateAuthTokenEndpoint(appConfig, installationEntry);\n const headers = getHeadersWithAuth(appConfig, installationEntry);\n // If heartbeat service exists, add the heartbeat string to the header.\n const heartbeatService = heartbeatServiceProvider.getImmediate({\n optional: true\n });\n if (heartbeatService) {\n const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\n if (heartbeatsHeader) {\n headers.append('x-firebase-client', heartbeatsHeader);\n }\n }\n const body = {\n installation: {\n sdkVersion: PACKAGE_VERSION,\n appId: appConfig.appId\n }\n };\n const request = {\n method: 'POST',\n headers,\n body: JSON.stringify(body)\n };\n const response = await retryIfServerError(() => fetch(endpoint, request));\n if (response.ok) {\n const responseValue = await response.json();\n const completedAuthToken = extractAuthTokenInfoFromResponse(responseValue);\n return completedAuthToken;\n }\n else {\n throw await getErrorFromResponse('Generate Auth Token', response);\n }\n}\nfunction getGenerateAuthTokenEndpoint(appConfig, { fid }) {\n return `${getInstallationsEndpoint(appConfig)}/${fid}/authTokens:generate`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns a valid authentication token for the installation. Generates a new\n * token if one doesn't exist, is expired or about to expire.\n *\n * Should only be called if the Firebase Installation is registered.\n */\nasync function refreshAuthToken(installations, forceRefresh = false) {\n let tokenPromise;\n const entry = await update(installations.appConfig, oldEntry => {\n if (!isEntryRegistered(oldEntry)) {\n throw ERROR_FACTORY.create(\"not-registered\" /* ErrorCode.NOT_REGISTERED */);\n }\n const oldAuthToken = oldEntry.authToken;\n if (!forceRefresh && isAuthTokenValid(oldAuthToken)) {\n // There is a valid token in the DB.\n return oldEntry;\n }\n else if (oldAuthToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n // There already is a token request in progress.\n tokenPromise = waitUntilAuthTokenRequest(installations, forceRefresh);\n return oldEntry;\n }\n else {\n // No token or token expired.\n if (!navigator.onLine) {\n throw ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */);\n }\n const inProgressEntry = makeAuthTokenRequestInProgressEntry(oldEntry);\n tokenPromise = fetchAuthTokenFromServer(installations, inProgressEntry);\n return inProgressEntry;\n }\n });\n const authToken = tokenPromise\n ? await tokenPromise\n : entry.authToken;\n return authToken;\n}\n/**\n * Call only if FID is registered and Auth Token request is in progress.\n *\n * Waits until the current pending request finishes. If the request times out,\n * tries once in this thread as well.\n */\nasync function waitUntilAuthTokenRequest(installations, forceRefresh) {\n // Unfortunately, there is no way of reliably observing when a value in\n // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\n // so we need to poll.\n let entry = await updateAuthTokenRequest(installations.appConfig);\n while (entry.authToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n // generateAuthToken still in progress.\n await sleep(100);\n entry = await updateAuthTokenRequest(installations.appConfig);\n }\n const authToken = entry.authToken;\n if (authToken.requestStatus === 0 /* RequestStatus.NOT_STARTED */) {\n // The request timed out or failed in a different call. Try again.\n return refreshAuthToken(installations, forceRefresh);\n }\n else {\n return authToken;\n }\n}\n/**\n * Called only if there is a GenerateAuthToken request in progress.\n *\n * Updates the InstallationEntry in the DB based on the status of the\n * GenerateAuthToken request.\n *\n * Returns the updated InstallationEntry.\n */\nfunction updateAuthTokenRequest(appConfig) {\n return update(appConfig, oldEntry => {\n if (!isEntryRegistered(oldEntry)) {\n throw ERROR_FACTORY.create(\"not-registered\" /* ErrorCode.NOT_REGISTERED */);\n }\n const oldAuthToken = oldEntry.authToken;\n if (hasAuthTokenRequestTimedOut(oldAuthToken)) {\n return Object.assign(Object.assign({}, oldEntry), { authToken: { requestStatus: 0 /* RequestStatus.NOT_STARTED */ } });\n }\n return oldEntry;\n });\n}\nasync function fetchAuthTokenFromServer(installations, installationEntry) {\n try {\n const authToken = await generateAuthTokenRequest(installations, installationEntry);\n const updatedInstallationEntry = Object.assign(Object.assign({}, installationEntry), { authToken });\n await set(installations.appConfig, updatedInstallationEntry);\n return authToken;\n }\n catch (e) {\n if (isServerError(e) &&\n (e.customData.serverCode === 401 || e.customData.serverCode === 404)) {\n // Server returned a \"FID not found\" or a \"Invalid authentication\" error.\n // Generate a new ID next time.\n await remove(installations.appConfig);\n }\n else {\n const updatedInstallationEntry = Object.assign(Object.assign({}, installationEntry), { authToken: { requestStatus: 0 /* RequestStatus.NOT_STARTED */ } });\n await set(installations.appConfig, updatedInstallationEntry);\n }\n throw e;\n }\n}\nfunction isEntryRegistered(installationEntry) {\n return (installationEntry !== undefined &&\n installationEntry.registrationStatus === 2 /* RequestStatus.COMPLETED */);\n}\nfunction isAuthTokenValid(authToken) {\n return (authToken.requestStatus === 2 /* RequestStatus.COMPLETED */ &&\n !isAuthTokenExpired(authToken));\n}\nfunction isAuthTokenExpired(authToken) {\n const now = Date.now();\n return (now < authToken.creationTime ||\n authToken.creationTime + authToken.expiresIn < now + TOKEN_EXPIRATION_BUFFER);\n}\n/** Returns an updated InstallationEntry with an InProgressAuthToken. */\nfunction makeAuthTokenRequestInProgressEntry(oldEntry) {\n const inProgressAuthToken = {\n requestStatus: 1 /* RequestStatus.IN_PROGRESS */,\n requestTime: Date.now()\n };\n return Object.assign(Object.assign({}, oldEntry), { authToken: inProgressAuthToken });\n}\nfunction hasAuthTokenRequestTimedOut(authToken) {\n return (authToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */ &&\n authToken.requestTime + PENDING_TIMEOUT_MS < Date.now());\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Creates a Firebase Installation if there isn't one for the app and\n * returns the Installation ID.\n * @param installations - The `Installations` instance.\n *\n * @public\n */\nasync function getId(installations) {\n const installationsImpl = installations;\n const { installationEntry, registrationPromise } = await getInstallationEntry(installationsImpl);\n if (registrationPromise) {\n registrationPromise.catch(console.error);\n }\n else {\n // If the installation is already registered, update the authentication\n // token if needed.\n refreshAuthToken(installationsImpl).catch(console.error);\n }\n return installationEntry.fid;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns a Firebase Installations auth token, identifying the current\n * Firebase Installation.\n * @param installations - The `Installations` instance.\n * @param forceRefresh - Force refresh regardless of token expiration.\n *\n * @public\n */\nasync function getToken(installations, forceRefresh = false) {\n const installationsImpl = installations;\n await completeInstallationRegistration(installationsImpl);\n // At this point we either have a Registered Installation in the DB, or we've\n // already thrown an error.\n const authToken = await refreshAuthToken(installationsImpl, forceRefresh);\n return authToken.token;\n}\nasync function completeInstallationRegistration(installations) {\n const { registrationPromise } = await getInstallationEntry(installations);\n if (registrationPromise) {\n // A createInstallation request is in progress. Wait until it finishes.\n await registrationPromise;\n }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function deleteInstallationRequest(appConfig, installationEntry) {\n const endpoint = getDeleteEndpoint(appConfig, installationEntry);\n const headers = getHeadersWithAuth(appConfig, installationEntry);\n const request = {\n method: 'DELETE',\n headers\n };\n const response = await retryIfServerError(() => fetch(endpoint, request));\n if (!response.ok) {\n throw await getErrorFromResponse('Delete Installation', response);\n }\n}\nfunction getDeleteEndpoint(appConfig, { fid }) {\n return `${getInstallationsEndpoint(appConfig)}/${fid}`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Deletes the Firebase Installation and all associated data.\n * @param installations - The `Installations` instance.\n *\n * @public\n */\nasync function deleteInstallations(installations) {\n const { appConfig } = installations;\n const entry = await update(appConfig, oldEntry => {\n if (oldEntry && oldEntry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\n // Delete the unregistered entry without sending a deleteInstallation request.\n return undefined;\n }\n return oldEntry;\n });\n if (entry) {\n if (entry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n // Can't delete while trying to register.\n throw ERROR_FACTORY.create(\"delete-pending-registration\" /* ErrorCode.DELETE_PENDING_REGISTRATION */);\n }\n else if (entry.registrationStatus === 2 /* RequestStatus.COMPLETED */) {\n if (!navigator.onLine) {\n throw ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */);\n }\n else {\n await deleteInstallationRequest(appConfig, entry);\n await remove(appConfig);\n }\n }\n }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Sets a new callback that will get called when Installation ID changes.\n * Returns an unsubscribe function that will remove the callback when called.\n * @param installations - The `Installations` instance.\n * @param callback - The callback function that is invoked when FID changes.\n * @returns A function that can be called to unsubscribe.\n *\n * @public\n */\nfunction onIdChange(installations, callback) {\n const { appConfig } = installations;\n addCallback(appConfig, callback);\n return () => {\n removeCallback(appConfig, callback);\n };\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns an instance of {@link Installations} associated with the given\n * {@link @firebase/app#FirebaseApp} instance.\n * @param app - The {@link @firebase/app#FirebaseApp} instance.\n *\n * @public\n */\nfunction getInstallations(app = getApp()) {\n const installationsImpl = _getProvider(app, 'installations').getImmediate();\n return installationsImpl;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction extractAppConfig(app) {\n if (!app || !app.options) {\n throw getMissingValueError('App Configuration');\n }\n if (!app.name) {\n throw getMissingValueError('App Name');\n }\n // Required app config keys\n const configKeys = [\n 'projectId',\n 'apiKey',\n 'appId'\n ];\n for (const keyName of configKeys) {\n if (!app.options[keyName]) {\n throw getMissingValueError(keyName);\n }\n }\n return {\n appName: app.name,\n projectId: app.options.projectId,\n apiKey: app.options.apiKey,\n appId: app.options.appId\n };\n}\nfunction getMissingValueError(valueName) {\n return ERROR_FACTORY.create(\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */, {\n valueName\n });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst INSTALLATIONS_NAME = 'installations';\nconst INSTALLATIONS_NAME_INTERNAL = 'installations-internal';\nconst publicFactory = (container) => {\n const app = container.getProvider('app').getImmediate();\n // Throws if app isn't configured properly.\n const appConfig = extractAppConfig(app);\n const heartbeatServiceProvider = _getProvider(app, 'heartbeat');\n const installationsImpl = {\n app,\n appConfig,\n heartbeatServiceProvider,\n _delete: () => Promise.resolve()\n };\n return installationsImpl;\n};\nconst internalFactory = (container) => {\n const app = container.getProvider('app').getImmediate();\n // Internal FIS instance relies on public FIS instance.\n const installations = _getProvider(app, INSTALLATIONS_NAME).getImmediate();\n const installationsInternal = {\n getId: () => getId(installations),\n getToken: (forceRefresh) => getToken(installations, forceRefresh)\n };\n return installationsInternal;\n};\nfunction registerInstallations() {\n _registerComponent(new Component(INSTALLATIONS_NAME, publicFactory, \"PUBLIC\" /* ComponentType.PUBLIC */));\n _registerComponent(new Component(INSTALLATIONS_NAME_INTERNAL, internalFactory, \"PRIVATE\" /* ComponentType.PRIVATE */));\n}\n\n/**\n * The Firebase Installations Web SDK.\n * This SDK does not work in a Node.js environment.\n *\n * @packageDocumentation\n */\nregisterInstallations();\nregisterVersion(name, version);\n// BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\nregisterVersion(name, version, 'esm2017');\n\nexport { deleteInstallations, getId, getInstallations, getToken, onIdChange };\n//# sourceMappingURL=index.esm2017.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A container for all of the Logger instances\n */\nconst instances = [];\n/**\n * The JS SDK supports 5 log levels and also allows a user the ability to\n * silence the logs altogether.\n *\n * The order is a follows:\n * DEBUG < VERBOSE < INFO < WARN < ERROR\n *\n * All of the log types above the current log level will be captured (i.e. if\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\n * `VERBOSE` logs will not)\n */\nvar LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\n LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\n LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\n LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\n LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\n})(LogLevel || (LogLevel = {}));\nconst levelStringToEnum = {\n 'debug': LogLevel.DEBUG,\n 'verbose': LogLevel.VERBOSE,\n 'info': LogLevel.INFO,\n 'warn': LogLevel.WARN,\n 'error': LogLevel.ERROR,\n 'silent': LogLevel.SILENT\n};\n/**\n * The default log level\n */\nconst defaultLogLevel = LogLevel.INFO;\n/**\n * By default, `console.debug` is not displayed in the developer console (in\n * chrome). To avoid forcing users to have to opt-in to these logs twice\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\n * logs to the `console.log` function.\n */\nconst ConsoleMethod = {\n [LogLevel.DEBUG]: 'log',\n [LogLevel.VERBOSE]: 'log',\n [LogLevel.INFO]: 'info',\n [LogLevel.WARN]: 'warn',\n [LogLevel.ERROR]: 'error'\n};\n/**\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\n * messages on to their corresponding console counterparts (if the log method\n * is supported by the current log level)\n */\nconst defaultLogHandler = (instance, logType, ...args) => {\n if (logType < instance.logLevel) {\n return;\n }\n const now = new Date().toISOString();\n const method = ConsoleMethod[logType];\n if (method) {\n console[method](`[${now}] ${instance.name}:`, ...args);\n }\n else {\n throw new Error(`Attempted to log a message with an invalid logType (value: ${logType})`);\n }\n};\nclass Logger {\n /**\n * Gives you an instance of a Logger to capture messages according to\n * Firebase's logging scheme.\n *\n * @param name The name that the logs will be associated with\n */\n constructor(name) {\n this.name = name;\n /**\n * The log level of the given Logger instance.\n */\n this._logLevel = defaultLogLevel;\n /**\n * The main (internal) log handler for the Logger instance.\n * Can be set to a new function in internal package code but not by user.\n */\n this._logHandler = defaultLogHandler;\n /**\n * The optional, additional, user-defined log handler for the Logger instance.\n */\n this._userLogHandler = null;\n /**\n * Capture the current instance for later use\n */\n instances.push(this);\n }\n get logLevel() {\n return this._logLevel;\n }\n set logLevel(val) {\n if (!(val in LogLevel)) {\n throw new TypeError(`Invalid value \"${val}\" assigned to \\`logLevel\\``);\n }\n this._logLevel = val;\n }\n // Workaround for setter/getter having to be the same type.\n setLogLevel(val) {\n this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\n }\n get logHandler() {\n return this._logHandler;\n }\n set logHandler(val) {\n if (typeof val !== 'function') {\n throw new TypeError('Value assigned to `logHandler` must be a function');\n }\n this._logHandler = val;\n }\n get userLogHandler() {\n return this._userLogHandler;\n }\n set userLogHandler(val) {\n this._userLogHandler = val;\n }\n /**\n * The functions below are all based on the `console` interface\n */\n debug(...args) {\n this._userLogHandler && this._userLogHandler(this, LogLevel.DEBUG, ...args);\n this._logHandler(this, LogLevel.DEBUG, ...args);\n }\n log(...args) {\n this._userLogHandler &&\n this._userLogHandler(this, LogLevel.VERBOSE, ...args);\n this._logHandler(this, LogLevel.VERBOSE, ...args);\n }\n info(...args) {\n this._userLogHandler && this._userLogHandler(this, LogLevel.INFO, ...args);\n this._logHandler(this, LogLevel.INFO, ...args);\n }\n warn(...args) {\n this._userLogHandler && this._userLogHandler(this, LogLevel.WARN, ...args);\n this._logHandler(this, LogLevel.WARN, ...args);\n }\n error(...args) {\n this._userLogHandler && this._userLogHandler(this, LogLevel.ERROR, ...args);\n this._logHandler(this, LogLevel.ERROR, ...args);\n }\n}\nfunction setLogLevel(level) {\n instances.forEach(inst => {\n inst.setLogLevel(level);\n });\n}\nfunction setUserLogHandler(logCallback, options) {\n for (const instance of instances) {\n let customLogLevel = null;\n if (options && options.level) {\n customLogLevel = levelStringToEnum[options.level];\n }\n if (logCallback === null) {\n instance.userLogHandler = null;\n }\n else {\n instance.userLogHandler = (instance, level, ...args) => {\n const message = args\n .map(arg => {\n if (arg == null) {\n return null;\n }\n else if (typeof arg === 'string') {\n return arg;\n }\n else if (typeof arg === 'number' || typeof arg === 'boolean') {\n return arg.toString();\n }\n else if (arg instanceof Error) {\n return arg.message;\n }\n else {\n try {\n return JSON.stringify(arg);\n }\n catch (ignored) {\n return null;\n }\n }\n })\n .filter(arg => arg)\n .join(' ');\n if (level >= (customLogLevel !== null && customLogLevel !== void 0 ? customLogLevel : instance.logLevel)) {\n logCallback({\n level: LogLevel[level].toLowerCase(),\n message,\n args,\n type: instance.name\n });\n }\n };\n }\n }\n}\n\nexport { LogLevel, Logger, setLogLevel, setUserLogHandler };\n//# sourceMappingURL=index.esm2017.js.map\n","import '@firebase/installations';\nimport { Component } from '@firebase/component';\nimport { openDB, deleteDB } from 'idb';\nimport { ErrorFactory, validateIndexedDBOpenable, isIndexedDBAvailable, areCookiesEnabled, getModularInstance } from '@firebase/util';\nimport { _registerComponent, registerVersion, _getProvider, getApp } from '@firebase/app';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_SW_PATH = '/firebase-messaging-sw.js';\nconst DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope';\nconst DEFAULT_VAPID_KEY = 'BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4';\nconst ENDPOINT = 'https://fcmregistrations.googleapis.com/v1';\nconst CONSOLE_CAMPAIGN_ID = 'google.c.a.c_id';\nconst CONSOLE_CAMPAIGN_NAME = 'google.c.a.c_l';\nconst CONSOLE_CAMPAIGN_TIME = 'google.c.a.ts';\n/** Set to '1' if Analytics is enabled for the campaign */\nconst CONSOLE_CAMPAIGN_ANALYTICS_ENABLED = 'google.c.a.e';\nconst DEFAULT_REGISTRATION_TIMEOUT = 10000;\nvar MessageType$1;\n(function (MessageType) {\n MessageType[MessageType[\"DATA_MESSAGE\"] = 1] = \"DATA_MESSAGE\";\n MessageType[MessageType[\"DISPLAY_NOTIFICATION\"] = 3] = \"DISPLAY_NOTIFICATION\";\n})(MessageType$1 || (MessageType$1 = {}));\n\n/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n * in compliance with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under the License\n * is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n * or implied. See the License for the specific language governing permissions and limitations under\n * the License.\n */\nvar MessageType;\n(function (MessageType) {\n MessageType[\"PUSH_RECEIVED\"] = \"push-received\";\n MessageType[\"NOTIFICATION_CLICKED\"] = \"notification-clicked\";\n})(MessageType || (MessageType = {}));\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction arrayToBase64(array) {\n const uint8Array = new Uint8Array(array);\n const base64String = btoa(String.fromCharCode(...uint8Array));\n return base64String.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\nfunction base64ToArray(base64String) {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding)\n .replace(/\\-/g, '+')\n .replace(/_/g, '/');\n const rawData = atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst OLD_DB_NAME = 'fcm_token_details_db';\n/**\n * The last DB version of 'fcm_token_details_db' was 4. This is one higher, so that the upgrade\n * callback is called for all versions of the old DB.\n */\nconst OLD_DB_VERSION = 5;\nconst OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store';\nasync function migrateOldDatabase(senderId) {\n if ('databases' in indexedDB) {\n // indexedDb.databases() is an IndexedDB v3 API and does not exist in all browsers. TODO: Remove\n // typecast when it lands in TS types.\n const databases = await indexedDB.databases();\n const dbNames = databases.map(db => db.name);\n if (!dbNames.includes(OLD_DB_NAME)) {\n // old DB didn't exist, no need to open.\n return null;\n }\n }\n let tokenDetails = null;\n const db = await openDB(OLD_DB_NAME, OLD_DB_VERSION, {\n upgrade: async (db, oldVersion, newVersion, upgradeTransaction) => {\n var _a;\n if (oldVersion < 2) {\n // Database too old, skip migration.\n return;\n }\n if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) {\n // Database did not exist. Nothing to do.\n return;\n }\n const objectStore = upgradeTransaction.objectStore(OLD_OBJECT_STORE_NAME);\n const value = await objectStore.index('fcmSenderId').get(senderId);\n await objectStore.clear();\n if (!value) {\n // No entry in the database, nothing to migrate.\n return;\n }\n if (oldVersion === 2) {\n const oldDetails = value;\n if (!oldDetails.auth || !oldDetails.p256dh || !oldDetails.endpoint) {\n return;\n }\n tokenDetails = {\n token: oldDetails.fcmToken,\n createTime: (_a = oldDetails.createTime) !== null && _a !== void 0 ? _a : Date.now(),\n subscriptionOptions: {\n auth: oldDetails.auth,\n p256dh: oldDetails.p256dh,\n endpoint: oldDetails.endpoint,\n swScope: oldDetails.swScope,\n vapidKey: typeof oldDetails.vapidKey === 'string'\n ? oldDetails.vapidKey\n : arrayToBase64(oldDetails.vapidKey)\n }\n };\n }\n else if (oldVersion === 3) {\n const oldDetails = value;\n tokenDetails = {\n token: oldDetails.fcmToken,\n createTime: oldDetails.createTime,\n subscriptionOptions: {\n auth: arrayToBase64(oldDetails.auth),\n p256dh: arrayToBase64(oldDetails.p256dh),\n endpoint: oldDetails.endpoint,\n swScope: oldDetails.swScope,\n vapidKey: arrayToBase64(oldDetails.vapidKey)\n }\n };\n }\n else if (oldVersion === 4) {\n const oldDetails = value;\n tokenDetails = {\n token: oldDetails.fcmToken,\n createTime: oldDetails.createTime,\n subscriptionOptions: {\n auth: arrayToBase64(oldDetails.auth),\n p256dh: arrayToBase64(oldDetails.p256dh),\n endpoint: oldDetails.endpoint,\n swScope: oldDetails.swScope,\n vapidKey: arrayToBase64(oldDetails.vapidKey)\n }\n };\n }\n }\n });\n db.close();\n // Delete all old databases.\n await deleteDB(OLD_DB_NAME);\n await deleteDB('fcm_vapid_details_db');\n await deleteDB('undefined');\n return checkTokenDetails(tokenDetails) ? tokenDetails : null;\n}\nfunction checkTokenDetails(tokenDetails) {\n if (!tokenDetails || !tokenDetails.subscriptionOptions) {\n return false;\n }\n const { subscriptionOptions } = tokenDetails;\n return (typeof tokenDetails.createTime === 'number' &&\n tokenDetails.createTime > 0 &&\n typeof tokenDetails.token === 'string' &&\n tokenDetails.token.length > 0 &&\n typeof subscriptionOptions.auth === 'string' &&\n subscriptionOptions.auth.length > 0 &&\n typeof subscriptionOptions.p256dh === 'string' &&\n subscriptionOptions.p256dh.length > 0 &&\n typeof subscriptionOptions.endpoint === 'string' &&\n subscriptionOptions.endpoint.length > 0 &&\n typeof subscriptionOptions.swScope === 'string' &&\n subscriptionOptions.swScope.length > 0 &&\n typeof subscriptionOptions.vapidKey === 'string' &&\n subscriptionOptions.vapidKey.length > 0);\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Exported for tests.\nconst DATABASE_NAME = 'firebase-messaging-database';\nconst DATABASE_VERSION = 1;\nconst OBJECT_STORE_NAME = 'firebase-messaging-store';\nlet dbPromise = null;\nfunction getDbPromise() {\n if (!dbPromise) {\n dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\n upgrade: (upgradeDb, oldVersion) => {\n // We don't use 'break' in this switch statement, the fall-through behavior is what we want,\n // because if there are multiple versions between the old version and the current version, we\n // want ALL the migrations that correspond to those versions to run, not only the last one.\n // eslint-disable-next-line default-case\n switch (oldVersion) {\n case 0:\n upgradeDb.createObjectStore(OBJECT_STORE_NAME);\n }\n }\n });\n }\n return dbPromise;\n}\n/** Gets record(s) from the objectStore that match the given key. */\nasync function dbGet(firebaseDependencies) {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n const tokenDetails = (await db\n .transaction(OBJECT_STORE_NAME)\n .objectStore(OBJECT_STORE_NAME)\n .get(key));\n if (tokenDetails) {\n return tokenDetails;\n }\n else {\n // Check if there is a tokenDetails object in the old DB.\n const oldTokenDetails = await migrateOldDatabase(firebaseDependencies.appConfig.senderId);\n if (oldTokenDetails) {\n await dbSet(firebaseDependencies, oldTokenDetails);\n return oldTokenDetails;\n }\n }\n}\n/** Assigns or overwrites the record for the given key with the given value. */\nasync function dbSet(firebaseDependencies, tokenDetails) {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n await tx.objectStore(OBJECT_STORE_NAME).put(tokenDetails, key);\n await tx.done;\n return tokenDetails;\n}\n/** Removes record(s) from the objectStore that match the given key. */\nasync function dbRemove(firebaseDependencies) {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n await tx.objectStore(OBJECT_STORE_NAME).delete(key);\n await tx.done;\n}\nfunction getKey({ appConfig }) {\n return appConfig.appId;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst ERROR_MAP = {\n [\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */]: 'Missing App configuration value: \"{$valueName}\"',\n [\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */]: 'This method is available in a Window context.',\n [\"only-available-in-sw\" /* ErrorCode.AVAILABLE_IN_SW */]: 'This method is available in a service worker context.',\n [\"permission-default\" /* ErrorCode.PERMISSION_DEFAULT */]: 'The notification permission was not granted and dismissed instead.',\n [\"permission-blocked\" /* ErrorCode.PERMISSION_BLOCKED */]: 'The notification permission was not granted and blocked instead.',\n [\"unsupported-browser\" /* ErrorCode.UNSUPPORTED_BROWSER */]: \"This browser doesn't support the API's required to use the Firebase SDK.\",\n [\"indexed-db-unsupported\" /* ErrorCode.INDEXED_DB_UNSUPPORTED */]: \"This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc)\",\n [\"failed-service-worker-registration\" /* ErrorCode.FAILED_DEFAULT_REGISTRATION */]: 'We are unable to register the default service worker. {$browserErrorMessage}',\n [\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */]: 'A problem occurred while subscribing the user to FCM: {$errorInfo}',\n [\"token-subscribe-no-token\" /* ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN */]: 'FCM returned no token when subscribing the user to push.',\n [\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */]: 'A problem occurred while unsubscribing the ' +\n 'user from FCM: {$errorInfo}',\n [\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */]: 'A problem occurred while updating the user from FCM: {$errorInfo}',\n [\"token-update-no-token\" /* ErrorCode.TOKEN_UPDATE_NO_TOKEN */]: 'FCM returned no token when updating the user to push.',\n [\"use-sw-after-get-token\" /* ErrorCode.USE_SW_AFTER_GET_TOKEN */]: 'The useServiceWorker() method may only be called once and must be ' +\n 'called before calling getToken() to ensure your service worker is used.',\n [\"invalid-sw-registration\" /* ErrorCode.INVALID_SW_REGISTRATION */]: 'The input to useServiceWorker() must be a ServiceWorkerRegistration.',\n [\"invalid-bg-handler\" /* ErrorCode.INVALID_BG_HANDLER */]: 'The input to setBackgroundMessageHandler() must be a function.',\n [\"invalid-vapid-key\" /* ErrorCode.INVALID_VAPID_KEY */]: 'The public VAPID key must be a string.',\n [\"use-vapid-key-after-get-token\" /* ErrorCode.USE_VAPID_KEY_AFTER_GET_TOKEN */]: 'The usePublicVapidKey() method may only be called once and must be ' +\n 'called before calling getToken() to ensure your VAPID key is used.'\n};\nconst ERROR_FACTORY = new ErrorFactory('messaging', 'Messaging', ERROR_MAP);\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function requestGetToken(firebaseDependencies, subscriptionOptions) {\n const headers = await getHeaders(firebaseDependencies);\n const body = getBody(subscriptionOptions);\n const subscribeOptions = {\n method: 'POST',\n headers,\n body: JSON.stringify(body)\n };\n let responseData;\n try {\n const response = await fetch(getEndpoint(firebaseDependencies.appConfig), subscribeOptions);\n responseData = await response.json();\n }\n catch (err) {\n throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */, {\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\n });\n }\n if (responseData.error) {\n const message = responseData.error.message;\n throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */, {\n errorInfo: message\n });\n }\n if (!responseData.token) {\n throw ERROR_FACTORY.create(\"token-subscribe-no-token\" /* ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN */);\n }\n return responseData.token;\n}\nasync function requestUpdateToken(firebaseDependencies, tokenDetails) {\n const headers = await getHeaders(firebaseDependencies);\n const body = getBody(tokenDetails.subscriptionOptions);\n const updateOptions = {\n method: 'PATCH',\n headers,\n body: JSON.stringify(body)\n };\n let responseData;\n try {\n const response = await fetch(`${getEndpoint(firebaseDependencies.appConfig)}/${tokenDetails.token}`, updateOptions);\n responseData = await response.json();\n }\n catch (err) {\n throw ERROR_FACTORY.create(\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */, {\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\n });\n }\n if (responseData.error) {\n const message = responseData.error.message;\n throw ERROR_FACTORY.create(\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */, {\n errorInfo: message\n });\n }\n if (!responseData.token) {\n throw ERROR_FACTORY.create(\"token-update-no-token\" /* ErrorCode.TOKEN_UPDATE_NO_TOKEN */);\n }\n return responseData.token;\n}\nasync function requestDeleteToken(firebaseDependencies, token) {\n const headers = await getHeaders(firebaseDependencies);\n const unsubscribeOptions = {\n method: 'DELETE',\n headers\n };\n try {\n const response = await fetch(`${getEndpoint(firebaseDependencies.appConfig)}/${token}`, unsubscribeOptions);\n const responseData = await response.json();\n if (responseData.error) {\n const message = responseData.error.message;\n throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */, {\n errorInfo: message\n });\n }\n }\n catch (err) {\n throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */, {\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\n });\n }\n}\nfunction getEndpoint({ projectId }) {\n return `${ENDPOINT}/projects/${projectId}/registrations`;\n}\nasync function getHeaders({ appConfig, installations }) {\n const authToken = await installations.getToken();\n return new Headers({\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'x-goog-api-key': appConfig.apiKey,\n 'x-goog-firebase-installations-auth': `FIS ${authToken}`\n });\n}\nfunction getBody({ p256dh, auth, endpoint, vapidKey }) {\n const body = {\n web: {\n endpoint,\n auth,\n p256dh\n }\n };\n if (vapidKey !== DEFAULT_VAPID_KEY) {\n body.web.applicationPubKey = vapidKey;\n }\n return body;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// UpdateRegistration will be called once every week.\nconst TOKEN_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\nasync function getTokenInternal(messaging) {\n const pushSubscription = await getPushSubscription(messaging.swRegistration, messaging.vapidKey);\n const subscriptionOptions = {\n vapidKey: messaging.vapidKey,\n swScope: messaging.swRegistration.scope,\n endpoint: pushSubscription.endpoint,\n auth: arrayToBase64(pushSubscription.getKey('auth')),\n p256dh: arrayToBase64(pushSubscription.getKey('p256dh'))\n };\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\n if (!tokenDetails) {\n // No token, get a new one.\n return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\n }\n else if (!isTokenValid(tokenDetails.subscriptionOptions, subscriptionOptions)) {\n // Invalid token, get a new one.\n try {\n await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\n }\n catch (e) {\n // Suppress errors because of #2364\n console.warn(e);\n }\n return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\n }\n else if (Date.now() >= tokenDetails.createTime + TOKEN_EXPIRATION_MS) {\n // Weekly token refresh\n return updateToken(messaging, {\n token: tokenDetails.token,\n createTime: Date.now(),\n subscriptionOptions\n });\n }\n else {\n // Valid token, nothing to do.\n return tokenDetails.token;\n }\n}\n/**\n * This method deletes the token from the database, unsubscribes the token from FCM, and unregisters\n * the push subscription if it exists.\n */\nasync function deleteTokenInternal(messaging) {\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\n if (tokenDetails) {\n await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\n await dbRemove(messaging.firebaseDependencies);\n }\n // Unsubscribe from the push subscription.\n const pushSubscription = await messaging.swRegistration.pushManager.getSubscription();\n if (pushSubscription) {\n return pushSubscription.unsubscribe();\n }\n // If there's no SW, consider it a success.\n return true;\n}\nasync function updateToken(messaging, tokenDetails) {\n try {\n const updatedToken = await requestUpdateToken(messaging.firebaseDependencies, tokenDetails);\n const updatedTokenDetails = Object.assign(Object.assign({}, tokenDetails), { token: updatedToken, createTime: Date.now() });\n await dbSet(messaging.firebaseDependencies, updatedTokenDetails);\n return updatedToken;\n }\n catch (e) {\n throw e;\n }\n}\nasync function getNewToken(firebaseDependencies, subscriptionOptions) {\n const token = await requestGetToken(firebaseDependencies, subscriptionOptions);\n const tokenDetails = {\n token,\n createTime: Date.now(),\n subscriptionOptions\n };\n await dbSet(firebaseDependencies, tokenDetails);\n return tokenDetails.token;\n}\n/**\n * Gets a PushSubscription for the current user.\n */\nasync function getPushSubscription(swRegistration, vapidKey) {\n const subscription = await swRegistration.pushManager.getSubscription();\n if (subscription) {\n return subscription;\n }\n return swRegistration.pushManager.subscribe({\n userVisibleOnly: true,\n // Chrome <= 75 doesn't support base64-encoded VAPID key. For backward compatibility, VAPID key\n // submitted to pushManager#subscribe must be of type Uint8Array.\n applicationServerKey: base64ToArray(vapidKey)\n });\n}\n/**\n * Checks if the saved tokenDetails object matches the configuration provided.\n */\nfunction isTokenValid(dbOptions, currentOptions) {\n const isVapidKeyEqual = currentOptions.vapidKey === dbOptions.vapidKey;\n const isEndpointEqual = currentOptions.endpoint === dbOptions.endpoint;\n const isAuthEqual = currentOptions.auth === dbOptions.auth;\n const isP256dhEqual = currentOptions.p256dh === dbOptions.p256dh;\n return isVapidKeyEqual && isEndpointEqual && isAuthEqual && isP256dhEqual;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction externalizePayload(internalPayload) {\n const payload = {\n from: internalPayload.from,\n // eslint-disable-next-line camelcase\n collapseKey: internalPayload.collapse_key,\n // eslint-disable-next-line camelcase\n messageId: internalPayload.fcmMessageId\n };\n propagateNotificationPayload(payload, internalPayload);\n propagateDataPayload(payload, internalPayload);\n propagateFcmOptions(payload, internalPayload);\n return payload;\n}\nfunction propagateNotificationPayload(payload, messagePayloadInternal) {\n if (!messagePayloadInternal.notification) {\n return;\n }\n payload.notification = {};\n const title = messagePayloadInternal.notification.title;\n if (!!title) {\n payload.notification.title = title;\n }\n const body = messagePayloadInternal.notification.body;\n if (!!body) {\n payload.notification.body = body;\n }\n const image = messagePayloadInternal.notification.image;\n if (!!image) {\n payload.notification.image = image;\n }\n const icon = messagePayloadInternal.notification.icon;\n if (!!icon) {\n payload.notification.icon = icon;\n }\n}\nfunction propagateDataPayload(payload, messagePayloadInternal) {\n if (!messagePayloadInternal.data) {\n return;\n }\n payload.data = messagePayloadInternal.data;\n}\nfunction propagateFcmOptions(payload, messagePayloadInternal) {\n var _a, _b, _c, _d, _e;\n // fcmOptions.link value is written into notification.click_action. see more in b/232072111\n if (!messagePayloadInternal.fcmOptions &&\n !((_a = messagePayloadInternal.notification) === null || _a === void 0 ? void 0 : _a.click_action)) {\n return;\n }\n payload.fcmOptions = {};\n const link = (_c = (_b = messagePayloadInternal.fcmOptions) === null || _b === void 0 ? void 0 : _b.link) !== null && _c !== void 0 ? _c : (_d = messagePayloadInternal.notification) === null || _d === void 0 ? void 0 : _d.click_action;\n if (!!link) {\n payload.fcmOptions.link = link;\n }\n // eslint-disable-next-line camelcase\n const analyticsLabel = (_e = messagePayloadInternal.fcmOptions) === null || _e === void 0 ? void 0 : _e.analytics_label;\n if (!!analyticsLabel) {\n payload.fcmOptions.analyticsLabel = analyticsLabel;\n }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction isConsoleMessage(data) {\n // This message has a campaign ID, meaning it was sent using the Firebase Console.\n return typeof data === 'object' && !!data && CONSOLE_CAMPAIGN_ID in data;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n_mergeStrings('AzSCbw63g1R0nCw85jG8', 'Iaya3yLKwmgvh7cF0q4');\nfunction _mergeStrings(s1, s2) {\n const resultArray = [];\n for (let i = 0; i < s1.length; i++) {\n resultArray.push(s1.charAt(i));\n if (i < s2.length) {\n resultArray.push(s2.charAt(i));\n }\n }\n return resultArray.join('');\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction extractAppConfig(app) {\n if (!app || !app.options) {\n throw getMissingValueError('App Configuration Object');\n }\n if (!app.name) {\n throw getMissingValueError('App Name');\n }\n // Required app config keys\n const configKeys = [\n 'projectId',\n 'apiKey',\n 'appId',\n 'messagingSenderId'\n ];\n const { options } = app;\n for (const keyName of configKeys) {\n if (!options[keyName]) {\n throw getMissingValueError(keyName);\n }\n }\n return {\n appName: app.name,\n projectId: options.projectId,\n apiKey: options.apiKey,\n appId: options.appId,\n senderId: options.messagingSenderId\n };\n}\nfunction getMissingValueError(valueName) {\n return ERROR_FACTORY.create(\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */, {\n valueName\n });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass MessagingService {\n constructor(app, installations, analyticsProvider) {\n // logging is only done with end user consent. Default to false.\n this.deliveryMetricsExportedToBigQueryEnabled = false;\n this.onBackgroundMessageHandler = null;\n this.onMessageHandler = null;\n this.logEvents = [];\n this.isLogServiceStarted = false;\n const appConfig = extractAppConfig(app);\n this.firebaseDependencies = {\n app,\n appConfig,\n installations,\n analyticsProvider\n };\n }\n _delete() {\n return Promise.resolve();\n }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function registerDefaultSw(messaging) {\n try {\n messaging.swRegistration = await navigator.serviceWorker.register(DEFAULT_SW_PATH, {\n scope: DEFAULT_SW_SCOPE\n });\n // The timing when browser updates sw when sw has an update is unreliable from experiment. It\n // leads to version conflict when the SDK upgrades to a newer version in the main page, but sw\n // is stuck with the old version. For example,\n // https://github.com/firebase/firebase-js-sdk/issues/2590 The following line reliably updates\n // sw if there was an update.\n messaging.swRegistration.update().catch(() => {\n /* it is non blocking and we don't care if it failed */\n });\n await waitForRegistrationActive(messaging.swRegistration);\n }\n catch (e) {\n throw ERROR_FACTORY.create(\"failed-service-worker-registration\" /* ErrorCode.FAILED_DEFAULT_REGISTRATION */, {\n browserErrorMessage: e === null || e === void 0 ? void 0 : e.message\n });\n }\n}\n/**\n * Waits for registration to become active. MDN documentation claims that\n * a service worker registration should be ready to use after awaiting\n * navigator.serviceWorker.register() but that doesn't seem to be the case in\n * practice, causing the SDK to throw errors when calling\n * swRegistration.pushManager.subscribe() too soon after register(). The only\n * solution seems to be waiting for the service worker registration `state`\n * to become \"active\".\n */\nasync function waitForRegistrationActive(registration) {\n return new Promise((resolve, reject) => {\n const rejectTimeout = setTimeout(() => reject(new Error(`Service worker not registered after ${DEFAULT_REGISTRATION_TIMEOUT} ms`)), DEFAULT_REGISTRATION_TIMEOUT);\n const incomingSw = registration.installing || registration.waiting;\n if (registration.active) {\n clearTimeout(rejectTimeout);\n resolve();\n }\n else if (incomingSw) {\n incomingSw.onstatechange = ev => {\n var _a;\n if (((_a = ev.target) === null || _a === void 0 ? void 0 : _a.state) === 'activated') {\n incomingSw.onstatechange = null;\n clearTimeout(rejectTimeout);\n resolve();\n }\n };\n }\n else {\n clearTimeout(rejectTimeout);\n reject(new Error('No incoming service worker found.'));\n }\n });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function updateSwReg(messaging, swRegistration) {\n if (!swRegistration && !messaging.swRegistration) {\n await registerDefaultSw(messaging);\n }\n if (!swRegistration && !!messaging.swRegistration) {\n return;\n }\n if (!(swRegistration instanceof ServiceWorkerRegistration)) {\n throw ERROR_FACTORY.create(\"invalid-sw-registration\" /* ErrorCode.INVALID_SW_REGISTRATION */);\n }\n messaging.swRegistration = swRegistration;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function updateVapidKey(messaging, vapidKey) {\n if (!!vapidKey) {\n messaging.vapidKey = vapidKey;\n }\n else if (!messaging.vapidKey) {\n messaging.vapidKey = DEFAULT_VAPID_KEY;\n }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function getToken$1(messaging, options) {\n if (!navigator) {\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\n }\n if (Notification.permission === 'default') {\n await Notification.requestPermission();\n }\n if (Notification.permission !== 'granted') {\n throw ERROR_FACTORY.create(\"permission-blocked\" /* ErrorCode.PERMISSION_BLOCKED */);\n }\n await updateVapidKey(messaging, options === null || options === void 0 ? void 0 : options.vapidKey);\n await updateSwReg(messaging, options === null || options === void 0 ? void 0 : options.serviceWorkerRegistration);\n return getTokenInternal(messaging);\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function logToScion(messaging, messageType, data) {\n const eventType = getEventType(messageType);\n const analytics = await messaging.firebaseDependencies.analyticsProvider.get();\n analytics.logEvent(eventType, {\n /* eslint-disable camelcase */\n message_id: data[CONSOLE_CAMPAIGN_ID],\n message_name: data[CONSOLE_CAMPAIGN_NAME],\n message_time: data[CONSOLE_CAMPAIGN_TIME],\n message_device_time: Math.floor(Date.now() / 1000)\n /* eslint-enable camelcase */\n });\n}\nfunction getEventType(messageType) {\n switch (messageType) {\n case MessageType.NOTIFICATION_CLICKED:\n return 'notification_open';\n case MessageType.PUSH_RECEIVED:\n return 'notification_foreground';\n default:\n throw new Error();\n }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function messageEventListener(messaging, event) {\n const internalPayload = event.data;\n if (!internalPayload.isFirebaseMessaging) {\n return;\n }\n if (messaging.onMessageHandler &&\n internalPayload.messageType === MessageType.PUSH_RECEIVED) {\n if (typeof messaging.onMessageHandler === 'function') {\n messaging.onMessageHandler(externalizePayload(internalPayload));\n }\n else {\n messaging.onMessageHandler.next(externalizePayload(internalPayload));\n }\n }\n // Log to Scion if applicable\n const dataPayload = internalPayload.data;\n if (isConsoleMessage(dataPayload) &&\n dataPayload[CONSOLE_CAMPAIGN_ANALYTICS_ENABLED] === '1') {\n await logToScion(messaging, internalPayload.messageType, dataPayload);\n }\n}\n\nconst name = \"@firebase/messaging\";\nconst version = \"0.12.22\";\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst WindowMessagingFactory = (container) => {\n const messaging = new MessagingService(container.getProvider('app').getImmediate(), container.getProvider('installations-internal').getImmediate(), container.getProvider('analytics-internal'));\n navigator.serviceWorker.addEventListener('message', e => messageEventListener(messaging, e));\n return messaging;\n};\nconst WindowMessagingInternalFactory = (container) => {\n const messaging = container\n .getProvider('messaging')\n .getImmediate();\n const messagingInternal = {\n getToken: (options) => getToken$1(messaging, options)\n };\n return messagingInternal;\n};\nfunction registerMessagingInWindow() {\n _registerComponent(new Component('messaging', WindowMessagingFactory, \"PUBLIC\" /* ComponentType.PUBLIC */));\n _registerComponent(new Component('messaging-internal', WindowMessagingInternalFactory, \"PRIVATE\" /* ComponentType.PRIVATE */));\n registerVersion(name, version);\n // BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\n registerVersion(name, version, 'esm2017');\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Checks if all required APIs exist in the browser.\n * @returns a Promise that resolves to a boolean.\n *\n * @public\n */\nasync function isWindowSupported() {\n try {\n // This throws if open() is unsupported, so adding it to the conditional\n // statement below can cause an uncaught error.\n await validateIndexedDBOpenable();\n }\n catch (e) {\n return false;\n }\n // firebase-js-sdk/issues/2393 reveals that idb#open in Safari iframe and Firefox private browsing\n // might be prohibited to run. In these contexts, an error would be thrown during the messaging\n // instantiating phase, informing the developers to import/call isSupported for special handling.\n return (typeof window !== 'undefined' &&\n isIndexedDBAvailable() &&\n areCookiesEnabled() &&\n 'serviceWorker' in navigator &&\n 'PushManager' in window &&\n 'Notification' in window &&\n 'fetch' in window &&\n ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\n PushSubscription.prototype.hasOwnProperty('getKey'));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function deleteToken$1(messaging) {\n if (!navigator) {\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\n }\n if (!messaging.swRegistration) {\n await registerDefaultSw(messaging);\n }\n return deleteTokenInternal(messaging);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction onMessage$1(messaging, nextOrObserver) {\n if (!navigator) {\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\n }\n messaging.onMessageHandler = nextOrObserver;\n return () => {\n messaging.onMessageHandler = null;\n };\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Retrieves a Firebase Cloud Messaging instance.\n *\n * @returns The Firebase Cloud Messaging instance associated with the provided firebase app.\n *\n * @public\n */\nfunction getMessagingInWindow(app = getApp()) {\n // Conscious decision to make this async check non-blocking during the messaging instance\n // initialization phase for performance consideration. An error would be thrown latter for\n // developer's information. Developers can then choose to import and call `isSupported` for\n // special handling.\n isWindowSupported().then(isSupported => {\n // If `isWindowSupported()` resolved, but returned false.\n if (!isSupported) {\n throw ERROR_FACTORY.create(\"unsupported-browser\" /* ErrorCode.UNSUPPORTED_BROWSER */);\n }\n }, _ => {\n // If `isWindowSupported()` rejected.\n throw ERROR_FACTORY.create(\"indexed-db-unsupported\" /* ErrorCode.INDEXED_DB_UNSUPPORTED */);\n });\n return _getProvider(getModularInstance(app), 'messaging').getImmediate();\n}\n/**\n * Subscribes the {@link Messaging} instance to push notifications. Returns a Firebase Cloud\n * Messaging registration token that can be used to send push messages to that {@link Messaging}\n * instance.\n *\n * If notification permission isn't already granted, this method asks the user for permission. The\n * returned promise rejects if the user does not allow the app to show notifications.\n *\n * @param messaging - The {@link Messaging} instance.\n * @param options - Provides an optional vapid key and an optional service worker registration.\n *\n * @returns The promise resolves with an FCM registration token.\n *\n * @public\n */\nasync function getToken(messaging, options) {\n messaging = getModularInstance(messaging);\n return getToken$1(messaging, options);\n}\n/**\n * Deletes the registration token associated with this {@link Messaging} instance and unsubscribes\n * the {@link Messaging} instance from the push subscription.\n *\n * @param messaging - The {@link Messaging} instance.\n *\n * @returns The promise resolves when the token has been successfully deleted.\n *\n * @public\n */\nfunction deleteToken(messaging) {\n messaging = getModularInstance(messaging);\n return deleteToken$1(messaging);\n}\n/**\n * When a push message is received and the user is currently on a page for your origin, the\n * message is passed to the page and an `onMessage()` event is dispatched with the payload of\n * the push message.\n *\n *\n * @param messaging - The {@link Messaging} instance.\n * @param nextOrObserver - This function, or observer object with `next` defined,\n * is called when a message is received and the user is currently viewing your page.\n * @returns To stop listening for messages execute this returned function.\n *\n * @public\n */\nfunction onMessage(messaging, nextOrObserver) {\n messaging = getModularInstance(messaging);\n return onMessage$1(messaging, nextOrObserver);\n}\n\n/**\n * The Firebase Cloud Messaging Web SDK.\n * This SDK does not work in a Node.js environment.\n *\n * @packageDocumentation\n */\nregisterMessagingInWindow();\n\nexport { deleteToken, getMessagingInWindow as getMessaging, getToken, isWindowSupported as isSupported, onMessage };\n//# sourceMappingURL=index.esm2017.js.map\n","import { getDefaultsFromPostinstall } from './postinstall.mjs';\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Firebase constants. Some of these (@defines) can be overridden at compile-time.\n */\nconst CONSTANTS = {\n /**\n * @define {boolean} Whether this is the client Node.js SDK.\n */\n NODE_CLIENT: false,\n /**\n * @define {boolean} Whether this is the Admin Node.js SDK.\n */\n NODE_ADMIN: false,\n /**\n * Firebase SDK Version\n */\n SDK_VERSION: '${JSCORE_VERSION}'\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Throws an error if the provided assertion is falsy\n */\nconst assert = function (assertion, message) {\n if (!assertion) {\n throw assertionError(message);\n }\n};\n/**\n * Returns an Error object suitable for throwing.\n */\nconst assertionError = function (message) {\n return new Error('Firebase Database (' +\n CONSTANTS.SDK_VERSION +\n ') INTERNAL ASSERT FAILED: ' +\n message);\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst stringToByteArray$1 = function (str) {\n // TODO(user): Use native implementations if/when available\n const out = [];\n let p = 0;\n for (let i = 0; i < str.length; i++) {\n let c = str.charCodeAt(i);\n if (c < 128) {\n out[p++] = c;\n }\n else if (c < 2048) {\n out[p++] = (c >> 6) | 192;\n out[p++] = (c & 63) | 128;\n }\n else if ((c & 0xfc00) === 0xd800 &&\n i + 1 < str.length &&\n (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\n // Surrogate Pair\n c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\n out[p++] = (c >> 18) | 240;\n out[p++] = ((c >> 12) & 63) | 128;\n out[p++] = ((c >> 6) & 63) | 128;\n out[p++] = (c & 63) | 128;\n }\n else {\n out[p++] = (c >> 12) | 224;\n out[p++] = ((c >> 6) & 63) | 128;\n out[p++] = (c & 63) | 128;\n }\n }\n return out;\n};\n/**\n * Turns an array of numbers into the string given by the concatenation of the\n * characters to which the numbers correspond.\n * @param bytes Array of numbers representing characters.\n * @return Stringification of the array.\n */\nconst byteArrayToString = function (bytes) {\n // TODO(user): Use native implementations if/when available\n const out = [];\n let pos = 0, c = 0;\n while (pos < bytes.length) {\n const c1 = bytes[pos++];\n if (c1 < 128) {\n out[c++] = String.fromCharCode(c1);\n }\n else if (c1 > 191 && c1 < 224) {\n const c2 = bytes[pos++];\n out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\n }\n else if (c1 > 239 && c1 < 365) {\n // Surrogate Pair\n const c2 = bytes[pos++];\n const c3 = bytes[pos++];\n const c4 = bytes[pos++];\n const u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\n 0x10000;\n out[c++] = String.fromCharCode(0xd800 + (u >> 10));\n out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\n }\n else {\n const c2 = bytes[pos++];\n const c3 = bytes[pos++];\n out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n }\n }\n return out.join('');\n};\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\n// Static lookup maps, lazily populated by init_()\n// TODO(dlarocque): Define this as a class, since we no longer target ES5.\nconst base64 = {\n /**\n * Maps bytes to characters.\n */\n byteToCharMap_: null,\n /**\n * Maps characters to bytes.\n */\n charToByteMap_: null,\n /**\n * Maps bytes to websafe characters.\n * @private\n */\n byteToCharMapWebSafe_: null,\n /**\n * Maps websafe characters to bytes.\n * @private\n */\n charToByteMapWebSafe_: null,\n /**\n * Our default alphabet, shared between\n * ENCODED_VALS and ENCODED_VALS_WEBSAFE\n */\n ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\n /**\n * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\n */\n get ENCODED_VALS() {\n return this.ENCODED_VALS_BASE + '+/=';\n },\n /**\n * Our websafe alphabet.\n */\n get ENCODED_VALS_WEBSAFE() {\n return this.ENCODED_VALS_BASE + '-_.';\n },\n /**\n * Whether this browser supports the atob and btoa functions. This extension\n * started at Mozilla but is now implemented by many browsers. We use the\n * ASSUME_* variables to avoid pulling in the full useragent detection library\n * but still allowing the standard per-browser compilations.\n *\n */\n HAS_NATIVE_SUPPORT: typeof atob === 'function',\n /**\n * Base64-encode an array of bytes.\n *\n * @param input An array of bytes (numbers with\n * value in [0, 255]) to encode.\n * @param webSafe Boolean indicating we should use the\n * alternative alphabet.\n * @return The base64 encoded string.\n */\n encodeByteArray(input, webSafe) {\n if (!Array.isArray(input)) {\n throw Error('encodeByteArray takes an array as a parameter');\n }\n this.init_();\n const byteToCharMap = webSafe\n ? this.byteToCharMapWebSafe_\n : this.byteToCharMap_;\n const output = [];\n for (let i = 0; i < input.length; i += 3) {\n const byte1 = input[i];\n const haveByte2 = i + 1 < input.length;\n const byte2 = haveByte2 ? input[i + 1] : 0;\n const haveByte3 = i + 2 < input.length;\n const byte3 = haveByte3 ? input[i + 2] : 0;\n const outByte1 = byte1 >> 2;\n const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\n let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\n let outByte4 = byte3 & 0x3f;\n if (!haveByte3) {\n outByte4 = 64;\n if (!haveByte2) {\n outByte3 = 64;\n }\n }\n output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\n }\n return output.join('');\n },\n /**\n * Base64-encode a string.\n *\n * @param input A string to encode.\n * @param webSafe If true, we should use the\n * alternative alphabet.\n * @return The base64 encoded string.\n */\n encodeString(input, webSafe) {\n // Shortcut for Mozilla browsers that implement\n // a native base64 encoder in the form of \"btoa/atob\"\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\n return btoa(input);\n }\n return this.encodeByteArray(stringToByteArray$1(input), webSafe);\n },\n /**\n * Base64-decode a string.\n *\n * @param input to decode.\n * @param webSafe True if we should use the\n * alternative alphabet.\n * @return string representing the decoded value.\n */\n decodeString(input, webSafe) {\n // Shortcut for Mozilla browsers that implement\n // a native base64 encoder in the form of \"btoa/atob\"\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\n return atob(input);\n }\n return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\n },\n /**\n * Base64-decode a string.\n *\n * In base-64 decoding, groups of four characters are converted into three\n * bytes. If the encoder did not apply padding, the input length may not\n * be a multiple of 4.\n *\n * In this case, the last group will have fewer than 4 characters, and\n * padding will be inferred. If the group has one or two characters, it decodes\n * to one byte. If the group has three characters, it decodes to two bytes.\n *\n * @param input Input to decode.\n * @param webSafe True if we should use the web-safe alphabet.\n * @return bytes representing the decoded value.\n */\n decodeStringToByteArray(input, webSafe) {\n this.init_();\n const charToByteMap = webSafe\n ? this.charToByteMapWebSafe_\n : this.charToByteMap_;\n const output = [];\n for (let i = 0; i < input.length;) {\n const byte1 = charToByteMap[input.charAt(i++)];\n const haveByte2 = i < input.length;\n const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\n ++i;\n const haveByte3 = i < input.length;\n const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\n ++i;\n const haveByte4 = i < input.length;\n const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\n ++i;\n if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\n throw new DecodeBase64StringError();\n }\n const outByte1 = (byte1 << 2) | (byte2 >> 4);\n output.push(outByte1);\n if (byte3 !== 64) {\n const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\n output.push(outByte2);\n if (byte4 !== 64) {\n const outByte3 = ((byte3 << 6) & 0xc0) | byte4;\n output.push(outByte3);\n }\n }\n }\n return output;\n },\n /**\n * Lazy static initialization function. Called before\n * accessing any of the static map variables.\n * @private\n */\n init_() {\n if (!this.byteToCharMap_) {\n this.byteToCharMap_ = {};\n this.charToByteMap_ = {};\n this.byteToCharMapWebSafe_ = {};\n this.charToByteMapWebSafe_ = {};\n // We want quick mappings back and forth, so we precompute two maps.\n for (let i = 0; i < this.ENCODED_VALS.length; i++) {\n this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\n this.charToByteMap_[this.byteToCharMap_[i]] = i;\n this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\n this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\n // Be forgiving when decoding and correctly decode both encodings.\n if (i >= this.ENCODED_VALS_BASE.length) {\n this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\n this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\n }\n }\n }\n }\n};\n/**\n * An error encountered while decoding base64 string.\n */\nclass DecodeBase64StringError extends Error {\n constructor() {\n super(...arguments);\n this.name = 'DecodeBase64StringError';\n }\n}\n/**\n * URL-safe base64 encoding\n */\nconst base64Encode = function (str) {\n const utf8Bytes = stringToByteArray$1(str);\n return base64.encodeByteArray(utf8Bytes, true);\n};\n/**\n * URL-safe base64 encoding (without \".\" padding in the end).\n * e.g. Used in JSON Web Token (JWT) parts.\n */\nconst base64urlEncodeWithoutPadding = function (str) {\n // Use base64url encoding and remove padding in the end (dot characters).\n return base64Encode(str).replace(/\\./g, '');\n};\n/**\n * URL-safe base64 decoding\n *\n * NOTE: DO NOT use the global atob() function - it does NOT support the\n * base64Url variant encoding.\n *\n * @param str To be decoded\n * @return Decoded result, if possible\n */\nconst base64Decode = function (str) {\n try {\n return base64.decodeString(str, true);\n }\n catch (e) {\n console.error('base64Decode failed: ', e);\n }\n return null;\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Do a deep-copy of basic JavaScript Objects or Arrays.\n */\nfunction deepCopy(value) {\n return deepExtend(undefined, value);\n}\n/**\n * Copy properties from source to target (recursively allows extension\n * of Objects and Arrays). Scalar values in the target are over-written.\n * If target is undefined, an object of the appropriate type will be created\n * (and returned).\n *\n * We recursively copy all child properties of plain Objects in the source- so\n * that namespace- like dictionaries are merged.\n *\n * Note that the target can be a function, in which case the properties in\n * the source Object are copied onto it as static properties of the Function.\n *\n * Note: we don't merge __proto__ to prevent prototype pollution\n */\nfunction deepExtend(target, source) {\n if (!(source instanceof Object)) {\n return source;\n }\n switch (source.constructor) {\n case Date:\n // Treat Dates like scalars; if the target date object had any child\n // properties - they will be lost!\n const dateValue = source;\n return new Date(dateValue.getTime());\n case Object:\n if (target === undefined) {\n target = {};\n }\n break;\n case Array:\n // Always copy the array source and overwrite the target.\n target = [];\n break;\n default:\n // Not a plain Object - treat it as a scalar.\n return source;\n }\n for (const prop in source) {\n // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202\n if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {\n continue;\n }\n target[prop] = deepExtend(target[prop], source[prop]);\n }\n return target;\n}\nfunction isValidKey(key) {\n return key !== '__proto__';\n}\n\n/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Polyfill for `globalThis` object.\n * @returns the `globalThis` object for the given environment.\n * @public\n */\nfunction getGlobal() {\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('Unable to locate global object.');\n}\n\n/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst getDefaultsFromGlobal = () => getGlobal().__FIREBASE_DEFAULTS__;\n/**\n * Attempt to read defaults from a JSON string provided to\n * process(.)env(.)__FIREBASE_DEFAULTS__ or a JSON file whose path is in\n * process(.)env(.)__FIREBASE_DEFAULTS_PATH__\n * The dots are in parens because certain compilers (Vite?) cannot\n * handle seeing that variable in comments.\n * See https://github.com/firebase/firebase-js-sdk/issues/6838\n */\nconst getDefaultsFromEnvVariable = () => {\n if (typeof process === 'undefined' || typeof process.env === 'undefined') {\n return;\n }\n const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;\n if (defaultsJsonString) {\n return JSON.parse(defaultsJsonString);\n }\n};\nconst getDefaultsFromCookie = () => {\n if (typeof document === 'undefined') {\n return;\n }\n let match;\n try {\n match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);\n }\n catch (e) {\n // Some environments such as Angular Universal SSR have a\n // `document` object but error on accessing `document.cookie`.\n return;\n }\n const decoded = match && base64Decode(match[1]);\n return decoded && JSON.parse(decoded);\n};\n/**\n * Get the __FIREBASE_DEFAULTS__ object. It checks in order:\n * (1) if such an object exists as a property of `globalThis`\n * (2) if such an object was provided on a shell environment variable\n * (3) if such an object exists in a cookie\n * @public\n */\nconst getDefaults = () => {\n try {\n return (getDefaultsFromPostinstall() ||\n getDefaultsFromGlobal() ||\n getDefaultsFromEnvVariable() ||\n getDefaultsFromCookie());\n }\n catch (e) {\n /**\n * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due\n * to any environment case we have not accounted for. Log to\n * info instead of swallowing so we can find these unknown cases\n * and add paths for them if needed.\n */\n console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);\n return;\n }\n};\n/**\n * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object\n * for the given product.\n * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available\n * @public\n */\nconst getDefaultEmulatorHost = (productName) => { var _a, _b; return (_b = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.emulatorHosts) === null || _b === void 0 ? void 0 : _b[productName]; };\n/**\n * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object\n * for the given product.\n * @returns a pair of hostname and port like `[\"::1\", 4000]` if available\n * @public\n */\nconst getDefaultEmulatorHostnameAndPort = (productName) => {\n const host = getDefaultEmulatorHost(productName);\n if (!host) {\n return undefined;\n }\n const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.\n if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {\n throw new Error(`Invalid host ${host} with no separate hostname and port!`);\n }\n // eslint-disable-next-line no-restricted-globals\n const port = parseInt(host.substring(separatorIndex + 1), 10);\n if (host[0] === '[') {\n // Bracket-quoted `[ipv6addr]:port` => return \"ipv6addr\" (without brackets).\n return [host.substring(1, separatorIndex - 1), port];\n }\n else {\n return [host.substring(0, separatorIndex), port];\n }\n};\n/**\n * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.\n * @public\n */\nconst getDefaultAppConfig = () => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.config; };\n/**\n * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties\n * prefixed by \"_\")\n * @public\n */\nconst getExperimentalSetting = (name) => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a[`_${name}`]; };\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass Deferred {\n constructor() {\n this.reject = () => { };\n this.resolve = () => { };\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n /**\n * Our API internals are not promisified and cannot because our callback APIs have subtle expectations around\n * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\n * and returns a node-style callback which will resolve or reject the Deferred's promise.\n */\n wrapCallback(callback) {\n return (error, value) => {\n if (error) {\n this.reject(error);\n }\n else {\n this.resolve(value);\n }\n if (typeof callback === 'function') {\n // Attaching noop handler just in case developer wasn't expecting\n // promises\n this.promise.catch(() => { });\n // Some of our callbacks don't expect a value and our own tests\n // assert that the parameter length is 1\n if (callback.length === 1) {\n callback(error);\n }\n else {\n callback(error, value);\n }\n }\n };\n }\n}\n\n/**\n * @license\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Checks whether host is a cloud workstation or not.\n * @public\n */\nfunction isCloudWorkstation(url) {\n // `isCloudWorkstation` is called without protocol in certain connect*Emulator functions\n // In HTTP request builders, it's called with the protocol.\n // If called with protocol prefix, it's a valid URL, so we extract the hostname\n // If called without, we assume the string is the hostname.\n try {\n const host = url.startsWith('http://') || url.startsWith('https://')\n ? new URL(url).hostname\n : url;\n return host.endsWith('.cloudworkstations.dev');\n }\n catch (_a) {\n return false;\n }\n}\n/**\n * Makes a fetch request to the given server.\n * Mostly used for forwarding cookies in Firebase Studio.\n * @public\n */\nasync function pingServer(endpoint) {\n const result = await fetch(endpoint, {\n credentials: 'include'\n });\n return result.ok;\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction createMockUserToken(token, projectId) {\n if (token.uid) {\n throw new Error('The \"uid\" field is no longer supported by mockUserToken. Please use \"sub\" instead for Firebase Auth User ID.');\n }\n // Unsecured JWTs use \"none\" as the algorithm.\n const header = {\n alg: 'none',\n type: 'JWT'\n };\n const project = projectId || 'demo-project';\n const iat = token.iat || 0;\n const sub = token.sub || token.user_id;\n if (!sub) {\n throw new Error(\"mockUserToken must contain 'sub' or 'user_id' field!\");\n }\n const payload = Object.assign({ \n // Set all required fields to decent defaults\n iss: `https://securetoken.google.com/${project}`, aud: project, iat, exp: iat + 3600, auth_time: iat, sub, user_id: sub, firebase: {\n sign_in_provider: 'custom',\n identities: {}\n } }, token);\n // Unsecured JWTs use the empty string as a signature.\n const signature = '';\n return [\n base64urlEncodeWithoutPadding(JSON.stringify(header)),\n base64urlEncodeWithoutPadding(JSON.stringify(payload)),\n signature\n ].join('.');\n}\nconst emulatorStatus = {};\n// Checks whether any products are running on an emulator\nfunction getEmulatorSummary() {\n const summary = {\n prod: [],\n emulator: []\n };\n for (const key of Object.keys(emulatorStatus)) {\n if (emulatorStatus[key]) {\n summary.emulator.push(key);\n }\n else {\n summary.prod.push(key);\n }\n }\n return summary;\n}\nfunction getOrCreateEl(id) {\n let parentDiv = document.getElementById(id);\n let created = false;\n if (!parentDiv) {\n parentDiv = document.createElement('div');\n parentDiv.setAttribute('id', id);\n created = true;\n }\n return { created, element: parentDiv };\n}\nlet previouslyDismissed = false;\n/**\n * Updates Emulator Banner. Primarily used for Firebase Studio\n * @param name\n * @param isRunningEmulator\n * @public\n */\nfunction updateEmulatorBanner(name, isRunningEmulator) {\n if (typeof window === 'undefined' ||\n typeof document === 'undefined' ||\n !isCloudWorkstation(window.location.host) ||\n emulatorStatus[name] === isRunningEmulator ||\n emulatorStatus[name] || // If already set to use emulator, can't go back to prod.\n previouslyDismissed) {\n return;\n }\n emulatorStatus[name] = isRunningEmulator;\n function prefixedId(id) {\n return `__firebase__banner__${id}`;\n }\n const bannerId = '__firebase__banner';\n const summary = getEmulatorSummary();\n const showError = summary.prod.length > 0;\n function tearDown() {\n const element = document.getElementById(bannerId);\n if (element) {\n element.remove();\n }\n }\n function setupBannerStyles(bannerEl) {\n bannerEl.style.display = 'flex';\n bannerEl.style.background = '#7faaf0';\n bannerEl.style.position = 'fixed';\n bannerEl.style.bottom = '5px';\n bannerEl.style.left = '5px';\n bannerEl.style.padding = '.5em';\n bannerEl.style.borderRadius = '5px';\n bannerEl.style.alignItems = 'center';\n }\n function setupIconStyles(prependIcon, iconId) {\n prependIcon.setAttribute('width', '24');\n prependIcon.setAttribute('id', iconId);\n prependIcon.setAttribute('height', '24');\n prependIcon.setAttribute('viewBox', '0 0 24 24');\n prependIcon.setAttribute('fill', 'none');\n prependIcon.style.marginLeft = '-6px';\n }\n function setupCloseBtn() {\n const closeBtn = document.createElement('span');\n closeBtn.style.cursor = 'pointer';\n closeBtn.style.marginLeft = '16px';\n closeBtn.style.fontSize = '24px';\n closeBtn.innerHTML = ' ×';\n closeBtn.onclick = () => {\n previouslyDismissed = true;\n tearDown();\n };\n return closeBtn;\n }\n function setupLinkStyles(learnMoreLink, learnMoreId) {\n learnMoreLink.setAttribute('id', learnMoreId);\n learnMoreLink.innerText = 'Learn more';\n learnMoreLink.href =\n 'https://firebase.google.com/docs/studio/preview-apps#preview-backend';\n learnMoreLink.setAttribute('target', '__blank');\n learnMoreLink.style.paddingLeft = '5px';\n learnMoreLink.style.textDecoration = 'underline';\n }\n function setupDom() {\n const banner = getOrCreateEl(bannerId);\n const firebaseTextId = prefixedId('text');\n const firebaseText = document.getElementById(firebaseTextId) || document.createElement('span');\n const learnMoreId = prefixedId('learnmore');\n const learnMoreLink = document.getElementById(learnMoreId) ||\n document.createElement('a');\n const prependIconId = prefixedId('preprendIcon');\n const prependIcon = document.getElementById(prependIconId) ||\n document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n if (banner.created) {\n // update styles\n const bannerEl = banner.element;\n setupBannerStyles(bannerEl);\n setupLinkStyles(learnMoreLink, learnMoreId);\n const closeBtn = setupCloseBtn();\n setupIconStyles(prependIcon, prependIconId);\n bannerEl.append(prependIcon, firebaseText, learnMoreLink, closeBtn);\n document.body.appendChild(bannerEl);\n }\n if (showError) {\n firebaseText.innerText = `Preview backend disconnected.`;\n prependIcon.innerHTML = `\n\n \n\n\n\n \n `;\n }\n else {\n prependIcon.innerHTML = `\n\n \n\n\n\n \n `;\n firebaseText.innerText = 'Preview backend running in this workspace.';\n }\n firebaseText.setAttribute('id', firebaseTextId);\n }\n if (document.readyState === 'loading') {\n window.addEventListener('DOMContentLoaded', setupDom);\n }\n else {\n setupDom();\n }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns navigator.userAgent string or '' if it's not defined.\n * @return user agent string\n */\nfunction getUA() {\n if (typeof navigator !== 'undefined' &&\n typeof navigator['userAgent'] === 'string') {\n return navigator['userAgent'];\n }\n else {\n return '';\n }\n}\n/**\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\n *\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\n * wait for a callback.\n */\nfunction isMobileCordova() {\n return (typeof window !== 'undefined' &&\n // @ts-ignore Setting up an broadly applicable index signature for Window\n // just to deal with this case would probably be a bad idea.\n !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\n /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\n}\n/**\n * Detect Node.js.\n *\n * @return true if Node.js environment is detected or specified.\n */\n// Node detection logic from: https://github.com/iliakan/detect-node/\nfunction isNode() {\n var _a;\n const forceEnvironment = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.forceEnvironment;\n if (forceEnvironment === 'node') {\n return true;\n }\n else if (forceEnvironment === 'browser') {\n return false;\n }\n try {\n return (Object.prototype.toString.call(global.process) === '[object process]');\n }\n catch (e) {\n return false;\n }\n}\n/**\n * Detect Browser Environment.\n * Note: This will return true for certain test frameworks that are incompletely\n * mimicking a browser, and should not lead to assuming all browser APIs are\n * available.\n */\nfunction isBrowser() {\n return typeof window !== 'undefined' || isWebWorker();\n}\n/**\n * Detect Web Worker context.\n */\nfunction isWebWorker() {\n return (typeof WorkerGlobalScope !== 'undefined' &&\n typeof self !== 'undefined' &&\n self instanceof WorkerGlobalScope);\n}\n/**\n * Detect Cloudflare Worker context.\n */\nfunction isCloudflareWorker() {\n return (typeof navigator !== 'undefined' &&\n navigator.userAgent === 'Cloudflare-Workers');\n}\nfunction isBrowserExtension() {\n const runtime = typeof chrome === 'object'\n ? chrome.runtime\n : typeof browser === 'object'\n ? browser.runtime\n : undefined;\n return typeof runtime === 'object' && runtime.id !== undefined;\n}\n/**\n * Detect React Native.\n *\n * @return true if ReactNative environment is detected.\n */\nfunction isReactNative() {\n return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\n}\n/** Detects Electron apps. */\nfunction isElectron() {\n return getUA().indexOf('Electron/') >= 0;\n}\n/** Detects Internet Explorer. */\nfunction isIE() {\n const ua = getUA();\n return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n}\n/** Detects Universal Windows Platform apps. */\nfunction isUWP() {\n return getUA().indexOf('MSAppHost/') >= 0;\n}\n/**\n * Detect whether the current SDK build is the Node version.\n *\n * @return true if it's the Node SDK build.\n */\nfunction isNodeSdk() {\n return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\n}\n/** Returns true if we are running in Safari. */\nfunction isSafari() {\n return (!isNode() &&\n !!navigator.userAgent &&\n navigator.userAgent.includes('Safari') &&\n !navigator.userAgent.includes('Chrome'));\n}\n/** Returns true if we are running in Safari or WebKit */\nfunction isSafariOrWebkit() {\n return (!isNode() &&\n !!navigator.userAgent &&\n (navigator.userAgent.includes('Safari') ||\n navigator.userAgent.includes('WebKit')) &&\n !navigator.userAgent.includes('Chrome'));\n}\n/**\n * This method checks if indexedDB is supported by current browser/service worker context\n * @return true if indexedDB is supported by current browser/service worker context\n */\nfunction isIndexedDBAvailable() {\n try {\n return typeof indexedDB === 'object';\n }\n catch (e) {\n return false;\n }\n}\n/**\n * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject\n * if errors occur during the database open operation.\n *\n * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox\n * private browsing)\n */\nfunction validateIndexedDBOpenable() {\n return new Promise((resolve, reject) => {\n try {\n let preExist = true;\n const DB_CHECK_NAME = 'validate-browser-context-for-indexeddb-analytics-module';\n const request = self.indexedDB.open(DB_CHECK_NAME);\n request.onsuccess = () => {\n request.result.close();\n // delete database only when it doesn't pre-exist\n if (!preExist) {\n self.indexedDB.deleteDatabase(DB_CHECK_NAME);\n }\n resolve(true);\n };\n request.onupgradeneeded = () => {\n preExist = false;\n };\n request.onerror = () => {\n var _a;\n reject(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || '');\n };\n }\n catch (error) {\n reject(error);\n }\n });\n}\n/**\n *\n * This method checks whether cookie is enabled within current browser\n * @return true if cookie is enabled within current browser\n */\nfunction areCookiesEnabled() {\n if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {\n return false;\n }\n return true;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Standardized Firebase Error.\n *\n * Usage:\n *\n * // TypeScript string literals for type-safe codes\n * type Err =\n * 'unknown' |\n * 'object-not-found'\n * ;\n *\n * // Closure enum for type-safe error codes\n * // at-enum {string}\n * var Err = {\n * UNKNOWN: 'unknown',\n * OBJECT_NOT_FOUND: 'object-not-found',\n * }\n *\n * let errors: Map = {\n * 'generic-error': \"Unknown error\",\n * 'file-not-found': \"Could not find file: {$file}\",\n * };\n *\n * // Type-safe function - must pass a valid error code as param.\n * let error = new ErrorFactory('service', 'Service', errors);\n *\n * ...\n * throw error.create(Err.GENERIC);\n * ...\n * throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});\n * ...\n * // Service: Could not file file: foo.txt (service/file-not-found).\n *\n * catch (e) {\n * assert(e.message === \"Could not find file: foo.txt.\");\n * if ((e as FirebaseError)?.code === 'service/file-not-found') {\n * console.log(\"Could not read file: \" + e['file']);\n * }\n * }\n */\nconst ERROR_NAME = 'FirebaseError';\n// Based on code from:\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\nclass FirebaseError extends Error {\n constructor(\n /** The error code for this error. */\n code, message, \n /** Custom data for this error. */\n customData) {\n super(message);\n this.code = code;\n this.customData = customData;\n /** The custom name for all FirebaseErrors. */\n this.name = ERROR_NAME;\n // Fix For ES5\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n // TODO(dlarocque): Replace this with `new.target`: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget\n // which we can now use since we no longer target ES5.\n Object.setPrototypeOf(this, FirebaseError.prototype);\n // Maintains proper stack trace for where our error was thrown.\n // Only available on V8.\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ErrorFactory.prototype.create);\n }\n }\n}\nclass ErrorFactory {\n constructor(service, serviceName, errors) {\n this.service = service;\n this.serviceName = serviceName;\n this.errors = errors;\n }\n create(code, ...data) {\n const customData = data[0] || {};\n const fullCode = `${this.service}/${code}`;\n const template = this.errors[code];\n const message = template ? replaceTemplate(template, customData) : 'Error';\n // Service Name: Error message (service/code).\n const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;\n const error = new FirebaseError(fullCode, fullMessage, customData);\n return error;\n }\n}\nfunction replaceTemplate(template, data) {\n return template.replace(PATTERN, (_, key) => {\n const value = data[key];\n return value != null ? String(value) : `<${key}?>`;\n });\n}\nconst PATTERN = /\\{\\$([^}]+)}/g;\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Evaluates a JSON string into a javascript object.\n *\n * @param {string} str A string containing JSON.\n * @return {*} The javascript object representing the specified JSON.\n */\nfunction jsonEval(str) {\n return JSON.parse(str);\n}\n/**\n * Returns JSON representing a javascript object.\n * @param {*} data JavaScript object to be stringified.\n * @return {string} The JSON contents of the object.\n */\nfunction stringify(data) {\n return JSON.stringify(data);\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Decodes a Firebase auth. token into constituent parts.\n *\n * Notes:\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst decode = function (token) {\n let header = {}, claims = {}, data = {}, signature = '';\n try {\n const parts = token.split('.');\n header = jsonEval(base64Decode(parts[0]) || '');\n claims = jsonEval(base64Decode(parts[1]) || '');\n signature = parts[2];\n data = claims['d'] || {};\n delete claims['d'];\n }\n catch (e) { }\n return {\n header,\n claims,\n data,\n signature\n };\n};\n/**\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst isValidTimestamp = function (token) {\n const claims = decode(token).claims;\n const now = Math.floor(new Date().getTime() / 1000);\n let validSince = 0, validUntil = 0;\n if (typeof claims === 'object') {\n if (claims.hasOwnProperty('nbf')) {\n validSince = claims['nbf'];\n }\n else if (claims.hasOwnProperty('iat')) {\n validSince = claims['iat'];\n }\n if (claims.hasOwnProperty('exp')) {\n validUntil = claims['exp'];\n }\n else {\n // token will expire after 24h by default\n validUntil = validSince + 86400;\n }\n }\n return (!!now &&\n !!validSince &&\n !!validUntil &&\n now >= validSince &&\n now <= validUntil);\n};\n/**\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\n *\n * Notes:\n * - May return null if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst issuedAtTime = function (token) {\n const claims = decode(token).claims;\n if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\n return claims['iat'];\n }\n return null;\n};\n/**\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst isValidFormat = function (token) {\n const decoded = decode(token), claims = decoded.claims;\n return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\n};\n/**\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\n *\n * Notes:\n * - May return a false negative if there's no native base64 decoding support.\n * - Doesn't check if the token is actually valid.\n */\nconst isAdmin = function (token) {\n const claims = decode(token).claims;\n return typeof claims === 'object' && claims['admin'] === true;\n};\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction contains(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nfunction safeGet(obj, key) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n return obj[key];\n }\n else {\n return undefined;\n }\n}\nfunction isEmpty(obj) {\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n return false;\n }\n }\n return true;\n}\nfunction map(obj, fn, contextObj) {\n const res = {};\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n res[key] = fn.call(contextObj, obj[key], key, obj);\n }\n }\n return res;\n}\n/**\n * Deep equal two objects. Support Arrays and Objects.\n */\nfunction deepEqual(a, b) {\n if (a === b) {\n return true;\n }\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n for (const k of aKeys) {\n if (!bKeys.includes(k)) {\n return false;\n }\n const aProp = a[k];\n const bProp = b[k];\n if (isObject(aProp) && isObject(bProp)) {\n if (!deepEqual(aProp, bProp)) {\n return false;\n }\n }\n else if (aProp !== bProp) {\n return false;\n }\n }\n for (const k of bKeys) {\n if (!aKeys.includes(k)) {\n return false;\n }\n }\n return true;\n}\nfunction isObject(thing) {\n return thing !== null && typeof thing === 'object';\n}\n\n/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Rejects if the given promise doesn't resolve in timeInMS milliseconds.\n * @internal\n */\nfunction promiseWithTimeout(promise, timeInMS = 2000) {\n const deferredPromise = new Deferred();\n setTimeout(() => deferredPromise.reject('timeout!'), timeInMS);\n promise.then(deferredPromise.resolve, deferredPromise.reject);\n return deferredPromise.promise;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a\n * params object (e.g. {arg: 'val', arg2: 'val2'})\n * Note: You must prepend it with ? when adding it to a URL.\n */\nfunction querystring(querystringParams) {\n const params = [];\n for (const [key, value] of Object.entries(querystringParams)) {\n if (Array.isArray(value)) {\n value.forEach(arrayVal => {\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\n });\n }\n else {\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n }\n }\n return params.length ? '&' + params.join('&') : '';\n}\n/**\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object\n * (e.g. {arg: 'val', arg2: 'val2'})\n */\nfunction querystringDecode(querystring) {\n const obj = {};\n const tokens = querystring.replace(/^\\?/, '').split('&');\n tokens.forEach(token => {\n if (token) {\n const [key, value] = token.split('=');\n obj[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n });\n return obj;\n}\n/**\n * Extract the query string part of a URL, including the leading question mark (if present).\n */\nfunction extractQuerystring(url) {\n const queryStart = url.indexOf('?');\n if (!queryStart) {\n return '';\n }\n const fragmentStart = url.indexOf('#', queryStart);\n return url.substring(queryStart, fragmentStart > 0 ? fragmentStart : undefined);\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview SHA-1 cryptographic hash.\n * Variable names follow the notation in FIPS PUB 180-3:\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\n *\n * Usage:\n * var sha1 = new sha1();\n * sha1.update(bytes);\n * var hash = sha1.digest();\n *\n * Performance:\n * Chrome 23: ~400 Mbit/s\n * Firefox 16: ~250 Mbit/s\n *\n */\n/**\n * SHA-1 cryptographic hash constructor.\n *\n * The properties declared here are discussed in the above algorithm document.\n * @constructor\n * @final\n * @struct\n */\nclass Sha1 {\n constructor() {\n /**\n * Holds the previous values of accumulated variables a-e in the compress_\n * function.\n * @private\n */\n this.chain_ = [];\n /**\n * A buffer holding the partially computed hash result.\n * @private\n */\n this.buf_ = [];\n /**\n * An array of 80 bytes, each a part of the message to be hashed. Referred to\n * as the message schedule in the docs.\n * @private\n */\n this.W_ = [];\n /**\n * Contains data needed to pad messages less than 64 bytes.\n * @private\n */\n this.pad_ = [];\n /**\n * @private {number}\n */\n this.inbuf_ = 0;\n /**\n * @private {number}\n */\n this.total_ = 0;\n this.blockSize = 512 / 8;\n this.pad_[0] = 128;\n for (let i = 1; i < this.blockSize; ++i) {\n this.pad_[i] = 0;\n }\n this.reset();\n }\n reset() {\n this.chain_[0] = 0x67452301;\n this.chain_[1] = 0xefcdab89;\n this.chain_[2] = 0x98badcfe;\n this.chain_[3] = 0x10325476;\n this.chain_[4] = 0xc3d2e1f0;\n this.inbuf_ = 0;\n this.total_ = 0;\n }\n /**\n * Internal compress helper function.\n * @param buf Block to compress.\n * @param offset Offset of the block in the buffer.\n * @private\n */\n compress_(buf, offset) {\n if (!offset) {\n offset = 0;\n }\n const W = this.W_;\n // get 16 big endian words\n if (typeof buf === 'string') {\n for (let i = 0; i < 16; i++) {\n // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\n // have a bug that turns the post-increment ++ operator into pre-increment\n // during JIT compilation. We have code that depends heavily on SHA-1 for\n // correctness and which is affected by this bug, so I've removed all uses\n // of post-increment ++ in which the result value is used. We can revert\n // this change once the Safari bug\n // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\n // most clients have been updated.\n W[i] =\n (buf.charCodeAt(offset) << 24) |\n (buf.charCodeAt(offset + 1) << 16) |\n (buf.charCodeAt(offset + 2) << 8) |\n buf.charCodeAt(offset + 3);\n offset += 4;\n }\n }\n else {\n for (let i = 0; i < 16; i++) {\n W[i] =\n (buf[offset] << 24) |\n (buf[offset + 1] << 16) |\n (buf[offset + 2] << 8) |\n buf[offset + 3];\n offset += 4;\n }\n }\n // expand to 80 words\n for (let i = 16; i < 80; i++) {\n const t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\n }\n let a = this.chain_[0];\n let b = this.chain_[1];\n let c = this.chain_[2];\n let d = this.chain_[3];\n let e = this.chain_[4];\n let f, k;\n // TODO(user): Try to unroll this loop to speed up the computation.\n for (let i = 0; i < 80; i++) {\n if (i < 40) {\n if (i < 20) {\n f = d ^ (b & (c ^ d));\n k = 0x5a827999;\n }\n else {\n f = b ^ c ^ d;\n k = 0x6ed9eba1;\n }\n }\n else {\n if (i < 60) {\n f = (b & c) | (d & (b | c));\n k = 0x8f1bbcdc;\n }\n else {\n f = b ^ c ^ d;\n k = 0xca62c1d6;\n }\n }\n const t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\n e = d;\n d = c;\n c = ((b << 30) | (b >>> 2)) & 0xffffffff;\n b = a;\n a = t;\n }\n this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\n this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\n this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\n this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\n this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\n }\n update(bytes, length) {\n // TODO(johnlenz): tighten the function signature and remove this check\n if (bytes == null) {\n return;\n }\n if (length === undefined) {\n length = bytes.length;\n }\n const lengthMinusBlock = length - this.blockSize;\n let n = 0;\n // Using local instead of member variables gives ~5% speedup on Firefox 16.\n const buf = this.buf_;\n let inbuf = this.inbuf_;\n // The outer while loop should execute at most twice.\n while (n < length) {\n // When we have no data in the block to top up, we can directly process the\n // input buffer (assuming it contains sufficient data). This gives ~25%\n // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\n // the data is provided in large chunks (or in multiples of 64 bytes).\n if (inbuf === 0) {\n while (n <= lengthMinusBlock) {\n this.compress_(bytes, n);\n n += this.blockSize;\n }\n }\n if (typeof bytes === 'string') {\n while (n < length) {\n buf[inbuf] = bytes.charCodeAt(n);\n ++inbuf;\n ++n;\n if (inbuf === this.blockSize) {\n this.compress_(buf);\n inbuf = 0;\n // Jump to the outer loop so we use the full-block optimization.\n break;\n }\n }\n }\n else {\n while (n < length) {\n buf[inbuf] = bytes[n];\n ++inbuf;\n ++n;\n if (inbuf === this.blockSize) {\n this.compress_(buf);\n inbuf = 0;\n // Jump to the outer loop so we use the full-block optimization.\n break;\n }\n }\n }\n }\n this.inbuf_ = inbuf;\n this.total_ += length;\n }\n /** @override */\n digest() {\n const digest = [];\n let totalBits = this.total_ * 8;\n // Add pad 0x80 0x00*.\n if (this.inbuf_ < 56) {\n this.update(this.pad_, 56 - this.inbuf_);\n }\n else {\n this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\n }\n // Add # bits.\n for (let i = this.blockSize - 1; i >= 56; i--) {\n this.buf_[i] = totalBits & 255;\n totalBits /= 256; // Don't use bit-shifting here!\n }\n this.compress_(this.buf_);\n let n = 0;\n for (let i = 0; i < 5; i++) {\n for (let j = 24; j >= 0; j -= 8) {\n digest[n] = (this.chain_[i] >> j) & 255;\n ++n;\n }\n }\n return digest;\n }\n}\n\n/**\n * Helper to make a Subscribe function (just like Promise helps make a\n * Thenable).\n *\n * @param executor Function which can make calls to a single Observer\n * as a proxy.\n * @param onNoObservers Callback when count of Observers goes to zero.\n */\nfunction createSubscribe(executor, onNoObservers) {\n const proxy = new ObserverProxy(executor, onNoObservers);\n return proxy.subscribe.bind(proxy);\n}\n/**\n * Implement fan-out for any number of Observers attached via a subscribe\n * function.\n */\nclass ObserverProxy {\n /**\n * @param executor Function which can make calls to a single Observer\n * as a proxy.\n * @param onNoObservers Callback when count of Observers goes to zero.\n */\n constructor(executor, onNoObservers) {\n this.observers = [];\n this.unsubscribes = [];\n this.observerCount = 0;\n // Micro-task scheduling by calling task.then().\n this.task = Promise.resolve();\n this.finalized = false;\n this.onNoObservers = onNoObservers;\n // Call the executor asynchronously so subscribers that are called\n // synchronously after the creation of the subscribe function\n // can still receive the very first value generated in the executor.\n this.task\n .then(() => {\n executor(this);\n })\n .catch(e => {\n this.error(e);\n });\n }\n next(value) {\n this.forEachObserver((observer) => {\n observer.next(value);\n });\n }\n error(error) {\n this.forEachObserver((observer) => {\n observer.error(error);\n });\n this.close(error);\n }\n complete() {\n this.forEachObserver((observer) => {\n observer.complete();\n });\n this.close();\n }\n /**\n * Subscribe function that can be used to add an Observer to the fan-out list.\n *\n * - We require that no event is sent to a subscriber synchronously to their\n * call to subscribe().\n */\n subscribe(nextOrObserver, error, complete) {\n let observer;\n if (nextOrObserver === undefined &&\n error === undefined &&\n complete === undefined) {\n throw new Error('Missing Observer.');\n }\n // Assemble an Observer object when passed as callback functions.\n if (implementsAnyMethods(nextOrObserver, [\n 'next',\n 'error',\n 'complete'\n ])) {\n observer = nextOrObserver;\n }\n else {\n observer = {\n next: nextOrObserver,\n error,\n complete\n };\n }\n if (observer.next === undefined) {\n observer.next = noop;\n }\n if (observer.error === undefined) {\n observer.error = noop;\n }\n if (observer.complete === undefined) {\n observer.complete = noop;\n }\n const unsub = this.unsubscribeOne.bind(this, this.observers.length);\n // Attempt to subscribe to a terminated Observable - we\n // just respond to the Observer with the final error or complete\n // event.\n if (this.finalized) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.task.then(() => {\n try {\n if (this.finalError) {\n observer.error(this.finalError);\n }\n else {\n observer.complete();\n }\n }\n catch (e) {\n // nothing\n }\n return;\n });\n }\n this.observers.push(observer);\n return unsub;\n }\n // Unsubscribe is synchronous - we guarantee that no events are sent to\n // any unsubscribed Observer.\n unsubscribeOne(i) {\n if (this.observers === undefined || this.observers[i] === undefined) {\n return;\n }\n delete this.observers[i];\n this.observerCount -= 1;\n if (this.observerCount === 0 && this.onNoObservers !== undefined) {\n this.onNoObservers(this);\n }\n }\n forEachObserver(fn) {\n if (this.finalized) {\n // Already closed by previous event....just eat the additional values.\n return;\n }\n // Since sendOne calls asynchronously - there is no chance that\n // this.observers will become undefined.\n for (let i = 0; i < this.observers.length; i++) {\n this.sendOne(i, fn);\n }\n }\n // Call the Observer via one of it's callback function. We are careful to\n // confirm that the observe has not been unsubscribed since this asynchronous\n // function had been queued.\n sendOne(i, fn) {\n // Execute the callback asynchronously\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.task.then(() => {\n if (this.observers !== undefined && this.observers[i] !== undefined) {\n try {\n fn(this.observers[i]);\n }\n catch (e) {\n // Ignore exceptions raised in Observers or missing methods of an\n // Observer.\n // Log error to console. b/31404806\n if (typeof console !== 'undefined' && console.error) {\n console.error(e);\n }\n }\n }\n });\n }\n close(err) {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n if (err !== undefined) {\n this.finalError = err;\n }\n // Proxy is no longer needed - garbage collect references\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.task.then(() => {\n this.observers = undefined;\n this.onNoObservers = undefined;\n });\n }\n}\n/** Turn synchronous function into one called asynchronously. */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction async(fn, onError) {\n return (...args) => {\n Promise.resolve(true)\n .then(() => {\n fn(...args);\n })\n .catch((error) => {\n if (onError) {\n onError(error);\n }\n });\n };\n}\n/**\n * Return true if the object passed in implements any of the named methods.\n */\nfunction implementsAnyMethods(obj, methods) {\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n for (const method of methods) {\n if (method in obj && typeof obj[method] === 'function') {\n return true;\n }\n }\n return false;\n}\nfunction noop() {\n // do nothing\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Check to make sure the appropriate number of arguments are provided for a public function.\n * Throws an error if it fails.\n *\n * @param fnName The function name\n * @param minCount The minimum number of arguments to allow for the function call\n * @param maxCount The maximum number of argument to allow for the function call\n * @param argCount The actual number of arguments provided.\n */\nconst validateArgCount = function (fnName, minCount, maxCount, argCount) {\n let argError;\n if (argCount < minCount) {\n argError = 'at least ' + minCount;\n }\n else if (argCount > maxCount) {\n argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\n }\n if (argError) {\n const error = fnName +\n ' failed: Was called with ' +\n argCount +\n (argCount === 1 ? ' argument.' : ' arguments.') +\n ' Expects ' +\n argError +\n '.';\n throw new Error(error);\n }\n};\n/**\n * Generates a string to prefix an error message about failed argument validation\n *\n * @param fnName The function name\n * @param argName The name of the argument\n * @return The prefix to add to the error thrown for validation.\n */\nfunction errorPrefix(fnName, argName) {\n return `${fnName} failed: ${argName} argument `;\n}\n/**\n * @param fnName\n * @param argumentNumber\n * @param namespace\n * @param optional\n */\nfunction validateNamespace(fnName, namespace, optional) {\n if (optional && !namespace) {\n return;\n }\n if (typeof namespace !== 'string') {\n //TODO: I should do more validation here. We only allow certain chars in namespaces.\n throw new Error(errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.');\n }\n}\nfunction validateCallback(fnName, argumentName, \n// eslint-disable-next-line @typescript-eslint/ban-types\ncallback, optional) {\n if (optional && !callback) {\n return;\n }\n if (typeof callback !== 'function') {\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid function.');\n }\n}\nfunction validateContextObject(fnName, argumentName, context, optional) {\n if (optional && !context) {\n return;\n }\n if (typeof context !== 'object' || context === null) {\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid context object.');\n }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\n// so it's been modified.\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\n// use 2 characters in JavaScript. All 4-byte UTF-8 characters begin with a first\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\n// pair).\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\n/**\n * @param {string} str\n * @return {Array}\n */\nconst stringToByteArray = function (str) {\n const out = [];\n let p = 0;\n for (let i = 0; i < str.length; i++) {\n let c = str.charCodeAt(i);\n // Is this the lead surrogate in a surrogate pair?\n if (c >= 0xd800 && c <= 0xdbff) {\n const high = c - 0xd800; // the high 10 bits.\n i++;\n assert(i < str.length, 'Surrogate pair missing trail surrogate.');\n const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\n c = 0x10000 + (high << 10) + low;\n }\n if (c < 128) {\n out[p++] = c;\n }\n else if (c < 2048) {\n out[p++] = (c >> 6) | 192;\n out[p++] = (c & 63) | 128;\n }\n else if (c < 65536) {\n out[p++] = (c >> 12) | 224;\n out[p++] = ((c >> 6) & 63) | 128;\n out[p++] = (c & 63) | 128;\n }\n else {\n out[p++] = (c >> 18) | 240;\n out[p++] = ((c >> 12) & 63) | 128;\n out[p++] = ((c >> 6) & 63) | 128;\n out[p++] = (c & 63) | 128;\n }\n }\n return out;\n};\n/**\n * Calculate length without actually converting; useful for doing cheaper validation.\n * @param {string} str\n * @return {number}\n */\nconst stringLength = function (str) {\n let p = 0;\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (c < 128) {\n p++;\n }\n else if (c < 2048) {\n p += 2;\n }\n else if (c >= 0xd800 && c <= 0xdbff) {\n // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.\n p += 4;\n i++; // skip trail surrogate.\n }\n else {\n p += 3;\n }\n }\n return p;\n};\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The amount of milliseconds to exponentially increase.\n */\nconst DEFAULT_INTERVAL_MILLIS = 1000;\n/**\n * The factor to backoff by.\n * Should be a number greater than 1.\n */\nconst DEFAULT_BACKOFF_FACTOR = 2;\n/**\n * The maximum milliseconds to increase to.\n *\n * Visible for testing\n */\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\n/**\n * The percentage of backoff time to randomize by.\n * See\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\n * for context.\n *\n *
Visible for testing\n */\nconst RANDOM_FACTOR = 0.5;\n/**\n * Based on the backoff method from\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\n */\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\n // Calculates an exponentially increasing value.\n // Deviation: calculates value from count and a constant interval, so we only need to save value\n // and count to restore state.\n const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\n // A random \"fuzz\" to avoid waves of retries.\n // Deviation: randomFactor is required.\n const randomWait = Math.round(\n // A fraction of the backoff value to add/subtract.\n // Deviation: changes multiplication order to improve readability.\n RANDOM_FACTOR *\n currBaseValue *\n // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\n // if we add or subtract.\n (Math.random() - 0.5) *\n 2);\n // Limits backoff to max to avoid effectively permanent backoff.\n return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provide English ordinal letters after a number\n */\nfunction ordinal(i) {\n if (!Number.isFinite(i)) {\n return `${i}`;\n }\n return i + indicator(i);\n}\nfunction indicator(i) {\n i = Math.abs(i);\n const cent = i % 100;\n if (cent >= 10 && cent <= 20) {\n return 'th';\n }\n const dec = i % 10;\n if (dec === 1) {\n return 'st';\n }\n if (dec === 2) {\n return 'nd';\n }\n if (dec === 3) {\n return 'rd';\n }\n return 'th';\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getModularInstance(service) {\n if (service && service._delegate) {\n return service._delegate;\n }\n else {\n return service;\n }\n}\n\nexport { CONSTANTS, DecodeBase64StringError, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, base64urlEncodeWithoutPadding, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepEqual, deepExtend, errorPrefix, extractQuerystring, getDefaultAppConfig, getDefaultEmulatorHost, getDefaultEmulatorHostnameAndPort, getDefaults, getExperimentalSetting, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isCloudWorkstation, isCloudflareWorker, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isSafariOrWebkit, isUWP, isValidFormat, isValidTimestamp, isWebWorker, issuedAtTime, jsonEval, map, ordinal, pingServer, promiseWithTimeout, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, updateEmulatorBanner, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace };\n//# sourceMappingURL=index.esm2017.js.map\n","const getDefaultsFromPostinstall = () => (undefined);\nexport { getDefaultsFromPostinstall };","import { registerVersion } from '@firebase/app';\nexport * from '@firebase/app';\n\nvar name = \"firebase\";\nvar version = \"11.10.0\";\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nregisterVersion(name, version, 'app');\n//# sourceMappingURL=index.esm.js.map\n","export * from '@firebase/messaging';\n//# sourceMappingURL=index.esm.js.map\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","import { PACKAGE_VERSION } from './version.js';\n\n// Name of this application, used in the User-Agent.\nexport const APP_NAME = 'TinodeWeb/' + (PACKAGE_VERSION || '0.24');\n\n// API key. Use https://github.com/tinode/chat/tree/master/keygen to generate your own\nexport const API_KEY = 'AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K';\n\n// The array of possible hosts to connect to.\nexport const KNOWN_HOSTS = {hosted: 'web.tinode.co', local: 'localhost:6060'};\n\n// Default host name and port to connect to.\nexport const DEFAULT_HOST = KNOWN_HOSTS.hosted;\n\n// Enable console logging.\nexport const LOGGING_ENABLED = true;\n\n// Minimum time between two keypress notifications, milliseconds.\nexport const KEYPRESS_DELAY = 3_000;\n// Delay before sending a read notification, milliseconds.\nexport const READ_DELAY = 1_500;\n\n// The default shortest allowed tag length. Matches the value on the server.\nexport const MIN_TAG_LENGTH = 2;\n// The default greatest allowed tag length. Matches the value on the server.\nexport const MAX_TAG_LENGTH = 96;\n// The default maximum number of tags allowed. Matches the value on the server.\nexport const MAX_TAG_COUNT = 16;\n\n// Access mode for P2P subscriptions initiated by the current user.\nexport const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';\n// Access mode for new group topics created by the current user.\nexport const NEW_GRP_ACCESS_MODE = 'JRWPSAO';\n// Access mode for a channel.\nexport const CHANNEL_ACCESS_MODE = 'JR';\n\n// Access mode for no access.\nexport const NO_ACCESS_MODE = 'N';\n\n// Mediaquery breakpoint between desktop and mobile, in px. Should match the value\n// in @media (max-size: 640px) in base.css\nexport const MEDIA_BREAKPOINT = 640;\n// Size of css 'rem' unit in pixels. Default 1rem = 10pt = 13px.\nexport const REM_SIZE = 13;\n\n// Size of the avatar image: when image dimensions are greater or the image is not square, it's resized to\n// a square of this size or less.\nexport const AVATAR_SIZE = 384;\n\n// Maximum size of an avatar in bytes for sending in-band. Bigger avatars will be sent out of band (as uploads).\nexport const MAX_AVATAR_BYTES = 4096;\n\n// Size of the broken_image shown in MessagesView\nexport const BROKEN_IMAGE_SIZE = 32;\n\n// Size of video preview when dimensions are missing.\nexport const NO_DIMENSIONS_VIDEO = 128;\n\n// Number of chat messages to fetch in one call.\nexport const MESSAGES_PAGE = 24;\n\n// Default maximum in-band (included directly into the message) attachment size which fits into\n// a message of 256K in size. Used when the server-provided value is unavailable. The actual\n// binary size of the attachment should be smaller due to base64 encoding expansion and some overhead,\n// for instance 1024 bytes.\n// Increase this limit to a greater value in production, if desired. Also increase\n// max_message_size in the server config.\nexport const MAX_INBAND_ATTACHMENT_SIZE = 262_144;\n\n// Default absolute maximum attachment size to be used with the server = 8MB.\n// Used when the server-provided value is unavailable. Increase to something like 100MB in production.\nexport const MAX_EXTERN_ATTACHMENT_SIZE = 1 << 23;\n\n// Maximum allowed linear dimension (pixels) of an image sent inline. Larger images will be shrunk\n// to make the larger dimension fit under this size. You may want to adjust it to 1600 or\n// 2400 for production.\nexport const MAX_IMAGE_DIM = 1024;\n\n// Linear dimensions of image preview: shrink image under this size for previews.\nexport const IMAGE_PREVIEW_DIM = 64;\n\n// Linear dimensions of video screencapture: shrink image under this size for previews.\nexport const VIDEO_PREVIEW_DIM = 96;\n\n// Linear dimensions of image thumbnail: shrink image under this size for thumbnails in reply quote previews.\nexport const IMAGE_THUMBNAIL_DIM = 36;\n// Width of video thumbnail: allow it to be wider, but not taller. Use IMAGE_THUMBNAIL_DIM for height.\nexport const VIDEO_THUMBNAIL_WIDTH = 48;\n\n// Maximum number of online users to be shown in a topic title bar. Others will be\n// hidden under \"+X more\"\nexport const MAX_ONLINE_IN_TOPIC = 4;\n\n// Maximum length of user name, topic title, and private comment.\nexport const MAX_TITLE_LENGTH = 60;\n// Maximum length of topic description.\nexport const MAX_TOPIC_DESCRIPTION_LENGTH = 360;\n// Maximum length of user name when displaying a video call.\nexport const MAX_PEER_TITLE_LENGTH = 24;\n\n// Length of message previews in chat list, in characters.\nexport const MESSAGE_PREVIEW_LENGTH = 80;\n\n// Length of a quote in quoted reply (for outgoing messages).\nexport const QUOTED_REPLY_LENGTH = 30;\n// Length of a preview of a forwarded message.\nexport const FORWARDED_PREVIEW_LENGTH = 84;\n// Length of preview for a message being edited.\nexport const EDIT_PREVIEW_LENGTH = 48;\n\n// Minimum duration of an audio recording in milliseconds (2 sec).\nexport const MIN_DURATION = 2_000;\n// Maximum duration of an audio recording in milliseconds (10 min).\nexport const MAX_DURATION = 600_000;\n\n// Link for \"Contact Us\".\nexport const LINK_CONTACT_US = 'mailto:support@tinode.co';\n\n// Link to Privacy Policy.\nexport const LINK_PRIVACY_POLICY = 'https://tinode.co/privacy.html';\n\n// Link to Terms of Service.\nexport const LINK_TERMS_OF_SERVICE = 'https://tinode.co/terms.html';\n\n// When user starts a P2P topic, automatic subscription does not\n// happen until the first message. Setting this option to true enables\n// immediate subscription.\nexport const IMMEDIATE_P2P_SUBSCRIPTION = false;\n\n// URL schemes permitted to appear in links (i.e. no javascript: scheme).\nexport const CLICKABLE_URL_SCHEMES = ['http', 'https', 'ftp', 'ftps'];\n\n// Size of the QR code in the app.\nexport const QRCODE_SIZE = 128;\n\n// How much time has to pass to consider computer awoken from sleep (80 sec).\n// Chrome throttles ticker events in inactive tabs to once per minute. This\n// value ensures that these once-a-minute events do not trigger a reconnect.\nexport const WAKE_UP_TIMEOUT = 80000;\n// Timer interval between checks if computer woke up from sleep (1 sec).\nexport const WAKE_UP_TICK = 1000;\n\n// Swipe distance to register as a gesture, in pixels.\nexport const MIN_SWIPE_DISTANCE = REM_SIZE * 3;\n\n// Self-topic avatar as an SVG icon encoded as data URI\nexport const SELF_AVATAR_URI = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZpZXdCb3g9IjAgMCAxNyAxNyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41NjIgMXYxNS40NTlsNC42ODYtMy4yNyA0Ljc1MiAzLjI2di0xNS40NDloLTkuNDM4ek0xMiAxNC41NTFsLTMuNzU2LTIuNTc4LTMuNjgxIDIuNTY4di0xMi41NDFoNy40Mzd2MTIuNTUxeiIgZmlsbD0iIzU1NTU1NSIgLz48L3N2Zz4=' // eslint-disable-line max-len\n\n// Toast display duration, milliseconds.\nexport const TOAST_DURATION = 3_000;\n\n// Initial/default color scheme.\nexport const DEFAULT_COLOR_SCHEME = 'auto';\n\n// Default text size in points.\nexport const DEFAULT_TEXT_SIZE = 10;\n\n// MIME type for the legacy Drafty form-response data.\nexport const DRAFTY_FR_MIME_TYPE_LEGACY = 'application/json'; // Remove in 2026.\n\n// Path to wallpaper images.\nexport const WALLPAPER_DEFAULTS = {type: 'patt', index: 0, path:'img/bkg/'};\n","// Video call states.\nexport const CALL_STATE_NONE = 0;\nexport const CALL_STATE_OUTGOING_INITATED = 1;\nexport const CALL_STATE_INCOMING_RECEIVED = 2;\nexport const CALL_STATE_IN_PROGRESS = 3;\n\n// Video call message headers representing call state.\nexport const CALL_HEAD_STARTED = 'started';\n\n","// File and image helper functions.\nimport { TheCard } from 'tinode-sdk';\n\n// Supported image MIME types and corresponding file extensions.\nexport const SUPPORTED_IMAGE_FORMATS = ['image/jpeg', 'image/gif', 'image/png', 'image/svg', 'image/svg+xml'];\nexport const MIME_EXTENSIONS = ['jpg', 'gif', 'png', 'svg', 'svg'];\n\n// Get an URL from a theCard photo: either create a data: URL or return reference URL.\nexport function makeImageUrl(photo) {\n if (photo && typeof photo == 'object') {\n if (photo.ref) {\n return photo.ref\n }\n if (photo.data && photo.type) {\n const mime = photo.type.startsWith('image/') ? photo.type : ('image/' + photo.type);\n return 'data:' + mime + ';base64,' + photo.data;\n }\n }\n return null;\n}\n\n// Calculate linear dimensions for scaling image down to fit under a certain size.\n// Returns an object which contains destination sizes, source sizes, and offsets\n// into source (when making square images).\nexport function fitImageSize(width, height, maxWidth, maxHeight, forceSquare) {\n // Sanitize input\n width = width | 0;\n height = height | 0;\n maxWidth = maxWidth | 0;\n maxHeight = maxHeight | 0;\n\n if (width <= 0 || height <= 0 || maxWidth <= 0 || maxHeight <= 0) {\n return null;\n }\n\n if (forceSquare) {\n maxWidth = maxHeight = Math.min(maxWidth, maxHeight);\n }\n\n const scale = Math.min(\n Math.min(width, maxWidth) / width,\n Math.min(height, maxHeight) / height\n );\n\n const size = {\n dstWidth: (width * scale) | 0,\n dstHeight: (height * scale) | 0,\n };\n\n if (forceSquare) {\n // Also calculate parameters for making the image square.\n size.dstWidth = size.dstHeight = Math.min(size.dstWidth, size.dstHeight);\n size.srcWidth = size.srcHeight = Math.min(width, height);\n size.xoffset = ((width - size.srcWidth) / 2) | 0;\n size.yoffset = ((height - size.srcWidth) / 2) | 0;\n } else {\n size.xoffset = size.yoffset = 0;\n size.srcWidth = width;\n size.srcHeight = height;\n }\n return size;\n}\n\n// Ensure file's extension matches mime content type\nexport function fileNameForMime(fname, mime) {\n const idx = SUPPORTED_IMAGE_FORMATS.indexOf(mime);\n if (idx < 0 || !fname) {\n // Unknown mime or empty name.\n return fname;\n }\n const ext = MIME_EXTENSIONS[idx];\n\n const at = fname.lastIndexOf('.');\n if (at >= 0) {\n fname = fname.substring(0, at);\n }\n return fname + '.' + ext;\n}\n\n// Scale uploaded image to fit under certain dimensions and byte size, optionally constraining to a square.\n// Returns a promise which is resolven on success or rejected on failure.\nexport function imageScaled(fileOrBlob, maxWidth, maxHeight, maxSize, forceSquare) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onerror = function(err) {\n reject(new Error(\"Image format unrecognized\"));\n }\n img.onload = async function() {\n // Once the image is loaded, the URL is no longer needed.\n URL.revokeObjectURL(img.src);\n\n // Calculate the desired image dimensions.\n const dim = fitImageSize(img.width, img.height, maxWidth, maxHeight, forceSquare);\n if (!dim) {\n reject(new Error(\"Invalid image\"));\n return;\n }\n let canvas = document.createElement('canvas');\n canvas.width = dim.dstWidth;\n canvas.height = dim.dstHeight;\n let ctx = canvas.getContext('2d');\n ctx.imageSmoothingEnabled = true;\n ctx.drawImage(img, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight,\n 0, 0, dim.dstWidth, dim.dstHeight);\n\n const mime = SUPPORTED_IMAGE_FORMATS.includes(fileOrBlob.type) ? fileOrBlob.type : 'image/jpeg';\n // Generate blob to check size of the image.\n let blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\n if (!blob) {\n reject(new Error(\"Unsupported image format\"));\n return;\n }\n // Ensure the image is not too large. Shrink the image keeping the aspect ratio.\n // Do nothing if maxsize is <= 0.\n while (maxSize > 0 && blob.length > maxSize) {\n dim.dstWidth = (dim.dstWidth * 0.70710678118) | 0;\n dim.dstHeight = (dim.dstHeight * 0.70710678118) | 0;\n canvas.width = dim.dstWidth;\n canvas.height = dim.dstHeight;\n ctx = canvas.getContext('2d');\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight,\n 0, 0, dim.dstWidth, dim.dstHeight);\n blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\n }\n\n canvas = null;\n resolve({mime: mime, blob: blob, width: dim.dstWidth, height: dim.dstHeight, name: fileNameForMime(fileOrBlob.name, mime)});\n };\n img.src = URL.createObjectURL(fileOrBlob);\n });\n}\n\n// Scale and crop image according to specified dimensions.\n// The coordinates are in unscaled image pixels, i.e. cut the rectangle first then scale it.\n// returns a promise.\nexport function imageCrop(mime, objURL, left, top, width, height, scale) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onerror = _ => {\n reject(new Error(\"Image format unrecognized\"));\n };\n img.onload = _ => {\n // Once the image is loaded, the URL is no longer needed.\n URL.revokeObjectURL(img.src);\n\n let canvas = document.createElement('canvas');\n canvas.width = width * scale;\n canvas.height = height * scale;\n let ctx = canvas.getContext('2d');\n ctx.imageSmoothingEnabled = true;\n ctx.drawImage(img, left, top, width, height, 0, 0, canvas.width, canvas.height);\n\n mime = SUPPORTED_IMAGE_FORMATS.includes(mime) ? mime : 'image/jpeg';\n // Generate blob to check size of the image.\n canvas.toBlob((blob) => {\n // Allow GC.\n canvas = null;\n if (blob) {\n resolve({mime: mime, blob: blob, width: width, height: height});\n } else {\n reject(new Error(\"Unsupported image format\"));\n }\n }, mime);\n };\n img.src = objURL;\n });\n}\n\n// Convert file to base64 string.\nexport function fileToBase64(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = _ => {\n reject(reader.error);\n };\n reader.onload = _ => {\n resolve({mime: file.type, bits: reader.result.split(',')[1], name: file.name});\n };\n reader.readAsDataURL(file);\n });\n}\n\n// Convert Blob to base64 string. Returns a promise resolved with the base64 string and mime.\nexport function blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = _ => {\n reject(reader.error);\n };\n reader.onload = _ => {\n resolve({mime: blob.type, bits: reader.result.split(',')[1]});\n };\n reader.readAsDataURL(blob);\n });\n}\n\n// File pasted from the clipboard. It's either an inline image or a file attachment.\nexport function filePasted(event, onImageSuccess, onAttachmentSuccess, onError) {\n const items = (event.clipboardData || event.originalEvent.clipboardData || {}).items;\n if (!items || !items.length) {\n return false;\n }\n\n for (let i in items) {\n const item = items[i];\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (!file) {\n console.error(\"Failed to get file object from pasted file item\", item.kind, item.type);\n onError(\"Failed to get file object from pasted file item\");\n continue;\n }\n if (file.type && file.type.split('/')[0] == 'image') {\n onImageSuccess(file);\n } else {\n onAttachmentSuccess(file);\n }\n // Indicate that the pasted data contains a file.\n return true;\n }\n }\n // No file found.\n return false;\n}\n\n// Get mime type from data URL header.\nexport function getMimeType(header) {\n const mime = /^data:(image\\/[-+a-z0-9.]+);base64/.exec(header);\n return (mime && mime.length > 1) ? mime[1] : null;\n}\n\n// Given length of a binary object in bytes, calculate the length after\n// base64 encoding.\nexport function base64EncodedLen(n) {\n return Math.floor((n + 2) / 3) * 4;\n}\n\n// Given length of a base64-encoded object, calculate decoded size of the\n// pbject in bytes.\nexport function base64DecodedLen(n) {\n return Math.floor(n / 4) * 3;\n}\n\n// Re-encode string to standard base64 encoding with padding.\n// The string may be base64-URL encoded without the padding.\nexport function base64ReEncode(str) {\n if (str) {\n str = str.replace(/-/g, '+').replace(/_/g, '/');\n try {\n str = btoa(atob(str));\n } catch(err) {\n console.error(\"Failed to base64 re-encode string.\", err);\n str = null;\n }\n }\n return str;\n}\n\n// Convert a base64 encoded string with the provided mime type into a Blob.\nexport function base64ToBlob(str, mime) {\n if (!str) {\n return null;\n }\n\n try {\n // Make blob.\n const bin = atob(str);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return new Blob([buf], { type: mime });\n } catch(err) {\n console.error(\"Failed to convert base64 to blob: \", err);\n }\n\n return null;\n}\n\nexport function intArrayToBase64(arr) {\n if (!Array.isArray(arr)) {\n return null;\n }\n try {\n let bin = '';\n new Uint8Array(arr).forEach(b => bin += String.fromCharCode(b));\n return window.btoa(bin);\n } catch (err) {}\n return null;\n}\n\nexport function base64ToIntArray(b64) {\n const arr = [];\n try {\n const bin = window.atob(b64);\n [...bin].forEach(c => {\n arr.push(c.charCodeAt(0));\n });\n return arr;\n } catch (err) {}\n return null;\n}\n\nexport function importVCard(fileOrBlob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = _ => {\n reject(reader.error);\n };\n reader.onload = _ => {\n const card = TheCard.importVCard(reader.result);\n if (!card) {\n reject(new Error(\"Failed to parse vCard\"));\n return;\n }\n resolve(card);\n };\n reader.readAsText(fileOrBlob);\n });\n}\n","import React from 'react';\nimport { defineMessages } from 'react-intl';\n\nimport { Drafty, TheCard } from 'tinode-sdk';\n\nimport AudioPlayer from '../widgets/audio-player.jsx'\nimport CallMessage from '../widgets/call-message.jsx'\nimport CallStatus from '../widgets/call-status.jsx';\nimport InlineVideo from '../widgets/inline-video.jsx';\nimport LazyImage from '../widgets/lazy-image.jsx';\nimport TheCardMini from '../widgets/the-card-mini.jsx';\nimport UploadingImage from '../widgets/uploading-image.jsx'\n\nimport { BROKEN_IMAGE_SIZE, CLICKABLE_URL_SCHEMES, IMAGE_THUMBNAIL_DIM, NO_DIMENSIONS_VIDEO,\n REM_SIZE, VIDEO_THUMBNAIL_WIDTH } from '../config.js';\nimport { base64ToBlob, blobToBase64, fitImageSize, imageScaled } from './blob-helpers.js';\nimport { idToColorClass, secondsToTime, shortenFileName } from './strformat.js';\nimport { cancelablePromise, sanitizeUrl, sanitizeUrlForMime } from './utils.js';\n\nconst messages = defineMessages({\n drafty_form: {\n id: 'drafty_form',\n defaultMessage: 'Form: ',\n description: 'Comment for form in Drafty'\n },\n drafty_attachment: {\n id: 'drafty_attachment',\n defaultMessage: 'Attachment',\n description: 'Comment for attachment in Drafty'\n },\n drafty_image: {\n id: 'drafty_image',\n defaultMessage: 'Picture',\n description: 'Comment for embedded images in Drafty'\n },\n drafty_video: {\n id: 'drafty_video',\n defaultMessage: 'Video recording',\n description: 'Comment for videos embedded in Drafty'\n },\n drafty_unknown: {\n id: 'drafty_unknown',\n defaultMessage: 'Unsupported',\n description: 'Unsupported entity in drafty'\n }\n});\n\n// The main Drafty formatter: converts Drafty elements into React classes. 'this' is set by the caller.\n// 'this' must contain:\n// viewportWidth:\n// authorizeURL:\n// onHandleClick:\nexport function fullFormatter(style, data, values, key, stack) {\n if (stack.includes('QQ')) {\n return quoteFormatter.call(this, style, data, values, key);\n }\n\n if (!style) {\n // Unformatted.\n return values;\n }\n\n let el = Drafty.tagName(style);\n let attr = Drafty.attrValue(style, data) || {};\n attr.key = key;\n switch (style) {\n case 'AU':\n // Show audio player.\n if (attr.src) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'audio'));\n attr.duration = data.duration > 0 ? (data.duration | 0) : undefined;\n attr.preview = data.preview;\n attr.loading = 'lazy';\n }\n el = AudioPlayer;\n // Audio element cannot have content.\n values = null;\n break;\n case 'BR':\n values = null;\n break;\n case 'EX':\n // Ignore.\n break;\n case 'HL':\n // Highlighted text. Assign class name.\n attr.className = 'highlight';\n break;\n case 'HD':\n el = null;\n values = null;\n break;\n case 'IM':\n // Additional processing for images\n el = handleImageData.call(this, el, data, attr);\n // Image element cannot have content.\n values = null;\n break;\n case 'BN':\n // Button\n attr.onClick = (e) => this.onHandleClick(e, 'form_button');\n let inner = React.Children.map(values, (child) => {\n return typeof child == 'string' ? child : undefined;\n });\n if (!inner || inner.length == 0) {\n inner = [attr.name]\n }\n // Get text which will be sent back when the button is clicked.\n attr['data-title'] = inner.join('');\n break;\n case 'LN':\n if (attr) {\n // Ensure only safe URL schemes are clickable.\n attr.href = typeof attr.href == 'string' ? sanitizeUrl(attr.href, CLICKABLE_URL_SCHEMES) : '';\n }\n break;\n case 'MN':\n // Mention\n attr.className = 'mention'\n if (data) {\n attr.className += ' ' + idToColorClass(data.val, false, true);\n }\n break;\n case 'FM':\n // Form\n attr.className = 'bot-form';\n break;\n case 'RW':\n // Form element formatting is dependent on element content.\n break;\n case 'QQ':\n // Quote/citation.\n attr.className = 'reply-quote'\n attr.onClick = (e) => this.onHandleClick(e, 'quote');\n break;\n case 'TC':\n // TheCard\n el = TheCardMini;\n attr.content = data;\n attr.authorizeURL = this.authorizeURL;\n attr.onChatClick = (e) => this.onHandleClick(e, 'contact_chat');\n attr.onFindClick = (e) => this.onHandleClick(e, 'contact_find');\n values = null;\n break;\n case 'VC':\n el = CallMessage;\n // Video call messages do not have content.\n values = null;\n if (data) {\n attr.callState = data.state;\n attr.incoming = data.incoming;\n attr.duration = data.duration;\n }\n break;\n case 'VD':\n // Additional processing for videos.\n el = handleVideoData.call(this, el, data, attr);\n // Video element cannot have content.\n values = null;\n break;\n default:\n if (!el) {\n // Unknown element.\n el = React.Fragment;\n attr = {key: key};\n // Generate comment for unknown element.\n let body = values;\n if (!Array.isArray(values) || !values.join('').trim()) {\n body = [{this.formatMessage(messages.drafty_unknown)}];\n }\n values = [extension, ' '].concat(body);\n }\n break;\n }\n if (!el) {\n return values;\n }\n return React.createElement(el, attr, values);\n}\n\n// Additional processing of image data.\nfunction handleImageData(el, data, attr) {\n if (!data) {\n attr.src = 'img/broken_image.png';\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n };\n return el;\n }\n\n attr.className = 'inline-image';\n const dim = fitImageSize(data.width, data.height,\n this.viewportWidth > 0 ? Math.min(this.viewportWidth - REM_SIZE * 6.5, REM_SIZE * 34.5) :\n REM_SIZE * 34.5, REM_SIZE * 24, false) ||\n {dstWidth: BROKEN_IMAGE_SIZE, dstHeight: BROKEN_IMAGE_SIZE};\n attr.style = {\n width: dim.dstWidth + 'px',\n height: dim.dstHeight + 'px',\n // Looks like a Chrome bug: broken image does not respect 'width' and 'height'.\n minWidth: dim.dstWidth + 'px',\n minHeight: dim.dstHeight + 'px'\n };\n if (!Drafty.isProcessing(data)) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'image'));\n attr.alt = data.name;\n if (attr.src) {\n if (Math.max(data.width || 0, data.height || 0) > IMAGE_THUMBNAIL_DIM) {\n // Allow previews for large enough images.\n attr.onClick = (e) => this.onHandleClick(e, 'image');\n attr.className += ' image-clickable';\n }\n attr.loading = 'lazy';\n } else {\n attr.src = null;\n }\n } else {\n // Use custom element instead of
or