Make translations static and update electron

This commit is contained in:
AlphaX-Projects 2023-11-25 16:25:19 +01:00
parent c9e70ce7cd
commit fc17216b3a
112 changed files with 555 additions and 425 deletions

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'
import {connect} from 'pwa-helpers' import {connect} from 'pwa-helpers'
import {store} from '../store.js' import {store} from '../store.js'
import {doPageUrl} from '../redux/app/app-actions.js' import {doPageUrl} from '../redux/app/app-actions.js'
import {translate} from 'lit-translate' import {translate} from '../../translate/index.js'
import WebWorker from 'web-worker:./computePowWorker.js'; import WebWorker from 'web-worker:./computePowWorker.js';
import {routes} from '../plugins/routes.js'; import {routes} from '../plugins/routes.js';

View File

@ -3,7 +3,7 @@ import { connect } from 'pwa-helpers'
import { store } from '../store.js' import { store } from '../store.js'
import { Epml } from '../epml.js' import { Epml } from '../epml.js'
import { addTradeBotRoutes } from '../tradebot/addTradeBotRoutes.js' import { addTradeBotRoutes } from '../tradebot/addTradeBotRoutes.js'
import { get, translate } from 'lit-translate' import { get, translate } from '../../translate/index.js'
import localForage from 'localforage' import localForage from 'localforage'
import { decryptData, encryptData } from '../lockScreen.js' import { decryptData, encryptData } from '../lockScreen.js'
import { setChatLastSeen } from '../redux/app/app-actions.js' import { setChatLastSeen } from '../redux/app/app-actions.js'

View File

@ -1,5 +1,5 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {translate} from 'lit-translate' import {translate} from '../../translate/index.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import '@polymer/paper-icon-button/paper-icon-button.js' import '@polymer/paper-icon-button/paper-icon-button.js'

View File

@ -1,5 +1,5 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {get} from 'lit-translate' import {get} from '../../../translate/index.js'
import '@material/mwc-icon' import '@material/mwc-icon'
import '@vaadin/tooltip'; import '@vaadin/tooltip';

View File

@ -1,5 +1,5 @@
import {css, html, LitElement} from 'lit'; import {css, html, LitElement} from 'lit';
import {translate,} from 'lit-translate'; import {translate,} from '../../../translate/index.js'
import '@material/mwc-button'; import '@material/mwc-button';
import '@material/mwc-dialog'; import '@material/mwc-dialog';
import '@material/mwc-checkbox'; import '@material/mwc-checkbox';

View File

