@openremote/or-app 1.8.0-snapshot.20250723094757 → 1.8.0-snapshot.20250725074716

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/app.js CHANGED
@@ -1 +1 @@
1
- import{createSlice}from"@reduxjs/toolkit";const INITIAL_STATE={page:"",params:null,offline:!1,visible:!0,resolved:!1,drawerOpened:!1,scrollTop:0,realm:void 0},appSlice=createSlice({name:"app",initialState:INITIAL_STATE,reducers:{updatePage:(e,a)=>Object.assign(Object.assign({},e),{page:"string"==typeof a.payload?a.payload:a.payload.page,params:"string"==typeof a.payload?null:a.payload.params}),updateDrawer:(e,a)=>Object.assign(Object.assign({},e),{drawerOpened:a.payload}),scrollToTop:(e,a)=>Object.assign(Object.assign({},e),{scrollTop:a.payload}),updateRealm:(e,a)=>Object.assign(Object.assign({},e),{realm:a.payload}),setOffline:(e,a)=>Object.assign(Object.assign({},e),{offline:a.payload}),setVisibility:(e,a)=>Object.assign(Object.assign({},e),{visible:a.payload})}});export const{updatePage,updateDrawer,scrollToTop,updateRealm,setOffline,setVisibility}=appSlice.actions;export const appReducer=appSlice.reducer;
1
+ import{createSlice as a}from"@reduxjs/toolkit";let INITIAL_STATE={page:"",params:null,offline:!1,visible:!0,resolved:!1,drawerOpened:!1,scrollTop:0,realm:void 0},appSlice=a({name:"app",initialState:INITIAL_STATE,reducers:{updatePage:(a,e)=>Object.assign(Object.assign({},a),{page:"string"==typeof e.payload?e.payload:e.payload.page,params:"string"==typeof e.payload?null:e.payload.params}),updateDrawer:(a,e)=>Object.assign(Object.assign({},a),{drawerOpened:e.payload}),scrollToTop:(a,e)=>Object.assign(Object.assign({},a),{scrollTop:e.payload}),updateRealm:(a,e)=>Object.assign(Object.assign({},a),{realm:e.payload}),setOffline:(a,e)=>Object.assign(Object.assign({},a),{offline:e.payload}),setVisibility:(a,e)=>Object.assign(Object.assign({},a),{visible:e.payload})}});export const{updatePage,updateDrawer,scrollToTop,updateRealm,setOffline,setVisibility}=appSlice.actions;export const appReducer=appSlice.reducer;
package/lib/index.js CHANGED
@@ -1,11 +1,11 @@
1
- var __decorate=this&&this.__decorate||function(e,t,o,i){var a,r=arguments.length,n=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,o,i);else for(var s=e.length-1;s>=0;s--)(a=e[s])&&(n=(r<3?a(n):r>3?a(t,o,n):a(t,o))||n);return r>3&&n&&Object.defineProperty(t,o,n),n},__awaiter=this&&this.__awaiter||function(e,t,o,i){return new(o||(o=Promise))((function(a,r){function n(e){try{l(i.next(e))}catch(e){r(e)}}function s(e){try{l(i.throw(e))}catch(e){r(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof o?t:new o((function(e){e(t)}))).then(n,s)}l((i=i.apply(e,t||[])).next())}))};import{css,html,LitElement,unsafeCSS}from"lit";import{customElement,property,query,state}from"lit/decorators.js";import{router}from"./types";import"@openremote/or-translate";import"@openremote/or-mwc-components/or-mwc-menu";import"@openremote/or-mwc-components/or-mwc-snackbar";import"./or-header";import"@openremote/or-icon";import{updateMetadata}from"pwa-helpers/metadata";import i18next from"i18next";import manager,{DefaultColor2,DefaultColor3,DefaultColor4,normaliseConfig,ORError,OREvent,Util}from"@openremote/core";import{DEFAULT_LANGUAGES}from"./or-header";import{OrMwcDialog,showDialog,showErrorDialog}from"@openremote/or-mwc-components/or-mwc-dialog";import{OrMwcSnackbar}from"@openremote/or-mwc-components/or-mwc-snackbar";import{setOffline,setVisibility,updatePage,updateRealm}from"./app";import{InputType}from"@openremote/or-mwc-components/or-mwc-input";import{pageOfflineProvider}from"./page-offline";export const DefaultLogo=require("../images/logo.svg");export const DefaultMobileLogo=require("../images/logo-mobile.svg");export const DefaultFavIcon=require("../images/favicon.ico");export*from"./app";export*from"./or-header";export*from"./types";export{DEFAULT_LANGUAGES};export function getDefaultManagerConfig(){return normaliseConfig(DEFAULT_MANAGER_CONFIG)}const DEFAULT_MANAGER_CONFIG={managerUrl:MANAGER_URL||"",keycloakUrl:KEYCLOAK_URL||"",auth:"KEYCLOAK",autoLogin:!0,realm:void 0,consoleAutoEnable:!0,loadTranslations:["or"]};let OrApp=class extends LitElement{static get styles(){return css`
1
+ var __decorate=this&&this.__decorate||function(e,i,t,o){var r,n=arguments.length,a=n<3?i:null===o?o=Object.getOwnPropertyDescriptor(i,t):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,i,t,o);else for(var s=e.length-1;s>=0;s--)(r=e[s])&&(a=(n<3?r(a):n>3?r(i,t,a):r(i,t))||a);return n>3&&a&&Object.defineProperty(i,t,a),a},__awaiter=this&&this.__awaiter||function(e,i,t,o){return new(t||(t=Promise))(function(r,n){function a(e){try{l(o.next(e))}catch(e){n(e)}}function s(e){try{l(o.throw(e))}catch(e){n(e)}}function l(e){var i;e.done?r(e.value):((i=e.value)instanceof t?i:new t(function(e){e(i)})).then(a,s)}l((o=o.apply(e,i||[])).next())})};import{css as e,html as i,LitElement as t,unsafeCSS as o}from"lit";import{customElement as r,property as n,query as a,state as s}from"lit/decorators.js";import{router as l}from"./types";import"@openremote/or-translate";import"@openremote/or-mwc-components/or-mwc-menu";import"@openremote/or-mwc-components/or-mwc-snackbar";import"./or-header";import"@openremote/or-icon";import{updateMetadata as p}from"pwa-helpers/metadata";import c from"i18next";import h,{DefaultColor2 as f,DefaultColor3 as d,DefaultColor4 as g,normaliseConfig as m,ORError as _,OREvent as u,Util as v}from"@openremote/core";import{DEFAULT_LANGUAGES as y}from"./or-header";import{OrMwcDialog as b,showDialog as C,showErrorDialog as w}from"@openremote/or-mwc-components/or-mwc-dialog";import{OrMwcSnackbar as E}from"@openremote/or-mwc-components/or-mwc-snackbar";import{setOffline as A,setVisibility as O,updatePage as k,updateRealm as F}from"./app";import{InputType as $}from"@openremote/or-mwc-components/or-mwc-input";import{pageOfflineProvider as L}from"./page-offline";export const DefaultLogo=require("../images/logo.svg");export const DefaultMobileLogo=require("../images/logo-mobile.svg");export const DefaultFavIcon=require("../images/favicon.ico");export*from"./app";export*from"./or-header";export*from"./types";export function getDefaultManagerConfig(){return m(DEFAULT_MANAGER_CONFIG)}let DEFAULT_MANAGER_CONFIG={managerUrl:MANAGER_URL||"",keycloakUrl:KEYCLOAK_URL||"",auth:"KEYCLOAK",autoLogin:!0,realm:void 0,consoleAutoEnable:!0,loadTranslations:["or"]},OrApp=class extends t{static get styles(){return e`
2
2
  :host {
3
- --or-app-color2: ${unsafeCSS(DefaultColor2)};
4
- --or-app-color3: ${unsafeCSS(DefaultColor3)};
5
- --or-app-color4: ${unsafeCSS(DefaultColor4)};
3
+ --or-app-color2: ${o(f)};
4
+ --or-app-color3: ${o(d)};
5
+ --or-app-color4: ${o(g)};
6
6
  --or-console-primary-color: #4D9D2A;
7
- color: ${unsafeCSS(DefaultColor3)};
8
- fill: ${unsafeCSS(DefaultColor3)};
7
+ color: ${o(d)};
8
+ fill: ${o(d)};
9
9
  font-size: 14px;
10
10
 
11
11
  height: 100vh; /* Fallback */
@@ -47,10 +47,10 @@ var __decorate=this&&this.__decorate||function(e,t,o,i){var a,r=arguments.length
47
47
  or-header a > or-icon {
48
48
  margin-right: 10px;
49
49
  }
50
- `}constructor(e){super(),this._initialised=!1,this._offline=!1,this._showOfflineFallback=!1,this._onEvent=e=>this._handleEvent(e),this._onVisibilityChanged=e=>this._handleVisibilityChange(e),this._store=e,OrMwcDialog.DialogHostElement=this,OrMwcSnackbar.DialogHostElement=this}getState(){return this._store.getState()}_handleVisibilityChange(e){var t;"visible"===document.visibilityState?(this._store.dispatch(setVisibility(!0)),(null===(t=manager.console)||void 0===t?void 0:t.isMobile)&&this._offline&&this._startOfflineFallbackTimer(!0),manager.reconnect()):this._store.dispatch(setVisibility(!1))}connectedCallback(){super.connectedCallback(),this._storeUnsubscribe=this._store.subscribe((()=>this.stateChanged(this.getState()))),document.addEventListener("visibilitychange",this._onVisibilityChanged),this.stateChanged(this.getState())}disconnectedCallback(){this._storeUnsubscribe(),document.removeEventListener("visibilityChange",this._onVisibilityChanged),manager.removeListener(this._onEvent),super.disconnectedCallback()}firstUpdated(e){super.firstUpdated(e);const t=this.managerConfig?Object.assign(Object.assign({},DEFAULT_MANAGER_CONFIG),this.managerConfig):DEFAULT_MANAGER_CONFIG;t.realm||(t.realm=Util.getQueryParameter("realm")),t.defaultLanguage||(t.defaultLanguage=Util.getBrowserLanguage()),t.skipFallbackToBasicAuth=!0,t.basicLoginProvider=(e,t)=>this.doBasicLogin(e,t),console.info("Initialising the manager"),manager.init(t).then((e=>__awaiter(this,void 0,void 0,(function*(){if(e||manager.error!==ORError.AUTH_FAILED||t.auth&&"KEYCLOAK"!==t.auth||(this.doAppConfigInit(),t.auth="BASIC",e=yield manager.init(t)),e){if(this.doAppConfigInit(),!this.appConfig)return showErrorDialog("appError.noConfig",document.body),void console.error("No AppConfig supplied");if(!this._config)return showErrorDialog("appError.noConfig",document.body),void console.error("No default AppConfig or realm specific config provided so cannot render");if(!this._store)return showErrorDialog("appError.noReduxStore",document.body),void console.error("No Redux store supplied");if(!this.appConfig.pages||0===Object.keys(this.appConfig.pages).length)return showErrorDialog("appError.noPages",document.body),void console.error("No page providers");const e=yield manager.rest.api.RealmResource.getAccessible();let t;this._realms=e.data,manager.isSuperUser()&&(t=window.sessionStorage.getItem("realm"),t&&!this._realms.some((e=>e.name===t))&&(t=void 0)),this._store.dispatch(updateRealm(t||manager.getRealm()||"master")),this._initialised=!0,manager.addListener(this._onEvent);const o=e=>{this._activeMenu=e};router.hooks({before(e,t){o(t?t.url.split("/")[0]:void 0),e()}}),this.appConfig.pages.forEach(((e,t)=>{e.routes&&e.routes.forEach((t=>{router.on(t,(t=>{this._store.dispatch(updatePage({page:e.name,params:t.data}))}))}))})),this.appConfig.pages.length>0&&router.notFound((()=>{this._store.dispatch(updatePage(this.appConfig.pages[0].name))})),router.resolve()}else showErrorDialog(manager.isError?"managerError."+manager.error:"")}))))}updated(e){var t,o;if(super.updated(e),this._initialised&&(e.has("_page")||e.has("_offline")||e.has("_showOfflineFallback"))){if(this._mainElem){const i=this.appConfig.pages.find((e=>e.name===this._page)),a=this._showOfflineFallback&&!(null==i?void 0:i.allowOffline),r=this._mainElem.querySelector("#offline-page");if(e.has("_page")&&i){const e=this._mainElem.firstElementChild;if(e){const t=i.pageCreator();a&&(t.style.setProperty("display","none"),t.setAttribute("loadedDuringOffline","true")),this._mainElem.replaceChild(t,e)}else this._mainElem.appendChild(i.pageCreator())}if(r&&!a){this._mainElem.removeChild(r);const e=this._mainElem.firstElementChild;null==e||e.style.removeProperty("display"),(null==e?void 0:e.onRefresh)&&e.onRefresh()}else if(!r&&a){const e=(null===(t=this.appConfig)||void 0===t?void 0:t.offlinePage)?this.appConfig.offlinePage.pageCreator():pageOfflineProvider(this._store).pageCreator();null===(o=this._mainElem.firstElementChild)||void 0===o||o.style.setProperty("display","none"),e.id="offline-page",this._mainElem.appendChild(e)}}this.updateWindowTitle()}}shouldUpdate(e){var t,o;if(e.has("_realm")&&(this._config=this._getConfig(),this._realm?(manager.displayRealm=this._realm,window.sessionStorage.setItem("realm",this._realm)):window.sessionStorage.removeItem("realm")),e.has("_config")&&this._config){this._config.logo?this._config.logo=(null!==(t=manager.managerUrl)&&void 0!==t?t:"")+this._config.logo:this._config.logo=DefaultLogo,this._config.logoMobile?this._config.logoMobile=(null!==(o=manager.managerUrl)&&void 0!==o?o:"")+this._config.logoMobile:this._config.logoMobile=DefaultMobileLogo;const e=this._config&&this._config.favicon?(manager.managerUrl||"")+this._config.favicon:DefaultFavIcon;let i=document.querySelector("link[rel~='icon']");i||(i=document.createElement("link"),i.rel="icon",document.getElementsByTagName("head")[0].appendChild(i)),i.href=e}return this.updateWindowTitle(),super.shouldUpdate(e)}render(){if(!this._initialised)return html`<or-mwc-dialog id="app-modal"></or-mwc-dialog>`;let e;if(manager.consoleAppConfig){const t=manager.consoleAppConfig,o=t.primaryColor,i=t.secondaryColor;e=html`<style>:host {--or-console-primary-color:${o};--or-console-secondary-color:${i};}</style>`}return html`
51
- ${this._config.styles?"string"==typeof this._config.styles?html`<style>${this._config.styles}</style>`:this._config.styles.strings:""}
50
+ `}constructor(e){super(),this._initialised=!1,this._offline=!1,this._showOfflineFallback=!1,this._onEvent=e=>this._handleEvent(e),this._onVisibilityChanged=e=>this._handleVisibilityChange(e),this._store=e,b.DialogHostElement=this,E.DialogHostElement=this}getState(){return this._store.getState()}_handleVisibilityChange(e){var i;"visible"===document.visibilityState?(this._store.dispatch(O(!0)),(null==(i=h.console)?void 0:i.isMobile)&&this._offline&&this._startOfflineFallbackTimer(!0),h.reconnect()):this._store.dispatch(O(!1))}connectedCallback(){super.connectedCallback(),this._storeUnsubscribe=this._store.subscribe(()=>this.stateChanged(this.getState())),document.addEventListener("visibilitychange",this._onVisibilityChanged),this.stateChanged(this.getState())}disconnectedCallback(){this._storeUnsubscribe(),document.removeEventListener("visibilityChange",this._onVisibilityChanged),h.removeListener(this._onEvent),super.disconnectedCallback()}firstUpdated(e){super.firstUpdated(e);let i=this.managerConfig?Object.assign(Object.assign({},DEFAULT_MANAGER_CONFIG),this.managerConfig):DEFAULT_MANAGER_CONFIG;i.realm||(i.realm=v.getQueryParameter("realm")),i.defaultLanguage||(i.defaultLanguage=v.getBrowserLanguage()),i.skipFallbackToBasicAuth=!0,i.basicLoginProvider=(e,i)=>this.doBasicLogin(e,i),console.info("Initialising the manager"),h.init(i).then(e=>__awaiter(this,void 0,void 0,function*(){if(e||h.error!==_.AUTH_FAILED||i.auth&&"KEYCLOAK"!==i.auth||(this.doAppConfigInit(),i.auth="BASIC",e=yield h.init(i)),e){let e;if(this.doAppConfigInit(),!this.appConfig){w("appError.noConfig",document.body),console.error("No AppConfig supplied");return}if(!this._config){w("appError.noConfig",document.body),console.error("No default AppConfig or realm specific config provided so cannot render");return}if(!this._store){w("appError.noReduxStore",document.body),console.error("No Redux store supplied");return}if(!this.appConfig.pages||0===Object.keys(this.appConfig.pages).length){w("appError.noPages",document.body),console.error("No page providers");return}let i=yield h.rest.api.RealmResource.getAccessible();this._realms=i.data,h.isSuperUser()&&(e=window.sessionStorage.getItem("realm"))&&!this._realms.some(i=>i.name===e)&&(e=void 0),this._store.dispatch(F(e||h.getRealm()||"master")),this._initialised=!0,h.addListener(this._onEvent),l.hooks({before(e,i){var t;t=i?i.url.split("/")[0]:void 0,this._activeMenu=t,e()}}),this.appConfig.pages.forEach((e,i)=>{e.routes&&e.routes.forEach(i=>{l.on(i,i=>{this._store.dispatch(k({page:e.name,params:i.data}))})})}),this.appConfig.pages.length>0&&l.notFound(()=>{this._store.dispatch(k(this.appConfig.pages[0].name))}),l.resolve()}else w(h.isError?"managerError."+h.error:"")}))}updated(e){var i,t;if(super.updated(e),this._initialised&&(e.has("_page")||e.has("_offline")||e.has("_showOfflineFallback"))){if(this._mainElem){let o=this.appConfig.pages.find(e=>e.name===this._page),r=this._showOfflineFallback&&!(null==o?void 0:o.allowOffline),n=this._mainElem.querySelector("#offline-page");if(e.has("_page")&&o){let e=this._mainElem.firstElementChild;if(e){let i=o.pageCreator();r&&(i.style.setProperty("display","none"),i.setAttribute("loadedDuringOffline","true")),this._mainElem.replaceChild(i,e)}else this._mainElem.appendChild(o.pageCreator())}if(n&&!r){this._mainElem.removeChild(n);let e=this._mainElem.firstElementChild;null==e||e.style.removeProperty("display"),(null==e?void 0:e.onRefresh)&&e.onRefresh()}else if(!n&&r){let e=(null==(i=this.appConfig)?void 0:i.offlinePage)?this.appConfig.offlinePage.pageCreator():L(this._store).pageCreator();null==(t=this._mainElem.firstElementChild)||t.style.setProperty("display","none"),e.id="offline-page",this._mainElem.appendChild(e)}}this.updateWindowTitle()}}shouldUpdate(e){var i,t;if(e.has("_realm")&&(this._config=this._getConfig(),this._realm?(h.displayRealm=this._realm,window.sessionStorage.setItem("realm",this._realm)):window.sessionStorage.removeItem("realm")),e.has("_config")&&this._config){this._config.logo?this._config.logo=(null!=(i=h.managerUrl)?i:"")+this._config.logo:this._config.logo=DefaultLogo,this._config.logoMobile?this._config.logoMobile=(null!=(t=h.managerUrl)?t:"")+this._config.logoMobile:this._config.logoMobile=DefaultMobileLogo;let e=this._config&&this._config.favicon?(h.managerUrl||"")+this._config.favicon:DefaultFavIcon,o=document.querySelector("link[rel~='icon']");o||((o=document.createElement("link")).rel="icon",document.getElementsByTagName("head")[0].appendChild(o)),o.href=e}return this.updateWindowTitle(),super.shouldUpdate(e)}render(){let e;if(!this._initialised)return i`<or-mwc-dialog id="app-modal"></or-mwc-dialog>`;if(h.consoleAppConfig){let t=h.consoleAppConfig,o=t.primaryColor,r=t.secondaryColor;e=i`<style>:host {--or-console-primary-color:${o};--or-console-secondary-color:${r};}</style>`}return i`
51
+ ${this._config.styles?"string"==typeof this._config.styles?i`<style>${this._config.styles}</style>`:this._config.styles.strings:""}
52
52
  ${e}
53
- ${this._config.header?html`
53
+ ${this._config.header?i`
54
54
  <or-header .activeMenu="${this._activeMenu}" .store="${this._store}" .realm="${this._realm}" .realms="${this._realms}" .logo="${this._config.logo}" .logoMobile="${this._config.logoMobile}" .config="${this._config.header}"></or-header>
55
55
  `:""}
56
56
 
@@ -58,7 +58,7 @@ var __decorate=this&&this.__decorate||function(e,t,o,i){var a,r=arguments.length
58
58
  <main role="main" class="main-content d-none"></main>
59
59
 
60
60
  <slot></slot>
61
- `}stateChanged(e){this._realm=e.app.realm,this._page=e.app.page,this._offline=e.app.offline}_handleEvent(e){e===OREvent.OFFLINE?(this._offline||this._store.dispatch(setOffline(!0)),this._startOfflineFallbackTimer()):e===OREvent.ONLINE&&this._offline&&(this._showOfflineFallback=!1,this._completeOfflineFallbackTimer(),this._store.dispatch(setOffline(!1)))}_startOfflineFallbackTimer(e=!1){var t;if(e)this._completeOfflineFallbackTimer(!0);else if(this._offlineFallbackDeferred||this._showOfflineFallback)return;const o=new Util.Deferred;let i=!1;o.promise.then((()=>{this._showOfflineFallback=this._offline})).finally((()=>{i=!0})),setTimeout((()=>{i||o.resolve()}),(null===(t=this.appConfig)||void 0===t?void 0:t.offlineTimeout)||2e4),this._offlineFallbackDeferred=o}_completeOfflineFallbackTimer(e=!1){var t,o;e?null===(t=this._offlineFallbackDeferred)||void 0===t||t.reject():null===(o=this._offlineFallbackDeferred)||void 0===o||o.resolve(),this._offlineFallbackDeferred=void 0}logout(){manager.logout()}setLanguage(e){manager.language=e}showLanguageModal(){showDialog((new OrMwcDialog).setHeading("language").setDismissAction(null).setStyles(html`<style>.selected { color: ${unsafeCSS(DefaultColor4)} }</style>`).setActions(Object.entries(this.appConfig.languages||DEFAULT_LANGUAGES).map((([e,t])=>({content:html`<span class="${e===manager.language?"selected":""}">${i18next.t(t)}</span>`,actionName:e,action:()=>{manager.language=e}})))))}doAppConfigInit(){this.appConfig=this.appConfig||(this.appConfigProvider?this.appConfigProvider(manager):void 0),this.appConfig&&(this._config||(this._config=this._getConfig()))}doBasicLogin(e,t){const o=new Util.Deferred;let i=e,a=t;const r=html`
61
+ `}stateChanged(e){this._realm=e.app.realm,this._page=e.app.page,this._offline=e.app.offline}_handleEvent(e){e===u.OFFLINE?(this._offline||this._store.dispatch(A(!0)),this._startOfflineFallbackTimer()):e===u.ONLINE&&this._offline&&(this._showOfflineFallback=!1,this._completeOfflineFallbackTimer(),this._store.dispatch(A(!1)))}_startOfflineFallbackTimer(e=!1){var i;if(e)this._completeOfflineFallbackTimer(!0);else if(this._offlineFallbackDeferred||this._showOfflineFallback)return;let t=new v.Deferred,o=!1;t.promise.then(()=>{this._showOfflineFallback=this._offline}).finally(()=>{o=!0}),setTimeout(()=>{o||t.resolve()},(null==(i=this.appConfig)?void 0:i.offlineTimeout)||2e4),this._offlineFallbackDeferred=t}_completeOfflineFallbackTimer(e=!1){var i,t;e?null==(i=this._offlineFallbackDeferred)||i.reject():null==(t=this._offlineFallbackDeferred)||t.resolve(),this._offlineFallbackDeferred=void 0}logout(){h.logout()}setLanguage(e){h.language=e}showLanguageModal(){C(new b().setHeading("language").setDismissAction(null).setStyles(i`<style>.selected { color: ${o(g)} }</style>`).setActions(Object.entries(this.appConfig.languages||y).map(([e,t])=>({content:i`<span class="${e===h.language?"selected":""}">${c.t(t)}</span>`,actionName:e,action:()=>{h.language=e}}))))}doAppConfigInit(){this.appConfig=this.appConfig||(this.appConfigProvider?this.appConfigProvider(h):void 0),this.appConfig&&(this._config||(this._config=this._getConfig()))}doBasicLogin(e,t){let o=new v.Deferred,r=e,n=t,a=i`
62
62
  #login-logo {
63
63
  width: 24px;
64
64
  height: 24px;
@@ -68,9 +68,9 @@ var __decorate=this&&this.__decorate||function(e,t,o,i){var a,r=arguments.length
68
68
  margin: 10px 0;
69
69
  width: 100%;
70
70
  }
71
- `;return showDialog((new OrMwcDialog).setStyles(html`<style>${r}</style>`).setHeading(html`<img id="login-logo" src="${this._config.logoMobile||this._config.logo}" /></or-icon><or-translate value="login"></or-translate>`).setContent(html`
71
+ `;return C(new b().setStyles(i`<style>${a}</style>`).setHeading(i`<img id="login-logo" src="${this._config.logoMobile||this._config.logo}" /></or-icon><or-translate value="login"></or-translate>`).setContent(i`
72
72
  <div id="login_wrapper">
73
- <or-mwc-input .label="${i18next.t("user")}" .type="${InputType.TEXT}" min="1" required .value="${e}" @or-mwc-input-changed="${e=>i=e.detail.value}"></or-mwc-input>
74
- <or-mwc-input .label="${i18next.t("password")}" .type="${InputType.PASSWORD}" min="1" required .value="${t}" @or-mwc-input-changed="${e=>a=e.detail.value}"></or-mwc-input>
73
+ <or-mwc-input .label="${c.t("user")}" .type="${$.TEXT}" min="1" required .value="${e}" @or-mwc-input-changed="${e=>r=e.detail.value}"></or-mwc-input>
74
+ <or-mwc-input .label="${c.t("password")}" .type="${$.PASSWORD}" min="1" required .value="${t}" @or-mwc-input-changed="${e=>n=e.detail.value}"></or-mwc-input>
75
75
  </div>
76
- `).setActions([{actionName:"submit",default:!0,action:()=>{o.resolve({cancel:!1,username:i,password:a})},content:html`<or-mwc-input .type=${InputType.BUTTON} .label="${i18next.t("submit")}" raised></or-mwc-input>`}]),document.body),o.promise}updateWindowTitle(){if(!this._initialised)return;const e=this._config.appTitle||"";let t=i18next.isInitialized?i18next.t(e):e;const o=this._mainElem?this._mainElem.firstElementChild:void 0;o&&(t+=i18next.isInitialized?" - "+i18next.t(o.name):" - "+o.name),updateMetadata({title:t,description:t})}_getConfig(){const e=this.appConfig.realms?this.appConfig.realms.default:{};let t=this.appConfig.realms?this.appConfig.realms[this._realm||""]:void 0;return t=Util.mergeObjects(e,t,!1),this.appConfig&&this.appConfig.superUserHeader&&manager.isSuperUser()&&(t.header=this.appConfig.superUserHeader),t}};__decorate([property({type:Object})],OrApp.prototype,"appConfig",void 0),__decorate([property({type:Object})],OrApp.prototype,"managerConfig",void 0),__decorate([query("main")],OrApp.prototype,"_mainElem",void 0),__decorate([state()],OrApp.prototype,"_initialised",void 0),__decorate([state()],OrApp.prototype,"_page",void 0),__decorate([state()],OrApp.prototype,"_config",void 0),__decorate([state()],OrApp.prototype,"_realm",void 0),__decorate([state()],OrApp.prototype,"_offline",void 0),__decorate([state()],OrApp.prototype,"_showOfflineFallback",void 0),__decorate([state()],OrApp.prototype,"_activeMenu",void 0),OrApp=__decorate([customElement("or-app")],OrApp);export{OrApp};
76
+ `).setActions([{actionName:"submit",default:!0,action:()=>{o.resolve({cancel:!1,username:r,password:n})},content:i`<or-mwc-input .type=${$.BUTTON} .label="${c.t("submit")}" raised></or-mwc-input>`}]),document.body),o.promise}updateWindowTitle(){if(!this._initialised)return;let e=this._config.appTitle||"",i=c.isInitialized?c.t(e):e,t=this._mainElem?this._mainElem.firstElementChild:void 0;t&&(i+=c.isInitialized?" - "+c.t(t.name):" - "+t.name),p({title:i,description:i})}_getConfig(){let e=this.appConfig.realms?this.appConfig.realms.default:{},i=this.appConfig.realms?this.appConfig.realms[this._realm||""]:void 0;return i=v.mergeObjects(e,i,!1),this.appConfig&&this.appConfig.superUserHeader&&h.isSuperUser()&&(i.header=this.appConfig.superUserHeader),i}};__decorate([n({type:Object})],OrApp.prototype,"appConfig",void 0),__decorate([n({type:Object})],OrApp.prototype,"managerConfig",void 0),__decorate([a("main")],OrApp.prototype,"_mainElem",void 0),__decorate([s()],OrApp.prototype,"_initialised",void 0),__decorate([s()],OrApp.prototype,"_page",void 0),__decorate([s()],OrApp.prototype,"_config",void 0),__decorate([s()],OrApp.prototype,"_realm",void 0),__decorate([s()],OrApp.prototype,"_offline",void 0),__decorate([s()],OrApp.prototype,"_showOfflineFallback",void 0),__decorate([s()],OrApp.prototype,"_activeMenu",void 0),OrApp=__decorate([r("or-app")],OrApp);export{y as DEFAULT_LANGUAGES,OrApp};
package/lib/or-header.js CHANGED
@@ -1,17 +1,17 @@
1
- var __decorate=this&&this.__decorate||function(e,r,t,o){var a,i=arguments.length,n=i<3?r:null===o?o=Object.getOwnPropertyDescriptor(r,t):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,r,t,o);else for(var l=e.length-1;l>=0;l--)(a=e[l])&&(n=(i<3?a(n):i>3?a(r,t,n):a(r,t))||n);return i>3&&n&&Object.defineProperty(r,t,n),n},__awaiter=this&&this.__awaiter||function(e,r,t,o){return new(t||(t=Promise))((function(a,i){function n(e){try{d(o.next(e))}catch(e){i(e)}}function l(e){try{d(o.throw(e))}catch(e){i(e)}}function d(e){var r;e.done?a(e.value):(r=e.value,r instanceof t?r:new t((function(e){e(r)}))).then(n,l)}d((o=o.apply(e,r||[])).next())}))};import{css,html,LitElement,unsafeCSS}from"lit";import{customElement,property,query,state}from"lit/decorators.js";import manager,{DefaultBoxShadowBottom,DefaultColor1,DefaultColor2,DefaultColor3,DefaultColor4,DefaultColor5,DefaultHeaderHeight,Util,DEFAULT_LANGUAGES}from"@openremote/core";import"@openremote/or-mwc-components/or-mwc-dialog";import"@openremote/or-icon";import{getContentWithMenuTemplate}from"@openremote/or-mwc-components/or-mwc-menu";import{router,updateRealm}from"./index";import{i18next}from"@openremote/or-translate";export{DEFAULT_LANGUAGES};function getHeaderMenuItems(e){return e.filter(hasRequiredRole).map((e=>({text:e.text,value:e.value?e.value:"",icon:e.icon,href:e.href})))}function hasRequiredRole(e){return!e.roles||(Array.isArray(e.roles)?e.roles.some((e=>manager.hasRole(e))):Util.isFunction(e.roles)?e.roles():Object.entries(e.roles).some((([e,r])=>r.some((r=>manager.hasRole(r,e))))))}function getCurrentMenuItemRef(e){return window.location.hash.substr(2).split("/")[0]||e}let OrHeader=class extends LitElement{constructor(){super(...arguments),this._drawerOpened=!1,this.alarmButton="bell-outline",this.alarmColor="--or-app-color3, ${unsafeCSS(DefaultColor3)}"}static get styles(){return css`
1
+ var __decorate=this&&this.__decorate||function(e,r,o,t){var i,a=arguments.length,n=a<3?r:null===t?t=Object.getOwnPropertyDescriptor(r,o):t;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,r,o,t);else for(var l=e.length-1;l>=0;l--)(i=e[l])&&(n=(a<3?i(n):a>3?i(r,o,n):i(r,o))||n);return a>3&&n&&Object.defineProperty(r,o,n),n},__awaiter=this&&this.__awaiter||function(e,r,o,t){return new(o||(o=Promise))(function(i,a){function n(e){try{d(t.next(e))}catch(e){a(e)}}function l(e){try{d(t.throw(e))}catch(e){a(e)}}function d(e){var r;e.done?i(e.value):((r=e.value)instanceof o?r:new o(function(e){e(r)})).then(n,l)}d((t=t.apply(e,r||[])).next())})};import{css as e,html as r,LitElement as o,unsafeCSS as t}from"lit";import{customElement as i,property as a,query as n,state as l}from"lit/decorators.js";import d,{DefaultBoxShadowBottom as s,DefaultColor1 as c,DefaultColor2 as h,DefaultColor3 as p,DefaultColor4 as m,DefaultColor5 as u,DefaultHeaderHeight as v,Util as g,DEFAULT_LANGUAGES as b}from"@openremote/core";import"@openremote/or-mwc-components/or-mwc-dialog";import"@openremote/or-icon";import{getContentWithMenuTemplate as f}from"@openremote/or-mwc-components/or-mwc-menu";import{router as x,updateRealm as w}from"./index";import{i18next as _}from"@openremote/or-translate";function getHeaderMenuItems(e){return e.filter(hasRequiredRole).map(e=>({text:e.text,value:e.value?e.value:"",icon:e.icon,href:e.href}))}function hasRequiredRole(e){return!e.roles||(Array.isArray(e.roles)?e.roles.some(e=>d.hasRole(e)):g.isFunction(e.roles)?e.roles():Object.entries(e.roles).some(([e,r])=>r.some(r=>d.hasRole(r,e))))}function getCurrentMenuItemRef(e){return window.location.hash.substr(2).split("/")[0]||e}let OrHeader=class extends o{constructor(){super(...arguments),this._drawerOpened=!1,this.alarmButton="bell-outline",this.alarmColor="--or-app-color3, ${unsafeCSS(DefaultColor3)}"}static get styles(){return e`
2
2
 
3
3
  :host {
4
- --internal-or-header-color: var(--or-header-color, var(--or-app-color1, ${unsafeCSS(DefaultColor1)}));
5
- --internal-or-header-selected-color: var(--or-header-selected-color, var(--or-app-color4, ${unsafeCSS(DefaultColor4)}));
4
+ --internal-or-header-color: var(--or-header-color, var(--or-app-color1, ${t(c)}));
5
+ --internal-or-header-selected-color: var(--or-header-selected-color, var(--or-app-color4, ${t(m)}));
6
6
  --internal-or-header-text-color: var(--or-header-text-color, var(--or-app-color3, inherit));
7
- --internal-or-header-height: var(--or-header-height, ${unsafeCSS(DefaultHeaderHeight)});
7
+ --internal-or-header-height: var(--or-header-height, ${t(v)});
8
8
  --internal-or-header-logo-margin: var(--or-header-logo-margin, 0 40px 0 0);
9
- --internal-or-header-logo-height: var(--or-header-logo-height, var(--internal-or-header-height, ${unsafeCSS(DefaultHeaderHeight)}));
10
- --internal-or-header-item-size: var(--or-header-item-size, calc(${unsafeCSS(DefaultHeaderHeight)} - 20px));
11
- --internal-or-header-drawer-color: var(--or-header-drawer-color, var(--or-app-color2, ${unsafeCSS(DefaultColor2)}));
12
- --internal-or-header-drawer-text-color: var(--or-header-drawer-text-color, var(--or-app-color3, ${unsafeCSS(DefaultColor3)}));
9
+ --internal-or-header-logo-height: var(--or-header-logo-height, var(--internal-or-header-height, ${t(v)}));
10
+ --internal-or-header-item-size: var(--or-header-item-size, calc(${t(v)} - 20px));
11
+ --internal-or-header-drawer-color: var(--or-header-drawer-color, var(--or-app-color2, ${t(h)}));
12
+ --internal-or-header-drawer-text-color: var(--or-header-drawer-text-color, var(--or-app-color3, ${t(p)}));
13
13
  --internal-or-header-drawer-item-size: var(--or-header-drawer-item-size, 30px);
14
- --internal-or-header-drawer-separator-color: var(--or-header-drawer-separator-color, var(--or-app-color5, ${unsafeCSS(DefaultColor5)}));
14
+ --internal-or-header-drawer-separator-color: var(--or-header-drawer-separator-color, var(--or-app-color5, ${t(u)}));
15
15
 
16
16
  display: block;
17
17
  z-index: 4;
@@ -46,9 +46,9 @@ var __decorate=this&&this.__decorate||function(e,r,t,o){var a,i=arguments.length
46
46
  }
47
47
 
48
48
  .shadow {
49
- -webkit-box-shadow: ${unsafeCSS(DefaultBoxShadowBottom)};
50
- -moz-box-shadow: ${unsafeCSS(DefaultBoxShadowBottom)};
51
- box-shadow: ${unsafeCSS(DefaultBoxShadowBottom)};
49
+ -webkit-box-shadow: ${t(s)};
50
+ -moz-box-shadow: ${t(s)};
51
+ box-shadow: ${t(s)};
52
52
  }
53
53
 
54
54
  #drawer {
@@ -241,7 +241,7 @@ var __decorate=this&&this.__decorate||function(e,r,t,o){var a,i=arguments.length
241
241
  display: inline-block;
242
242
  }
243
243
  }
244
- `}_onRealmSelect(e){this.store.dispatch(updateRealm(e))}shouldUpdate(e){return e.has("config")&&(this.activeMenu=getCurrentMenuItemRef(this.config&&this.config.mainMenu&&this.config.mainMenu.length>0?this.config.mainMenu[0].href:void 0)),e.has("realm")&&this._getAlarmButton(),super.shouldUpdate(e)}connectedCallback(){super.connectedCallback(),this._subscribeEvents()}disconnectedCallback(){super.disconnectedCallback(),this._unsubscribeEvents()}_subscribeEvents(){return __awaiter(this,void 0,void 0,(function*(){manager.events&&(this._eventSubscriptionId=yield manager.events.subscribe({eventType:"alarm"},(e=>this._getAlarmButton())))}))}_unsubscribeEvents(){this._eventSubscriptionId&&(manager.events.unsubscribe(this._eventSubscriptionId),this._eventSubscriptionId=void 0)}render(){if(!this.config)return html``;const e=this.config.mainMenu,r=this.config.secondaryMenu;return html`
244
+ `}_onRealmSelect(e){this.store.dispatch(w(e))}shouldUpdate(e){return e.has("config")&&(this.activeMenu=getCurrentMenuItemRef(this.config&&this.config.mainMenu&&this.config.mainMenu.length>0?this.config.mainMenu[0].href:void 0)),e.has("realm")&&this._getAlarmButton(),super.shouldUpdate(e)}connectedCallback(){super.connectedCallback(),this._subscribeEvents()}disconnectedCallback(){super.disconnectedCallback(),this._unsubscribeEvents()}_subscribeEvents(){return __awaiter(this,void 0,void 0,function*(){d.events&&(this._eventSubscriptionId=yield d.events.subscribe({eventType:"alarm"},e=>this._getAlarmButton()))})}_unsubscribeEvents(){this._eventSubscriptionId&&(d.events.unsubscribe(this._eventSubscriptionId),this._eventSubscriptionId=void 0)}render(){if(!this.config)return r``;let e=this.config.mainMenu,o=this.config.secondaryMenu;return r`
245
245
  <!-- Header -->
246
246
  <div id="header" class="shadow">
247
247
  <div id="toolbar-top">
@@ -250,24 +250,24 @@ var __decorate=this&&this.__decorate||function(e,r,t,o){var a,i=arguments.length
250
250
  <!-- This gets hidden on a small screen-->
251
251
  <nav id="toolbar-list">
252
252
  <div id="desktop-left">
253
- ${e?e.filter(hasRequiredRole).map((e=>html`
253
+ ${e?e.filter(hasRequiredRole).map(e=>r`
254
254
  <a class="menu-item" @click="${r=>this._onHeaderItemSelect(e)}" ?selected="${this.activeMenu===e.href}"><or-icon icon="${e.icon}"></or-icon><or-translate value="${e.text}"></or-translate></a>
255
- `)):""}
255
+ `):""}
256
256
  </div>
257
257
  </nav>
258
258
  <div id="desktop-right">
259
259
  <div id="alarm-btn">
260
- <a class="menu-item" @click="${e=>router.navigate("alarms")}">
261
- <or-icon icon="${this.alarmButton}" style="color:var(${this.alarmColor})" title="${i18next.t("alarm.alarm_plural")}"></or-icon>
260
+ <a class="menu-item" @click="${e=>x.navigate("alarms")}">
261
+ <or-icon icon="${this.alarmButton}" style="color:var(${this.alarmColor})" title="${_.t("alarm.alarm_plural")}"></or-icon>
262
262
  </a>
263
263
  </div>
264
- ${this._getRealmMenu((e=>this._onRealmSelect(e)))}
265
- ${r?getContentWithMenuTemplate(html`
264
+ ${this._getRealmMenu(e=>this._onRealmSelect(e))}
265
+ ${o?f(r`
266
266
  <button id="menu-btn-desktop" class="menu-btn" title="Menu"><or-icon icon="dots-vertical"></or-icon></button>
267
- `,getHeaderMenuItems(r),void 0,(e=>this._onSecondaryMenuSelect(e))):""}
267
+ `,getHeaderMenuItems(o),void 0,e=>this._onSecondaryMenuSelect(e)):""}
268
268
  </div>
269
269
  <div id="menu-btn-mobile">
270
- ${this._getRealmMenu((e=>this._onRealmSelect(e)))}
270
+ ${this._getRealmMenu(e=>this._onRealmSelect(e))}
271
271
  <button id="menu-btn" class="menu-btn" title="Menu" @click="${this._toggleDrawer}"><or-icon icon="${this._drawerOpened?"close":"menu"}"></or-icon></button>
272
272
  </div>
273
273
  </div>
@@ -276,27 +276,27 @@ var __decorate=this&&this.__decorate||function(e,r,t,o){var a,i=arguments.length
276
276
  <div>
277
277
  <div id="mobile-top">
278
278
  <nav id="drawer-list">
279
- ${e?e.filter((e=>!e.hideMobile&&hasRequiredRole(e))).map((e=>html`
279
+ ${e?e.filter(e=>!e.hideMobile&&hasRequiredRole(e)).map(e=>r`
280
280
  <a class="menu-item" @click="${r=>this._onHeaderItemSelect(e)}" ?selected="${this.activeMenu===e.href}"><or-icon icon="${e.icon}"></or-icon><or-translate value="${e.text}"></or-translate></a>
281
- `)):""}
281
+ `):""}
282
282
  </nav>
283
283
  </div>
284
284
 
285
- ${r?html`
285
+ ${o?r`
286
286
  <div id="mobile-bottom" class="${e.length>0?"mobile-bottom-border":""}">
287
- ${r.filter((e=>!e.hideMobile&&hasRequiredRole(e))).map((e=>html`
287
+ ${o.filter(e=>!e.hideMobile&&hasRequiredRole(e)).map(e=>r`
288
288
  <a class="menu-item" @click="${r=>this._onHeaderItemSelect(e)}" ?selected="${this.activeMenu===e.href}"><or-icon icon="${e.icon}"></or-icon><or-translate value="${e.text}"></or-translate></a>
289
- `))}
289
+ `)}
290
290
  </div>`:""}
291
291
  </div>
292
292
  </div>
293
- `}_getRealmMenu(e){const r=this.realms.find((e=>e.name===this.realm));let t=html`
293
+ `}_getRealmMenu(e){let o=this.realms.find(e=>e.name===this.realm),t=r`
294
294
  <div id="realm-picker">
295
- ${this.realms.length>1?html`
296
- <span>${r?r.displayName:""}</span>
295
+ ${this.realms.length>1?r`
296
+ <span>${o?o.displayName:""}</span>
297
297
  <or-icon icon="chevron-down"></or-icon>
298
298
  `:""}
299
299
  </div>
300
- `;if(manager.isSuperUser()){const o=this.realms.map((e=>({text:e.displayName,value:e.name})));t=html`
301
- ${getContentWithMenuTemplate(t,o,r?r.name:void 0,(r=>e(r)))}
302
- `}return t}_getAlarmButton(){return __awaiter(this,void 0,void 0,(function*(){let e=!1;(manager.hasRole("read:alarms")||manager.hasRole("read:admin"))&&(e=(yield manager.rest.api.AlarmResource.getAlarms({realm:manager.displayRealm,status:"OPEN"})).data.length>0),this.alarmButton=e?"bell-badge-outline":"bell-outline",this.alarmColor=e?"--or-app-color4, ${unsafeCSS(DefaultColor4)}":"--or-app-color3, ${unsafeCSS(DefaultColor3)}"}))}_onSecondaryMenuSelect(e){const r=this.config.secondaryMenu.find((r=>r.value===e));r&&this._onHeaderItemSelect(r)}_onHeaderItemSelect(e){e.action?e.action():e.href&&(e.absolute?window.location.href=e.href:router.navigate(e.href))}_closeDrawer(){this._drawerOpened=!1}_toggleDrawer(){this._drawerOpened=!this._drawerOpened}};__decorate([property({type:Array})],OrHeader.prototype,"realms",void 0),__decorate([property({type:String})],OrHeader.prototype,"realm",void 0),__decorate([property({type:Object})],OrHeader.prototype,"store",void 0),__decorate([property({type:String})],OrHeader.prototype,"logo",void 0),__decorate([property({type:String})],OrHeader.prototype,"logoMobile",void 0),__decorate([property({type:Object})],OrHeader.prototype,"config",void 0),__decorate([query("div[id=mobile-bottom]")],OrHeader.prototype,"_mobileBottomDiv",void 0),__decorate([property()],OrHeader.prototype,"activeMenu",void 0),__decorate([state()],OrHeader.prototype,"_drawerOpened",void 0),__decorate([state()],OrHeader.prototype,"alarmButton",void 0),__decorate([state()],OrHeader.prototype,"alarmColor",void 0),OrHeader=__decorate([customElement("or-header")],OrHeader);export{OrHeader};
300
+ `;if(d.isSuperUser()){let i=this.realms.map(e=>({text:e.displayName,value:e.name}));t=r`
301
+ ${f(t,i,o?o.name:void 0,r=>e(r))}
302
+ `}return t}_getAlarmButton(){return __awaiter(this,void 0,void 0,function*(){let e=!1;(d.hasRole("read:alarms")||d.hasRole("read:admin"))&&(e=(yield d.rest.api.AlarmResource.getAlarms({realm:d.displayRealm,status:"OPEN"})).data.length>0),this.alarmButton=e?"bell-badge-outline":"bell-outline",this.alarmColor=e?"--or-app-color4, ${unsafeCSS(DefaultColor4)}":"--or-app-color3, ${unsafeCSS(DefaultColor3)}"})}_onSecondaryMenuSelect(e){let r=this.config.secondaryMenu.find(r=>r.value===e);r&&this._onHeaderItemSelect(r)}_onHeaderItemSelect(e){e.action?e.action():e.href&&(e.absolute?window.location.href=e.href:x.navigate(e.href))}_closeDrawer(){this._drawerOpened=!1}_toggleDrawer(){this._drawerOpened=!this._drawerOpened}};__decorate([a({type:Array})],OrHeader.prototype,"realms",void 0),__decorate([a({type:String})],OrHeader.prototype,"realm",void 0),__decorate([a({type:Object})],OrHeader.prototype,"store",void 0),__decorate([a({type:String})],OrHeader.prototype,"logo",void 0),__decorate([a({type:String})],OrHeader.prototype,"logoMobile",void 0),__decorate([a({type:Object})],OrHeader.prototype,"config",void 0),__decorate([n("div[id=mobile-bottom]")],OrHeader.prototype,"_mobileBottomDiv",void 0),__decorate([a()],OrHeader.prototype,"activeMenu",void 0),__decorate([l()],OrHeader.prototype,"_drawerOpened",void 0),__decorate([l()],OrHeader.prototype,"alarmButton",void 0),__decorate([l()],OrHeader.prototype,"alarmColor",void 0),OrHeader=__decorate([i("or-header")],OrHeader);export{b as DEFAULT_LANGUAGES,OrHeader};
@@ -1,4 +1,4 @@
1
- var __decorate=this&&this.__decorate||function(e,t,n,i){var o,r=arguments.length,a=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var f=e.length-1;f>=0;f--)(o=e[f])&&(a=(r<3?o(a):r>3?o(t,n,a):o(t,n))||a);return r>3&&a&&Object.defineProperty(t,n,a),a},__await=this&&this.__await||function(e){return this instanceof __await?(this.v=e,this):new __await(e)},__asyncGenerator=this&&this.__asyncGenerator||function(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(e,t||[]),r=[];return i={},a("next"),a("throw"),a("return",(function(e){return function(t){return Promise.resolve(t).then(e,l)}})),i[Symbol.asyncIterator]=function(){return this},i;function a(e,t){o[e]&&(i[e]=function(t){return new Promise((function(n,i){r.push([e,t,n,i])>1||f(e,t)}))},t&&(i[e]=t(i[e])))}function f(e,t){try{(n=o[e](t)).value instanceof __await?Promise.resolve(n.value.v).then(c,l):s(r[0][2],n)}catch(e){s(r[0][3],e)}var n}function c(e){f("next",e)}function l(e){f("throw",e)}function s(e,t){e(t),r.shift(),r.length&&f(r[0][0],r[0][1])}};import{Page}from"./types";import{css,html}from"lit";import{customElement}from"lit/decorators.js";const styling=css`
1
+ var __decorate=this&&this.__decorate||function(e,t,n,i){var o,r=arguments.length,a=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,n,i);else for(var f=e.length-1;f>=0;f--)(o=e[f])&&(a=(r<3?o(a):r>3?o(t,n,a):o(t,n))||a);return r>3&&a&&Object.defineProperty(t,n,a),a},__await=this&&this.__await||function(e){return this instanceof __await?(this.v=e,this):new __await(e)},__asyncGenerator=this&&this.__asyncGenerator||function(e,t,n){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var i,o=n.apply(e,t||[]),r=[];return i=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",function(e){return function(t){return Promise.resolve(t).then(e,l)}}),i[Symbol.asyncIterator]=function(){return this},i;function a(e,t){o[e]&&(i[e]=function(t){return new Promise(function(n,i){r.push([e,t,n,i])>1||f(e,t)})},t&&(i[e]=t(i[e])))}function f(e,t){try{var n;(n=o[e](t)).value instanceof __await?Promise.resolve(n.value.v).then(c,l):s(r[0][2],n)}catch(e){s(r[0][3],e)}}function c(e){f("next",e)}function l(e){f("throw",e)}function s(e,t){e(t),r.shift(),r.length&&f(r[0][0],r[0][1])}};import{Page as e}from"./types";import{css as t,html as n}from"lit";import{customElement as i}from"lit/decorators.js";let styling=t`
2
2
  #offline-wrapper {
3
3
  display: flex;
4
4
  justify-content: center;
@@ -39,7 +39,7 @@ var __decorate=this&&this.__decorate||function(e,t,n,i){var o,r=arguments.length
39
39
  75% { content: '...'; }
40
40
  100% { content: ''; }
41
41
  }
42
- `;function countDown(e){return __asyncGenerator(this,arguments,(function*(){for(;e>0;)yield yield __await(e--),yield __await(new Promise((e=>setTimeout(e,1e3))))}))}export function pageOfflineProvider(e){return{name:"offline",routes:["offline"],pageCreator:()=>new PageOffline(e)}}let PageOffline=class extends Page{static get styles(){return[styling]}stateChanged(e){}render(){return html`
42
+ `;function countDown(e){return __asyncGenerator(this,arguments,function*(){for(;e>0;)yield yield __await(e--),yield __await(new Promise(e=>setTimeout(e,1e3)))})}export function pageOfflineProvider(e){return{name:"offline",routes:["offline"],pageCreator:()=>new PageOffline(e)}}let PageOffline=class extends e{static get styles(){return[styling]}stateChanged(e){}render(){return n`
43
43
  <div id="offline-wrapper">
44
44
  <or-icon id="offline-icon" icon="web-off"></or-icon>
45
45
  <div id="offline-text-container">
@@ -50,4 +50,4 @@ var __decorate=this&&this.__decorate||function(e,t,n,i){var o,r=arguments.length
50
50
  <span><or-translate id="reconnecting-text" value="reconnecting"></or-translate></span>
51
51
  </div>
52
52
  </div>
53
- `}get name(){return"offline"}};PageOffline=__decorate([customElement("page-offline")],PageOffline);export{PageOffline};
53
+ `}get name(){return"offline"}};PageOffline=__decorate([i("page-offline")],PageOffline);export{PageOffline};
package/lib/types.d.ts CHANGED
@@ -34,7 +34,7 @@ declare const Page_base: (new (...args: any[]) => {
34
34
  _i18nextJustInitialized: boolean;
35
35
  connectedCallback(): void;
36
36
  disconnectedCallback(): void;
37
- shouldUpdate(changedProps: import("lit").PropertyValueMap<any> | Map<PropertyKey, unknown>): any;
37
+ shouldUpdate(changedProps: import("lit").PropertyValues): any;
38
38
  initCallback: (options: import("i18next").InitOptions) => void;
39
39
  langChangedCallback: () => void;
40
40
  readonly isConnected: boolean;
package/lib/types.js CHANGED
@@ -1 +1 @@
1
- import{LitElement}from"lit";import i18next from"i18next";import{translate}from"@openremote/or-translate";import Navigo from"navigo";export const router=new Navigo("/",{hash:!0});export class Page extends(translate(i18next)(LitElement)){constructor(t){super(),this._store=t}connectedCallback(){super.connectedCallback(),this._storeUnsubscribe=this._store.subscribe((()=>this.stateChanged(this._store.getState()))),this.stateChanged(this._store.getState())}disconnectedCallback(){this._storeUnsubscribe(),super.disconnectedCallback()}getState(){return this._store.getState()}}
1
+ import{LitElement as t}from"lit";import e from"i18next";import{translate as s}from"@openremote/or-translate";import r from"navigo";export const router=new r("/",{hash:!0});export class Page extends s(e)(t){constructor(t){super(),this._store=t}connectedCallback(){super.connectedCallback(),this._storeUnsubscribe=this._store.subscribe(()=>this.stateChanged(this._store.getState())),this.stateChanged(this._store.getState())}disconnectedCallback(){this._storeUnsubscribe(),super.disconnectedCallback()}getState(){return this._store.getState()}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openremote/or-app",
3
- "version": "1.8.0-snapshot.20250723094757",
3
+ "version": "1.8.0-snapshot.20250725074716",
4
4
  "description": "OpenRemote app template",
5
5
  "author": "OpenRemote",
6
6
  "license": "AGPL-3.0-or-later",
@@ -16,26 +16,26 @@
16
16
  "clean": "npx tsc -b --clean && npx shx rm -rf dist lib",
17
17
  "modelBuild": "npx orutil build",
18
18
  "modelWatch": "npx orutil watch",
19
- "build": "npx cross-env NODE_OPTIONS=--max_old_space_size=4096 webpack --mode production",
19
+ "build": "npx cross-env NODE_OPTIONS=--max_old_space_size=4096 rspack --mode production",
20
20
  "test": "echo \"Error: no test specified\" && exit 1",
21
21
  "prepack": "npx tsc -b"
22
22
  },
23
23
  "dependencies": {
24
24
  "@lit/task": "^1.0.0",
25
- "@openremote/core": "1.8.0-snapshot.20250723094757",
26
- "@openremote/or-asset-tree": "1.8.0-snapshot.20250723094757",
27
- "@openremote/or-asset-viewer": "1.8.0-snapshot.20250723094757",
28
- "@openremote/or-attribute-input": "1.8.0-snapshot.20250723094757",
29
- "@openremote/or-attribute-picker": "1.8.0-snapshot.20250723094757",
30
- "@openremote/or-chart": "1.8.0-snapshot.20250723094757",
31
- "@openremote/or-dashboard-builder": "1.8.0-snapshot.20250723094757",
32
- "@openremote/or-gauge": "1.8.0-snapshot.20250723094757",
33
- "@openremote/or-map": "1.8.0-snapshot.20250723094757",
34
- "@openremote/or-mwc-components": "1.8.0-snapshot.20250723094757",
35
- "@openremote/or-rules": "1.8.0-snapshot.20250723094757",
36
- "@openremote/or-smart-notify": "1.8.0-snapshot.20250723094757",
37
- "@openremote/or-timeline": "1.8.0-snapshot.20250723094757",
38
- "@openremote/rest": "1.8.0-snapshot.20250723094757",
25
+ "@openremote/core": "1.8.0-snapshot.20250725074716",
26
+ "@openremote/or-asset-tree": "1.8.0-snapshot.20250725074716",
27
+ "@openremote/or-asset-viewer": "1.8.0-snapshot.20250725074716",
28
+ "@openremote/or-attribute-input": "1.8.0-snapshot.20250725074716",
29
+ "@openremote/or-attribute-picker": "1.8.0-snapshot.20250725074716",
30
+ "@openremote/or-chart": "1.8.0-snapshot.20250725074716",
31
+ "@openremote/or-dashboard-builder": "1.8.0-snapshot.20250725074716",
32
+ "@openremote/or-gauge": "1.8.0-snapshot.20250725074716",
33
+ "@openremote/or-map": "1.8.0-snapshot.20250725074716",
34
+ "@openremote/or-mwc-components": "1.8.0-snapshot.20250725074716",
35
+ "@openremote/or-rules": "1.8.0-snapshot.20250725074716",
36
+ "@openremote/or-smart-notify": "1.8.0-snapshot.20250725074716",
37
+ "@openremote/or-timeline": "1.8.0-snapshot.20250725074716",
38
+ "@openremote/rest": "1.8.0-snapshot.20250725074716",
39
39
  "@reduxjs/toolkit": "^1.8.1",
40
40
  "@webcomponents/webcomponentsjs": "^2.6.0",
41
41
  "lit": "^2.0.2",
@@ -44,7 +44,7 @@
44
44
  "pwa-helpers": "^0.9.0"
45
45
  },
46
46
  "devDependencies": {
47
- "@openremote/util": "1.8.0-snapshot.20250723094757"
47
+ "@openremote/util": "1.8.0-snapshot.20250725074716"
48
48
  },
49
49
  "publishConfig": {
50
50
  "access": "public"