@ -1,5 +1,5 @@
import { LitElement, html, css } from 'lit'; import { LitElement, html, css } from 'lit';
import { get, translate } from 'lit-translate'; import { get, translate } from '../../../translate/index.js'
import axios from 'axios'; import axios from 'axios';
import '@material/mwc-menu'; import '@material/mwc-menu';
import '@material/mwc-list/mwc-list-item.js'; import '@material/mwc-list/mwc-list-item.js';

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {store} from '../../store' import {store} from '../../store'
import {connect} from 'pwa-helpers' import {connect} from 'pwa-helpers'
import {translate} from 'lit-translate' import {translate} from '../../../translate/index.js'
class CoreSyncStatus extends connect(store)(LitElement) { class CoreSyncStatus extends connect(store)(LitElement) {
static get properties() { static get properties() {

View File

@ -1,5 +1,5 @@
import {css, html, LitElement} from 'lit'; import {css, html, LitElement} from 'lit';
import {translate,} from 'lit-translate'; import {translate,} from '../../../translate/index.js'
import axios from 'axios' import axios from 'axios'
import '@material/mwc-menu'; import '@material/mwc-menu';
import '@material/mwc-list/mwc-list-item.js' import '@material/mwc-list/mwc-list-item.js'

View File

@ -2,7 +2,7 @@
import { css, html, LitElement } from 'lit'; import { css, html, LitElement } from 'lit';
import { createPopper } from '@popperjs/core'; import { createPopper } from '@popperjs/core';
import '@material/mwc-icon'; import '@material/mwc-icon';
import { translate } from 'lit-translate'; import { translate } from '../../../translate/index.js'
import { store } from '../../store'; import { store } from '../../store';
import { connect } from 'pwa-helpers'; import { connect } from 'pwa-helpers';
import { setNewTab, setSideEffectAction } from '../../redux/app/app-actions'; import { setNewTab, setSideEffectAction } from '../../redux/app/app-actions';

View File

@ -5,7 +5,7 @@ import {friendsViewStyles} from './friends-view-css';
import {connect} from 'pwa-helpers'; import {connect} from 'pwa-helpers';
import {store} from '../../store'; import {store} from '../../store';
import './feed-item' import './feed-item'
import {translate} from 'lit-translate'; import {translate} from '../../../translate/index.js'
import '@polymer/paper-spinner/paper-spinner-lite.js' import '@polymer/paper-spinner/paper-spinner-lite.js'

View File

@ -1,24 +1,23 @@
import {css, html, LitElement} from 'lit'; import {css, html, LitElement} from 'lit'
import '@material/mwc-icon'; import '@material/mwc-icon'
import './friends-side-panel.js'; import './friends-side-panel.js'
import '@vaadin/tooltip'; import '@vaadin/tooltip'
import {translate} from 'lit-translate'; import {translate} from '../../../translate/index.js'
class FriendsSidePanelParent extends LitElement { class FriendsSidePanelParent extends LitElement {
static get properties() { static get properties() {
return { return {
isOpen: {type: Boolean}, isOpen: {type: Boolean},
hasNewFeed: {type: Boolean} hasNewFeed: {type: Boolean}
}; }
} }
constructor() { constructor() {
super(); super()
this.isOpen = false this.isOpen = false
this.hasNewFeed = false this.hasNewFeed = false
} }
static styles = css` static styles = css`
.header { .header {
display: flex; display: flex;
@ -46,36 +45,39 @@ class FriendsSidePanelParent extends LitElement {
transform: translateX(0); /* slide in to its original position */ transform: translateX(0); /* slide in to its original position */
} }
`; `
setHasNewFeed(val){ setHasNewFeed(val){
this.hasNewFeed = val this.hasNewFeed = val
} }
render() { render() {
return html` return html`
<mwc-icon id="friends-icon" @click=${()=> { <mwc-icon
this.isOpen = !this.isOpen id="friends-icon"
if(this.isOpen && this.hasNewFeed){ @click=${()=> {
localStorage.setItem('lastSeenFeed', Date.now()); this.isOpen = !this.isOpen
this.hasNewFeed = false if(this.isOpen && this.hasNewFeed) {
this.shadowRoot.querySelector("friends-side-panel").selected = 'feed' localStorage.setItem('lastSeenFeed', Date.now())
} this.hasNewFeed = false
}} style="color: ${this.hasNewFeed ? 'green' : 'var(--black)'}; cursor:pointer;user-select:none" this.shadowRoot.querySelector("friends-side-panel").selected = 'feed'
>group</mwc-icon }
}} style="color: ${this.hasNewFeed ? 'green' : 'var(--black)'}; cursor:pointer;user-select:none"
> >
group
</mwc-icon>
<vaadin-tooltip <vaadin-tooltip
for="friends-icon" for="friends-icon"
position="bottom" position="bottom"
hover-delay=${400} hover-delay=${400}
hide-delay=${1} hide-delay=${1}
text=${translate('friends.friend12')}> text=${translate('friends.friend12')}
</vaadin-tooltip> >
</vaadin-tooltip>
<friends-side-panel .setHasNewFeed=${(val)=> this.setHasNewFeed(val)} ?isOpen=${this.isOpen} .setIsOpen=${(val)=> this.isOpen = val}></friends-side-panel> <friends-side-panel .setHasNewFeed=${(val)=> this.setHasNewFeed(val)} ?isOpen=${this.isOpen} .setIsOpen=${(val)=> this.isOpen = val}></friends-side-panel>
`; `
} }
} }
customElements.define('friends-side-panel-parent', FriendsSidePanelParent); customElements.define('friends-side-panel-parent', FriendsSidePanelParent)

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit';
import '@material/mwc-icon'; import '@material/mwc-icon';
import './friends-view' import './friends-view'
import './friends-feed' import './friends-feed'
import {translate} from 'lit-translate'; import {translate} from '../../../translate/index.js'
class FriendsSidePanel extends LitElement { class FriendsSidePanel extends LitElement {
static get properties() { static get properties() {

View File

@ -13,7 +13,7 @@ import './ChatSideNavHeads';
import '../../../../plugins/plugins/core/components/ChatSearchResults' import '../../../../plugins/plugins/core/components/ChatSearchResults'
import './add-friends-modal' import './add-friends-modal'
import {translate,} from 'lit-translate'; import {translate,} from '../../../translate/index.js'
import {store} from '../../store'; import {store} from '../../store';
import {friendsViewStyles} from './friends-view-css'; import {friendsViewStyles} from './friends-view-css';
import {parentEpml} from '../show-plugin'; import {parentEpml} from '../show-plugin';

View File

@ -1,12 +1,6 @@
import { LitElement, html, css } from 'lit'; import { LitElement, html, css } from 'lit';
import { render } from 'lit/html.js'; import { render } from 'lit/html.js';
import { import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from '../../../translate/index.js'
use,
get,
translate,
translateUnsafeHTML,
registerTranslateConfig,
} from 'lit-translate';
import '@material/mwc-button'; import '@material/mwc-button';
import '@material/mwc-icon'; import '@material/mwc-icon';
import '@vaadin/tooltip'; import '@vaadin/tooltip';

View File

@ -6,7 +6,7 @@ import { store } from '../../store.js';
import WebWorker2 from '../WebWorkerFile.js'; import WebWorker2 from '../WebWorkerFile.js';
import '@polymer/paper-spinner/paper-spinner-lite.js'; import '@polymer/paper-spinner/paper-spinner-lite.js';
import '@vaadin/tooltip'; import '@vaadin/tooltip';
import { get, translate } from 'lit-translate'; import { get, translate } from '../../../translate/index.js'
import ShortUniqueId from 'short-unique-id'; import ShortUniqueId from 'short-unique-id';
import '@polymer/paper-dialog/paper-dialog.js'; import '@polymer/paper-dialog/paper-dialog.js';

View File

@ -6,7 +6,7 @@ import { store } from '../../store.js';
import WebWorker from '../WebWorkerFile.js'; import WebWorker from '../WebWorkerFile.js';
import '@polymer/paper-spinner/paper-spinner-lite.js'; import '@polymer/paper-spinner/paper-spinner-lite.js';
import '@vaadin/tooltip'; import '@vaadin/tooltip';
import { get, translate } from 'lit-translate'; import { get, translate } from '../../../translate/index.js'
import ShortUniqueId from 'short-unique-id'; import ShortUniqueId from 'short-unique-id';
import { import {

View File

@ -1,5 +1,5 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {registerTranslateConfig, translate, use} from 'lit-translate' import {registerTranslateConfig, translate, use} from '../../translate/index.js'
registerTranslateConfig({ registerTranslateConfig({
loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) loader: lang => fetch(`/language/${lang}.json`).then(res => res.json())

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {connect} from 'pwa-helpers' import {connect} from 'pwa-helpers'
import {store} from '../../store.js' import {store} from '../../store.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../translate/index.js'
import {createWallet} from '../../../../crypto/api/createWallet.js' import {createWallet} from '../../../../crypto/api/createWallet.js'
import {doLogin, doLogout, doSelectAddress} from '../../redux/app/app-actions.js' import {doLogin, doLogout, doSelectAddress} from '../../redux/app/app-actions.js'

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'
import {connect} from 'pwa-helpers' import {connect} from 'pwa-helpers'
import {store} from '../../store.js' import {store} from '../../store.js'
import {checkApiKey} from '../../apiKeyUtils.js' import {checkApiKey} from '../../apiKeyUtils.js'
import {translate} from 'lit-translate' import {translate} from '../../../translate/index.js'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-checkbox' import '@material/mwc-checkbox'

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'
import {connect} from 'pwa-helpers' import {connect} from 'pwa-helpers'
import {store} from '../../store.js' import {store} from '../../store.js'
import {stateAwait} from '../../stateAwait.js' import {stateAwait} from '../../stateAwait.js'
import {get} from 'lit-translate' import {get} from '../../../translate/index.js'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-icon' import '@material/mwc-icon'

View File

@ -1,5 +1,5 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {translate} from 'lit-translate' import {translate} from '../../../translate/index.js'
import '@material/mwc-button' import '@material/mwc-button'

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'
import {connect} from 'pwa-helpers' import {connect} from 'pwa-helpers'
import {store} from '../../store.js' import {store} from '../../store.js'
import {doLogout} from '../../redux/app/app-actions.js' import {doLogout} from '../../redux/app/app-actions.js'
import {translate} from 'lit-translate' import {translate} from '../../../translate/index.js'
import '@polymer/paper-dialog/paper-dialog.js' import '@polymer/paper-dialog/paper-dialog.js'
import '@material/mwc-button' import '@material/mwc-button'

View File

@ -1,5 +1,5 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {registerTranslateConfig, translate, use} from 'lit-translate' import {registerTranslateConfig, translate, use} from '../../translate/index.js'
registerTranslateConfig({ registerTranslateConfig({
loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) loader: lang => fetch(`/language/${lang}.json`).then(res => res.json())

View File

@ -8,7 +8,7 @@ import '@polymer/iron-icons/iron-icons.js';
import {store} from '../../store.js'; import {store} from '../../store.js';
import {setNewNotification} from '../../redux/app/app-actions.js'; import {setNewNotification} from '../../redux/app/app-actions.js';
import '@material/mwc-icon'; import '@material/mwc-icon';
import {get, translate} from 'lit-translate'; import {get, translate} from '../../../translate/index.js'
import {repeat} from 'lit/directives/repeat.js'; import {repeat} from 'lit/directives/repeat.js';
import '../../../../plugins/plugins/core/components/TimeAgo.js'; import '../../../../plugins/plugins/core/components/TimeAgo.js';
import './popover.js'; import './popover.js';

View File

@ -1,5 +1,5 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {get, translate} from 'lit-translate' import {get, translate} from '../../translate/index.js'
import snackbar from '../functional-components/snackbar.js' import snackbar from '../functional-components/snackbar.js'
import '@polymer/paper-icon-button/paper-icon-button.js' import '@polymer/paper-icon-button/paper-icon-button.js'

View File

@ -1,7 +1,7 @@
import { LitElement, html, css } from 'lit' import { LitElement, html, css } from 'lit'
import { connect } from 'pwa-helpers' import { connect } from 'pwa-helpers'
import { store } from '../../store.js' import { store } from '../../store.js'
import { get, translate } from 'lit-translate' import { get, translate } from '../../../translate/index.js'
class AccountView extends connect(store)(LitElement) { class AccountView extends connect(store)(LitElement) {
static get properties() { static get properties() {

View File

@ -3,7 +3,7 @@ import {connect} from 'pwa-helpers'
import {store} from '../../store.js' import {store} from '../../store.js'
import { Epml } from '../../epml.js' import { Epml } from '../../epml.js'
import { addTradeBotRoutes } from '../../tradebot/addTradeBotRoutes.js' import { addTradeBotRoutes } from '../../tradebot/addTradeBotRoutes.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../translate/index.js'
import snackbar from '../../functional-components/snackbar.js' import snackbar from '../../functional-components/snackbar.js'
import FileSaver from 'file-saver' import FileSaver from 'file-saver'

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'
import {connect} from 'pwa-helpers' import {connect} from 'pwa-helpers'
import {store} from '../../store.js' import {store} from '../../store.js'
import {doSetQChatNotificationConfig} from '../../redux/user/user-actions.js' import {doSetQChatNotificationConfig} from '../../redux/user/user-actions.js'
import {translate} from 'lit-translate' import {translate} from '../../../translate/index.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import '@material/mwc-checkbox' import '@material/mwc-checkbox'

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {connect} from 'pwa-helpers' import {connect} from 'pwa-helpers'
import {store} from '../../store.js' import {store} from '../../store.js'
import {translate} from 'lit-translate' import {translate} from '../../../translate/index.js'
import '@material/mwc-textfield' import '@material/mwc-textfield'
import '@material/mwc-icon' import '@material/mwc-icon'

View File

@ -10,7 +10,7 @@ import {
removeQAPPAutoLists, removeQAPPAutoLists,
setIsOpenDevDialog setIsOpenDevDialog
} from '../../redux/app/app-actions.js' } from '../../redux/app/app-actions.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../translate/index.js'
import snackbar from '../../functional-components/snackbar.js' import snackbar from '../../functional-components/snackbar.js'
import FileSaver from 'file-saver' import FileSaver from 'file-saver'

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {connect} from 'pwa-helpers' import {connect} from 'pwa-helpers'
import {store} from '../../store.js' import {store} from '../../store.js'
import {translate} from 'lit-translate' import {translate} from '../../../translate/index.js'
import '@polymer/paper-dialog/paper-dialog.js' import '@polymer/paper-dialog/paper-dialog.js'
import '@material/mwc-button' import '@material/mwc-button'

View File

@ -8,7 +8,7 @@ import {repeat} from 'lit/directives/repeat.js';
import ShortUniqueId from 'short-unique-id'; import ShortUniqueId from 'short-unique-id';
import {setIsOpenDevDialog, setNewTab} from '../redux/app/app-actions.js' import {setIsOpenDevDialog, setNewTab} from '../redux/app/app-actions.js'
import FileSaver from 'file-saver' import FileSaver from 'file-saver'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../translate/index.js'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-dialog' import '@material/mwc-dialog'
import '@material/mwc-icon' import '@material/mwc-icon'

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit'; import {css, html, LitElement} from 'lit';
import {connect} from 'pwa-helpers'; import {connect} from 'pwa-helpers';
import {store} from '../store.js'; import {store} from '../store.js';
import {get, translate} from 'lit-translate'; import {get, translate} from '../../translate/index.js'
import {asyncReplace} from 'lit/directives/async-replace.js'; import {asyncReplace} from 'lit/directives/async-replace.js';
import '../functional-components/my-button.js'; import '../functional-components/my-button.js';

View File

@ -1,5 +1,5 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {translate} from 'lit-translate' import {translate} from '../../translate/index.js'
import '@polymer/paper-icon-button/paper-icon-button.js' import '@polymer/paper-icon-button/paper-icon-button.js'
import '@polymer/iron-icons/image-icons.js' import '@polymer/iron-icons/image-icons.js'
import '@polymer/iron-icons/iron-icons.js' import '@polymer/iron-icons/iron-icons.js'

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'
import {render} from 'lit/html.js' import {render} from 'lit/html.js'
import {connect} from 'pwa-helpers' import {connect} from 'pwa-helpers'
import {store} from '../../store.js' import {store} from '../../store.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../translate/index.js'
import '@polymer/paper-dialog/paper-dialog.js' import '@polymer/paper-dialog/paper-dialog.js'
import '@material/mwc-button' import '@material/mwc-button'

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {connect} from 'pwa-helpers' import {connect} from 'pwa-helpers'
import {store} from '../store.js' import {store} from '../store.js'
import {translate} from 'lit-translate' import {translate} from '../../translate/index.js'
import '@polymer/paper-toast' import '@polymer/paper-toast'
import '@material/mwc-icon-button' import '@material/mwc-icon-button'

View File

@ -3,7 +3,7 @@ import {css, html, LitElement} from 'lit'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-icon' import '@material/mwc-icon'
import {translate} from 'lit-translate' import {translate} from '../../translate/index.js'
class FragFileInput extends LitElement { class FragFileInput extends LitElement {
static get properties () { static get properties () {

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {connect} from 'pwa-helpers' import {connect} from 'pwa-helpers'
import {store} from '../store.js' import {store} from '../store.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../translate/index.js'
import {listenForRequest} from '../transactionRequest.js' import {listenForRequest} from '../transactionRequest.js'

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'
import {connect} from 'pwa-helpers' import {connect} from 'pwa-helpers'
import {store} from '../store.js' import {store} from '../store.js'
import {testApiKey} from '../apiKeyUtils.js' import {testApiKey} from '../apiKeyUtils.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../translate/index.js'
import '@material/mwc-dialog' import '@material/mwc-dialog'
import '@material/mwc-button' import '@material/mwc-button'

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'
import {connect} from 'pwa-helpers' import {connect} from 'pwa-helpers'
import {store} from '../store.js' import {store} from '../store.js'
import {doAddNode, doEditNode, doLoadNodeConfig, doRemoveNode, doSetNode} from '../redux/app/app-actions.js' import {doAddNode, doEditNode, doLoadNodeConfig, doRemoveNode, doSetNode} from '../redux/app/app-actions.js'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../translate/index.js'
import snackbar from './snackbar.js' import snackbar from './snackbar.js'
import '../components/language-selector.js' import '../components/language-selector.js'
import '../custom-elements/frag-file-input.js' import '../custom-elements/frag-file-input.js'

1
core/translate/config.js Normal file
View File

@ -0,0 +1 @@
export const LANG_CHANGED_EVENT = 'langChanged'

View File

@ -0,0 +1,40 @@
import { AsyncDirective } from 'lit/async-directive.js'
import { listenForLangChanged } from '../util.js'
export class LangChangedDirectiveBase extends AsyncDirective {
constructor() {
super(...arguments)
this.langChangedSubscription = null
this.getValue = (() => "")
}
renderValue(getValue) {
this.getValue = getValue
this.subscribe()
return this.getValue()
}
langChanged(e) {
this.setValue(this.getValue(e))
}
subscribe() {
if (this.langChangedSubscription == null) {
this.langChangedSubscription = listenForLangChanged(this.langChanged.bind(this))
}
}
unsubscribe() {
if (this.langChangedSubscription != null) {
this.langChangedSubscription()
}
}
disconnected() {
this.unsubscribe()
}
reconnected() {
this.subscribe()
}
}

View File

@ -0,0 +1,9 @@
import { directive } from 'lit/directive.js'
import { LangChangedDirectiveBase } from './lang-changed-base.js'
export class LangChangedDirective extends LangChangedDirectiveBase {
render(getValue) {
return this.renderValue(getValue)
}
}
export const langChanged = directive(LangChangedDirective)

View File

@ -0,0 +1,12 @@
import { directive } from 'lit/directive.js'
import { unsafeHTML } from 'lit/directives/unsafe-html.js'
import { TranslateDirective } from './translate.js'
import { get } from '../util.js'
export class TranslateUnsafeHTMLDirective extends TranslateDirective {
render(key, values, config) {
return this.renderValue(() => unsafeHTML(get(key, values, config)))
}
}
export const translateUnsafeHTML = directive(TranslateUnsafeHTMLDirective)

View File

@ -0,0 +1,11 @@
import { directive } from 'lit/directive.js'
import { get } from '../util.js'
import { LangChangedDirectiveBase } from './lang-changed-base.js'
export class TranslateDirective extends LangChangedDirectiveBase {
render(key, values, config) {
return this.renderValue(() => get(key, values, config))
}
}
export const translate = directive(TranslateDirective)

16
core/translate/helpers.js Normal file
View File

@ -0,0 +1,16 @@
export function interpolate(text, values, config) {
return Object.entries(extract(values || {})).reduce((text, [key, value]) => text.replace(new RegExp(`{{[  ]*${key}[  ]*}}`, `gm`), String(extract(value))), text)
}
export function lookup(key, config) {
const parts = key.split(".")
let string = config.strings
while (string != null && parts.length > 0) {
string = string[parts.shift()]
}
return string != null ? string.toString() : null
}
export function extract(obj) {
return (typeof obj === "function") ? obj() : obj
}

7
core/translate/index.js Normal file
View File

@ -0,0 +1,7 @@
export * from './model.js'
export * from './util.js'
export * from './helpers.js'
export * from './directives/translate.js'
export * from './directives/translate-unsafe-html.js'
export * from './directives/lang-changed.js'
export * from './directives/lang-changed-base.js'

1
core/translate/model.js Normal file
View File

@ -0,0 +1 @@
export {}

49
core/translate/util.js Normal file
View File

@ -0,0 +1,49 @@
import { LANG_CHANGED_EVENT } from './config.js'
import { extract, interpolate, lookup } from './helpers.js'
export const defaultTranslateConfig = () => {
return {
loader: () => Promise.resolve({}),
empty: key => `[${key}]`,
lookup: lookup,
interpolate: interpolate,
translationCache: {}
}
}
export let translateConfig = defaultTranslateConfig()
export function registerTranslateConfig(config) {
return (translateConfig = Object.assign(Object.assign({}, translateConfig), config))
}
export function dispatchLangChanged(detail) {
window.dispatchEvent(new CustomEvent(LANG_CHANGED_EVENT, { detail }))
}
export function updateLang(newLang, newStrings, config = translateConfig) {
dispatchLangChanged({
previousStrings: config.strings,
previousLang: config.lang,
lang: (config.lang = newLang),
strings: (config.strings = newStrings)
})
}
export function listenForLangChanged(callback, options) {
const handler = (e) => callback(e.detail)
window.addEventListener(LANG_CHANGED_EVENT, handler, options)
return () => window.removeEventListener(LANG_CHANGED_EVENT, handler)
}
export async function use(lang, config = translateConfig) {
const strings = await config.loader(lang, config)
config.translationCache = {}
updateLang(lang, strings, config)
}
export function get(key, values, config = translateConfig) {
let translation = config.translationCache[key] || (config.translationCache[key] = config.lookup(key, config) || config.empty(key, config))
values = values != null ? extract(values) : null
return values != null ? config.interpolate(translation, values, config) : translation
}

View File

@ -1,7 +1,7 @@
import Base58 from './deps/Base58.js' import Base58 from './deps/Base58.js'
import {kdf} from './kdf.js' import {kdf} from './kdf.js'
import {AES_CBC, HmacSha512} from 'asmcrypto.js' import {AES_CBC, HmacSha512} from 'asmcrypto.js'
import {get, registerTranslateConfig} from 'lit-translate' import {get, registerTranslateConfig} from '../../core/translate/index.js'
registerTranslateConfig({ registerTranslateConfig({
loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) loader: lang => fetch(`/language/${lang}.json`).then(res => res.json())

View File

@ -2,7 +2,7 @@ import {store} from '../api_deps.js'
import {stateAwait} from './utils/stateAwait.js' import {stateAwait} from './utils/stateAwait.js'
import {Sha512} from 'asmcrypto.js' import {Sha512} from 'asmcrypto.js'
import utils from '../api/deps/utils.js' import utils from '../api/deps/utils.js'
import {get, registerTranslateConfig} from 'lit-translate' import {get, registerTranslateConfig} from '../../core/translate/index.js'
registerTranslateConfig({ registerTranslateConfig({
loader: lang => fetch(`/language/${lang}.json`).then(res => res.json()) loader: lang => fetch(`/language/${lang}.json`).then(res => res.json())

311
package-lock.json generated
View File

@ -27,9 +27,9 @@
"compressorjs": "1.2.1", "compressorjs": "1.2.1",
"crypto-js": "4.2.0", "crypto-js": "4.2.0",
"electron-dl": "3.5.1", "electron-dl": "3.5.1",
"electron-log": "5.0.0", "electron-log": "5.0.1",
"electron-store": "8.1.0", "electron-store": "8.1.0",
"electron-updater": "6.1.4", "electron-updater": "6.1.7",
"emoji-picker-js": "https://github.com/Qortal/emoji-picker-js", "emoji-picker-js": "https://github.com/Qortal/emoji-picker-js",
"extract-zip": "2.0.1", "extract-zip": "2.0.1",
"jssha": "3.3.1", "jssha": "3.3.1",
@ -101,8 +101,8 @@
"@vaadin/tooltip": "24.2.3", "@vaadin/tooltip": "24.2.3",
"@zip.js/zip.js": "2.7.31", "@zip.js/zip.js": "2.7.31",
"axios": "1.6.2", "axios": "1.6.2",
"electron": "27.1.0", "electron": "27.1.2",
"electron-builder": "24.6.4", "electron-builder": "24.9.1",
"electron-packager": "17.1.2", "electron-packager": "17.1.2",
"epml": "0.3.3", "epml": "0.3.3",
"eslint": "8.54.0", "eslint": "8.54.0",
@ -113,12 +113,11 @@
"html-escaper": "3.0.3", "html-escaper": "3.0.3",
"is-electron": "2.2.2", "is-electron": "2.2.2",
"lit": "2.8.0", "lit": "2.8.0",
"lit-translate": "2.0.1",
"passive-events-support": "1.1.0", "passive-events-support": "1.1.0",
"pwa-helpers": "0.9.1", "pwa-helpers": "0.9.1",
"redux": "4.2.1", "redux": "4.2.1",
"redux-thunk": "2.4.2", "redux-thunk": "2.4.2",
"rollup": "4.5.0", "rollup": "4.5.2",
"rollup-plugin-node-globals": "1.4.0", "rollup-plugin-node-globals": "1.4.0",
"rollup-plugin-progress": "1.1.2", "rollup-plugin-progress": "1.1.2",
"rollup-plugin-scss": "3.0.0", "rollup-plugin-scss": "3.0.0",
@ -151,12 +150,12 @@
} }
}, },
"node_modules/@babel/code-frame": { "node_modules/@babel/code-frame": {
"version": "7.22.13", "version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz",
"integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "integrity": "sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/highlight": "^7.22.13", "@babel/highlight": "^7.23.4",
"chalk": "^2.4.2" "chalk": "^2.4.2"
}, },
"engines": { "engines": {
@ -203,12 +202,12 @@
} }
}, },
"node_modules/@babel/generator": { "node_modules/@babel/generator": {
"version": "7.23.3", "version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.4.tgz",
"integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", "integrity": "sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/types": "^7.23.3", "@babel/types": "^7.23.4",
"@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17", "@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1" "jsesc": "^2.5.1"
@ -323,9 +322,9 @@
} }
}, },
"node_modules/@babel/helper-string-parser": { "node_modules/@babel/helper-string-parser": {
"version": "7.22.5", "version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@ -350,23 +349,23 @@
} }
}, },
"node_modules/@babel/helpers": { "node_modules/@babel/helpers": {
"version": "7.23.2", "version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.4.tgz",
"integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", "integrity": "sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/template": "^7.22.15", "@babel/template": "^7.22.15",
"@babel/traverse": "^7.23.2", "@babel/traverse": "^7.23.4",
"@babel/types": "^7.23.0" "@babel/types": "^7.23.4"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/highlight": { "node_modules/@babel/highlight": {
"version": "7.22.20", "version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
"integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-validator-identifier": "^7.22.20", "@babel/helper-validator-identifier": "^7.22.20",
@ -378,9 +377,9 @@
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.23.3", "version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz",
"integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", "integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==",
"dev": true, "dev": true,
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
@ -390,9 +389,9 @@
} }
}, },
"node_modules/@babel/runtime": { "node_modules/@babel/runtime": {
"version": "7.23.2", "version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.4.tgz",
"integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "integrity": "sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"regenerator-runtime": "^0.14.0" "regenerator-runtime": "^0.14.0"
@ -416,19 +415,19 @@
} }
}, },
"node_modules/@babel/traverse": { "node_modules/@babel/traverse": {
"version": "7.23.3", "version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.4.tgz",
"integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", "integrity": "sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.22.13", "@babel/code-frame": "^7.23.4",
"@babel/generator": "^7.23.3", "@babel/generator": "^7.23.4",
"@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0", "@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6", "@babel/helper-split-export-declaration": "^7.22.6",
"@babel/parser": "^7.23.3", "@babel/parser": "^7.23.4",
"@babel/types": "^7.23.3", "@babel/types": "^7.23.4",
"debug": "^4.1.0", "debug": "^4.1.0",
"globals": "^11.1.0" "globals": "^11.1.0"
}, },
@ -437,12 +436,12 @@
} }
}, },
"node_modules/@babel/types": { "node_modules/@babel/types": {
"version": "7.23.3", "version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz",
"integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-string-parser": "^7.22.5", "@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20", "@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0" "to-fast-properties": "^2.0.0"
}, },
@ -3006,9 +3005,9 @@
} }
}, },
"node_modules/@rollup/rollup-android-arm-eabi": { "node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.5.0", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.5.2.tgz",
"integrity": "sha512-OINaBGY+Wc++U0rdr7BLuFClxcoWaVW3vQYqmQq6B3bqQ/2olkaoz+K8+af/Mmka/C2yN5j+L9scBkv4BtKsDA==", "integrity": "sha512-ee7BudTwwrglFYSc3UnqInDDjCLWHKrFmGNi4aK7jlEyg4CyPa1DCMrZfsN1O13YT76UFEqXz2CoN7BCGpUlJw==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@ -3019,9 +3018,9 @@
] ]
}, },
"node_modules/@rollup/rollup-android-arm64": { "node_modules/@rollup/rollup-android-arm64": {
"version": "4.5.0", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.5.2.tgz",
"integrity": "sha512-UdMf1pOQc4ZmUA/NTmKhgJTBimbSKnhPS2zJqucqFyBRFPnPDtwA8MzrGNTjDeQbIAWfpJVAlxejw+/lQyBK/w==", "integrity": "sha512-xOuhj9HHtn8128ir8veoQsBbAUBasDbHIBniYTEx02pAmu9EXL+ZjJqngnNEy6ZgZ4h1JwL33GMNu3yJL5Mzow==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -3032,9 +3031,9 @@
] ]
}, },
"node_modules/@rollup/rollup-darwin-arm64": { "node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.5.0", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.5.2.tgz",
"integrity": "sha512-L0/CA5p/idVKI+c9PcAPGorH6CwXn6+J0Ys7Gg1axCbTPgI8MeMlhA6fLM9fK+ssFhqogMHFC8HDvZuetOii7w==", "integrity": "sha512-NTGJWoL8bKyqyWFn9/RzSv4hQ4wTbaAv0lHHRwf4OnpiiP4P8W0jiXbm8Nc5BCXKmWAwuvJY82mcIU2TayC20g==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -3045,9 +3044,9 @@
] ]
}, },
"node_modules/@rollup/rollup-darwin-x64": { "node_modules/@rollup/rollup-darwin-x64": {
"version": "4.5.0", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.5.2.tgz",
"integrity": "sha512-QZCbVqU26mNlLn8zi/XDDquNmvcr4ON5FYAHQQsyhrHx8q+sQi/6xduoznYXwk/KmKIXG5dLfR0CvY+NAWpFYQ==", "integrity": "sha512-hlKqj7bpPvU15sZo4za14u185lpMzdwWLMc9raMqPK4wywt0wR23y1CaVQ4oAFXat3b5/gmRntyfpwWTKl+vvA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -3058,9 +3057,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm-gnueabihf": { "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.5.0", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.5.2.tgz",
"integrity": "sha512-VpSQ+xm93AeV33QbYslgf44wc5eJGYfYitlQzAi3OObu9iwrGXEnmu5S3ilkqE3Pr/FkgOiJKV/2p0ewf4Hrtg==", "integrity": "sha512-7ZIZx8c3u+pfI0ohQsft/GywrXez0uR6dUP0JhBuCK3sFO5TfdLn/YApnVkvPxuTv3+YKPIZend9Mt7Cz6sS3Q==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@ -3071,9 +3070,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-gnu": { "node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.5.0", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.5.2.tgz",
"integrity": "sha512-OrEyIfpxSsMal44JpEVx9AEcGpdBQG1ZuWISAanaQTSMeStBW+oHWwOkoqR54bw3x8heP8gBOyoJiGg+fLY8qQ==", "integrity": "sha512-7Pk/5mO11JW/cH+a8lL/i0ZxmRGrbpYqN0VwO2DHhU+SJWWOH2zE1RAcPaj8KqiwC8DCDIJOSxjV9+9lLb6aeA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -3084,9 +3083,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-musl": { "node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.5.0", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.5.2.tgz",
"integrity": "sha512-1H7wBbQuE6igQdxMSTjtFfD+DGAudcYWhp106z/9zBA8OQhsJRnemO4XGavdzHpGhRtRxbgmUGdO3YQgrWf2RA==", "integrity": "sha512-KrRnuG5phJx756e62wxvWH2e+TK84MP2IVuPwfge+GBvWqIUfVzFRn09TKruuQBXzZp52Vyma7FjMDkwlA9xpg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -3097,9 +3096,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-gnu": { "node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.5.0", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.5.2.tgz",
"integrity": "sha512-FVyFI13tXw5aE65sZdBpNjPVIi4Q5mARnL/39UIkxvSgRAIqCo5sCpCELk0JtXHGee2owZz5aNLbWNfBHzr71Q==", "integrity": "sha512-My+53GasPa2D2tU5dXiyHYwrELAUouSfkNlZ3bUKpI7btaztO5vpALEs3mvFjM7aKTvEbc7GQckuXeXIDKQ0fg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -3110,9 +3109,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-musl": { "node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.5.0", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.5.2.tgz",
"integrity": "sha512-eBPYl2sLpH/o8qbSz6vPwWlDyThnQjJfcDOGFbNjmjb44XKC1F5dQfakOsADRVrXCNzM6ZsSIPDG5dc6HHLNFg==", "integrity": "sha512-/f0Q6Sc+Vw54Ws6N8fxaEe4R7at3b8pFyv+O/F2VaQ4hODUJcRUcCBJh6zuqtgQQt7w845VTkGLFgWZkP3tUoQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -3123,9 +3122,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-arm64-msvc": { "node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.5.0", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.5.2.tgz",
"integrity": "sha512-xaOHIfLOZypoQ5U2I6rEaugS4IYtTgP030xzvrBf5js7p9WI9wik07iHmsKaej8Z83ZDxN5GyypfoyKV5O5TJA==", "integrity": "sha512-NCKuuZWLht6zj7s6EIFef4BxCRX1GMr83S2W4HPCA0RnJ4iHE4FS1695q6Ewoa6A9nFjJe1//yUu0kgBU07Edw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -3136,9 +3135,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-ia32-msvc": { "node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.5.0", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.5.2.tgz",
"integrity": "sha512-Al6quztQUrHwcOoU2TuFblUQ5L+/AmPBXFR6dUvyo4nRj2yQRK0WIUaGMF/uwKulvRcXkpHe3k9A8Vf93VDktA==", "integrity": "sha512-J5zL3riR4AOyU/J3M/i4k/zZ8eP1yT+nTmAKztCXJtnI36jYH0eepvob22mAQ/kLwfsK2TB6dbyVY1F8c/0H5A==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@ -3149,9 +3148,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-x64-msvc": { "node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.5.0", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.2.tgz",
"integrity": "sha512-8kdW+brNhI/NzJ4fxDufuJUjepzINqJKLGHuxyAtpPG9bMbn8P5mtaCcbOm0EzLJ+atg+kF9dwg8jpclkVqx5w==", "integrity": "sha512-pL0RXRHuuGLhvs7ayX/SAHph1hrDPXOM5anyYUQXWJEENxw3nfHkzv8FfVlEVcLyKPAEgDRkd6RKZq2SMqS/yg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -3612,9 +3611,9 @@
"dev": true "dev": true
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "18.18.10", "version": "18.18.13",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.10.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.13.tgz",
"integrity": "sha512-luANqZxPmjTll8bduz4ACs/lNTCLuWssCyjqTY9yLdsv1xnViQp3ISKwsEWOIecO13JWUqjVdig/Vjjc09o8uA==", "integrity": "sha512-vXYZGRrSCreZmq1rEjMRLXJhiy8MrIeVasx+PCVlP414N7CJLHnMf+juVvjdprHyH+XRy3zKZLHeNueOpJCn0g==",
"devOptional": true, "devOptional": true,
"dependencies": { "dependencies": {
"undici-types": "~5.26.4" "undici-types": "~5.26.4"
@ -3662,9 +3661,9 @@
"integrity": "sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==" "integrity": "sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ=="
}, },
"node_modules/@types/trusted-types": { "node_modules/@types/trusted-types": {
"version": "2.0.6", "version": "2.0.7",
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.6.tgz", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
"integrity": "sha512-HYtNooPvUY9WAVRBr4u+4Qa9fYD1ze2IUlAD3HoA6oehn1taGwBx3Oa52U4mTslTS+GAExKpaFu39Y5xUEwfjg==" "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="
}, },
"node_modules/@types/verror": { "node_modules/@types/verror": {
"version": "1.10.9", "version": "1.10.9",
@ -4013,9 +4012,9 @@
} }
}, },
"node_modules/7zip-bin": { "node_modules/7zip-bin": {
"version": "5.1.1", "version": "5.2.0",
"resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz",
"integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==",
"dev": true "dev": true
}, },
"node_modules/acorn": { "node_modules/acorn": {
@ -4152,9 +4151,9 @@
"dev": true "dev": true
}, },
"node_modules/app-builder-lib": { "node_modules/app-builder-lib": {
"version": "24.6.4", "version": "24.9.1",
"resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.6.4.tgz", "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.9.1.tgz",
"integrity": "sha512-m9931WXb83teb32N0rKg+ulbn6+Hl8NV5SUpVDOVz9MWOXfhV6AQtTdftf51zJJvCQnQugGtSqoLvgw6mdF/Rg==", "integrity": "sha512-Q1nYxZcio4r+W72cnIRVYofEAyjBd3mG47o+zms8HlD51zWtA/YxJb01Jei5F+jkWhge/PTQK+uldsPh6d0/4g==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@develar/schema-utils": "~2.6.5", "@develar/schema-utils": "~2.6.5",
@ -4163,15 +4162,15 @@
"@electron/universal": "1.4.1", "@electron/universal": "1.4.1",
"@malept/flatpak-bundler": "^0.4.0", "@malept/flatpak-bundler": "^0.4.0",
"@types/fs-extra": "9.0.13", "@types/fs-extra": "9.0.13",
"7zip-bin": "~5.1.1", "7zip-bin": "~5.2.0",
"async-exit-hook": "^2.0.1", "async-exit-hook": "^2.0.1",
"bluebird-lst": "^1.0.9", "bluebird-lst": "^1.0.9",
"builder-util": "24.5.0", "builder-util": "24.8.1",
"builder-util-runtime": "9.2.1", "builder-util-runtime": "9.2.3",
"chromium-pickle-js": "^0.2.0", "chromium-pickle-js": "^0.2.0",
"debug": "^4.3.4", "debug": "^4.3.4",
"ejs": "^3.1.8", "ejs": "^3.1.8",
"electron-publish": "24.5.0", "electron-publish": "24.8.1",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"fs-extra": "^10.1.0", "fs-extra": "^10.1.0",
"hosted-git-info": "^4.1.0", "hosted-git-info": "^4.1.0",
@ -4525,16 +4524,16 @@
"dev": true "dev": true
}, },
"node_modules/builder-util": { "node_modules/builder-util": {
"version": "24.5.0", "version": "24.8.1",
"resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.5.0.tgz", "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.8.1.tgz",
"integrity": "sha512-STnBmZN/M5vGcv01u/K8l+H+kplTaq4PAIn3yeuufUKSpcdro0DhJWxPI81k5XcNfC//bjM3+n9nr8F9uV4uAQ==", "integrity": "sha512-ibmQ4BnnqCnJTNrdmdNlnhF48kfqhNzSeqFMXHLIl+o9/yhn6QfOaVrloZ9YUu3m0k3rexvlT5wcki6LWpjTZw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/debug": "^4.1.6", "@types/debug": "^4.1.6",
"7zip-bin": "~5.1.1", "7zip-bin": "~5.2.0",
"app-builder-bin": "4.0.0", "app-builder-bin": "4.0.0",
"bluebird-lst": "^1.0.9", "bluebird-lst": "^1.0.9",
"builder-util-runtime": "9.2.1", "builder-util-runtime": "9.2.3",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"cross-spawn": "^7.0.3", "cross-spawn": "^7.0.3",
"debug": "^4.3.4", "debug": "^4.3.4",
@ -4549,9 +4548,9 @@
} }
}, },
"node_modules/builder-util-runtime": { "node_modules/builder-util-runtime": {
"version": "9.2.1", "version": "9.2.3",
"resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz", "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.3.tgz",
"integrity": "sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==", "integrity": "sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw==",
"dependencies": { "dependencies": {
"debug": "^4.3.4", "debug": "^4.3.4",
"sax": "^1.2.4" "sax": "^1.2.4"
@ -4714,9 +4713,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001563", "version": "1.0.30001564",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz",
"integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==", "integrity": "sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -5332,14 +5331,14 @@
} }
}, },
"node_modules/dmg-builder": { "node_modules/dmg-builder": {
"version": "24.6.4", "version": "24.9.1",
"resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.6.4.tgz", "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.9.1.tgz",
"integrity": "sha512-BNcHRc9CWEuI9qt0E655bUBU/j/3wUCYBVKGu1kVpbN5lcUdEJJJeiO0NHK3dgKmra6LUUZlo+mWqc+OCbi0zw==", "integrity": "sha512-huC+O6hvHd24Ubj3cy2GMiGLe2xGFKN3klqVMLAdcbB6SWMd1yPSdZvV8W1O01ICzCCRlZDHiv4VrNUgnPUfbQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"app-builder-lib": "24.6.4", "app-builder-lib": "24.9.1",
"builder-util": "24.5.0", "builder-util": "24.8.1",
"builder-util-runtime": "9.2.1", "builder-util-runtime": "9.2.3",
"fs-extra": "^10.1.0", "fs-extra": "^10.1.0",
"iconv-lite": "^0.6.2", "iconv-lite": "^0.6.2",
"js-yaml": "^4.1.0" "js-yaml": "^4.1.0"
@ -5466,9 +5465,9 @@
} }
}, },
"node_modules/electron": { "node_modules/electron": {
"version": "27.1.0", "version": "27.1.2",
"resolved": "https://registry.npmjs.org/electron/-/electron-27.1.0.tgz", "resolved": "https://registry.npmjs.org/electron/-/electron-27.1.2.tgz",
"integrity": "sha512-XPdJiO475QJ8cx59/goWNNWnlV0vab+Ut3occymos7VDxkHV5mFrlW6tcGi+M3bW6gBfwpJocWMng8tw542vww==", "integrity": "sha512-Dy6BUuGLiIJv+zfsXwr78TV2TNppi24rXF4PIIS+OjDblEKdkI9r1iM8JUd3/x3sbGUy5mdLMSPhvmu//IhkgA==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
@ -5484,16 +5483,16 @@
} }
}, },
"node_modules/electron-builder": { "node_modules/electron-builder": {
"version": "24.6.4", "version": "24.9.1",
"resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.6.4.tgz", "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.9.1.tgz",
"integrity": "sha512-uNWQoU7pE7qOaIQ6CJHpBi44RJFVG8OHRBIadUxrsDJVwLLo8Nma3K/EEtx5/UyWAQYdcK4nVPYKoRqBb20hbA==", "integrity": "sha512-v7BuakDuY6sKMUYM8mfQGrwyjBpZ/ObaqnenU0H+igEL10nc6ht049rsCw2HghRBdEwJxGIBuzs3jbEhNaMDmg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"app-builder-lib": "24.6.4", "app-builder-lib": "24.9.1",
"builder-util": "24.5.0", "builder-util": "24.8.1",
"builder-util-runtime": "9.2.1", "builder-util-runtime": "9.2.3",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"dmg-builder": "24.6.4", "dmg-builder": "24.9.1",
"fs-extra": "^10.1.0", "fs-extra": "^10.1.0",
"is-ci": "^3.0.0", "is-ci": "^3.0.0",
"lazy-val": "^1.0.5", "lazy-val": "^1.0.5",
@ -5631,11 +5630,10 @@
} }
}, },
"node_modules/electron-log": { "node_modules/electron-log": {
"version": "5.0.0", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.0.0.tgz", "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.0.1.tgz",
"integrity": "sha512-vB3akupmQvA8jAyNL9rULZtf6WoP8vsabjXsRtiqXS6/D37SwN/4LEyj4JD+9Bv6xoTcx/LrVnsIKEEWdq5ClQ==", "integrity": "sha512-x4wnwHg00h/onWQgjmvcdLV7Mrd9TZjxNs8LmXVpqvANDf4FsSs5wLlzOykWLcaFzR3+5hdVEQ8ctmrUxgHlPA==",
"engines": { "engines": {
"electron": ">= 13",
"node": ">= 14" "node": ">= 14"
} }
}, },
@ -5772,14 +5770,14 @@
"dev": true "dev": true
}, },
"node_modules/electron-publish": { "node_modules/electron-publish": {
"version": "24.5.0", "version": "24.8.1",
"resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.5.0.tgz", "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.8.1.tgz",
"integrity": "sha512-zwo70suH15L15B4ZWNDoEg27HIYoPsGJUF7xevLJLSI7JUPC8l2yLBdLGwqueJ5XkDL7ucYyRZzxJVR8ElV9BA==", "integrity": "sha512-IFNXkdxMVzUdweoLJNXSupXkqnvgbrn3J4vognuOY06LaS/m0xvfFYIf+o1CM8if6DuWYWoQFKPcWZt/FUjZPw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/fs-extra": "^9.0.11", "@types/fs-extra": "^9.0.11",
"builder-util": "24.5.0", "builder-util": "24.8.1",
"builder-util-runtime": "9.2.1", "builder-util-runtime": "9.2.3",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"fs-extra": "^10.1.0", "fs-extra": "^10.1.0",
"lazy-val": "^1.0.5", "lazy-val": "^1.0.5",
@ -5904,17 +5902,17 @@
} }
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.4.588", "version": "1.4.594",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.588.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.594.tgz",
"integrity": "sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==", "integrity": "sha512-xT1HVAu5xFn7bDfkjGQi9dNpMqGchUkebwf1GL7cZN32NSwwlHRPMSDJ1KN6HkS0bWUtndbSQZqvpQftKG2uFQ==",
"dev": true "dev": true
}, },
"node_modules/electron-updater": { "node_modules/electron-updater": {
"version": "6.1.4", "version": "6.1.7",
"resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.1.4.tgz", "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.1.7.tgz",
"integrity": "sha512-yYAJc6RQjjV4WtInZVn+ZcLyXRhbVXoomKEfUUwDqIk5s2wxzLhWaor7lrNgxODyODhipjg4SVPMhJHi5EnsCA==", "integrity": "sha512-SNOhYizjkm4ET+Y8ilJyUzcVsFJDtINzVN1TyHnZeMidZEG3YoBebMyXc/J6WSiXdUaOjC7ngekN6rNp6ardHA==",
"dependencies": { "dependencies": {
"builder-util-runtime": "9.2.1", "builder-util-runtime": "9.2.3",
"fs-extra": "^10.1.0", "fs-extra": "^10.1.0",
"js-yaml": "^4.1.0", "js-yaml": "^4.1.0",
"lazy-val": "^1.0.5", "lazy-val": "^1.0.5",
@ -7885,15 +7883,6 @@
"@types/trusted-types": "^2.0.2" "@types/trusted-types": "^2.0.2"
} }
}, },
"node_modules/lit-translate": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/lit-translate/-/lit-translate-2.0.1.tgz",
"integrity": "sha512-AcGwE0d3M3KwMPZ0YlJRMB48V18LwRmkjkIYQaU+JycFA5yxkel2LJg1gThfrHFIPS8fcmtTMrXXSVEMg1BCTg==",
"dev": true,
"dependencies": {
"lit": "^2.2.2"
}
},
"node_modules/load-json-file": { "node_modules/load-json-file": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
@ -9305,9 +9294,9 @@
} }
}, },
"node_modules/rollup": { "node_modules/rollup": {
"version": "4.5.0", "version": "4.5.2",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.5.0.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.5.2.tgz",
"integrity": "sha512-41xsWhzxqjMDASCxH5ibw1mXk+3c4TNI2UjKbLxe6iEzrSQnqOzmmK8/3mufCPbzHNJ2e04Fc1ddI35hHy+8zg==", "integrity": "sha512-CRK1uoROBfkcqrZKyaFcqCcZWNsvJ6yVYZkqTlRocZhO2s5yER6Z3f/QaYtO8RGyloPnmhwgzuPQpNGeK210xQ==",
"dev": true, "dev": true,
"bin": { "bin": {
"rollup": "dist/bin/rollup" "rollup": "dist/bin/rollup"
@ -9317,18 +9306,18 @@
"npm": ">=8.0.0" "npm": ">=8.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.5.0", "@rollup/rollup-android-arm-eabi": "4.5.2",
"@rollup/rollup-android-arm64": "4.5.0", "@rollup/rollup-android-arm64": "4.5.2",
"@rollup/rollup-darwin-arm64": "4.5.0", "@rollup/rollup-darwin-arm64": "4.5.2",
"@rollup/rollup-darwin-x64": "4.5.0", "@rollup/rollup-darwin-x64": "4.5.2",
"@rollup/rollup-linux-arm-gnueabihf": "4.5.0", "@rollup/rollup-linux-arm-gnueabihf": "4.5.2",
"@rollup/rollup-linux-arm64-gnu": "4.5.0", "@rollup/rollup-linux-arm64-gnu": "4.5.2",
"@rollup/rollup-linux-arm64-musl": "4.5.0", "@rollup/rollup-linux-arm64-musl": "4.5.2",
"@rollup/rollup-linux-x64-gnu": "4.5.0", "@rollup/rollup-linux-x64-gnu": "4.5.2",
"@rollup/rollup-linux-x64-musl": "4.5.0", "@rollup/rollup-linux-x64-musl": "4.5.2",
"@rollup/rollup-win32-arm64-msvc": "4.5.0", "@rollup/rollup-win32-arm64-msvc": "4.5.2",
"@rollup/rollup-win32-ia32-msvc": "4.5.0", "@rollup/rollup-win32-ia32-msvc": "4.5.2",
"@rollup/rollup-win32-x64-msvc": "4.5.0", "@rollup/rollup-win32-x64-msvc": "4.5.2",
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
} }
}, },

View File

@ -49,9 +49,9 @@
"compressorjs": "1.2.1", "compressorjs": "1.2.1",
"crypto-js": "4.2.0", "crypto-js": "4.2.0",
"electron-dl": "3.5.1", "electron-dl": "3.5.1",
"electron-log": "5.0.0", "electron-log": "5.0.1",
"electron-store": "8.1.0", "electron-store": "8.1.0",
"electron-updater": "6.1.4", "electron-updater": "6.1.7",
"emoji-picker-js": "https://github.com/Qortal/emoji-picker-js", "emoji-picker-js": "https://github.com/Qortal/emoji-picker-js",
"extract-zip": "2.0.1", "extract-zip": "2.0.1",
"jssha": "3.3.1", "jssha": "3.3.1",
@ -123,8 +123,8 @@
"@vaadin/tooltip": "24.2.3", "@vaadin/tooltip": "24.2.3",
"@zip.js/zip.js": "2.7.31", "@zip.js/zip.js": "2.7.31",
"axios": "1.6.2", "axios": "1.6.2",
"electron": "27.1.0", "electron": "27.1.2",
"electron-builder": "24.6.4", "electron-builder": "24.9.1",
"electron-packager": "17.1.2", "electron-packager": "17.1.2",
"epml": "0.3.3", "epml": "0.3.3",
"eslint": "8.54.0", "eslint": "8.54.0",
@ -135,12 +135,11 @@
"html-escaper": "3.0.3", "html-escaper": "3.0.3",
"is-electron": "2.2.2", "is-electron": "2.2.2",
"lit": "2.8.0", "lit": "2.8.0",
"lit-translate": "2.0.1",
"passive-events-support": "1.1.0", "passive-events-support": "1.1.0",
"pwa-helpers": "0.9.1", "pwa-helpers": "0.9.1",
"redux": "4.2.1", "redux": "4.2.1",
"redux-thunk": "2.4.2", "redux-thunk": "2.4.2",
"rollup": "4.5.0", "rollup": "4.5.2",
"rollup-plugin-node-globals": "1.4.0", "rollup-plugin-node-globals": "1.4.0",
"rollup-plugin-progress": "1.1.2", "rollup-plugin-progress": "1.1.2",
"rollup-plugin-scss": "3.0.0", "rollup-plugin-scss": "3.0.0",

View File

@ -1,7 +1,7 @@
import {html, LitElement} from 'lit' import {html, LitElement} from 'lit'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import '../components/ButtonIconCopy.js' import '../components/ButtonIconCopy.js'
import {registerTranslateConfig, translate, use} from 'lit-translate' import {registerTranslateConfig, translate, use} from '../../../../core/translate/index.js'
import {blocksNeed} from '../../utils/blocks-needed.js' import {blocksNeed} from '../../utils/blocks-needed.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import '@polymer/paper-spinner/paper-spinner-lite.js' import '@polymer/paper-spinner/paper-spinner-lite.js'

View File

@ -1,7 +1,7 @@
import {html, LitElement} from 'lit' import {html, LitElement} from 'lit'
import {Epml} from '../../../../epml.js' import {Epml} from '../../../../epml.js'
import '../../components/ButtonIconCopy.js' import '../../components/ButtonIconCopy.js'
import {translate} from 'lit-translate' import {translate} from '../../../../../core/translate/index.js'
import '@polymer/paper-spinner/paper-spinner-lite.js' import '@polymer/paper-spinner/paper-spinner-lite.js'
import '@material/mwc-button' import '@material/mwc-button'

View File

@ -1,6 +1,6 @@
import {html, LitElement} from 'lit' import {html, LitElement} from 'lit'
import '../../components/ButtonIconCopy.js' import '../../components/ButtonIconCopy.js'
import {translate} from 'lit-translate' import {translate} from '../../../../../core/translate/index.js'
import '@polymer/paper-spinner/paper-spinner-lite.js' import '@polymer/paper-spinner/paper-spinner-lite.js'
import '@material/mwc-button' import '@material/mwc-button'

View File

@ -9,7 +9,7 @@ import {bytesToMegabytes} from '../../../utils/bytesToMegabytes.js';
import './ChatGifsExplore.js'; import './ChatGifsExplore.js';
import '../ImageComponent.js'; import '../ImageComponent.js';
import '@vaadin/tooltip'; import '@vaadin/tooltip';
import {get, translate} from 'lit-translate' import {get, translate} from '../../../../../core/translate/index.js'
const parentEpml = new Epml({type: 'WINDOW', source: window.parent}); const parentEpml = new Epml({type: 'WINDOW', source: window.parent});

View File

@ -1,7 +1,7 @@
import {html, LitElement} from 'lit' import {html, LitElement} from 'lit'
import {Epml} from '../../../../epml.js' import {Epml} from '../../../../epml.js'
import {chatGifsExploreStyles} from './ChatGifsExplore-css.js' import {chatGifsExploreStyles} from './ChatGifsExplore-css.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../../../core/translate/index.js'
import '@material/mwc-icon' import '@material/mwc-icon'
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }); const parentEpml = new Epml({ type: 'WINDOW', source: window.parent });

View File

@ -5,7 +5,7 @@ import "@material/mwc-dialog"
import "@polymer/paper-spinner/paper-spinner-lite.js" import "@polymer/paper-spinner/paper-spinner-lite.js"
import "@material/mwc-icon" import "@material/mwc-icon"
import "./WrapperModal" import "./WrapperModal"
import {translate} from 'lit-translate' import {translate} from '../../../../core/translate/index.js'
const parentEpml = new Epml({ type: "WINDOW", source: window.parent }) const parentEpml = new Epml({ type: "WINDOW", source: window.parent })

View File

@ -11,7 +11,7 @@ import './TipUser';
import './UserInfo/UserInfo'; import './UserInfo/UserInfo';
import './ChatImage'; import './ChatImage';
import './ReusableImage'; import './ReusableImage';
import {get} from 'lit-translate'; import {get} from '../../../../core/translate/index.js'
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }); const parentEpml = new Epml({ type: 'WINDOW', source: window.parent });
@ -41,8 +41,8 @@ class ChatGroupsManager extends LitElement {
isReceipient: { type: Boolean }, isReceipient: { type: Boolean },
groups: { type: Array }, groups: { type: Array },
viewImage: { type: Boolean }, viewImage: { type: Boolean },
autoView: {type: Boolean}, autoView: {type: Boolean},
onlyMyImages: {type: Boolean}, onlyMyImages: {type: Boolean},
repost: {attribute: false} repost: {attribute: false}
}; };
} }

View File

@ -5,7 +5,7 @@ import '@material/mwc-dialog'
import '@polymer/paper-spinner/paper-spinner-lite.js' import '@polymer/paper-spinner/paper-spinner-lite.js'
import '@material/mwc-icon' import '@material/mwc-icon'
import './WrapperModal' import './WrapperModal'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../../core/translate/index.js'
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })

View File

@ -10,7 +10,7 @@ import '@vaadin/tabs/theme/material/vaadin-tabs.js'
import '@vaadin/avatar' import '@vaadin/avatar'
import '@vaadin/grid' import '@vaadin/grid'
import '@vaadin/grid/vaadin-grid-filter-column.js' import '@vaadin/grid/vaadin-grid-filter-column.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../../core/translate/index.js'
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })

View File

@ -1,5 +1,5 @@
import {css, html, LitElement} from 'lit'; import {css, html, LitElement} from 'lit';
import {translate,} from 'lit-translate'; import {translate,} from '../../../../core/translate/index.js'
import '@material/mwc-menu'; import '@material/mwc-menu';
import '@material/mwc-list/mwc-list-item.js'; import '@material/mwc-list/mwc-list-item.js';
import '@material/mwc-dialog' import '@material/mwc-dialog'

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import localForage from "localforage" import localForage from "localforage"
import {translate} from 'lit-translate' import {translate} from '../../../../core/translate/index.js'
import '@material/mwc-icon' import '@material/mwc-icon'
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })

View File

@ -1,5 +1,5 @@
import {css, html, LitElement} from 'lit'; import {css, html, LitElement} from 'lit';
import {get, translate,} from 'lit-translate'; import {get, translate,} from '../../../../core/translate/index.js'
import axios from 'axios' import axios from 'axios'
import {RequestQueueWithPromise} from '../../utils/queue'; import {RequestQueueWithPromise} from '../../utils/queue';
import '@material/mwc-menu'; import '@material/mwc-menu';

View File

@ -5,7 +5,7 @@ import '@material/mwc-dialog'
import '@polymer/paper-spinner/paper-spinner-lite.js' import '@polymer/paper-spinner/paper-spinner-lite.js'
import '@material/mwc-icon' import '@material/mwc-icon'
import './WrapperModal' import './WrapperModal'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../../core/translate/index.js'
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {Epml} from '../../../epml' import {Epml} from '../../../epml'
import snackbar from './snackbar.js' import snackbar from './snackbar.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../../core/translate/index.js'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-dialog' import '@material/mwc-dialog'

View File

@ -1,7 +1,7 @@
import {html, LitElement} from 'lit' import {html, LitElement} from 'lit'
import {animate} from '@lit-labs/motion' import {animate} from '@lit-labs/motion'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../../core/translate/index.js'
import {Editor, Extension, generateHTML} from '@tiptap/core' import {Editor, Extension, generateHTML} from '@tiptap/core'
import {unsafeHTML} from 'lit/directives/unsafe-html.js' import {unsafeHTML} from 'lit/directives/unsafe-html.js'
import {escape} from 'html-escaper' import {escape} from 'html-escaper'

View File

@ -11,7 +11,7 @@ import './TipUser';
import './UserInfo/UserInfo'; import './UserInfo/UserInfo';
import './ChatImage'; import './ChatImage';
import './ReusableImage'; import './ReusableImage';
import {get, translate,} from 'lit-translate'; import {get, translate,} from '../../../../core/translate/index.js'
import {generateIdFromAddresses} from '../../utils/id-generation'; import {generateIdFromAddresses} from '../../utils/id-generation';
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }); const parentEpml = new Epml({ type: 'WINDOW', source: window.parent });
@ -42,8 +42,8 @@ class ChatRightPanelResources extends LitElement {
isReceipient: { type: Boolean }, isReceipient: { type: Boolean },
images: { type: Array }, images: { type: Array },
viewImage: { type: Boolean }, viewImage: { type: Boolean },
autoView: {type: Boolean}, autoView: {type: Boolean},
onlyMyImages: {type: Boolean}, onlyMyImages: {type: Boolean},
repost: {attribute: false} repost: {attribute: false}
}; };
} }

View File

@ -1,6 +1,6 @@
import {html, LitElement,} from 'lit'; import {html, LitElement,} from 'lit';
import {repeat} from 'lit/directives/repeat.js'; import {repeat} from 'lit/directives/repeat.js';
import {get, translate,} from 'lit-translate'; import {get, translate,} from '../../../../core/translate/index.js'
import {unsafeHTML} from 'lit/directives/unsafe-html.js'; import {unsafeHTML} from 'lit/directives/unsafe-html.js';
import {chatStyles} from './ChatScroller-css.js'; import {chatStyles} from './ChatScroller-css.js';
import {Epml} from '../../../epml'; import {Epml} from '../../../epml';

View File

@ -1,6 +1,6 @@
import {html, LitElement} from 'lit'; import {html, LitElement} from 'lit';
import {chatSearchResultsStyles} from './ChatSearchResults-css.js' import {chatSearchResultsStyles} from './ChatSearchResults-css.js'
import {translate} from 'lit-translate'; import {translate} from '../../../../core/translate/index.js'
export class ChatSearchResults extends LitElement { export class ChatSearchResults extends LitElement {
static get properties() { static get properties() {

View File

@ -1,6 +1,6 @@
import {html, LitElement} from 'lit' import {html, LitElement} from 'lit'
import {chatSearchResultsStyles} from './ChatSearchResults-css.js' import {chatSearchResultsStyles} from './ChatSearchResults-css.js'
import {translate} from 'lit-translate' import {translate} from '../../../../core/translate/index.js'
import '@vaadin/icon' import '@vaadin/icon'
import '@vaadin/icons' import '@vaadin/icons'

View File

@ -3,7 +3,7 @@ import {escape, unescape} from 'html-escaper'
import {EmojiPicker} from 'emoji-picker-js' import {EmojiPicker} from 'emoji-picker-js'
import {inputKeyCodes} from '../../utils/keyCodes.js' import {inputKeyCodes} from '../../utils/keyCodes.js'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import {get} from 'lit-translate' import {get} from '../../../../core/translate/index.js'
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })

View File

@ -3,7 +3,7 @@ import {EmojiPicker} from 'emoji-picker-js'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import '@material/mwc-icon' import '@material/mwc-icon'
import '@material/mwc-checkbox' import '@material/mwc-checkbox'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../../core/translate/index.js'
const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) const parentEpml = new Epml({ type: 'WINDOW', source: window.parent })

View File

@ -1,6 +1,6 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import '@material/mwc-icon' import '@material/mwc-icon'

View File

@ -1,5 +1,5 @@
import {css, html, LitElement} from 'lit'; import {css, html, LitElement} from 'lit';
import {translate,} from 'lit-translate'; import {translate,} from '../../../../core/translate/index.js'
export class ImageComponent extends LitElement { export class ImageComponent extends LitElement {
static get properties() { static get properties() {

View File

@ -1,6 +1,6 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import {translate} from 'lit-translate' import {translate} from '../../../../core/translate/index.js'
import '@polymer/paper-tooltip/paper-tooltip.js' import '@polymer/paper-tooltip/paper-tooltip.js'
import {RequestQueue} from '../../utils/queue.js' import {RequestQueue} from '../../utils/queue.js'

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import snackbar from './snackbar.js' import snackbar from './snackbar.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../../core/translate/index.js'
import '@material/mwc-snackbar' import '@material/mwc-snackbar'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-dialog' import '@material/mwc-dialog'

View File

@ -1,9 +1,9 @@
import {css, html, LitElement} from 'lit'; import {css, html, LitElement} from 'lit'
import {translate,} from 'lit-translate'; import {translate,} from '../../../../core/translate/index.js'
import axios from 'axios'; import axios from 'axios'
import {RequestQueueWithPromise} from '../../utils/queue'; import {RequestQueueWithPromise} from '../../utils/queue'
import '@material/mwc-menu'; import '@material/mwc-menu'
import '@material/mwc-list/mwc-list-item.js'; import '@material/mwc-list/mwc-list-item.js'
import '@material/mwc-dialog' import '@material/mwc-dialog'
const requestQueue = new RequestQueueWithPromise(5); const requestQueue = new RequestQueueWithPromise(5);
@ -16,10 +16,10 @@ export class ResuableImage extends LitElement {
resource: { type: Object }, resource: { type: Object },
isReady: { type: Boolean }, isReady: { type: Boolean },
status: { type: Object }, status: { type: Object },
missingData: {type: Boolean}, missingData: {type: Boolean},
openDialogImage: { type: Boolean }, openDialogImage: { type: Boolean },
onLoad: {attribute: false} onLoad: {attribute: false}
}; }
} }
static get styles() { static get styles() {
@ -56,11 +56,11 @@ export class ResuableImage extends LitElement {
loadingAnimation; loadingAnimation;
} }
.imageContainer { .imageContainer {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
height: 100%; height: 100%;
} }
@-webkit-keyframes loadingAnimation { @-webkit-keyframes loadingAnimation {
0% { 0% {
@ -83,27 +83,27 @@ export class ResuableImage extends LitElement {
transform: rotate(360deg); transform: rotate(360deg);
} }
} }
`; `
} }
constructor() { constructor() {
super(); super()
this.resource = { this.resource = {
identifier: '', identifier: '',
name: '', name: '',
service: '', service: '',
}; }
this.status = { this.status = {
status: '', status: '',
}; }
this.url = ''; this.url = ''
this.isReady = false; this.isReady = false
this.nodeUrl = this.getNodeUrl(); this.nodeUrl = this.getNodeUrl()
this.myNode = this.getMyNode(); this.myNode = this.getMyNode()
this.hasCalledWhenDownloaded = false; this.hasCalledWhenDownloaded = false
this.isFetching = false; this.isFetching = false
this.missingData = false this.missingData = false
this.openDialogImage = false this.openDialogImage = false
this.observer = new IntersectionObserver((entries) => { this.observer = new IntersectionObserver((entries) => {
for (const entry of entries) { for (const entry of entries) {
@ -113,25 +113,25 @@ export class ResuableImage extends LitElement {
this.observer.unobserve(this); this.observer.unobserve(this);
} }
} }
}); })
} }
getNodeUrl() { getNodeUrl() {
const myNode = const myNode =
window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.knownNodes[
window.parent.reduxStore.getState().app.nodeConfig.node window.parent.reduxStore.getState().app.nodeConfig.node
]; ]
const nodeUrl = const nodeUrl =
myNode.protocol + '://' + myNode.domain + ':' + myNode.port; myNode.protocol + '://' + myNode.domain + ':' + myNode.port
return nodeUrl; return nodeUrl
} }
getMyNode() { getMyNode() {
const myNode = const myNode =
window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.knownNodes[
window.parent.reduxStore.getState().app.nodeConfig.node window.parent.reduxStore.getState().app.nodeConfig.node
]; ]
return myNode; return myNode
} }
getApiKey() { getApiKey() {
@ -139,8 +139,8 @@ export class ResuableImage extends LitElement {
window.parent.reduxStore.getState().app.nodeConfig.knownNodes[ window.parent.reduxStore.getState().app.nodeConfig.knownNodes[
window.parent.reduxStore.getState().app.nodeConfig.node window.parent.reduxStore.getState().app.nodeConfig.node
]; ];
let apiKey = myNode.apiKey; let apiKey = myNode.apiKey
return apiKey; return apiKey
} }
async fetchResource() { async fetchResource() {
@ -148,55 +148,55 @@ export class ResuableImage extends LitElement {
if (this.isFetching) return; if (this.isFetching) return;
this.isFetching = true; this.isFetching = true;
await requestQueue2.enqueue(() => { await requestQueue2.enqueue(() => {
return axios.get( return axios.get(
`${this.nodeUrl}/arbitrary/resource/properties/${this.resource.service}/${this.resource.name}/${this.resource.identifier}?apiKey=${this.myNode.apiKey}` `${this.nodeUrl}/arbitrary/resource/properties/${this.resource.service}/${this.resource.name}/${this.resource.identifier}?apiKey=${this.myNode.apiKey}`
); )
}); })
this.isFetching = false; this.isFetching = false
} catch (error) { } catch (error) {
this.isFetching = false; this.isFetching = false
} }
} }
async fetchVideoUrl() { async fetchVideoUrl() {
this.fetchResource(); this.fetchResource();
this.url = `${this.nodeUrl}/arbitrary/${this.resource.service}/${this.resource.name}/${this.resource.identifier}?async=true&apiKey=${this.myNode.apiKey}`; this.url = `${this.nodeUrl}/arbitrary/${this.resource.service}/${this.resource.name}/${this.resource.identifier}?async=true&apiKey=${this.myNode.apiKey}`
} }
async fetchStatus() { async fetchStatus() {
let isCalling = false; let isCalling = false
let percentLoaded = 0; let percentLoaded = 0
let timer = 24; let timer = 24
const response = await axios.get( const response = await axios.get(
`${this.nodeUrl}/arbitrary/resource/status/${this.resource.service}/${this.resource.name}/${this.resource.identifier}?apiKey=${this.myNode.apiKey}` `${this.nodeUrl}/arbitrary/resource/status/${this.resource.service}/${this.resource.name}/${this.resource.identifier}?apiKey=${this.myNode.apiKey}`
); )
if (response && response.data && response.data.status === 'READY') { if (response && response.data && response.data.status === 'READY') {
this.status = response.data; this.status = response.data
this.onLoad() this.onLoad()
return; return
} }
const intervalId = setInterval(async () => { const intervalId = setInterval(async () => {
if (isCalling) return; if (isCalling) return
isCalling = true; isCalling = true
const data = await requestQueue.enqueue(() => { const data = await requestQueue.enqueue(() => {
return axios.get( return axios.get(
`${this.nodeUrl}/arbitrary/resource/status/${this.resource.service}/${this.resource.name}/${this.resource.identifier}?apiKey=${this.myNode.apiKey}` `${this.nodeUrl}/arbitrary/resource/status/${this.resource.service}/${this.resource.name}/${this.resource.identifier}?apiKey=${this.myNode.apiKey}`
); )
}); })
const res = data.data; const res = data.data
isCalling = false; isCalling = false
if (res.localChunkCount) { if (res.localChunkCount) {
if (res.percentLoaded) { if (res.percentLoaded) {
if ( if (
res.percentLoaded === percentLoaded && res.percentLoaded === percentLoaded &&
res.percentLoaded !== 100 res.percentLoaded !== 100
) { ) {
timer = timer - 5; timer = timer - 5
} else { } else {
timer = 24; timer = 24
} }
if (timer < 0) { if (timer < 0) {
timer = 24; timer = 24;
@ -207,34 +207,34 @@ export class ResuableImage extends LitElement {
}; };
setTimeout(() => { setTimeout(() => {
isCalling = false; isCalling = false
this.fetchResource(); this.fetchResource()
}, 25000); }, 25000)
return; return
} }
percentLoaded = res.percentLoaded; percentLoaded = res.percentLoaded
} }
this.status = res; this.status = res
if (this.status.status === 'DOWNLOADED') { if (this.status.status === 'DOWNLOADED') {
this.fetchResource(); this.fetchResource()
} }
} }
// check if progress is 100% and clear interval if true // check if progress is 100% and clear interval if true
if (res.status === 'READY') { if (res.status === 'READY') {
this.onLoad() this.onLoad()
clearInterval(intervalId); clearInterval(intervalId)
this.status = res; this.status = res
this.isReady = true; this.isReady = true
} }
if(res.status === 'MISSING_DATA'){ if (res.status === 'MISSING_DATA') {
this.status = res this.status = res
this.missingData = true this.missingData = true
clearInterval(intervalId) clearInterval(intervalId)
} }
}, 5000); // 1 second interval }, 5000) // 5 second interval
} }
async _fetchImage() { async _fetchImage() {
@ -244,29 +244,29 @@ export class ResuableImage extends LitElement {
service: this.resource.service, service: this.resource.service,
identifier: this.resource.identifier, identifier: this.resource.identifier,
}); });
this.fetchStatus(); this.fetchStatus()
} catch (error) { /* empty */ } } catch (error) { /* empty */ }
} }
firstUpdated() { firstUpdated() {
this.observer.observe(this); this.observer.observe(this)
} }
showContextMenu(e) { showContextMenu(e) {
e.preventDefault(); e.preventDefault()
e.stopPropagation(); e.stopPropagation()
const contextMenu = this.shadowRoot.getElementById('contextMenu'); const contextMenu = this.shadowRoot.getElementById('contextMenu')
const containerRect = e.currentTarget.getBoundingClientRect(); const containerRect = e.currentTarget.getBoundingClientRect()
// Adjusting the positions // Adjusting the positions
const adjustedX = e.clientX - containerRect.left; const adjustedX = e.clientX - containerRect.left
const adjustedY = e.clientY - containerRect.top; const adjustedY = e.clientY - containerRect.top
contextMenu.style.top = `${adjustedY}px`; contextMenu.style.top = `${adjustedY}px`
contextMenu.style.left = `${adjustedX}px`; contextMenu.style.left = `${adjustedX}px`
contextMenu.open = true; contextMenu.open = true
} }
render() { render() {
@ -300,31 +300,31 @@ export class ResuableImage extends LitElement {
</div> </div>
<mwc-dialog <mwc-dialog
id="showDialogPublicKey" id="showDialogPublicKey"
?open=${this.openDialogImage} ?open=${this.openDialogImage}
@closed=${() => { @closed=${() => {
this.openDialogImage = false; this.openDialogImage = false;
}}> }}
<div class="dialog-header"></div> >
<div class="dialog-container imageContainer"> <div class="dialog-header"></div>
${this.openDialogImage ? html` <div class="dialog-container imageContainer">
<img src=${this.url} style="height: auto; max-height: 80vh; width: auto; max-width: 80vw; object-fit: contain; border-radius: 5px;"/> ${this.openDialogImage ? html`
` : ''} <img src=${this.url} style="height: auto; max-height: 80vh; width: auto; max-width: 80vw; object-fit: contain; border-radius: 5px;"/>
` : ''}
</div> </div>
<mwc-button <mwc-button
slot="primaryAction" slot="primaryAction"
dialogAction="cancel" dialogAction="cancel"
class="red" class="red"
@click=${() => { @click=${() => {
this.openDialogImage = false; this.openDialogImage = false;
}} }}
> >
${translate('general.close')} ${translate('general.close')}
</mwc-button> </mwc-button>
</mwc-dialog> </mwc-dialog>
`; `
} }
} }
customElements.define('reusable-image', ResuableImage); customElements.define('reusable-image', ResuableImage)

View File

@ -3,7 +3,7 @@ import {tipUserStyles} from './TipUser-css.js'
import {Epml} from '../../../epml' import {Epml} from '../../../epml'
import '@vaadin/button' import '@vaadin/button'
import '@polymer/paper-progress/paper-progress.js' import '@polymer/paper-progress/paper-progress.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../../core/translate/index.js'
const parentEpml = new Epml({ type: "WINDOW", source: window.parent }); const parentEpml = new Epml({ type: "WINDOW", source: window.parent });

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {render} from 'lit/html.js' import {render} from 'lit/html.js'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../../core/translate/index.js'
import '@polymer/paper-dialog/paper-dialog.js' import '@polymer/paper-dialog/paper-dialog.js'
import '@material/mwc-button' import '@material/mwc-button'

View File

@ -1,5 +1,5 @@
import {html, LitElement} from 'lit' import {html, LitElement} from 'lit'
import {translate} from 'lit-translate' import {translate} from '../../../../../core/translate/index.js'
import {userInfoStyles} from './UserInfo-css.js' import {userInfoStyles} from './UserInfo-css.js'
import {cropAddress} from '../../../utils/cropAddress.js' import {cropAddress} from '../../../utils/cropAddress.js'

View File

@ -3,7 +3,7 @@ import {css, html, LitElement} from 'lit'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-icon' import '@material/mwc-icon'
import {translate} from 'lit-translate' import {translate} from '../../../../core/translate/index.js'
class FragFileInput extends LitElement { class FragFileInput extends LitElement {
static get properties () { static get properties () {

View File

@ -1,7 +1,6 @@
import nacl from '../../../../crypto/api/deps/nacl-fast.js' import nacl from '../../../../crypto/api/deps/nacl-fast.js'
import ed2curve from '../../../../crypto/api/deps/ed2curve.js' import ed2curve from '../../../../crypto/api/deps/ed2curve.js'
class Semaphore { class Semaphore {
constructor(count) { constructor(count) {
this.count = count; this.count = count;
@ -60,8 +59,6 @@ export const fileToBase64 = (file) =>
}; };
}); });
export function uint8ArrayToBase64(uint8Array) { export function uint8ArrayToBase64(uint8Array) {
const length = uint8Array.length; const length = uint8Array.length;
let binaryString = ''; let binaryString = '';
@ -76,7 +73,6 @@ export function uint8ArrayToBase64(uint8Array) {
return btoa(binaryString); return btoa(binaryString);
} }
export function base64ToUint8Array(base64) { export function base64ToUint8Array(base64) {
const binaryString = atob(base64) const binaryString = atob(base64)
const len = binaryString.length const len = binaryString.length
@ -128,8 +124,6 @@ export function uint8ArrayToObject(uint8Array) {
reader.readAsDataURL(blob); reader.readAsDataURL(blob);
}); });
} }
export const encryptData = ({ data64, recipientPublicKey }) => { export const encryptData = ({ data64, recipientPublicKey }) => {
@ -278,7 +272,6 @@ export const encryptDataGroup = ({ data64, publicKeys }) => {
} }
} }
export function uint8ArrayStartsWith(uint8Array, string) { export function uint8ArrayStartsWith(uint8Array, string) {
const stringEncoder = new TextEncoder(); const stringEncoder = new TextEncoder();
const stringUint8Array = stringEncoder.encode(string); const stringUint8Array = stringEncoder.encode(string);

View File

@ -1,6 +1,6 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {render} from 'lit/html.js' import {render} from 'lit/html.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../../core/translate/index.js'
import '@polymer/paper-dialog/paper-dialog.js' import '@polymer/paper-dialog/paper-dialog.js'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-icon' import '@material/mwc-icon'
@ -434,7 +434,6 @@ class QortalInfoView extends LitElement {
right: 25px; right: 25px;
top: -1px; top: -1px;
} }
` `
} }

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'
import {render} from 'lit/html.js' import {render} from 'lit/html.js'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js'
import '../components/time-elements/index.js' import '../components/time-elements/index.js'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-dialog' import '@material/mwc-dialog'

View File

@ -2,7 +2,7 @@ import {html, LitElement} from 'lit'
import {render} from 'lit/html.js' import {render} from 'lit/html.js'
import {passiveSupport} from 'passive-events-support/src/utils' import {passiveSupport} from 'passive-events-support/src/utils'
import {Epml} from '../../../../epml.js' import {Epml} from '../../../../epml.js'
import {get, translate} from 'lit-translate' import {get, translate} from '../../../../../core/translate/index.js'
import {qchatStyles} from './q-chat-css.src.js' import {qchatStyles} from './q-chat-css.src.js'
import {Editor, Extension} from '@tiptap/core' import {Editor, Extension} from '@tiptap/core'
import isElectron from 'is-electron' import isElectron from 'is-electron'

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import {registerTranslateConfig, translate, use} from 'lit-translate' import {registerTranslateConfig, translate, use} from '../../../../core/translate/index.js'
import '@material/mwc-icon' import '@material/mwc-icon'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-dialog' import '@material/mwc-dialog'

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {render} from 'lit/html.js' import {render} from 'lit/html.js'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-dialog' import '@material/mwc-dialog'

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {render} from 'lit/html.js' import {render} from 'lit/html.js'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import '../components/qortal-info-view.js' import '../components/qortal-info-view.js'
import '@material/mwc-button' import '@material/mwc-button'

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'
import {render} from 'lit/html.js' import {render} from 'lit/html.js'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js'
import '@polymer/paper-spinner/paper-spinner-lite.js' import '@polymer/paper-spinner/paper-spinner-lite.js'
import '@material/mwc-icon' import '@material/mwc-icon'
import '@material/mwc-textfield' import '@material/mwc-textfield'

View File

@ -1,6 +1,6 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js'
import {overviewStyle} from './overview-page-css.js' import {overviewStyle} from './overview-page-css.js'
import {asyncReplace} from 'lit/directives/async-replace.js' import {asyncReplace} from 'lit/directives/async-replace.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'
import {render} from 'lit/html.js' import {render} from 'lit/html.js'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import {registerTranslateConfig, translate, use} from 'lit-translate' import {registerTranslateConfig, translate, use} from '../../../../core/translate/index.js'
import nacl from '../../../../crypto/api/deps/nacl-fast.js' import nacl from '../../../../crypto/api/deps/nacl-fast.js'
import Base58 from '../../../../crypto/api/deps/Base58.js' import Base58 from '../../../../crypto/api/deps/Base58.js'
import publicKeyToAddress from '../../../../crypto/api/wallet/publicKeyToAddress.js' import publicKeyToAddress from '../../../../crypto/api/wallet/publicKeyToAddress.js'

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {render} from 'lit/html.js' import {render} from 'lit/html.js'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import '@polymer/paper-spinner/paper-spinner-lite.js' import '@polymer/paper-spinner/paper-spinner-lite.js'
import '@polymer/paper-dialog/paper-dialog.js' import '@polymer/paper-dialog/paper-dialog.js'

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {Epml} from '../../../../epml' import {Epml} from '../../../../epml'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../../../../core/translate/index.js'
import ShortUniqueId from 'short-unique-id'; import ShortUniqueId from 'short-unique-id';
import FileSaver from 'file-saver' import FileSaver from 'file-saver'
import * as actions from '../../components/qdn-action-types' import * as actions from '../../components/qdn-action-types'
@ -271,7 +271,7 @@ class WebBrowser extends LitElement {
const name = parts[0] const name = parts[0]
parts.shift() parts.shift()
let identifier let identifier
let path
if (parts.length > 0) { if (parts.length > 0) {
identifier = parts[0] // Do not shift yet identifier = parts[0] // Do not shift yet
// Check if a resource exists with this service, name and identifier combination // Check if a resource exists with this service, name and identifier combination
@ -2314,12 +2314,19 @@ class WebBrowser extends LitElement {
} }
const res3 = await showModalAndWait( const res3 = await showModalAndWait(
actions.GET_USER_WALLET actions.GET_USER_WALLET
); );
if (res3.action === 'accept') { if (res3.action === 'accept') {
let coin = data.coin; let coin = data.coin;
let userWallet = {}; let userWallet = {};
let arrrAddress = "";
if (coin === "ARRR") {
arrrAddress = await parentEpml.request('apiCall', {
url: `/crosschain/arrr/walletaddress?apiKey=${this.getApiKey()}`,
method: 'POST',
body: `${window.parent.reduxStore.getState().app.selectedAddress.arrrWallet.seed58}`
})
}
switch (coin) { switch (coin) {
case 'QORT': case 'QORT':
userWallet['address'] = window.parent.reduxStore.getState().app.selectedAddress.address userWallet['address'] = window.parent.reduxStore.getState().app.selectedAddress.address
@ -2346,6 +2353,7 @@ class WebBrowser extends LitElement {
userWallet['publickey'] = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet.derivedMasterPublicKey userWallet['publickey'] = window.parent.reduxStore.getState().app.selectedAddress.rvnWallet.derivedMasterPublicKey
break break
case 'ARRR': case 'ARRR':
userWallet['address'] = arrrAddress
break break
default: default:
break break

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'
import {render} from 'lit/html.js' import {render} from 'lit/html.js'
import {Epml} from '../../../../epml' import {Epml} from '../../../../epml'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../../../../core/translate/index.js'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-dialog' import '@material/mwc-dialog'
import '@material/mwc-icon' import '@material/mwc-icon'

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {Epml} from '../../../../epml' import {Epml} from '../../../../epml'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../../../../core/translate/index.js'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-textfield' import '@material/mwc-textfield'
import '@material/mwc-select' import '@material/mwc-select'

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'
import {render} from 'lit/html.js' import {render} from 'lit/html.js'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js'
import '@material/mwc-dialog' import '@material/mwc-dialog'
import '@material/mwc-icon' import '@material/mwc-icon'
import '@material/mwc-button' import '@material/mwc-button'

View File

@ -1,7 +1,7 @@
import {css, html, LitElement} from 'lit' import {css, html, LitElement} from 'lit'
import {render} from 'lit/html.js' import {render} from 'lit/html.js'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-dialog' import '@material/mwc-dialog'

View File

@ -2,7 +2,7 @@ import {css, html, LitElement} from 'lit'
import {render} from 'lit/html.js' import {render} from 'lit/html.js'
import {Epml} from '../../../epml.js' import {Epml} from '../../../epml.js'
import isElectron from 'is-electron' import isElectron from 'is-electron'
import {get, registerTranslateConfig, translate, use} from 'lit-translate' import {get, registerTranslateConfig, translate, use} from '../../../../core/translate/index.js'
import '@material/mwc-icon' import '@material/mwc-icon'
import '@material/mwc-button' import '@material/mwc-button'
import '@material/mwc-textfield' import '@material/mwc-textfield'

Some files were not shown because too many files have changed in this diff Show More